Sort tests before running them. Issue #428
This commit is contained in:
parent
f010f79a61
commit
64d43be647
@ -3,6 +3,8 @@
|
||||
// simplest interface possible for representing and running tests
|
||||
// while providing a base that other test frameworks may build off of.
|
||||
|
||||
import sort = sort::ivector;
|
||||
|
||||
export test_name;
|
||||
export test_fn;
|
||||
export test_desc;
|
||||
@ -165,6 +167,7 @@ fn run_tests(&test_opts opts, &test_desc[] tests) -> bool {
|
||||
fn filter_tests(&test_opts opts, &test_desc[] tests) -> test_desc[] {
|
||||
auto filtered = tests;
|
||||
|
||||
// Remove tests that don't match the test filter
|
||||
filtered = if (option::is_none(opts.filter)) {
|
||||
filtered
|
||||
} else {
|
||||
@ -183,6 +186,7 @@ fn filter_tests(&test_opts opts, &test_desc[] tests) -> test_desc[] {
|
||||
ivec::filter_map(filter, filtered)
|
||||
};
|
||||
|
||||
// Maybe pull out the ignored test and unignore them
|
||||
filtered = if (!opts.run_ignored) {
|
||||
filtered
|
||||
} else {
|
||||
@ -199,6 +203,14 @@ fn filter_tests(&test_opts opts, &test_desc[] tests) -> test_desc[] {
|
||||
ivec::filter_map(filter, filtered)
|
||||
};
|
||||
|
||||
// Sort the tests alphabetically
|
||||
filtered = {
|
||||
fn lteq(&test_desc t1, &test_desc t2) -> bool {
|
||||
str::lteq(t1.name, t2.name)
|
||||
}
|
||||
sort::merge_sort(lteq, filtered)
|
||||
};
|
||||
|
||||
ret filtered;
|
||||
}
|
||||
|
||||
|
@ -66,6 +66,51 @@ fn filter_for_ignored_option() {
|
||||
assert filtered.(0).ignore == false;
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn sort_tests() {
|
||||
auto opts = rec(filter = option::none,
|
||||
run_ignored = false);
|
||||
|
||||
auto names = ~["sha1::test",
|
||||
"int::test_to_str",
|
||||
"int::test_pow",
|
||||
"test::do_not_run_ignored_tests",
|
||||
"test::ignored_tests_result_in_ignored",
|
||||
"test::first_free_arg_should_be_a_filter",
|
||||
"test::parse_ignored_flag",
|
||||
"test::filter_for_ignored_option",
|
||||
"test::sort_tests"];
|
||||
auto tests = {
|
||||
auto testfn = fn() {};
|
||||
auto tests = ~[];
|
||||
for (str name in names) {
|
||||
auto test = rec(name = name,
|
||||
fn = testfn,
|
||||
ignore = false);
|
||||
tests += ~[test];
|
||||
}
|
||||
tests
|
||||
};
|
||||
auto filtered = test::filter_tests(opts, tests);
|
||||
|
||||
auto expected = ~["int::test_pow",
|
||||
"int::test_to_str",
|
||||
"sha1::test",
|
||||
"test::do_not_run_ignored_tests",
|
||||
"test::filter_for_ignored_option",
|
||||
"test::first_free_arg_should_be_a_filter",
|
||||
"test::ignored_tests_result_in_ignored",
|
||||
"test::parse_ignored_flag",
|
||||
"test::sort_tests"];
|
||||
|
||||
auto pairs = ivec::zip(expected, filtered);
|
||||
|
||||
for (tup(str, test::test_desc) p in pairs) {
|
||||
log_err #fmt("e: %s a: %s", p._0, p._1.name);
|
||||
assert p._0 == p._1.name;
|
||||
}
|
||||
}
|
||||
|
||||
// Local Variables:
|
||||
// mode: rust;
|
||||
// fill-column: 78;
|
||||
|
Loading…
x
Reference in New Issue
Block a user