| Index: pkg/unittest/lib/test_controller.js
 | 
| diff --git a/pkg/unittest/lib/test_controller.js b/pkg/unittest/lib/test_controller.js
 | 
| deleted file mode 100644
 | 
| index 8a62d6aecd0ba2679cacd864bd8fe505171cc2b2..0000000000000000000000000000000000000000
 | 
| --- a/pkg/unittest/lib/test_controller.js
 | 
| +++ /dev/null
 | 
| @@ -1,233 +0,0 @@
 | 
| -// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
 | 
| -// for details. All rights reserved. Use of this source code is governed by a
 | 
| -// BSD-style license that can be found in the LICENSE file.
 | 
| -
 | 
| -/**
 | 
| - * Test controller logic - used by unit test harness to embed tests in
 | 
| - * conent shell.
 | 
| - */
 | 
| -
 | 
| -// Clear the console before every test run - this is Firebug specific code.
 | 
| -if (typeof console == "object" && typeof console.clear == "function") {
 | 
| -  console.clear();
 | 
| -}
 | 
| -
 | 
| -// Some tests may expect and have no way to suppress global errors.
 | 
| -var testExpectsGlobalError = false;
 | 
| -var testSuppressedGlobalErrors = [];
 | 
| -
 | 
| -// Set window onerror to make sure that we catch test harness errors across all
 | 
| -// browsers.
 | 
| -window.onerror = function (message, url, lineNumber) {
 | 
| -  if (testExpectsGlobalError) {
 | 
| -    testSuppressedGlobalErrors.push({
 | 
| -      message: message
 | 
| -    });
 | 
| -    return;
 | 
| -  }
 | 
| -  if (url) {
 | 
| -    showErrorAndExit(
 | 
| -        "\n\n" + url + ":" + lineNumber + ":\n" + message + "\n\n");
 | 
| -  } else {
 | 
| -    showErrorAndExit(message);
 | 
| -  }
 | 
| -  window.postMessage('unittest-suite-external-error', '*');
 | 
| -};
 | 
| -
 | 
| -// Start Dartium/content_shell, unless we are waiting for HTML Imports to load.
 | 
| -// HTML Imports allows a document to link to other HTMLs documents via
 | 
| -// <link rel=import>. It also allows for those other documents to contain
 | 
| -// <script> tags, which must be run before scripts on the main page.
 | 
| -// We have package:web_components to polyfill this feature, and it will handle
 | 
| -// starting Dartium/content_shell in that case. HTML Imports is used by Polymer,
 | 
| -// but it could be used by itself too. See the specification:
 | 
| -// https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/imports/index.html
 | 
| -if (navigator.webkitStartDart && !window.HTMLImports) {
 | 
| -  navigator.webkitStartDart();
 | 
| -}
 | 
| -
 | 
| -// testRunner is provided by content shell.
 | 
| -// It is not available in browser tests.
 | 
| -var testRunner = window.testRunner || window.layoutTestController;
 | 
| -
 | 
| -var waitForDone = false;
 | 
| -
 | 
| -// Returns the driving window object if available
 | 
| -function getDriverWindow() {
 | 
| -  if (window != window.parent) {
 | 
| -    // We're running in an iframe.
 | 
| -    return window.parent;
 | 
| -  } else if (window.opener) {
 | 
| -    // We were opened by another window.
 | 
| -    return window.opener;
 | 
| -  }
 | 
| -  return null;
 | 
| -}
 | 
| -
 | 
| -function notifyStart() {
 | 
| -  var driver = getDriverWindow();
 | 
| -  if (driver) {
 | 
| -    driver.postMessage("STARTING", "*");
 | 
| -  }
 | 
| -}
 | 
| -// We call notifyStart here to notify the encapsulating browser.
 | 
| -notifyStart();
 | 
| -
 | 
| -function notifyDone() {
 | 
| -  if (testRunner) testRunner.notifyDone();
 | 
| -
 | 
| -  // TODO(ricow): REMOVE, debug info, see issue 13292
 | 
| -  if (!testRunner) {
 | 
| -    printMessage('Calling notifyDone()');
 | 
| -  }
 | 
| -  // To support in browser launching of tests we post back start and result
 | 
| -  // messages to the window.opener.
 | 
| -  var driver = getDriverWindow();
 | 
| -  if (driver) {
 | 
| -    driver.postMessage(window.document.body.innerHTML, "*");
 | 
| -  }
 | 
| -}
 | 
| -
 | 
| -function processMessage(msg) {
 | 
| -  if (typeof msg != 'string') return;
 | 
| -  // TODO(ricow): REMOVE, debug info, see issue 13292
 | 
| -  if (!testRunner) {
 | 
| -    // Filter out ShadowDOM polyfill messages which are random floats.
 | 
| -    if (msg != parseFloat(msg)) {
 | 
| -      printMessage('processMessage(): ' + msg);
 | 
| -    }
 | 
| -  }
 | 
| -  if (msg == 'unittest-suite-done') {
 | 
| -    notifyDone();
 | 
| -  } else if (msg == 'unittest-suite-wait-for-done') {
 | 
| -    waitForDone = true;
 | 
| -    if (testRunner) {
 | 
| -      testRunner.startedDartTest = true;
 | 
| -    }
 | 
| -  } else if (msg == 'dart-calling-main') {
 | 
| -    if (testRunner) {
 | 
| -      testRunner.startedDartTest = true;
 | 
| -    }
 | 
| -  } else if (msg == 'dart-main-done') {
 | 
| -    if (!waitForDone) {
 | 
| -      printMessage('PASS');
 | 
| -      notifyDone();
 | 
| -    }
 | 
| -  } else if (msg == 'unittest-suite-success') {
 | 
| -    printMessage('PASS');
 | 
| -    notifyDone();
 | 
| -  } else if (msg == 'unittest-suite-fail') {
 | 
| -    showErrorAndExit('Some tests failed.');
 | 
| -  }
 | 
| -}
 | 
