diff options
| author | Brian Anderson <banderson@mozilla.com> | 2012-11-28 12:38:53 -0800 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2012-11-28 13:17:33 -0800 |
| commit | fc06114ddfd2bcdbc4f29076c226a7a1d66ea8d6 (patch) | |
| tree | bd9de2c450f23b8ff0e09130ab59d784ace5b5e3 /src/compiletest | |
| parent | 669fbddc4435a9ab152332df06a7fcca789c8059 (diff) | |
| parent | 8179e268efd86ae5c1bcf21b4f8d4e01eea7c193 (diff) | |
| download | rust-fc06114ddfd2bcdbc4f29076c226a7a1d66ea8d6.tar.gz rust-fc06114ddfd2bcdbc4f29076c226a7a1d66ea8d6.zip | |
Merge remote-tracking branch 'brson/companion' into incoming
Conflicts: src/compiletest/compiletest.rs src/libcargo/cargo.rs src/libcore/core.rs src/librustc/rustc.rs src/librustdoc/rustdoc.rc
Diffstat (limited to 'src/compiletest')
| -rw-r--r-- | src/compiletest/common.rs | 9 | ||||
| -rw-r--r-- | src/compiletest/compiletest.rc | 192 | ||||
| -rw-r--r-- | src/compiletest/compiletest.rs | 198 |
3 files changed, 192 insertions, 207 deletions
diff --git a/src/compiletest/common.rs b/src/compiletest/common.rs index b951c9fc3c1..dcbe419ddb1 100644 --- a/src/compiletest/common.rs +++ b/src/compiletest/common.rs @@ -1,14 +1,5 @@ enum mode { mode_compile_fail, mode_run_fail, mode_run_pass, mode_pretty, } -#[cfg(stage0)] -impl mode : cmp::Eq { - pure fn eq(other: &mode) -> bool { - (*other) as int == self as int - } - pure fn ne(other: &mode) -> bool { !self.eq(other) } -} -#[cfg(stage1)] -#[cfg(stage2)] impl mode : cmp::Eq { pure fn eq(&self, other: &mode) -> bool { (*other) as int == (*self) as int diff --git a/src/compiletest/compiletest.rc b/src/compiletest/compiletest.rc index db605c3caa4..a9ca15babde 100644 --- a/src/compiletest/compiletest.rc +++ b/src/compiletest/compiletest.rc @@ -26,6 +26,198 @@ mod common; #[legacy_exports] mod errors; +use std::getopts; +use std::test; + +use core::result; +use result::{Ok, Err}; + +use common::config; +use common::mode_run_pass; +use common::mode_run_fail; +use common::mode_compile_fail; +use common::mode_pretty; +use common::mode; +use util::logv; + +fn main() { + let args = os::args(); + let config = parse_config(args); + log_config(config); + run_tests(config); +} + +fn parse_config(args: ~[~str]) -> config { + let opts = + ~[getopts::reqopt(~"compile-lib-path"), + getopts::reqopt(~"run-lib-path"), + getopts::reqopt(~"rustc-path"), getopts::reqopt(~"src-base"), + getopts::reqopt(~"build-base"), getopts::reqopt(~"aux-base"), + getopts::reqopt(~"stage-id"), + getopts::reqopt(~"mode"), getopts::optflag(~"ignored"), + getopts::optopt(~"runtool"), getopts::optopt(~"rustcflags"), + getopts::optflag(~"verbose"), + getopts::optopt(~"logfile"), + getopts::optflag(~"jit")]; + + assert (vec::is_not_empty(args)); + let args_ = vec::tail(args); + let matches = + &match getopts::getopts(args_, opts) { + Ok(m) => m, + Err(f) => fail getopts::fail_str(f) + }; + + fn opt_path(m: &getopts::Matches, nm: ~str) -> Path { + Path(getopts::opt_str(m, nm)) + } + + return {compile_lib_path: getopts::opt_str(matches, ~"compile-lib-path"), + run_lib_path: getopts::opt_str(matches, ~"run-lib-path"), + rustc_path: opt_path(matches, ~"rustc-path"), + src_base: opt_path(matches, ~"src-base"), + build_base: opt_path(matches, ~"build-base"), + aux_base: opt_path(matches, ~"aux-base"), + stage_id: getopts::opt_str(matches, ~"stage-id"), + mode: str_mode(getopts::opt_str(matches, ~"mode")), + run_ignored: getopts::opt_present(matches, ~"ignored"), + filter: + if vec::len(matches.free) > 0u { + option::Some(matches.free[0]) + } else { option::None }, + logfile: option::map(&getopts::opt_maybe_str(matches, + ~"logfile"), + |s| Path(*s)), + runtool: getopts::opt_maybe_str(matches, ~"runtool"), + rustcflags: getopts::opt_maybe_str(matches, ~"rustcflags"), + jit: getopts::opt_present(matches, ~"jit"), + verbose: getopts::opt_present(matches, ~"verbose")}; +} + +fn log_config(config: config) { + let c = config; + logv(c, fmt!("configuration:")); + logv(c, fmt!("compile_lib_path: %s", config.compile_lib_path)); + logv(c, fmt!("run_lib_path: %s", config.run_lib_path)); + logv(c, fmt!("rustc_path: %s", config.rustc_path.to_str())); + logv(c, fmt!("src_base: %s", config.src_base.to_str())); + logv(c, fmt!("build_base: %s", config.build_base.to_str())); + logv(c, fmt!("stage_id: %s", config.stage_id)); + logv(c, fmt!("mode: %s", mode_str(config.mode))); + logv(c, fmt!("run_ignored: %b", config.run_ignored)); + logv(c, fmt!("filter: %s", opt_str(config.filter))); + logv(c, fmt!("runtool: %s", opt_str(config.runtool))); + logv(c, fmt!("rustcflags: %s", opt_str(config.rustcflags))); + logv(c, fmt!("jit: %b", config.jit)); + logv(c, fmt!("verbose: %b", config.verbose)); + logv(c, fmt!("\n")); +} + +fn opt_str(maybestr: Option<~str>) -> ~str { + match maybestr { option::Some(s) => s, option::None => ~"(none)" } +} + +fn str_opt(maybestr: ~str) -> Option<~str> { + if maybestr != ~"(none)" { option::Some(maybestr) } else { option::None } +} + +fn str_mode(s: ~str) -> mode { + match s { + ~"compile-fail" => mode_compile_fail, + ~"run-fail" => mode_run_fail, + ~"run-pass" => mode_run_pass, + ~"pretty" => mode_pretty, + _ => fail ~"invalid mode" + } +} + +fn mode_str(mode: mode) -> ~str { + match mode { + mode_compile_fail => ~"compile-fail", + mode_run_fail => ~"run-fail", + mode_run_pass => ~"run-pass", + mode_pretty => ~"pretty" + } +} + +fn run_tests(config: config) { + let opts = test_opts(config); + let tests = make_tests(config); + let res = test::run_tests_console(&opts, tests); + if !res { fail ~"Some tests failed"; } +} + +fn test_opts(config: config) -> test::TestOpts { + {filter: + match config.filter { + option::Some(s) => option::Some(s), + option::None => option::None + }, + run_ignored: config.run_ignored, + logfile: + match config.logfile { + option::Some(s) => option::Some(s.to_str()), + option::None => option::None + } + } +} + +fn make_tests(config: config) -> ~[test::TestDesc] { + debug!("making tests from %s", + config.src_base.to_str()); + let mut tests = ~[]; + for os::list_dir_path(&config.src_base).each |file| { + let file = copy *file; + debug!("inspecting file %s", file.to_str()); + if is_test(config, file) { + tests.push(make_test(config, file)) + } + } + move tests +} + +fn is_test(config: config, testfile: &Path) -> bool { + // Pretty-printer does not work with .rc files yet + let valid_extensions = + match config.mode { + mode_pretty => ~[~".rs"], + _ => ~[~".rc", ~".rs"] + }; + let invalid_prefixes = ~[~".", ~"#", ~"~"]; + let name = testfile.filename().get(); + + let mut valid = false; + + for valid_extensions.each |ext| { + if str::ends_with(name, *ext) { valid = true; } + } + + for invalid_prefixes.each |pre| { + if str::starts_with(name, *pre) { valid = false; } + } + + return valid; +} + +fn make_test(config: config, testfile: &Path) -> + test::TestDesc { + { + name: make_test_name(config, testfile), + testfn: make_test_closure(config, testfile), + ignore: header::is_test_ignored(config, testfile), + should_fail: false + } +} + +fn make_test_name(config: config, testfile: &Path) -> ~str { + fmt!("[%s] %s", mode_str(config.mode), testfile.to_str()) +} + +fn make_test_closure(config: config, testfile: &Path) -> test::TestFn { + let testfile = testfile.to_str(); + fn~() { runtest::run(config, testfile) } +} + // Local Variables: // fill-column: 78; // indent-tabs-mode: nil diff --git a/src/compiletest/compiletest.rs b/src/compiletest/compiletest.rs deleted file mode 100644 index 7ee297f3ffc..00000000000 --- a/src/compiletest/compiletest.rs +++ /dev/null @@ -1,198 +0,0 @@ -use std::getopts; -use std::test; - -use core::result; -use result::{Ok, Err}; - -use common::config; -use common::mode_run_pass; -use common::mode_run_fail; -use common::mode_compile_fail; -use common::mode_pretty; -use common::mode; -use util::logv; - -fn main() { - let args = os::args(); - let config = parse_config(args); - log_config(config); - run_tests(config); -} - -fn parse_config(args: ~[~str]) -> config { - let opts = - ~[getopts::reqopt(~"compile-lib-path"), - getopts::reqopt(~"run-lib-path"), - getopts::reqopt(~"rustc-path"), getopts::reqopt(~"src-base"), - getopts::reqopt(~"build-base"), getopts::reqopt(~"aux-base"), - getopts::reqopt(~"stage-id"), - getopts::reqopt(~"mode"), getopts::optflag(~"ignored"), - getopts::optopt(~"runtool"), getopts::optopt(~"rustcflags"), - getopts::optflag(~"verbose"), - getopts::optopt(~"logfile"), - getopts::optflag(~"jit")]; - - assert (vec::is_not_empty(args)); - let args_ = vec::tail(args); - let matches = - &match getopts::getopts(args_, opts) { - Ok(m) => m, - Err(f) => fail getopts::fail_str(f) - }; - - fn opt_path(m: &getopts::Matches, nm: ~str) -> Path { - Path(getopts::opt_str(m, nm)) - } - - return {compile_lib_path: getopts::opt_str(matches, ~"compile-lib-path"), - run_lib_path: getopts::opt_str(matches, ~"run-lib-path"), - rustc_path: opt_path(matches, ~"rustc-path"), - src_base: opt_path(matches, ~"src-base"), - build_base: opt_path(matches, ~"build-base"), - aux_base: opt_path(matches, ~"aux-base"), - stage_id: getopts::opt_str(matches, ~"stage-id"), - mode: str_mode(getopts::opt_str(matches, ~"mode")), - run_ignored: getopts::opt_present(matches, ~"ignored"), - filter: - if vec::len(matches.free) > 0u { - option::Some(matches.free[0]) - } else { option::None }, - logfile: option::map(&getopts::opt_maybe_str(matches, - ~"logfile"), - |s| Path(*s)), - runtool: getopts::opt_maybe_str(matches, ~"runtool"), - rustcflags: getopts::opt_maybe_str(matches, ~"rustcflags"), - jit: getopts::opt_present(matches, ~"jit"), - verbose: getopts::opt_present(matches, ~"verbose")}; -} - -fn log_config(config: config) { - let c = config; - logv(c, fmt!("configuration:")); - logv(c, fmt!("compile_lib_path: %s", config.compile_lib_path)); - logv(c, fmt!("run_lib_path: %s", config.run_lib_path)); - logv(c, fmt!("rustc_path: %s", config.rustc_path.to_str())); - logv(c, fmt!("src_base: %s", config.src_base.to_str())); - logv(c, fmt!("build_base: %s", config.build_base.to_str())); - logv(c, fmt!("stage_id: %s", config.stage_id)); - logv(c, fmt!("mode: %s", mode_str(config.mode))); - logv(c, fmt!("run_ignored: %b", config.run_ignored)); - logv(c, fmt!("filter: %s", opt_str(config.filter))); - logv(c, fmt!("runtool: %s", opt_str(config.runtool))); - logv(c, fmt!("rustcflags: %s", opt_str(config.rustcflags))); - logv(c, fmt!("jit: %b", config.jit)); - logv(c, fmt!("verbose: %b", config.verbose)); - logv(c, fmt!("\n")); -} - -fn opt_str(maybestr: Option<~str>) -> ~str { - match maybestr { option::Some(s) => s, option::None => ~"(none)" } -} - -fn str_opt(maybestr: ~str) -> Option<~str> { - if maybestr != ~"(none)" { option::Some(maybestr) } else { option::None } -} - -fn str_mode(s: ~str) -> mode { - match s { - ~"compile-fail" => mode_compile_fail, - ~"run-fail" => mode_run_fail, - ~"run-pass" => mode_run_pass, - ~"pretty" => mode_pretty, - _ => fail ~"invalid mode" - } -} - -fn mode_str(mode: mode) -> ~str { - match mode { - mode_compile_fail => ~"compile-fail", - mode_run_fail => ~"run-fail", - mode_run_pass => ~"run-pass", - mode_pretty => ~"pretty" - } -} - -fn run_tests(config: config) { - let opts = test_opts(config); - let tests = make_tests(config); - let res = test::run_tests_console(&opts, tests); - if !res { fail ~"Some tests failed"; } -} - -fn test_opts(config: config) -> test::TestOpts { - {filter: - match config.filter { - option::Some(s) => option::Some(s), - option::None => option::None - }, - run_ignored: config.run_ignored, - logfile: - match config.logfile { - option::Some(s) => option::Some(s.to_str()), - option::None => option::None - } - } -} - -fn make_tests(config: config) -> ~[test::TestDesc] { - debug!("making tests from %s", - config.src_base.to_str()); - let mut tests = ~[]; - for os::list_dir_path(&config.src_base).each |file| { - let file = copy *file; - debug!("inspecting file %s", file.to_str()); - if is_test(config, file) { - tests.push(make_test(config, file)) - } - } - move tests -} - -fn is_test(config: config, testfile: &Path) -> bool { - // Pretty-printer does not work with .rc files yet - let valid_extensions = - match config.mode { - mode_pretty => ~[~".rs"], - _ => ~[~".rc", ~".rs"] - }; - let invalid_prefixes = ~[~".", ~"#", ~"~"]; - let name = testfile.filename().get(); - - let mut valid = false; - - for valid_extensions.each |ext| { - if str::ends_with(name, *ext) { valid = true; } - } - - for invalid_prefixes.each |pre| { - if str::starts_with(name, *pre) { valid = false; } - } - - return valid; -} - -fn make_test(config: config, testfile: &Path) -> - test::TestDesc { - { - name: make_test_name(config, testfile), - testfn: make_test_closure(config, testfile), - ignore: header::is_test_ignored(config, testfile), - should_fail: false - } -} - -fn make_test_name(config: config, testfile: &Path) -> ~str { - fmt!("[%s] %s", mode_str(config.mode), testfile.to_str()) -} - -fn make_test_closure(config: config, testfile: &Path) -> test::TestFn { - let testfile = testfile.to_str(); - fn~() { runtest::run(config, testfile) } -} - -// Local Variables: -// fill-column: 78; -// indent-tabs-mode: nil -// c-basic-offset: 4 -// buffer-file-coding-system: utf-8-unix -// End: |
