Index: test/codegen/lib/html/event_customevent_test.dart |
diff --git a/test/codegen/lib/html/event_customevent_test.dart b/test/codegen/lib/html/event_customevent_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..cbda1a78774b416d7a8077e4240853307d7d704f |
--- /dev/null |
+++ b/test/codegen/lib/html/event_customevent_test.dart |
@@ -0,0 +1,86 @@ |
+// 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 EventCustomEventTest; |
+ |
+import 'package:unittest/unittest.dart'; |
+import 'package:unittest/html_config.dart'; |
+import 'dart:html'; |
+import 'dart:js' as js; |
+ |
+class DartPayloadData { |
+ final dartValue; |
+ |
+ DartPayloadData(this.dartValue); |
+} |
+ |
+main() { |
+ useHtmlConfiguration(); |
+ |
+ test('custom events', () { |
+ var provider = new EventStreamProvider<CustomEvent>('foo'); |
+ var el = new DivElement(); |
+ |
+ var fired = false; |
+ provider.forTarget(el).listen((ev) { |
+ fired = true; |
+ expect(ev.detail, {'type': 'detail'}); |
+ }); |
+ |
+ var ev = new CustomEvent('foo', canBubble: false, cancelable: false, |
+ detail: {'type': 'detail'}); |
+ el.dispatchEvent(ev); |
+ expect(fired, isTrue); |
+ }); |
+ |
+ test('custom events from JS', () { |
+ var scriptContents = ''' |
+ var event = document.createEvent("CustomEvent"); |
+ event.initCustomEvent("js_custom_event", true, true, {type: "detail"}); |
+ window.dispatchEvent(event); |
+ '''; |
+ |
+ var fired = false; |
+ window.on['js_custom_event'].listen((ev) { |
+ fired = true; |
+ expect(ev.detail, {'type': 'detail'}); |
+ }); |
+ |
+ var script = new ScriptElement(); |
+ script.text = scriptContents; |
+ document.body.append(script); |
+ |
+ expect(fired, isTrue); |
+ }); |
+ |
+ test('custom events to JS', () { |
+ expect(js.context['gotDartEvent'], isNull); |
+ var scriptContents = ''' |
+ window.addEventListener('dart_custom_event', function(e) { |
+ if (e.detail == 'dart_message') { |
+ e.preventDefault(); |
+ window.gotDartEvent = true; |
+ } |
+ window.console.log('here' + e.detail); |
+ }, false);'''; |
+ |
+ document.body.append(new ScriptElement()..text = scriptContents); |
+ |
+ var event = new CustomEvent('dart_custom_event', detail: 'dart_message'); |
+ window.dispatchEvent(event); |
+ expect(js.context['gotDartEvent'], isTrue); |
+ }); |
+ |
+ test('custom data to Dart', () { |
+ var data = new DartPayloadData(666); |
+ var event = new CustomEvent('dart_custom_data_event', detail: data); |
+ |
+ var future = window.on['dart_custom_data_event'].first.then((_) { |
+ expect(event.detail.dartValue, 666); |
+ }); |
+ |
+ document.body.dispatchEvent(event); |
+ return future; |
+ }); |
+} |