| -
 | 
| -function onReceive(e) {
 | 
| -  processMessage(e.data);
 | 
| -}
 | 
| -
 | 
| -if (testRunner) {
 | 
| -  testRunner.dumpAsText();
 | 
| -  testRunner.waitUntilDone();
 | 
| -}
 | 
| -window.addEventListener("message", onReceive, false);
 | 
| -
 | 
| -function showErrorAndExit(message) {
 | 
| -  if (message) {
 | 
| -    printMessage('Error: ' + String(message));
 | 
| -  }
 | 
| -  // dart/tools/testing/test_runner.dart is looking for either PASS or
 | 
| -  // FAIL in a browser test's output.
 | 
| -  printMessage('FAIL');
 | 
| -  notifyDone();
 | 
| -}
 | 
| -
 | 
| -function onLoad(e) {
 | 
| -  // needed for dartium compilation errors.
 | 
| -  if (window.compilationError) {
 | 
| -    showErrorAndExit(window.compilationError);
 | 
| -  }
 | 
| -}
 | 
| -
 | 
| -window.addEventListener("DOMContentLoaded", onLoad, false);
 | 
| -
 | 
| -// Note: before renaming this function, note that it is also included in an
 | 
| -// inlined error handler in the HTML files that wrap DRT tests.
 | 
| -// See: tools/testing/dart/browser_test.dart
 | 
| -function externalError(e) {
 | 
| -  // needed for dartium compilation errors.
 | 
| -  showErrorAndExit(e && e.message);
 | 
| -  window.postMessage('unittest-suite-external-error', '*');
 | 
| -}
 | 
| -
 | 
| -document.addEventListener('readystatechange', function () {
 | 
| -  if (document.readyState != "loaded") return;
 | 
| -  // If 'startedDartTest' is not set, that means that the test did not have
 | 
| -  // a chance to load. This will happen when a load error occurs in the VM.
 | 
| -  // Give the machine time to start up.
 | 
| -  setTimeout(function() {
 | 
| -    // A window.postMessage might have been enqueued after this timeout.
 | 
| -    // Just sleep another time to give the browser the time to process the
 | 
| -    // posted message.
 | 
| -    setTimeout(function() {
 | 
| -      if (testRunner && !testRunner.startedDartTest) {
 | 
| -        notifyDone();
 | 
| -      }
 | 
| -    }, 0);
 | 
| -  }, 50);
 | 
| -});
 | 
| -
 | 
| -// dart2js will generate code to call this function to handle the Dart
 | 
| -// [print] method.
 | 
| -//
 | 
| -// dartium will invoke this method for [print] calls if the environment variable
 | 
| -// "DART_FORWARDING_PRINT" was set when launching dartium.
 | 
| -//
 | 
| -// Our tests will be wrapped, so we can detect when [main] is called and when
 | 
| -// it has ended.
 | 
| -// The wrapping happens either via "dartMainRunner" (for dart2js) or wrapped
 | 
| -// tests for dartium.
 | 
| -//
 | 
| -// The following messages are handled specially:
 | 
| -//   dart-calling-main:  signals that the dart [main] function will be invoked
 | 
| -//   dart-main-done:  signals that the dart [main] function has finished
 | 
| -//   unittest-suite-wait-for-done:  signals the start of an asynchronous test
 | 
| -//   unittest-suite-success:  signals the end of an asynchrounous test
 | 
| -//
 | 
| -// These messages are used to communicate with the test and will be posted so
 | 
| -// [processMessage] above can see it.
 | 
| -function dartPrint(msg) {
 | 
| -  if ((msg === 'unittest-suite-success')
 | 
| -      || (msg === 'unittest-suite-done')
 | 
| -      || (msg === 'unittest-suite-wait-for-done')
 | 
| -      || (msg === 'dart-calling-main')
 | 
| -      || (msg === 'dart-main-done')) {
 | 
| -    window.postMessage(msg, '*');
 | 
| -    return;
 | 
| -  }
 | 
| -  printMessage(msg);
 | 
| -}
 | 
| -
 | 
| -// Prints 'msg' to the console (if available) and to the body of the html
 | 
| -// document.
 | 
| -function printMessage(msg) {
 | 
| -  if (typeof console === 'object') console.warn(msg);
 | 
| -  var pre = document.createElement('pre');
 | 
| -  pre.appendChild(document.createTextNode(String(msg)));
 | 
| -  document.body.appendChild(pre);
 | 
| -  document.body.appendChild(document.createTextNode('\n'));
 | 
| -}
 | 
| -
 | 
| -// dart2js will generate code to call this function instead of calling
 | 
| -// Dart [main] directly. The argument is a closure that invokes main.
 | 
| -function dartMainRunner(main) {
 | 
| -  dartPrint('dart-calling-main');
 | 
| -  try {
 | 
| -    main();
 | 
| -  } catch (e) {
 | 
| -    dartPrint(e);
 | 
| -    if (e.stack) dartPrint(e.stack);
 | 
| -    window.postMessage('unittest-suite-fail', '*');
 | 
| -    return;
 | 
| -  }
 | 
| -  dartPrint('dart-main-done');
 | 
| -}
 | 
| 
 |