Mercurial > projects > dang
annotate tests/run.d @ 208:41ccd50e7cbc
Added missing tests
author | Anders Johnsen <skabet@gmail.com> |
---|---|
date | Tue, 12 Aug 2008 18:21:06 +0200 |
parents | d3c148ca429b |
children |
rev | line source |
---|---|
208 | 1 // skip |
206
d3c148ca429b
Major moving of files. all src now goes into src, all docs in docs.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
2 module run.d; |
d3c148ca429b
Major moving of files. all src now goes into src, all docs in docs.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
3 |
208 | 4 import tango.core.Array, |
5 tango.io.FileConduit, | |
6 tango.io.FileScan, | |
7 tango.io.Stdout, | |
8 tango.sys.Process, | |
9 tango.text.Ascii, | |
10 tango.text.Regex, | |
11 tango.text.Util; | |
206
d3c148ca429b
Major moving of files. all src now goes into src, all docs in docs.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
12 |
208 | 13 // -- Settings -- |
14 char[] compiler = "./Dang"; | |
15 char[] test_folder = "tests"; | |
16 char[] valid_filenames = r"^[^.].*"; | |
17 bool print_expected = false; | |
18 char[][] options; | |
19 // the tests can be sorted by one of the following functions | |
20 bool nameSort (FilePath a, FilePath b) { return a.name < b.name; } | |
21 bool pathSort (FilePath a, FilePath b) { return a.toString < b.toString; } | |
22 bool modifiedSort(FilePath a, FilePath b) { return a.modified < b.modified; } | |
23 bool createdSort (FilePath a, FilePath b) { return a.created < b.created; } | |
24 const sortBy = &pathSort; | |
206
d3c148ca429b
Major moving of files. all src now goes into src, all docs in docs.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
25 |
208 | 26 // -- end of settings |
27 | |
28 enum TestResult | |
206
d3c148ca429b
Major moving of files. all src now goes into src, all docs in docs.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
29 { |
208 | 30 Skipped, |
31 Expected, | |
32 Unexpected | |
206
d3c148ca429b
Major moving of files. all src now goes into src, all docs in docs.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
33 } |
d3c148ca429b
Major moving of files. all src now goes into src, all docs in docs.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
34 |
d3c148ca429b
Major moving of files. all src now goes into src, all docs in docs.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
35 void main(char[][] args) |
d3c148ca429b
Major moving of files. all src now goes into src, all docs in docs.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
36 { |
208 | 37 foreach (arg ; args[1..$]) |
38 options ~= arg; | |
206
d3c148ca429b
Major moving of files. all src now goes into src, all docs in docs.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
39 |
208 | 40 scope scan = new FileScan; |
41 // scope regex = new Regex(valid_filenames); // DMD FAILS!! ?? | |
42 // Return true for files/folders to include | |
43 bool filter(FilePath p, bool isDir) | |
44 { | |
45 if (isDir) | |
46 return p.name[0] != '.'; | |
47 else | |
48 return p.ext == "d" ; //&& regex.test(p.name); | |
49 } | |
50 scan.sweep(test_folder, &filter, true); | |
51 FilePath[] files = scan.files; | |
52 int total_tests = files.length; | |
206
d3c148ca429b
Major moving of files. all src now goes into src, all docs in docs.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
53 |
208 | 54 // Sort the result by the chosen function - default is the full path |
55 sort(files, sortBy); | |
56 | |
57 int[TestResult.max + 1] results = 0; | |
58 foreach (i, ref test; files) | |
206
d3c148ca429b
Major moving of files. all src now goes into src, all docs in docs.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
59 { |
208 | 60 begin_test(i + 1, total_tests, test.name); |
61 TestResult res = run_test(test); | |
62 results[res] += 1; | |
63 end_test(); | |
64 } | |
65 Stdout.format("\r{,80}\r", " "); | |
66 Stdout.newline; | |
67 int good = TestResult.Expected; | |
68 int bad = TestResult.Unexpected; | |
69 int tests_run = results[good] + results[bad]; | |
70 Stdout.formatln("{}/{} tests failed", results[bad], tests_run); | |
71 } | |
72 | |
73 void begin_test(int number, int total_tests, char[] name) | |
74 { | |
75 char[60] progressbar = ' '; | |
76 int progress = number*progressbar.length/total_tests; | |
77 progressbar[0 .. progress] = '='; | |
78 if(progress) | |
79 progressbar[progress-1] = '>'; | |
80 Stdout.format("\r{}% - [{}]", 1e2 * number / total_tests, progressbar); | |
81 Stdout.flush(); | |
82 //Thread.sleep(0.05); | |
83 } | |
84 | |
85 void end_test() { } | |
86 | |
87 enum { | |
88 NoFail, | |
89 CompiletimeFail, | |
90 RuntimeFail | |
91 } | |
92 | |
93 private int min(int a, int b) { return a < b? a : b; } | |
94 TestResult run_test(ref FilePath p) | |
95 { | |
96 auto file = new FileConduit(p.toString(), FileConduit.ReadExisting); | |
97 char[256] content; | |
98 int len = file.read(content); | |
99 file.close(); | |
100 char[] line = content[0 .. min(len, content.find('\n'))]; | |
101 | |
102 bool compile = true; | |
103 int fail = NoFail; | |
104 if (line.length >= 2 && line[0 .. 2] == "//") | |
105 { | |
106 foreach (command; line[2 .. $].delimiters(",;")) | |
206
d3c148ca429b
Major moving of files. all src now goes into src, all docs in docs.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
107 { |
208 | 108 switch (toLower(substitute(command, " ", ""))) |
206
d3c148ca429b
Major moving of files. all src now goes into src, all docs in docs.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
109 { |
208 | 110 case "skip", "dontcompile": |
111 compile = false; | |
206
d3c148ca429b
Major moving of files. all src now goes into src, all docs in docs.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
112 break; |
208 | 113 case "fail", "compilefail", |
114 "compiletimefail", "failatcompiletime": | |
115 fail = CompiletimeFail; | |
206
d3c148ca429b
Major moving of files. all src now goes into src, all docs in docs.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
116 break; |
208 | 117 case "runtime", "runtimefail", "failatruntime": |
118 fail = RuntimeFail; | |
119 Stderr("== Compiled tests will not be run! ==").newline; | |
120 return TestResult.Skipped; | |
121 default: | |
206
d3c148ca429b
Major moving of files. all src now goes into src, all docs in docs.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
122 break; |
d3c148ca429b
Major moving of files. all src now goes into src, all docs in docs.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
123 } |
208 | 124 break; |
206
d3c148ca429b
Major moving of files. all src now goes into src, all docs in docs.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
125 } |
d3c148ca429b
Major moving of files. all src now goes into src, all docs in docs.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
126 } |
d3c148ca429b
Major moving of files. all src now goes into src, all docs in docs.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
127 |
208 | 128 if (compile) |
129 { | |
130 auto o = compiler ~ options ~ p.toString; | |
131 auto process = new Process(o); | |
132 process.execute(); | |
133 auto result = process.wait(); | |
134 return resultOf(p, result.status, fail); | |
135 } | |
136 | |
137 return TestResult.Skipped; | |
206
d3c148ca429b
Major moving of files. all src now goes into src, all docs in docs.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
138 } |
d3c148ca429b
Major moving of files. all src now goes into src, all docs in docs.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
139 |
208 | 140 private TestResult resultOf(FilePath p, int result, int expected) |
206
d3c148ca429b
Major moving of files. all src now goes into src, all docs in docs.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
141 { |
208 | 142 char[] good(char[] s) |
206
d3c148ca429b
Major moving of files. all src now goes into src, all docs in docs.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
143 { |
208 | 144 version (Posix) |
145 return "\033[1;32m" ~ s ~ "\033[m"; | |
146 else | |
147 return s; | |
206
d3c148ca429b
Major moving of files. all src now goes into src, all docs in docs.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
148 } |
d3c148ca429b
Major moving of files. all src now goes into src, all docs in docs.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
149 |
208 | 150 char[] bad(char[] s) |
206
d3c148ca429b
Major moving of files. all src now goes into src, all docs in docs.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
151 { |
208 | 152 s = s ~ " - Unexpected"; |
153 version (Posix) | |
154 return "\033[1;31m" ~ s ~ "\033[m"; | |
155 else | |
156 return s; | |
206
d3c148ca429b
Major moving of files. all src now goes into src, all docs in docs.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
157 } |
d3c148ca429b
Major moving of files. all src now goes into src, all docs in docs.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
158 |
208 | 159 bool unexpected = expected == 0 ? result != 0 : result == 0; |
160 auto f = unexpected? &bad : &good; | |
161 char[] s = (result == 0)? "SUCCESS" : "FAILURE"; | |
162 // always print if unexpeted, otherwise check the settings | |
163 if (unexpected || print_expected) | |
206
d3c148ca429b
Major moving of files. all src now goes into src, all docs in docs.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
164 { |
208 | 165 Stdout.format("\r{,80}\r", " "); |
166 Stdout.format(" {,-45}", p); | |
167 Stdout(f(s)).newline; | |
206
d3c148ca429b
Major moving of files. all src now goes into src, all docs in docs.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
168 } |
208 | 169 return unexpected? TestResult.Unexpected : TestResult.Expected; |
206
d3c148ca429b
Major moving of files. all src now goes into src, all docs in docs.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
170 } |
d3c148ca429b
Major moving of files. all src now goes into src, all docs in docs.
Anders Johnsen <skabet@gmail.com>
parents:
diff
changeset
|
171 |