2 * TestRunner: A test runner for SimpleTest
5 * * Avoid moving iframes: That causes reloads on mozilla and opera.
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"),
33 * This function is called after generating the summary.
35 TestRunner
.onComplete
= null;
38 * If logEnabled is true, this is the logger that will be used.
40 TestRunner
.logger
= MochiKit
.Logging
.logger
;
43 * Toggle element visibility
45 TestRunner
._toggle
= function(el
) {
46 if (el
.className
== "noshow") {
48 el
.style
.cssText
= "";
50 el
.className
= "noshow";
51 el
.style
.cssText
= "width:0px; height:0px; border:0px;";
57 * Creates the iframe that contains a test
59 TestRunner
._makeIframe
= function (url
) {
60 var iframe
= document
.createElement('iframe');
64 var tbody
= TestRunner
._summaryDiv
.getElementsByTagName("tbody")[0];
65 var tr
= TR(null, TD({'colspan': '3'}, iframe
));
67 tbody
.appendChild(tr
);
72 * TestRunner entry point.
74 * The arguments are the URLs of the test to be ran.
77 TestRunner
.runTests
= function (/*url...*/) {
78 if (TestRunner
.logEnabled
)
79 TestRunner
.logger
.log("SimpleTest START");
81 var body
= document
.getElementsByTagName("body")[0];
82 appendChildNodes(body
,
84 TestRunner
._progressDiv
,
85 TestRunner
._summaryDiv
87 for (var i
= 0; i
< arguments
.length
; i
++) {
88 TestRunner
._urls
.push(arguments
[i
]);
90 TestRunner
.runNextTest();
94 * Run the next test. If no test remains, calls makeSummary
96 TestRunner
.runNextTest
= function() {
97 if (TestRunner
._currentTest
< TestRunner
._urls
.length
) {
98 var url
= TestRunner
._urls
[TestRunner
._currentTest
];
99 var progress
= SPAN(null,
100 "Running ", A({href
:url
}, url
), "..."
103 if (TestRunner
.logEnabled
)
104 TestRunner
.logger
.log(scrapeText(progress
));
106 TestRunner
._progressDiv
.appendChild(progress
);
107 TestRunner
._iframes
[url
] = TestRunner
._makeIframe(url
);
109 TestRunner
.makeSummary();
110 if (TestRunner
.onComplete
)
111 TestRunner
.onComplete();
116 * This stub is called by SimpleTest when a test is finished.
118 TestRunner
.testFinished
= function (doc
) {
119 appendChildNodes(TestRunner
._progressDiv
, SPAN(null, "Done"), BR());
120 var finishedURL
= TestRunner
._urls
[TestRunner
._currentTest
];
122 if (TestRunner
.logEnabled
)
123 TestRunner
.logger
.debug("SimpleTest finished " + finishedURL
);
125 TestRunner
._iframeDocuments
[finishedURL
] = doc
;
126 // TestRunner._iframes[finishedURL].style.display = "none";
127 TestRunner
._toggle(TestRunner
._iframes
[finishedURL
]);
128 TestRunner
._currentTest
++;
129 TestRunner
.runNextTest();
133 * Display the summary in the browser
135 TestRunner
.makeSummary
= function() {
136 if (TestRunner
.logEnabled
)
137 TestRunner
.logger
.log("SimpleTest FINISHED");
139 for (var url
in TestRunner
._iframeDocuments
) {
140 var doc
= TestRunner
._iframeDocuments
[url
];
141 var nOK
= withDocument(doc
,
142 partial(getElementsByTagAndClassName
, 'div', 'test_ok')
144 var nNotOK
= withDocument(doc
,
145 partial(getElementsByTagAndClassName
, 'div', 'test_not_ok')
147 var toggle
= partial(TestRunner
._toggle
, TestRunner
._iframes
[url
]);
148 var jsurl
= "TestRunner._toggle(TestRunner._iframes['" + url
+ "'])";
150 {'style': {'backgroundColor': nNotOK
> 0 ? "#f00":"#0f0"}},
155 row
.onclick
= toggle
;
156 var tbody
= TestRunner
._summaryDiv
.getElementsByTagName("tbody")[0];
157 tbody
.insertBefore(row
, TestRunner
._iframes
[url
]._row
)