| 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; | 
|  |