| Index: dart/tests/try/web/sandbox.dart
|
| diff --git a/dart/tests/try/web/end_to_end_test.dart b/dart/tests/try/web/sandbox.dart
|
| similarity index 59%
|
| copy from dart/tests/try/web/end_to_end_test.dart
|
| copy to dart/tests/try/web/sandbox.dart
|
| index bffbd8e5d840cb1dd5c29273dab311ff9c0498e6..e11567c945d00b696f27cfda274e7b2483503f25 100644
|
| --- a/dart/tests/try/web/end_to_end_test.dart
|
| +++ b/dart/tests/try/web/sandbox.dart
|
| @@ -2,14 +2,9 @@
|
| // 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.
|
|
|
| -/// Whitebox integration/end-to-end test of Try Dart! site.
|
| -///
|
| -/// This test opens Try Dart! in an iframe. When opened the first time, Try
|
| -/// Dart! will display a simple hello-world example, color tokens, compile the
|
| -/// example, and run the result. We've instrumented Try Dart! to use
|
| -/// window.parent.postMessage when the running program prints anything. So this
|
| -/// test just waits for a "Hello, World!" message.
|
| -library trydart.end_to_end_test;
|
| +/// Helper library that creates an iframe sandbox that can be used to load
|
| +/// code.
|
| +library trydart.test.sandbox;
|
|
|
| import 'dart:html';
|
| import 'dart:async';
|
| @@ -17,7 +12,10 @@ import 'dart:async';
|
| // TODO(ahe): Remove this import if issue 17936 is fixed.
|
| import 'dart:js' as hack;
|
|
|
| -import 'package:async_helper/async_helper.dart';
|
| +import 'package:expect/expect.dart' show
|
| + Expect;
|
| +
|
| +final Listener listener = new Listener();
|
|
|
| void onError(String message, String filename, int lineno, [int colno, error]) {
|
| if (filename != null && filename != "" && lineno != 0) {
|
| @@ -35,7 +33,7 @@ void onError(String message, String filename, int lineno, [int colno, error]) {
|
| message += '\n$stack';
|
| }
|
| }
|
| - message = "Error occurred in Try Dart iframe: $message";
|
| + message = "Error occurred in iframe: $message";
|
|
|
| // Synchronous, easier to read when running the browser manually.
|
| window.console.log(message);
|
| @@ -68,46 +66,57 @@ void onIframeLoaded(Event event) {
|
| installErrorHandlerOn(event.target);
|
| }
|
|
|
| -void main() {
|
| - document.cookie = 'org-trydart-AutomatedTest=true;path=/';
|
| - asyncStart();
|
| - window.onMessage.listen((MessageEvent e) {
|
| - switch (e.data) {
|
| - case 'Hello, World!\n':
|
| - // Clear the DOM to work around a bug in test.dart.
|
| - document.body.nodes.clear();
|
| -
|
| - // Clean up after ourselves.
|
| - window.localStorage.clear();
|
| -
|
| - asyncEnd();
|
| - break;
|
| -
|
| - case 'dart-calling-main':
|
| - case 'dart-main-done':
|
| - case 'unittest-suite-done':
|
| - case 'unittest-suite-fail':
|
| - case 'unittest-suite-success':
|
| - case 'unittest-suite-wait-for-done':
|
| - break;
|
| -
|
| - default:
|
| - throw 'Unexpected message: ${e.data}';
|
| - }
|
| - });
|
| -
|
| - // Clearing localStorage makes Try Dart! think it is opening for the first
|
| - // time.
|
| - window.localStorage.clear();
|
| -
|
| +IFrameElement appendIFrame(String src, Element element) {
|
| IFrameElement iframe = new IFrameElement()
|
| - ..src = '/root_build/try_dartlang_org/index.html'
|
| - ..style.width = '90vw'
|
| - ..style.height = '90vh'
|
| + ..src = src
|
| ..onLoad.listen(onIframeLoaded);
|
| - document.body.append(iframe);
|
| + element.append(iframe);
|
| // Install an error handler both on the new iframe element, and when it has
|
| // fired the load event. That seems to matter according to some sources on
|
| // stackoverflow.
|
| installErrorHandlerOn(iframe);
|
| + return iframe;
|
| +}
|
| +
|
| +class Listener {
|
| + Completer completer;
|
| +
|
| + String expectedMessage;
|
| +
|
| + void onMessage(MessageEvent e) {
|
| + String message = e.data;
|
| + if (expectedMessage == message) {
|
| + completer.complete();
|
| + } else {
|
| + switch (message) {
|
| + case 'dart-calling-main':
|
| + case 'dart-main-done':
|
| + case 'unittest-suite-done':
|
| + case 'unittest-suite-fail':
|
| + case 'unittest-suite-success':
|
| + case 'unittest-suite-wait-for-done':
|
| + break;
|
| +
|
| + default:
|
| + completer.completeError('Unexpected message: "$message".');
|
| + }
|
| + }
|
| + }
|
| +
|
| + Future expect(data) {
|
| + if (data is String) {
|
| + Expect.isTrue(completer == null || completer.isCompleted);
|
| + expectedMessage = data;
|
| + completer = new Completer();
|
| + return completer.future;
|
| + } else if (data is Iterable) {
|
| + return Future.forEach(data, expect);
|
| + } else {
|
| + throw 'Unexpected data type: ${data.runtimeType}.';
|
| + }
|
| + }
|
| +
|
| + void start() {
|
| + window.onMessage.listen(onMessage);
|
| + }
|
| }
|
|
|