Chromium Code Reviews| 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..0bca5e7295c1e18176e2136fb7a2a0e8e9ead9a9 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 for that can be used to load |
|
Johnni Winther
2014/10/10 10:28:56
'for that' -> 'that'.
ahe
2014/10/13 11:47:35
Done.
|
| +/// 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 = message; |
| + 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); |
| + } |
| } |