| // 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:async_helper/async_minitest.dart'; |
| import 'dart:html'; |
| import 'dart:js' as js; |
| |
| class DartPayloadData { |
| final dartValue; |
| |
| DartPayloadData(this.dartValue); |
| } |
| |
| main() { |
| 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 as CustomEvent).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; |
| }); |
| } |