| OLD | NEW | 
|---|
|  | (Empty) | 
| 1 // Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file |  | 
| 2 // for details. All rights reserved. Use of this source code is governed by a |  | 
| 3 // BSD-style license that can be found in the LICENSE file. |  | 
| 4 |  | 
| 5 /** |  | 
| 6  * A simple unit test library for running tests in a browser. |  | 
| 7  */ |  | 
| 8 #library("unittest"); |  | 
| 9 |  | 
| 10 #import("dart:dom"); |  | 
| 11 |  | 
| 12 #source("shared.dart"); |  | 
| 13 |  | 
| 14 // TODO(rnystrom): Get rid of this if we get canonical closures for methods. |  | 
| 15 EventListener _onErrorClosure; |  | 
| 16 |  | 
| 17 _platformInitialize() { |  | 
| 18   _onErrorClosure = (e) { _onError(e); }; |  | 
| 19 } |  | 
| 20 |  | 
| 21 _platformDefer(void callback()) { |  | 
| 22   window.setTimeout(callback, 0); |  | 
| 23 } |  | 
| 24 |  | 
| 25 void _onError(e) { |  | 
| 26  if (_currentTest < _tests.length) { |  | 
| 27     final testCase = _tests[_currentTest]; |  | 
| 28     // TODO(vsm): figure out how to expose the stack trace here |  | 
| 29     // Currently e.message works in dartium, but not in dartc. |  | 
| 30     testCase.error('(DOM callback has errors) Caught ${e}', ''); |  | 
| 31     _state = _UNCAUGHT_ERROR; |  | 
| 32     if (testCase.callbacks > 0) { |  | 
| 33       _currentTest++; |  | 
| 34       _testRunner(); |  | 
| 35     } |  | 
| 36   } |  | 
| 37 } |  | 
| 38 |  | 
| 39 /** Runs all queued tests, one at a time. */ |  | 
| 40 _platformStartTests() { |  | 
| 41   window.postMessage('unittest-suite-wait-for-done', '*'); |  | 
| 42 |  | 
| 43   // Listen for uncaught errors. |  | 
| 44   window.addEventListener('error', _onErrorClosure, true); |  | 
| 45 } |  | 
| 46 |  | 
| 47 _platformCompleteTests(int testsPassed, int testsFailed, int testsErrors) { |  | 
| 48   window.removeEventListener('error', _onErrorClosure); |  | 
| 49 |  | 
| 50   if (_isLayoutTest && testsPassed == _tests.length) { |  | 
| 51     document.body.innerHTML = "PASS"; |  | 
| 52   } else { |  | 
| 53     var newBody = new StringBuffer(); |  | 
| 54     newBody.add("<table class='unittest-table'><tbody>"); |  | 
| 55     newBody.add(testsPassed == _tests.length |  | 
| 56         ? "<tr><td colspan='3' class='unittest-pass'>PASS</td></tr>" |  | 
| 57         : "<tr><td colspan='3' class='unittest-fail'>FAIL</td></tr>"); |  | 
| 58 |  | 
| 59     for (final test_ in _tests) { |  | 
| 60       newBody.add(_toHtml(test_)); |  | 
| 61     } |  | 
| 62 |  | 
| 63     if (testsPassed == _tests.length) { |  | 
| 64       newBody.add("<tr><td colspan='3' class='unittest-pass'>All " |  | 
| 65           + testsPassed + " tests passed</td></tr>"); |  | 
| 66     } else { |  | 
| 67       newBody.add(""" |  | 
| 68           <tr><td colspan='3'>Total |  | 
| 69             <span class='unittest-pass'>${testsPassed} passed</span>, |  | 
| 70             <span class='unittest-fail'>${testsFailed} failed</span> |  | 
| 71             <span class='unittest-error'>${testsErrors} errors</span> |  | 
| 72           </td></tr>"""); |  | 
| 73     } |  | 
| 74     newBody.add("</tbody></table>"); |  | 
| 75     document.body.innerHTML = newBody.toString(); |  | 
| 76   } |  | 
| 77 |  | 
| 78   window.postMessage('unittest-suite-done', '*'); |  | 
| 79 } |  | 
| 80 |  | 
| 81 String _toHtml(TestCase test_) { |  | 
| 82   if (!test_.isComplete) { |  | 
| 83     return ''' |  | 
| 84         <tr> |  | 
| 85           <td>${test_.id}</td> |  | 
| 86           <td class="unittest-error">NO STATUS</td> |  | 
| 87           <td>Test did not complete</td> |  | 
| 88         </tr>'''; |  | 
| 89   } |  | 
| 90 |  | 
| 91   var html = ''' |  | 
| 92       <tr> |  | 
| 93         <td>${test_.id}</td> |  | 
| 94         <td class="unittest-${test_.result}">${test_.result.toUpperCase()}</td> |  | 
| 95         <td>Expectation: ${test_.description}. ${_htmlEscape(test_.message)}</td
     > |  | 
| 96       </tr>'''; |  | 
| 97 |  | 
| 98   if (test_.stackTrace != null) { |  | 
| 99     html += |  | 
| 100         '<tr><td></td><td colspan="2"><pre>${_htmlEscape(test_.stackTrace)}</pre
     ></td></tr>'; |  | 
| 101   } |  | 
| 102 |  | 
| 103   return html; |  | 
| 104 } |  | 
| 105 |  | 
| 106 //TODO(pquitslund): Move to a common lib |  | 
| 107 String _htmlEscape(String string) { |  | 
| 108   return string.replaceAll('&', '&') |  | 
| 109                .replaceAll('<','<') |  | 
| 110                .replaceAll('>','>'); |  | 
| 111 } |  | 
| OLD | NEW | 
|---|