Diffstat (limited to 'frontend/gamma/tests/SimpleTest/TestRunner.js') (more/less context) (ignore whitespace changes)
-rw-r--r-- | frontend/gamma/tests/SimpleTest/TestRunner.js | 233 |
1 files changed, 233 insertions, 0 deletions
diff --git a/frontend/gamma/tests/SimpleTest/TestRunner.js b/frontend/gamma/tests/SimpleTest/TestRunner.js new file mode 100644 index 0000000..81a36cf --- a/dev/null +++ b/frontend/gamma/tests/SimpleTest/TestRunner.js | |||
@@ -0,0 +1,233 @@ | |||
1 | /** | ||
2 | * TestRunner: A test runner for SimpleTest | ||
3 | * TODO: | ||
4 | * | ||
5 | * * Avoid moving iframes: That causes reloads on mozilla and opera. | ||
6 | * | ||
7 | * | ||
8 | **/ | ||
9 | var TestRunner = {}; | ||
10 | TestRunner.logEnabled = false; | ||
11 | TestRunner._iframes = {}; | ||
12 | TestRunner._iframeDocuments = {}; | ||
13 | TestRunner._iframeRows = {}; | ||
14 | TestRunner._currentTest = 0; | ||
15 | TestRunner._urls = []; | ||
16 | TestRunner._testsDiv = DIV(); | ||
17 | TestRunner._progressDiv = DIV(); | ||
18 | TestRunner._summaryDiv = DIV(null, | ||
19 | H1(null, "Tests Summary"), | ||
20 | TABLE(null, | ||
21 | THEAD(null, | ||
22 | TR(null, | ||
23 | TH(null, "Test"), | ||
24 | TH(null, "Passed"), | ||
25 | TH(null, "Failed") | ||
26 | ) | ||
27 | ), | ||
28 | TFOOT(/*null, TR(null, TH(null, "-"), TH(null, "--"), TH(null, "---"))*/), | ||
29 | TBODY() | ||
30 | ) | ||
31 | ); | ||
32 | |||
33 | /** | ||
34 | * This function is called after generating the summary. | ||
35 | **/ | ||
36 | TestRunner.onComplete = null; | ||
37 | |||
38 | /** | ||
39 | * If logEnabled is true, this is the logger that will be used. | ||
40 | **/ | ||
41 | TestRunner.logger = MochiKit.Logging.logger; | ||
42 | |||
43 | /** | ||
44 | * Toggle element visibility | ||
45 | **/ | ||
46 | TestRunner._toggle = function(el) { | ||
47 | if (el.className == "noshow") { | ||
48 | el.className = ""; | ||
49 | el.style.cssText = ""; | ||
50 | } else { | ||
51 | el.className = "noshow"; | ||
52 | el.style.cssText = "width:0px; height:0px; border:0px;"; | ||
53 | } | ||
54 | }; | ||
55 | |||
56 | |||
57 | /** | ||
58 | * Creates the iframe that contains a test | ||
59 | **/ | ||
60 | TestRunner._makeIframe = function (url) { | ||
61 | var iframe = document.createElement('iframe'); | ||
62 | iframe.src = url; | ||
63 | iframe.name = url; | ||
64 | iframe.width = "500"; | ||
65 | var tbody = TestRunner._summaryDiv.getElementsByTagName("tbody")[0]; | ||
66 | var tr = TR(null, TD({'colspan': '3'}, iframe)); | ||
67 | iframe._row = tr; | ||
68 | tbody.appendChild(tr); | ||
69 | return iframe; | ||
70 | }; | ||
71 | |||
72 | /** | ||
73 | * TestRunner entry point. | ||
74 | * | ||
75 | * The arguments are the URLs of the test to be ran. | ||
76 | * | ||
77 | **/ | ||
78 | TestRunner.runTests = function (/*url...*/) { | ||
79 | if (TestRunner.logEnabled) | ||
80 | TestRunner.logger.log("SimpleTest START"); | ||
81 | |||
82 | var body = document.getElementsByTagName("body")[0]; | ||
83 | appendChildNodes(body, | ||
84 | TestRunner._testsDiv, | ||
85 | TestRunner._progressDiv, | ||
86 | TestRunner._summaryDiv | ||
87 | ); | ||
88 | for (var i = 0; i < arguments.length; i++) { | ||
89 | TestRunner._urls.push(arguments[i]); | ||
90 | } | ||
91 | |||
92 | TestRunner.runNextTest(); | ||
93 | }; | ||
94 | |||
95 | /** | ||
96 | * Run the next test. If no test remains, calls makeSummary | ||
97 | **/ | ||
98 | TestRunner.runNextTest = function() { | ||
99 | if (TestRunner._currentTest < TestRunner._urls.length) { | ||
100 | var url = TestRunner._urls[TestRunner._currentTest]; | ||
101 | var progress = SPAN(null, | ||
102 | "Running ", A({href:url}, url), "..." | ||
103 | ); | ||
104 | |||
105 | if (TestRunner.logEnabled) | ||
106 | TestRunner.logger.log(scrapeText(progress)); | ||
107 | |||
108 | TestRunner._progressDiv.appendChild(progress); | ||
109 | TestRunner._iframes[url] = TestRunner._makeIframe(url); | ||
110 | } else { | ||
111 | TestRunner.makeSummary(); | ||
112 | if (TestRunner.onComplete) { | ||
113 | TestRunner.onComplete(); | ||
114 | } | ||
115 | } | ||
116 | }; | ||
117 | |||
118 | /** | ||
119 | * This stub is called by SimpleTest when a test is finished. | ||
120 | **/ | ||
121 | TestRunner.testFinished = function (doc) { | ||
122 | appendChildNodes(TestRunner._progressDiv, SPAN(null, "Done"), BR()); | ||
123 | var finishedURL = TestRunner._urls[TestRunner._currentTest]; | ||
124 | |||
125 | if (TestRunner.logEnabled) | ||
126 | TestRunner.logger.debug("SimpleTest finished " + finishedURL); | ||
127 | |||
128 | TestRunner._iframeDocuments[finishedURL] = doc; | ||
129 | // TestRunner._iframes[finishedURL].style.display = "none"; | ||
130 | if (finishedURL != null) { | ||
131 | TestRunner._toggle(TestRunner._iframes[finishedURL]); | ||
132 | TestRunner._currentTest++; | ||
133 | TestRunner.runNextTest(); | ||
134 | } | ||
135 | }; | ||
136 | |||
137 | /** | ||
138 | * Display the summary in the browser | ||
139 | **/ | ||
140 | /* | ||
141 | TestRunner.makeSummary = function() { | ||
142 | if (TestRunner.logEnabled) | ||
143 | TestRunner.logger.log("SimpleTest FINISHED"); | ||
144 | var rows = []; | ||
145 | for (var url in TestRunner._iframeDocuments) { | ||
146 | var doc = TestRunner._iframeDocuments[url]; | ||
147 | var nOK = withDocument(doc, | ||
148 | partial(getElementsByTagAndClassName, 'div', 'test_ok') | ||
149 | ).length; | ||
150 | var nNotOK = withDocument(doc, | ||
151 | partial(getElementsByTagAndClassName, 'div', 'test_not_ok') | ||
152 | ).length; | ||
153 | var toggle = partial(TestRunner._toggle, TestRunner._iframes[url]); | ||
154 | var jsurl = "TestRunner._toggle(TestRunner._iframes['" + url + "'])"; | ||
155 | var row = TR( | ||
156 | {'style': {'backgroundColor': nNotOK > 0 ? "#f00":"#0f0"}}, | ||
157 | TD(null, url), | ||
158 | TD(null, nOK), | ||
159 | TD(null, nNotOK) | ||
160 | ); | ||
161 | row.onclick = toggle; | ||
162 | var tbody = TestRunner._summaryDiv.getElementsByTagName("tbody")[0]; | ||
163 | tbody.insertBefore(row, TestRunner._iframes[url]._row) | ||
164 | } | ||
165 | }; | ||
166 | */ | ||
167 | |||
168 | TestRunner.makeSummary = function() { | ||
169 | var base = MochiKit.Base; | ||
170 | var dom = MochiKit.DOM; | ||
171 | var iter = MochiKit.Iter; | ||
172 | vartotal_Ok, total_not_Ok; | ||
173 | |||
174 | total_Ok = 0; | ||
175 | total_not_Ok = 0; | ||
176 | |||
177 | if (TestRunner.logEnabled) | ||
178 | TestRunner.logger.log("SimpleTest FINISHED"); | ||
179 | var rows = []; | ||
180 | for (var url in TestRunner._iframeDocuments) { | ||
181 | var doc = TestRunner._iframeDocuments[url]; | ||
182 | var nOK = withDocument(doc, | ||
183 | partial(getElementsByTagAndClassName, 'div', 'test_ok') | ||
184 | ).length; | ||
185 | var nNotOK = withDocument(doc, | ||
186 | partial(getElementsByTagAndClassName, 'div', 'test_not_ok') | ||
187 | ).length; | ||
188 | var toggle = partial(TestRunner._toggle, TestRunner._iframes[url]); | ||
189 | var jsurl = "TestRunner._toggle(TestRunner._iframes['" + url + "'])"; | ||
190 | var row = TR( | ||
191 | {'style': {'backgroundColor': nNotOK > 0 ? "#f00":"#0f0"}}, | ||
192 | TD(null, url), | ||
193 | TD(null, nOK), | ||
194 | TD(null, nNotOK) | ||
195 | ); | ||
196 | row.onclick = toggle; | ||
197 | var tbody = TestRunner._summaryDiv.getElementsByTagName("tbody")[0]; | ||
198 | tbody.insertBefore(row, TestRunner._iframes[url]._row); | ||
199 | |||
200 | total_Ok += nOK; | ||
201 | total_not_Ok += nNotOK; | ||
202 | } | ||
203 | |||
204 | { | ||
205 | var tfoot = TestRunner._summaryDiv.getElementsByTagName("tfoot")[0]; | ||
206 | tfoot.appendChild(TR(null, | ||
207 | TH(null, ""), | ||
208 | TH({'style':"color:green;"}, total_Ok), | ||
209 | TH({'style':"color:" + ((total_not_Ok == 0) ? 'black' : 'red') + ";"}, total_not_Ok) | ||
210 | )); | ||
211 | } | ||
212 | |||
213 | var testRunnerResults; | ||
214 | var i, c; | ||
215 | |||
216 | testRunnerResults = dom.DIV({'style': 'display:none; visibility:hidden;'}, null); | ||
217 | |||
218 | c = total_Ok; | ||
219 | for (i=0; i<c; i++) { | ||
220 | dom.appendChildNodes(testRunnerResults, dom.DIV({'class': 'test_ok'}, "ok")); | ||
221 | } | ||
222 | |||
223 | c = total_not_Ok; | ||
224 | for (i=0; i<c; i++) { | ||
225 | dom.appendChildNodes(testRunnerResults, dom.DIV({'class': 'test_not_ok'}, "fail")); | ||
226 | } | ||
227 | |||
228 | document.getElementsByTagName("body")[0].appendChild(testRunnerResults); | ||
229 | |||
230 | if (typeof(parent) != "undefined" && parent.TestRunner) { | ||
231 | parent.TestRunner.testFinished(document); | ||
232 | } | ||
233 | }; | ||