Skip to content

Commit 50da4a4

Browse files
committed
---
yaml --- r: 14803 b: refs/heads/try c: d608131 h: refs/heads/master i: 14801: a30caa6 14799: 7b80f61 v: v3
1 parent 3e79063 commit 50da4a4

File tree

2 files changed

+58
-16
lines changed

2 files changed

+58
-16
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22
refs/heads/master: 61b1875c16de39c166b0f4d54bba19f9c6777d1a
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
44
refs/heads/snap-stage3: 4a81779abd786ff22d71434c6d9a5917ea4cdfff
5-
refs/heads/try: 59a56ad043d30d69f7c14dea1abeda2899fd1f28
5+
refs/heads/try: d60813146d883d2b364817c2e5b6fd538b4b7819
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105

branches/try/src/libstd/test.rs

Lines changed: 57 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -85,20 +85,20 @@ fn parse_opts(args: [str]) -> opt_res {
8585

8686
enum test_result { tr_ok, tr_failed, tr_ignored, }
8787

88+
type console_test_state =
89+
@{out: io::writer,
90+
use_color: bool,
91+
mutable total: uint,
92+
mutable passed: uint,
93+
mutable failed: uint,
94+
mutable ignored: uint,
95+
mutable failures: [test_desc]};
96+
8897
// A simple console test runner
8998
fn run_tests_console(opts: test_opts,
9099
tests: [test_desc]) -> bool {
91100

92-
type test_state =
93-
@{out: io::writer,
94-
use_color: bool,
95-
mutable total: uint,
96-
mutable passed: uint,
97-
mutable failed: uint,
98-
mutable ignored: uint,
99-
mutable failures: [test_desc]};
100-
101-
fn callback(event: testevent, st: test_state) {
101+
fn callback(event: testevent, st: console_test_state) {
102102
alt event {
103103
te_filtered(filtered_tests) {
104104
st.total = vec::len(filtered_tests);
@@ -143,11 +143,7 @@ fn run_tests_console(opts: test_opts,
143143
let success = st.failed == 0u;
144144

145145
if !success {
146-
st.out.write_line("\nfailures:");
147-
for test: test_desc in st.failures {
148-
let testname = test.name; // Satisfy alias analysis
149-
st.out.write_line(#fmt[" %s", testname]);
150-
}
146+
print_failures(st);
151147
}
152148

153149
st.out.write_str(#fmt["\nresult: "]);
@@ -183,6 +179,52 @@ fn run_tests_console(opts: test_opts,
183179
}
184180
}
185181

182+
fn print_failures(st: console_test_state) {
183+
st.out.write_line("\nfailures:");
184+
let failures = vec::map(copy st.failures) {|test| test.name};
185+
let failures = sort::merge_sort(str::le, failures);
186+
for name in failures {
187+
st.out.write_line(#fmt[" %s", name]);
188+
}
189+
}
190+
191+
#[test]
192+
fn should_sort_failures_before_printing_them() {
193+
let buffer = io::mk_mem_buffer();
194+
let writer = io::mem_buffer_writer(buffer);
195+
196+
let test_a = {
197+
name: "a",
198+
fn: fn~() { },
199+
ignore: false,
200+
should_fail: false
201+
};
202+
203+
let test_b = {
204+
name: "b",
205+
fn: fn~() { },
206+
ignore: false,
207+
should_fail: false
208+
};
209+
210+
let st =
211+
@{out: writer,
212+
use_color: false,
213+
mutable total: 0u,
214+
mutable passed: 0u,
215+
mutable failed: 0u,
216+
mutable ignored: 0u,
217+
mutable failures: [test_b, test_a]};
218+
219+
print_failures(st);
220+
221+
let s = io::mem_buffer_str(buffer);
222+
223+
let apos = option::get(str::find_str(s, "a"));
224+
let bpos = option::get(str::find_str(s, "b"));
225+
assert apos < bpos;
226+
}
227+
186228
fn use_color() -> bool { ret get_concurrency() == 1u; }
187229

188230
enum testevent {

0 commit comments

Comments
 (0)