summaryrefslogtreecommitdiff
path: root/frontend/gamma/tests/SimpleTest/TestRunner.js
Unidiff
Diffstat (limited to 'frontend/gamma/tests/SimpleTest/TestRunner.js') (more/less context) (ignore whitespace changes)
-rw-r--r--frontend/gamma/tests/SimpleTest/TestRunner.js233
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**/
9var TestRunner = {};
10TestRunner.logEnabled = false;
11TestRunner._iframes = {};
12TestRunner._iframeDocuments = {};
13TestRunner._iframeRows = {};
14TestRunner._currentTest = 0;
15TestRunner._urls = [];
16TestRunner._testsDiv = DIV();
17TestRunner._progressDiv = DIV();
18TestRunner._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**/
36TestRunner.onComplete = null;
37
38/**
39 * If logEnabled is true, this is the logger that will be used.
40**/
41TestRunner.logger = MochiKit.Logging.logger;
42
43/**
44 * Toggle element visibility
45**/
46TestRunner._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**/
60TestRunner._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**/
78TestRunner.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**/
98TestRunner.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**/
121TestRunner.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/*
141TestRunner.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
168TestRunner.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};