提交 64d43be6 编写于 作者: B Brian Anderson

Sort tests before running them. Issue #428

上级 f010f79a
...@@ -3,6 +3,8 @@ ...@@ -3,6 +3,8 @@
// simplest interface possible for representing and running tests // simplest interface possible for representing and running tests
// while providing a base that other test frameworks may build off of. // while providing a base that other test frameworks may build off of.
import sort = sort::ivector;
export test_name; export test_name;
export test_fn; export test_fn;
export test_desc; export test_desc;
...@@ -165,6 +167,7 @@ fn write_pretty(&io::writer out, &str word, u8 color) { ...@@ -165,6 +167,7 @@ fn write_pretty(&io::writer out, &str word, u8 color) {
fn filter_tests(&test_opts opts, &test_desc[] tests) -> test_desc[] { fn filter_tests(&test_opts opts, &test_desc[] tests) -> test_desc[] {
auto filtered = tests; auto filtered = tests;
// Remove tests that don't match the test filter
filtered = if (option::is_none(opts.filter)) { filtered = if (option::is_none(opts.filter)) {
filtered filtered
} else { } else {
...@@ -183,6 +186,7 @@ fn filter_tests(&test_opts opts, &test_desc[] tests) -> test_desc[] { ...@@ -183,6 +186,7 @@ fn filter_tests(&test_opts opts, &test_desc[] tests) -> test_desc[] {
ivec::filter_map(filter, filtered) ivec::filter_map(filter, filtered)
}; };
// Maybe pull out the ignored test and unignore them
filtered = if (!opts.run_ignored) { filtered = if (!opts.run_ignored) {
filtered filtered
} else { } else {
...@@ -199,6 +203,14 @@ fn = test.fn, ...@@ -199,6 +203,14 @@ fn = test.fn,
ivec::filter_map(filter, filtered) 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; ret filtered;
} }
......
...@@ -66,6 +66,51 @@ fn = fn() {}, ...@@ -66,6 +66,51 @@ fn = fn() {},
assert filtered.(0).ignore == false; 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: // Local Variables:
// mode: rust; // mode: rust;
// fill-column: 78; // fill-column: 78;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册