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

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

Issue 12040059: Converting tests over to using event streams. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 10 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 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. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library ElementTest; 5 library ElementTest;
6 import '../../pkg/unittest/lib/unittest.dart'; 6 import '../../pkg/unittest/lib/unittest.dart';
7 import '../../pkg/unittest/lib/html_individual_config.dart'; 7 import '../../pkg/unittest/lib/html_individual_config.dart';
8 import 'dart:async';
8 import 'dart:html'; 9 import 'dart:html';
9 import 'dart:svg' as svg; 10 import 'dart:svg' as svg;
10 11
11 expectLargeRect(ClientRect rect) { 12 expectLargeRect(ClientRect rect) {
12 expect(rect.top, 0); 13 expect(rect.top, 0);
13 expect(rect.left, 0); 14 expect(rect.left, 0);
14 expect(rect.width, greaterThan(100)); 15 expect(rect.width, greaterThan(100));
15 expect(rect.height, greaterThan(100)); 16 expect(rect.height, greaterThan(100));
16 expect(rect.bottom, rect.top + rect.height); 17 expect(rect.bottom, rect.top + rect.height);
17 expect(rect.right, rect.left + rect.width); 18 expect(rect.right, rect.left + rect.width);
18 } 19 }
19 20
20 void testEventHelper(EventListenerList listenerList, String type,
21 [Function registerOnEventListener = null]) {
22 testMultipleEventHelper(listenerList, [type], registerOnEventListener);
23 }
24 // Allows testing where we polyfill different browsers firing different events.
25 void testMultipleEventHelper(EventListenerList listenerList, List<String> types,
26 [Function registerOnEventListener = null]) {
27 bool firedWhenAddedToListenerList = false;
28 bool firedOnEvent = false;
29 listenerList.add((e) {
30 firedWhenAddedToListenerList = true;
31 });
32 if (registerOnEventListener != null) {
33 registerOnEventListener((e) {
34 firedOnEvent = true;
35 });
36 }
37 for (var type in types) {
38 final event = new Event(type);
39 listenerList.dispatch(event);
40 }
41
42 expect(firedWhenAddedToListenerList, isTrue);
43 if (registerOnEventListener != null) {
44 expect(firedOnEvent, isTrue);
45 }
46 }
47
48 main() { 21 main() {
49 useHtmlIndividualConfiguration(); 22 useHtmlIndividualConfiguration();
50 23
51 var isHRElement = predicate((x) => x is HRElement, 'is a HRElement'); 24 var isHRElement = predicate((x) => x is HRElement, 'is a HRElement');
52 var isBRElement = predicate((x) => x is BRElement, 'is a BRElement'); 25 var isBRElement = predicate((x) => x is BRElement, 'is a BRElement');
53 var isInputElement = 26 var isInputElement =
54 predicate((x) => x is InputElement, 'is an InputElement'); 27 predicate((x) => x is InputElement, 'is an InputElement');
55 var isImageElement = 28 var isImageElement =
56 predicate((x) => x is ImageElement, 'is an ImageElement'); 29 predicate((x) => x is ImageElement, 'is an ImageElement');
57 var isSpanElement = predicate((x) => x is SpanElement, 'is a SpanElement'); 30 var isSpanElement = predicate((x) => x is SpanElement, 'is a SpanElement');
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 var node = new Element.html('<th>foobar'); 198 var node = new Element.html('<th>foobar');
226 expect(node, predicate((x) => x is TableCellElement, 199 expect(node, predicate((x) => x is TableCellElement,
227 'is a TableCellElement')); 200 'is a TableCellElement'));
228 expect(node.tagName, 'TH'); 201 expect(node.tagName, 'TH');
229 expect(node.parent, isNull); 202 expect(node.parent, isNull);
230 expect(node.innerHtml, 'foobar'); 203 expect(node.innerHtml, 'foobar');
231 }); 204 });
232 }); 205 });
233 206
234 group('eventListening', () { 207 group('eventListening', () {
235 test('eventListeners', () { 208 test('streams', () {
236 final element = new Element.tag('div'); 209 final target = new Element.tag('div');
237 final on = element.on;
238 210
239 testEventHelper(on.abort, 'abort', 211 void testEvent(Stream stream, String type) {
240 (listener) => Testing.addEventListener( 212 var firedOnEvent = false;
241 element, 'abort', listener, true)); 213 stream.listen((e) {
242 testEventHelper(on.beforeCopy, 'beforecopy', 214 firedOnEvent = true;
243 (listener) => Testing.addEventListener( 215 });
244 element, 'beforecopy', listener, true)); 216 expect(firedOnEvent, isFalse);
245 testEventHelper(on.beforeCut, 'beforecut', 217 var event = new Event(type);
246 (listener) => Testing.addEventListener( 218 target.dispatchEvent(event);
247 element, 'beforecut', listener, true)); 219
248 testEventHelper(on.beforePaste, 'beforepaste', 220 expect(firedOnEvent, isTrue);
249 (listener) => Testing.addEventListener( 221 }
250 element, 'beforepaste', listener, true)); 222
251 testEventHelper(on.blur, 'blur', 223 testEvent(target.onAbort, 'abort');
252 (listener) => Testing.addEventListener( 224 testEvent(target.onBeforeCopy, 'beforecopy');
253 element, 'blur', listener, true)); 225 testEvent(target.onBeforeCut, 'beforecut');
254 testEventHelper(on.change, 'change', 226 testEvent(target.onBeforePaste, 'beforepaste');
255 (listener) => Testing.addEventListener( 227 testEvent(target.onBlur, 'blur');
256 element, 'change', listener, true)); 228 testEvent(target.onChange, 'change');
257 testEventHelper(on.contextMenu, 'contextmenu', 229 testEvent(target.onContextMenu, 'contextmenu');
258 (listener) => Testing.addEventListener( 230 testEvent(target.onCopy, 'copy');
259 element, 'contextmenu', listener, true)); 231 testEvent(target.onCut, 'cut');
260 testEventHelper(on.copy, 'copy', 232 testEvent(target.onDoubleClick, 'dblclick');
261 (listener) => Testing.addEventListener( 233 testEvent(target.onDrag, 'drag');
262 element, 'copy', listener, true)); 234 testEvent(target.onDragEnd, 'dragend');
263 testEventHelper(on.cut, 'cut', 235 testEvent(target.onDragEnter, 'dragenter');
264 (listener) => Testing.addEventListener( 236 testEvent(target.onDragLeave, 'dragleave');
265 element, 'cut', listener, true)); 237 testEvent(target.onDragOver, 'dragover');
266 testEventHelper(on.doubleClick, 'dblclick', 238 testEvent(target.onDragStart, 'dragstart');
267 (listener) => Testing.addEventListener( 239 testEvent(target.onDrop, 'drop');
268 element, 'dblclick', listener, true)); 240 testEvent(target.onError, 'error');
269 testEventHelper(on.drag, 'drag', 241 testEvent(target.onFocus, 'focus');
270 (listener) => Testing.addEventListener( 242 testEvent(target.onFullscreenChange, 'webkitfullscreenchange');
271 element, 'drag', listener, true)); 243 testEvent(target.onInput, 'input');
272 testEventHelper(on.dragEnd, 'dragend', 244 testEvent(target.onInvalid, 'invalid');
273 (listener) => Testing.addEventListener( 245 testEvent(target.onKeyDown, 'keydown');
274 element, 'dragend', listener, true)); 246 testEvent(target.onKeyPress, 'keypress');
275 testEventHelper(on.dragEnter, 'dragenter', 247 testEvent(target.onKeyUp, 'keyup');
276 (listener) => Testing.addEventListener( 248 testEvent(target.onLoad, 'load');
277 element, 'dragenter', listener, true)); 249 testEvent(target.onMouseDown, 'mousedown');
278 testEventHelper(on.dragLeave, 'dragleave', 250 testEvent(target.onMouseMove, 'mousemove');
279 (listener) => Testing.addEventListener( 251 testEvent(target.onMouseOut, 'mouseout');
280 element, 'dragleave', listener, true)); 252 testEvent(target.onMouseOver, 'mouseover');
281 testEventHelper(on.dragOver, 'dragover', 253 testEvent(target.onMouseUp, 'mouseup');
282 (listener) => Testing.addEventListener( 254 testEvent(target.onPaste, 'paste');
283 element, 'dragover', listener, true)); 255 testEvent(target.onReset, 'reset');
284 testEventHelper(on.dragStart, 'dragstart', 256 testEvent(target.onScroll, 'scroll');
285 (listener) => Testing.addEventListener( 257 testEvent(target.onSearch, 'search');
286 element, 'dragstart', listener, true)); 258 testEvent(target.onSelect, 'select');
287 testEventHelper(on.drop, 'drop', 259 testEvent(target.onSelectStart, 'selectstart');
288 (listener) => Testing.addEventListener( 260 testEvent(target.onSubmit, 'submit');
289 element, 'drop', listener, true)); 261 testEvent(target.onTouchCancel, 'touchcancel');
290 testEventHelper(on.error, 'error', 262 testEvent(target.onTouchEnd, 'touchend');
291 (listener) => Testing.addEventListener( 263 testEvent(target.onTouchLeave, 'touchleave');
292 element, 'error', listener, true)); 264 testEvent(target.onTouchMove, 'touchmove');
293 testEventHelper(on.focus, 'focus', 265 testEvent(target.onTouchStart, 'touchstart');
294 (listener) => Testing.addEventListener( 266 testEvent(target.onTransitionEnd, 'webkitTransitionEnd');
295 element, 'focus', listener, true));
296 testEventHelper(on.input, 'input',
297 (listener) => Testing.addEventListener(
298 element, 'input', listener, true));
299 testEventHelper(on.invalid, 'invalid',
300 (listener) => Testing.addEventListener(
301 element, 'invalid', listener, true));
302 testEventHelper(on.keyDown, 'keydown',
303 (listener) => Testing.addEventListener(
304 element, 'keydown', listener, true));
305 testEventHelper(on.keyPress, 'keypress',
306 (listener) => Testing.addEventListener(
307 element, 'keypress', listener, true));
308 testEventHelper(on.keyUp, 'keyup',
309 (listener) => Testing.addEventListener(
310 element, 'keyup', listener, true));
311 testEventHelper(on.load, 'load',
312 (listener) => Testing.addEventListener(
313 element, 'load', listener, true));
314 testEventHelper(on.mouseDown, 'mousedown',
315 (listener) => Testing.addEventListener(
316 element, 'mousedown', listener, true));
317 testEventHelper(on.mouseMove, 'mousemove',
318 (listener) => Testing.addEventListener(
319 element, 'mousemove', listener, true));
320 testEventHelper(on.mouseOut, 'mouseout',
321 (listener) => Testing.addEventListener(
322 element, 'mouseout', listener, true));
323 testEventHelper(on.mouseOver, 'mouseover',
324 (listener) => Testing.addEventListener(
325 element, 'mouseover', listener, true));
326 testEventHelper(on.mouseUp, 'mouseup',
327 (listener) => Testing.addEventListener(
328 element, 'mouseup', listener, true));
329 // Browsers have different events that they use, so fire all variants.
330 testMultipleEventHelper(on.mouseWheel,
331 ['mousewheel', 'wheel', 'DOMMouseScroll'],
332 (listener) => Testing.addEventListener(
333 element, 'mousewheel', listener, true));
334 testEventHelper(on.paste, 'paste',
335 (listener) => Testing.addEventListener(
336 element, 'paste', listener, true));
337 testEventHelper(on.reset, 'reset',
338 (listener) => Testing.addEventListener(
339 element, 'reset', listener, true));
340 testEventHelper(on.scroll, 'scroll',
341 (listener) => Testing.addEventListener(
342 element, 'scroll', listener, true));
343 testEventHelper(on.search, 'search',
344 (listener) => Testing.addEventListener(
345 element, 'search', listener, true));
346 testEventHelper(on.select, 'select',
347 (listener) => Testing.addEventListener(
348 element, 'select', listener, true));
349 testEventHelper(on.selectStart, 'selectstart',
350 (listener) => Testing.addEventListener(
351 element, 'selectstart', listener, true));
352 testEventHelper(on.submit, 'submit',
353 (listener) => Testing.addEventListener(
354 element, 'submit', listener, true));
355 testEventHelper(on.touchCancel, 'touchcancel',
356 (listener) => Testing.addEventListener(
357 element, 'touchcancel', listener, true));
358 testEventHelper(on.touchEnd, 'touchend',
359 (listener) => Testing.addEventListener(
360 element, 'touchend', listener, true));
361 testEventHelper(on.touchLeave, 'touchleave');
362 testEventHelper(on.touchMove, 'touchmove',
363 (listener) => Testing.addEventListener(
364 element, 'touchmove', listener, true));
365 testEventHelper(on.touchStart, 'touchstart',
366 (listener) => Testing.addEventListener(
367 element, 'touchstart', listener, true));
368 testEventHelper(on.transitionEnd, 'webkitTransitionEnd');
369 testEventHelper(on.fullscreenChange, 'webkitfullscreenchange',
370 (listener) => Testing.addEventListener(element,
371 'webkitfullscreenchange', listener, true));
372 }); 267 });
373 }); 268 });
374 269
375 group('click', () { 270 group('click', () {
376 test('clickEvent', () { 271 test('clickEvent', () {
377 var e = new DivElement(); 272 var e = new DivElement();
378 var firedEvent = false; 273 var firedEvent = false;
379 e.on.click.add((event) { 274 e.onClick.listen((event) {
380 firedEvent = true; 275 firedEvent = true;
381 }); 276 });
382 expect(firedEvent, false); 277 expect(firedEvent, false);
383 e.click(); 278 e.click();
384 expect(firedEvent, true); 279 expect(firedEvent, true);
385 }); 280 });
386 }); 281 });
387 282
388 group('attributes', () { 283 group('attributes', () {
389 test('coercion', () { 284 test('coercion', () {
(...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after
735 }); 630 });
736 631
737 test('getRange', () { 632 test('getRange', () {
738 var range = makeElList().getRange(1, 2); 633 var range = makeElList().getRange(1, 2);
739 expect(range, isElementList); 634 expect(range, isElementList);
740 expect(range[0], isImageElement); 635 expect(range[0], isImageElement);
741 expect(range[1], isInputElement); 636 expect(range[1], isInputElement);
742 }); 637 });
743 }); 638 });
744 } 639 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698