Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(626)

Unified Diff: tests/html/postmessage_structured_test.dart

Issue 11065003: Convert between Dart and JavaScript SerializedScriptValues on postMessage. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « lib/html/src/dart2js_Conversions.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/html/postmessage_structured_test.dart
diff --git a/tests/html/postmessage_structured_test.dart b/tests/html/postmessage_structured_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..6fd7beb3da53ebc2d49c44372c3ca225be217fb9
--- /dev/null
+++ b/tests/html/postmessage_structured_test.dart
@@ -0,0 +1,140 @@
+// Copyright (c) 2012, 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
+
+#library('postmessage_js_test');
+#import('../../pkg/unittest/unittest.dart');
+#import('../../pkg/unittest/html_config.dart');
+#import('dart:html');
+#import('dart:coreimpl'); // SplayTreeMap
+#import('utils.dart');
+
+injectSource(code) {
+ final script = new ScriptElement();
+ script.type = 'text/javascript';
+ script.innerHTML = code;
+ document.body.nodes.add(script);
+}
+
+main() {
+ useHtmlConfiguration();
+
+ test('js-to-dart-postmessage', () {
+ // Pass an object literal from JavaScript. It should be seen as a Dart
+ // Map.
+
+ final JS_CODE = """
+ window.postMessage({eggs: 3}, '*');
+ """;
+ var callback;
+ var onSuccess = expectAsync1((e) {
+ window.on.message.remove(callback);
+ });
+ callback = (e) {
+ guardAsync(() {
+ var data = e.data;
+ if (data is String) return; // Messages from unit test protocol.
+ expect(data is Map);
+ expect(data['eggs'], equals(3));
+ onSuccess(e);
+ });
+ };
+ window.on.message.add(callback);
+ injectSource(JS_CODE);
+ });
+
+ test('dart-to-js-to-dart-postmessage', () {
+ // Pass dictionaries between Dart and JavaScript.
+
+ final JS_CODE = """
+ window.addEventListener('message', handler);
+ function handler(e) {
+ var data = e.data;
+ if (typeof data == 'string') return;
+ if (data.recipient != 'JS') return;
+ var response = {recipient: 'DART'};
+ response[data['curry']] = 50;
+ window.removeEventListener('message', handler);
+ window.postMessage(response, '*');
+ }
+ """;
+ var callback;
+ var onSuccess = expectAsync1((e) {
+ window.on.message.remove(callback);
+ });
+ callback = (e) {
+ guardAsync(() {
+ var data = e.data;
+ if (data is String) return; // Messages from unit test protocol.
+ expect(data is Map);
+ if (data['recipient'] != 'DART') return; // Hearing the sent message.
+ expect(data['peas'], equals(50));
+ onSuccess(e);
+ });
+ };
+ window.on.message.add(callback);
+ injectSource(JS_CODE);
+ window.postMessage({'recipient': 'JS', 'curry': 'peas'}, '*');
+ });
+
+ go(testName, value) =>
+ test(testName, () {
+ // Round-trip graph from Dart to JavaScript and back.
+
+ final JS_CODE = """
+ window.addEventListener('message', handler);
+ function handler(e) {
+ var data = e.data;
+ if (typeof data == 'string') return;
+ if (data.recipient != 'JS') return;
+ window.console.log(data.data);
+ var response = {recipient: 'DART', data: data.data};
+ window.removeEventListener('message', handler);
+ window.postMessage(response, '*');
+ }
+ """;
+ var onSuccess = expectAsync0(() {});
+ callback(e) {
+ guardAsync(() {
+ var data = e.data;
+ if (data is String) return; // Messages from unit test protocol.
+ expect(data is Map);
+ if (data['recipient'] != 'DART') return; // Not for me.
+ var returnedValue = data['data'];
+
+ window.on.message.remove(callback);
+ expect(returnedValue, isNot(same(value)));
+ verifyGraph(value, returnedValue);
+ onSuccess();
+ });
+ };
+ window.on.message.add(callback);
+ injectSource(JS_CODE);
+ window.postMessage({'recipient': 'JS', 'data': value}, '*');
+ });
+
+ var obj1 = {'a': 100, 'b': 's'};
+ var obj2 = {'x': obj1, 'y': obj1}; // DAG.
+
+ var obj3 = {};
+ obj3['a'] = 100;
+ obj3['b'] = obj3; // Cycle.
+
+ var obj4 = new SplayTreeMap<String, Dynamic>(); // Different implementation.
+ obj4['a'] = 100;
+ obj4['b'] = 's';
+
+ var cyclic_list = [1, 2, 3];
+ cyclic_list[1] = cyclic_list;
+
+ go('test_simple_list', [1, 2, 3]);
+ go('test_map', obj1);
+ go('test_DAG', obj2);
+ go('test_cycle', obj3);
+ go('test_simple_splay', obj4);
+ go('const_array_1', const [const [1], const [2]]);
+ go('const_array_dag', const [const [1], const [1]]);
+ go('array_deferred_copy', [1,2,3, obj3, obj3, 6]);
+ go('array_deferred_copy_2', [1,2,3, [4, 5, obj3], [obj3, 6]]);
+ go('cyclic_list', cyclic_list);
+}
« no previous file with comments | « lib/html/src/dart2js_Conversions.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698