@@ -28,24 +28,37 @@ type test_desc = rec(test_name name,
28
28
// The default console test runner. It accepts the command line
29
29
// arguments and a vector of test_descs (generated at compile time).
30
30
fn test_main( & vec[ str] args , & test_desc[ ] tests) -> int {
31
- if ( run_tests( tests) ) {
31
+ if ( run_tests( parse_opts ( args ) , tests) ) {
32
32
ret 0 ;
33
33
} else {
34
34
ret -1 ;
35
35
}
36
36
}
37
37
38
- fn run_tests( & test_desc[ ] tests) -> bool {
38
+ type test_opts = rec ( option:: t[ str] filter) ;
39
+
40
+ fn parse_opts ( & vec[ str] args) -> test_opts {
41
+ rec( filter = if ( vec:: len ( args) > 1 u) {
42
+ option:: some ( args. ( 1 ) )
43
+ } else {
44
+ option:: none
45
+ } )
46
+ }
47
+
48
+ // A simple console test runner
49
+ fn run_tests( & test_opts opts, & test_desc[ ] tests) -> bool {
50
+
51
+ auto filtered_tests = filter_tests ( opts, tests) ;
39
52
40
53
auto out = io:: stdout ( ) ;
41
54
42
- auto total = ivec:: len ( tests ) ;
55
+ auto total = ivec:: len ( filtered_tests ) ;
43
56
out. write_line ( #fmt ( "running %u tests" , total) ) ;
44
57
45
58
auto passed = 0 u;
46
59
auto failed = 0 u;
47
60
48
- for ( test_desc test in tests ) {
61
+ for ( test_desc test in filtered_tests ) {
49
62
out. write_str ( #fmt ( "running %s ... " , test. name ) ) ;
50
63
if ( run_test ( test) ) {
51
64
passed += 1 u;
@@ -91,6 +104,25 @@ fn run_tests(&test_desc[] tests) -> bool {
91
104
}
92
105
}
93
106
107
+ fn filter_tests( & test_opts opts, & test_desc[ ] tests) -> test_desc[ ] {
108
+ if ( option:: is_none ( opts. filter ) ) {
109
+ ret tests ;
110
+ }
111
+
112
+ auto filter_str = alt opts. filter { option:: some ( ?f) { f }
113
+ option:: none { "" } } ;
114
+
115
+ auto filter = bind fn( & test_desc test,
116
+ str filter_str) -> option:: t[ test_desc] {
117
+ if ( str:: find ( test. name , filter_str) >= 0 ) {
118
+ ret option:: some ( test) ;
119
+ } else {
120
+ ret option:: none;
121
+ }
122
+ } ( _, filter_str) ;
123
+
124
+ ret ivec:: filter_map ( filter, tests) ;
125
+ }
94
126
95
127
96
128
// Local Variables:
0 commit comments