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

Side by Side Diff: tests/html/js_package_dom_test.dart

Issue 1583773003: Support JS$ prefix for dart and fix bug where _operator_getter and the [] operator were used incons… (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 11 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4
5 library js_package_dom_test;
6
7 import 'package:js/js.dart';
8 import 'package:unittest/unittest.dart';
9 import 'package:unittest/html_config.dart';
10 import 'package:unittest/html_individual_config.dart';
11 import 'simple_dom.dart' as dom;
12
13 import 'dart:html' as html;
14 import 'dart:js' as js;
15
16 @JS()
17 @anonymous
18 class ExampleLiteral {
19 external factory ExampleLiteral({a, b});
20 external get a;
21 external get b;
22 }
23
24 main() {
25 useHtmlIndividualConfiguration();
26
27 group('no wrappers', () {
28 test('simple', () {
29 expect(identical(html.window, dom.window), isTrue);
30 });
31 });
32
33 group('type checks', () {
34 test('simple', () {
35 expect(dom.window is html.Window, isTrue);
36 expect(dom.window is js.JsObject, isFalse);
37
38 expect(dom.window.document is html.Document, isTrue);
39 expect(dom.window.document is js.JsObject, isFalse);
40 expect(dom.window.document.JS$addEventListener is Function, isTrue);
41 });
42 });
43
44 group('expando', () {
45 test('simple', () {
46 dom.window.document.exampleNodeExpando = 42;
47 expect(dom.window.document.exampleNodeExpando, equals(42));
48
49 expect((html.window.document as dynamic).exampleNodeExpando, equals(42));
50
51 // Not an actual expando specified in simple_dom.dart.
52 expect(() => (dom.window.document as dynamic).exampleInvalidNodeExpando, t hrows);
53 });
54 });
55
56 group('event listener', () {
57 test('allowInterop dom', () {
58 var eventType = 'dummyEvent';
59 dom.Event e = new dom.Event(eventType);
60 var listenerCalls = 0;
61 eventListener(dom.Event event) {
62 expect(event.type, equals(eventType));
63 listenerCalls++;
64 }
65
66 var eventListenerCaptureThisCalls = 0;
67 eventListenerCaptureThis(dom.Node that, dom.Event event) {
68 print(that);
69 expect(identical(that, dom.document), isTrue);
70 expect(event.type, equals(eventType));
71 eventListenerCaptureThisCalls++;
72 }
73
74 var interopListener = allowInterop(eventListener);
75 dom.document.JS$addEventListener(eventType, interopListener);
76
77 var interopListenerCaptureThis = allowInteropCaptureThis(eventListenerCapt ureThis);
78 dom.document.JS$addEventListener(eventType, interopListenerCaptureThis);
79
80 dom.document.dispatchEvent(e);
81
82 expect(listenerCalls, equals(1));
83 expect(eventListenerCaptureThisCalls, equals(1));
84
85 dom.document.dispatchEvent(new dom.Event(eventType));
86
87 expect(listenerCalls, equals(2));
88 expect(eventListenerCaptureThisCalls, equals(2));
89
90 // Verify that event listeners can be removed.
91 dom.document.JS$removeEventListener(eventType, interopListener);
92 dom.document.JS$removeEventListener(eventType, interopListenerCaptureThis) ;
93 dom.document.dispatchEvent(new dom.Event(eventType));
94
95 expect(eventListenerCaptureThisCalls, equals(2));
96 expect(listenerCalls, equals(2));
97 });
98
99 // This test is identical to the previous test except we intentionally call
100 // addEventlistener instead of JS$addEventListener so that we fall back to
101 // the dart:html version. This verifies the two versions are compatible.
102 test('allowInterop html', () {
103 var eventType = 'dummyEvent';
104 dom.Event e = new dom.Event(eventType);
105 var listenerCalls = 0;
106 eventListener(dom.Event event) {
107 expect(event.type, equals(eventType));
108 listenerCalls++;
109 }
110
111 var eventListenerCaptureThisCalls = 0;
112 eventListenerCaptureThis(dom.Node that, dom.Event event) {
113 expect(identical(that, dom.document), isTrue);
114 expect(event.type, equals(eventType));
115 eventListenerCaptureThisCalls++;
116 }
117
118 var interopListener = allowInterop(eventListener);
119 dom.document.addEventListener(eventType, interopListener);
120
121 var interopListenerCaptureThis = allowInteropCaptureThis(eventListenerCapt ureThis);
122 dom.document.addEventListener(eventType, interopListenerCaptureThis);
123
124 dom.document.dispatchEvent(e);
125
126 expect(listenerCalls, equals(1));
127 expect(eventListenerCaptureThisCalls, equals(1));
128
129 dom.document.dispatchEvent(new dom.Event(eventType));
130
131 expect(listenerCalls, equals(2));
132 expect(eventListenerCaptureThisCalls, equals(2));
133
134 // Verify that dom removeEventLister is compatible with dart:html
135 // addEventlistener.
136 dom.document.JS$removeEventListener(eventType, interopListener);
137 dom.document.JS$removeEventListener(eventType, interopListenerCaptureThis) ;
138 dom.document.dispatchEvent(new dom.Event(eventType));
139
140 expect(eventListenerCaptureThisCalls, equals(2));
141 expect(listenerCalls, equals(2));
142 });
143 });
144
145 group('dartium', () {
146 test('type checks', () {
147 expect(dom.window is dom.Window, isTrue);
148 expect(dom.window.document is dom.Document, isTrue);
149 });
150 // These tests only pass in Dartium as the checks to make them pass in
151 // dart2js could not be implemented efficiently.
152 test('forgot allowIntero', () {
153 var eventListener = (event) => true;
154 expect(() => dom.document.exampleNodeExpando = eventListener, throws);
155 expect(() => dom.document.JS$addEventListener('foo', eventListener), throw s);
156 // Test that forgetting to call allowInterop is caught for top level
157 // methods.
158 expect(() => dom.documentAddEventListener('foo', eventListener), throws);
159
160 // Test that it is caught for object literal constructors
161 expect(() => new ExampleLiteral(a: "foo", b: eventListener), throws);
162
163 // This does not throw as this actually invokes the dart:html version as
164 // dart:html wins naming conflicts with JS interop.
165 dom.document.addEventListener('foo', eventListener);
166 });
167 });
168 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698