Index: pkg/unittest/lib/html_config.dart |
=================================================================== |
--- pkg/unittest/lib/html_config.dart (revision 0) |
+++ pkg/unittest/lib/html_config.dart (working copy) |
@@ -5,13 +5,85 @@ |
/** |
* A simple unit test library for running tests in a browser. |
*/ |
-#library('unittest_html_config'); |
+library unittest_html_config; |
-#import('dart:html'); |
-#import('unittest.dart'); |
+import 'dart:html'; |
+import 'unittest.dart'; |
-#source('html_print.dart'); |
+/** Creates a table showing tests results in HTML. */ |
+void _showResultsInPage(int passed, int failed, int errors, |
+ List<TestCase> results, bool isLayoutTest, String uncaughtError) { |
+ if (isLayoutTest && (passed == results.length) && uncaughtError == null) { |
+ document.body.innerHTML = "PASS"; |
+ } else { |
+ var newBody = new StringBuffer(); |
+ newBody.add("<table class='unittest-table'><tbody>"); |
+ newBody.add(passed == results.length && uncaughtError == null |
+ ? "<tr><td colspan='3' class='unittest-pass'>PASS</td></tr>" |
+ : "<tr><td colspan='3' class='unittest-fail'>FAIL</td></tr>"); |
+ for (final test_ in results) { |
+ newBody.add(_toHtml(test_)); |
+ } |
+ |
+ if (uncaughtError != null) { |
+ newBody.add('''<tr> |
+ <td>--</td> |
+ <td class="unittest-error">ERROR</td> |
+ <td>Uncaught error: $uncaughtError</td> |
+ </tr>'''); |
+ } |
+ |
+ if (passed == results.length && uncaughtError == null) { |
+ newBody.add(""" |
+ <tr><td colspan='3' class='unittest-pass'> |
+ All ${passed} tests passed |
+ </td></tr>"""); |
+ } else { |
+ newBody.add(""" |
+ <tr><td colspan='3'>Total |
+ <span class='unittest-pass'>${passed} passed</span>, |
+ <span class='unittest-fail'>${failed} failed</span> |
+ <span class='unittest-error'> |
+ ${errors + (uncaughtError == null ? 0 : 1)} errors</span> |
+ </td></tr>"""); |
+ } |
+ newBody.add("</tbody></table>"); |
+ document.body.innerHTML = newBody.toString(); |
+ } |
+} |
+ |
+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>'''; |
+ } |
+ |
+ 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>'''; |
+ |
+ if (test_.stackTrace != null) { |
+ html = '$html<tr><td></td><td colspan="2"><pre>${_htmlEscape(test_.stackTrace)}</pre></td></tr>'; |
+ } |
+ |
+ return html; |
+} |
+ |
+//TODO(pquitslund): Move to a common lib |
+String _htmlEscape(String string) { |
+ return string.replaceAll('&', '&') |
+ .replaceAll('<','<') |
+ .replaceAll('>','>'); |
+} |
+ |
class HtmlConfiguration extends Configuration { |
/** Whether this is run within dartium layout tests. */ |
final bool _isLayoutTest; |