Chromium Code Reviews| Index: lib/unittest/unittest_dom.dart |
| diff --git a/lib/unittest/unittest_dom.dart b/lib/unittest/unittest_dom.dart |
| index f69c9c96ece0afb9609a50c1d5e2a8943870a259..787fcf22d037c9e40302999bc51e630cfcabcf75 100644 |
| --- a/lib/unittest/unittest_dom.dart |
| +++ b/lib/unittest/unittest_dom.dart |
| @@ -5,109 +5,57 @@ |
| /** |
| * A simple unit test library for running tests in a browser. |
| */ |
| -#library("unittest"); |
| +#library('unittest'); |
| -#import("dart:dom"); |
| +#import('dart:dom'); |
| +#import('dart:isolate'); |
| -#source("shared.dart"); |
| +#source('config.dart'); |
| +#source('shared.dart'); |
| +#source('html_print.dart'); |
| -// TODO(rnystrom): Get rid of this if we get canonical closures for methods. |
| -EventListener _onErrorClosure; |
| +/** Whether this is run within dartium layout tests. */ |
| +bool _isLayoutTest = false; |
| -_platformInitialize() { |
| - _onErrorClosure = (e) { _onError(e); }; |
| +void forLayoutTests() { |
| + _isLayoutTest = true; |
| } |
| -_platformDefer(void callback()) { |
| - window.setTimeout(callback, 0); |
| -} |
| +class PlatformConfiguration extends Configuration { |
|
Bob Nystrom
2012/04/10 20:04:25
"DomConfiguration".
Siggi Cherem (dart-lang)
2012/04/10 21:40:18
Unfortunately for now it has to be [PlatformConfig
|
| + // TODO(rnystrom): Get rid of this if we get canonical closures for methods. |
| + EventListener _onErrorClosure; |
| -void _onError(e) { |
| - if (_currentTest < _tests.length) { |
| - final testCase = _tests[_currentTest]; |
| - // TODO(vsm): figure out how to expose the stack trace here |
| - // Currently e.message works in dartium, but not in dartc. |
| - testCase.error('(DOM callback has errors) Caught ${e}', ''); |
| - _state = _UNCAUGHT_ERROR; |
| - if (testCase.callbacks > 0) { |
| - _currentTest++; |
| - _testRunner(); |
| - } |
| + void onInit() { |
| + _onErrorClosure = (e) { _onError(e); }; |
| } |
| -} |
| - |
| -/** Runs all queued tests, one at a time. */ |
| -_platformStartTests() { |
| - window.postMessage('unittest-suite-wait-for-done', '*'); |
| - |
| - // Listen for uncaught errors. |
| - window.addEventListener('error', _onErrorClosure, true); |
| -} |
| - |
| -_platformCompleteTests(int testsPassed, int testsFailed, int testsErrors) { |
| - window.removeEventListener('error', _onErrorClosure); |
| - if (_isLayoutTest && testsPassed == _tests.length) { |
| - document.body.innerHTML = "PASS"; |
| - } else { |
| - var newBody = new StringBuffer(); |
| - newBody.add("<table class='unittest-table'><tbody>"); |
| - newBody.add(testsPassed == _tests.length |
| - ? "<tr><td colspan='3' class='unittest-pass'>PASS</td></tr>" |
| - : "<tr><td colspan='3' class='unittest-fail'>FAIL</td></tr>"); |
| - |
| - for (final test_ in _tests) { |
| - newBody.add(_toHtml(test_)); |
| - } |
| - |
| - if (testsPassed == _tests.length) { |
| - newBody.add(""" |
| - <tr><td colspan='3' class='unittest-pass'> |
| - All ${testsPassed} tests passed |
| - </td></tr>"""); |
| - } else { |
| - newBody.add(""" |
| - <tr><td colspan='3'>Total |
| - <span class='unittest-pass'>${testsPassed} passed</span>, |
| - <span class='unittest-fail'>${testsFailed} failed</span> |
| - <span class='unittest-error'>${testsErrors} errors</span> |
| - </td></tr>"""); |
| + void _onError(e) { |
| + if (_currentTest < _tests.length) { |
| + final testCase = _tests[_currentTest]; |
| + // TODO(vsm): figure out how to expose the stack trace here |
| + // Currently e.message works in dartium, but not in dartc. |
| + testCase.error('(DOM callback has errors) Caught ${e}', ''); |
| + _state = _UNCAUGHT_ERROR; |
| + if (testCase.callbacks > 0) { |
| + _currentTest++; |
| + _testRunner(); |
| + } |
| } |
| - newBody.add("</tbody></table>"); |
| - document.body.innerHTML = newBody.toString(); |
| } |
| - window.postMessage('unittest-suite-done', '*'); |
| -} |
| - |
| -String _toHtml(TestCase test_) { |
| - if (!test_.isComplete) { |
| - return ''' |
| - <tr> |
| - <td>${test_.id}</td> |
| - <td class="unittest-error">NO STATUS</td> |
| - <td>Test did not complete</td> |
| - </tr>'''; |
| + void onStart() { |
| + window.postMessage('unittest-suite-wait-for-done', '*'); |
| + // Listen for uncaught errors. |
| + window.addEventListener('error', _onErrorClosure, true); |
| } |
| - var html = ''' |
| - <tr> |
| - <td>${test_.id}</td> |
| - <td class="unittest-${test_.result}">${test_.result.toUpperCase()}</td> |
| - <td>Expectation: ${test_.description}. ${_htmlEscape(test_.message)}</td> |
| - </tr>'''; |
| + void onTestResult(TestCase testCase) {} |
| - if (test_.stackTrace != null) { |
| - html += |
| - '<tr><td></td><td colspan="2"><pre>${_htmlEscape(test_.stackTrace)}</pre></td></tr>'; |
| + onDone(int testsPassed, int testsFailed, int testsErrors, |
| + List<TestCase> results) { |
| + window.removeEventListener('error', _onErrorClosure); |
| + _showResultsInPage( |
| + testsPassed, testsFailed, testsErrors, results, _isLayoutTest); |
| + window.postMessage('unittest-suite-done', '*'); |
| } |
| - |
| - return html; |
| } |
| - |
| -//TODO(pquitslund): Move to a common lib |
| -String _htmlEscape(String string) { |
| - return string.replaceAll('&', '&') |
| - .replaceAll('<','<') |
| - .replaceAll('>','>'); |
| -} |