| Index: tests/html/element_test.dart
 | 
| diff --git a/tests/html/element_test.dart b/tests/html/element_test.dart
 | 
| index a49555a861fac4f614cee9425bd0727f7e4bd2da..09c49375143a5c05e2364aa79bea521e7cb14aac 100644
 | 
| --- a/tests/html/element_test.dart
 | 
| +++ b/tests/html/element_test.dart
 | 
| @@ -5,6 +5,7 @@
 | 
|  library ElementTest;
 | 
|  import '../../pkg/unittest/lib/unittest.dart';
 | 
|  import '../../pkg/unittest/lib/html_individual_config.dart';
 | 
| +import 'dart:async';
 | 
|  import 'dart:html';
 | 
|  import 'dart:svg' as svg;
 | 
|  
 | 
| @@ -17,34 +18,6 @@ expectLargeRect(ClientRect rect) {
 | 
|    expect(rect.right, rect.left + rect.width);
 | 
|  }
 | 
|  
 | 
| -void testEventHelper(EventListenerList listenerList, String type,
 | 
| -    [Function registerOnEventListener = null]) {
 | 
| -  testMultipleEventHelper(listenerList, [type], registerOnEventListener);
 | 
| -}
 | 
| -// Allows testing where we polyfill different browsers firing different events.
 | 
| -void testMultipleEventHelper(EventListenerList listenerList, List<String> types,
 | 
| -    [Function registerOnEventListener = null]) {
 | 
| -  bool firedWhenAddedToListenerList = false;
 | 
| -  bool firedOnEvent = false;
 | 
| -  listenerList.add((e) {
 | 
| -    firedWhenAddedToListenerList = true;
 | 
| -  });
 | 
| -  if (registerOnEventListener != null) {
 | 
| -    registerOnEventListener((e) {
 | 
| -      firedOnEvent = true;
 | 
| -    });
 | 
| -  }
 | 
| -  for (var type in types) {
 | 
| -    final event = new Event(type);
 | 
| -    listenerList.dispatch(event);
 | 
| -  }
 | 
| -
 | 
| -  expect(firedWhenAddedToListenerList, isTrue);
 | 
| -  if (registerOnEventListener != null) {
 | 
| -    expect(firedOnEvent, isTrue);
 | 
| -  }
 | 
| -}
 | 
| -
 | 
|  main() {
 | 
|    useHtmlIndividualConfiguration();
 | 
|  
 | 
| @@ -232,143 +205,65 @@ main() {
 | 
|    });
 | 
|  
 | 
|    group('eventListening', () {
 | 
| -    test('eventListeners', () {
 | 
| -      final element = new Element.tag('div');
 | 
| -      final on = element.on;
 | 
| -
 | 
| -      testEventHelper(on.abort, 'abort',
 | 
| -          (listener) => Testing.addEventListener(
 | 
| -              element, 'abort', listener, true));
 | 
| -      testEventHelper(on.beforeCopy, 'beforecopy',
 | 
| -          (listener) => Testing.addEventListener(
 | 
| -              element, 'beforecopy', listener, true));
 | 
| -      testEventHelper(on.beforeCut, 'beforecut',
 | 
| -          (listener) => Testing.addEventListener(
 | 
| -              element, 'beforecut', listener, true));
 | 
| -      testEventHelper(on.beforePaste, 'beforepaste',
 | 
| -          (listener) => Testing.addEventListener(
 | 
| -              element, 'beforepaste', listener, true));
 | 
| -      testEventHelper(on.blur, 'blur',
 | 
| -          (listener) => Testing.addEventListener(
 | 
| -              element, 'blur', listener, true));
 | 
| -      testEventHelper(on.change, 'change',
 | 
| -          (listener) => Testing.addEventListener(
 | 
| -              element, 'change', listener, true));
 | 
| -      testEventHelper(on.contextMenu, 'contextmenu',
 | 
| -          (listener) => Testing.addEventListener(
 | 
| -              element, 'contextmenu', listener, true));
 | 
| -      testEventHelper(on.copy, 'copy',
 | 
| -          (listener) => Testing.addEventListener(
 | 
| -              element, 'copy', listener, true));
 | 
| -      testEventHelper(on.cut, 'cut',
 | 
| -          (listener) => Testing.addEventListener(
 | 
| -              element, 'cut', listener, true));
 | 
| -      testEventHelper(on.doubleClick, 'dblclick',
 | 
| -          (listener) => Testing.addEventListener(
 | 
| -              element, 'dblclick', listener, true));
 | 
| -      testEventHelper(on.drag, 'drag',
 | 
| -          (listener) => Testing.addEventListener(
 | 
| -              element, 'drag', listener, true));
 | 
| -      testEventHelper(on.dragEnd, 'dragend',
 | 
| -          (listener) => Testing.addEventListener(
 | 
| -              element, 'dragend', listener, true));
 | 
| -      testEventHelper(on.dragEnter, 'dragenter',
 | 
| -          (listener) => Testing.addEventListener(
 | 
| -              element, 'dragenter', listener, true));
 | 
| -      testEventHelper(on.dragLeave, 'dragleave',
 | 
| -          (listener) => Testing.addEventListener(
 | 
| -              element, 'dragleave', listener, true));
 | 
| -      testEventHelper(on.dragOver, 'dragover',
 | 
| -          (listener) => Testing.addEventListener(
 | 
| -              element, 'dragover', listener, true));
 | 
| -      testEventHelper(on.dragStart, 'dragstart',
 | 
| -          (listener) => Testing.addEventListener(
 | 
| -              element, 'dragstart', listener, true));
 | 
| -      testEventHelper(on.drop, 'drop',
 | 
| -          (listener) => Testing.addEventListener(
 | 
| -              element, 'drop', listener, true));
 | 
| -      testEventHelper(on.error, 'error',
 | 
| -          (listener) => Testing.addEventListener(
 | 
| -              element, 'error', listener, true));
 | 
| -      testEventHelper(on.focus, 'focus',
 | 
| -          (listener) => Testing.addEventListener(
 | 
| -              element, 'focus', listener, true));
 | 
| -      testEventHelper(on.input, 'input',
 | 
| -          (listener) => Testing.addEventListener(
 | 
| -              element, 'input', listener, true));
 | 
| -      testEventHelper(on.invalid, 'invalid',
 | 
| -          (listener) => Testing.addEventListener(
 | 
| -              element, 'invalid', listener, true));
 | 
| -      testEventHelper(on.keyDown, 'keydown',
 | 
| -          (listener) => Testing.addEventListener(
 | 
| -              element, 'keydown', listener, true));
 | 
| -      testEventHelper(on.keyPress, 'keypress',
 | 
| -          (listener) => Testing.addEventListener(
 | 
| -              element, 'keypress', listener, true));
 | 
| -      testEventHelper(on.keyUp, 'keyup',
 | 
| -          (listener) => Testing.addEventListener(
 | 
| -              element, 'keyup', listener, true));
 | 
| -      testEventHelper(on.load, 'load',
 | 
| -          (listener) => Testing.addEventListener(
 | 
| -              element, 'load', listener, true));
 | 
| -      testEventHelper(on.mouseDown, 'mousedown',
 | 
| -          (listener) => Testing.addEventListener(
 | 
| -              element, 'mousedown', listener, true));
 | 
| -      testEventHelper(on.mouseMove, 'mousemove',
 | 
| -          (listener) => Testing.addEventListener(
 | 
| -              element, 'mousemove', listener, true));
 | 
| -      testEventHelper(on.mouseOut, 'mouseout',
 | 
| -          (listener) => Testing.addEventListener(
 | 
| -              element, 'mouseout', listener, true));
 | 
| -      testEventHelper(on.mouseOver, 'mouseover',
 | 
| -          (listener) => Testing.addEventListener(
 | 
| -              element, 'mouseover', listener, true));
 | 
| -      testEventHelper(on.mouseUp, 'mouseup',
 | 
| -          (listener) => Testing.addEventListener(
 | 
| -              element, 'mouseup', listener, true));
 | 
| -      // Browsers have different events that they use, so fire all variants.
 | 
| -      testMultipleEventHelper(on.mouseWheel,
 | 
| -          ['mousewheel', 'wheel', 'DOMMouseScroll'],
 | 
| -          (listener) => Testing.addEventListener(
 | 
| -              element, 'mousewheel', listener, true));
 | 
| -      testEventHelper(on.paste, 'paste',
 | 
| -          (listener) => Testing.addEventListener(
 | 
| -              element, 'paste', listener, true));
 | 
| -      testEventHelper(on.reset, 'reset',
 | 
| -          (listener) => Testing.addEventListener(
 | 
| -              element, 'reset', listener, true));
 | 
| -      testEventHelper(on.scroll, 'scroll',
 | 
| -          (listener) => Testing.addEventListener(
 | 
| -              element, 'scroll', listener, true));
 | 
| -      testEventHelper(on.search, 'search',
 | 
| -          (listener) => Testing.addEventListener(
 | 
| -              element, 'search', listener, true));
 | 
| -      testEventHelper(on.select, 'select',
 | 
| -          (listener) => Testing.addEventListener(
 | 
| -              element, 'select', listener, true));
 | 
| -      testEventHelper(on.selectStart, 'selectstart',
 | 
| -          (listener) => Testing.addEventListener(
 | 
| -              element, 'selectstart', listener, true));
 | 
| -      testEventHelper(on.submit, 'submit',
 | 
| -          (listener) => Testing.addEventListener(
 | 
| -              element, 'submit', listener, true));
 | 
| -      testEventHelper(on.touchCancel, 'touchcancel',
 | 
| -          (listener) => Testing.addEventListener(
 | 
| -              element, 'touchcancel', listener, true));
 | 
| -      testEventHelper(on.touchEnd, 'touchend',
 | 
| -          (listener) => Testing.addEventListener(
 | 
| -              element, 'touchend', listener, true));
 | 
| -      testEventHelper(on.touchLeave, 'touchleave');
 | 
| -      testEventHelper(on.touchMove, 'touchmove',
 | 
| -          (listener) => Testing.addEventListener(
 | 
| -              element, 'touchmove', listener, true));
 | 
| -      testEventHelper(on.touchStart, 'touchstart',
 | 
| -          (listener) => Testing.addEventListener(
 | 
| -              element, 'touchstart', listener, true));
 | 
| -      testEventHelper(on.transitionEnd, 'webkitTransitionEnd');
 | 
| -      testEventHelper(on.fullscreenChange, 'webkitfullscreenchange',
 | 
| -          (listener) => Testing.addEventListener(element,
 | 
| -             'webkitfullscreenchange', listener, true));
 | 
| +    test('streams', () {
 | 
| +      final target = new Element.tag('div');
 | 
| +
 | 
| +      void testEvent(Stream stream, String type) {
 | 
| +        var firedOnEvent = false;
 | 
| +        stream.listen((e) {
 | 
| +          firedOnEvent = true;
 | 
| +        });
 | 
| +        expect(firedOnEvent, isFalse);
 | 
| +        var event = new Event(type);
 | 
| +        target.dispatchEvent(event);
 | 
| +
 | 
| +        expect(firedOnEvent, isTrue);
 | 
| +      }
 | 
| +
 | 
| +      testEvent(target.onAbort, 'abort');
 | 
| +      testEvent(target.onBeforeCopy, 'beforecopy');
 | 
| +      testEvent(target.onBeforeCut, 'beforecut');
 | 
| +      testEvent(target.onBeforePaste, 'beforepaste');
 | 
| +      testEvent(target.onBlur, 'blur');
 | 
| +      testEvent(target.onChange, 'change');
 | 
| +      testEvent(target.onContextMenu, 'contextmenu');
 | 
| +      testEvent(target.onCopy, 'copy');
 | 
| +      testEvent(target.onCut, 'cut');
 | 
| +      testEvent(target.onDoubleClick, 'dblclick');
 | 
| +      testEvent(target.onDrag, 'drag');
 | 
| +      testEvent(target.onDragEnd, 'dragend');
 | 
| +      testEvent(target.onDragEnter, 'dragenter');
 | 
| +      testEvent(target.onDragLeave, 'dragleave');
 | 
| +      testEvent(target.onDragOver, 'dragover');
 | 
| +      testEvent(target.onDragStart, 'dragstart');
 | 
| +      testEvent(target.onDrop, 'drop');
 | 
| +      testEvent(target.onError, 'error');
 | 
| +      testEvent(target.onFocus, 'focus');
 | 
| +      testEvent(target.onFullscreenChange, 'webkitfullscreenchange');
 | 
| +      testEvent(target.onInput, 'input');
 | 
| +      testEvent(target.onInvalid, 'invalid');
 | 
| +      testEvent(target.onKeyDown, 'keydown');
 | 
| +      testEvent(target.onKeyPress, 'keypress');
 | 
| +      testEvent(target.onKeyUp, 'keyup');
 | 
| +      testEvent(target.onLoad, 'load');
 | 
| +      testEvent(target.onMouseDown, 'mousedown');
 | 
| +      testEvent(target.onMouseMove, 'mousemove');
 | 
| +      testEvent(target.onMouseOut, 'mouseout');
 | 
| +      testEvent(target.onMouseOver, 'mouseover');
 | 
| +      testEvent(target.onMouseUp, 'mouseup');
 | 
| +      testEvent(target.onPaste, 'paste');
 | 
| +      testEvent(target.onReset, 'reset');
 | 
| +      testEvent(target.onScroll, 'scroll');
 | 
| +      testEvent(target.onSearch, 'search');
 | 
| +      testEvent(target.onSelect, 'select');
 | 
| +      testEvent(target.onSelectStart, 'selectstart');
 | 
| +      testEvent(target.onSubmit, 'submit');
 | 
| +      testEvent(target.onTouchCancel, 'touchcancel');
 | 
| +      testEvent(target.onTouchEnd, 'touchend');
 | 
| +      testEvent(target.onTouchLeave, 'touchleave');
 | 
| +      testEvent(target.onTouchMove, 'touchmove');
 | 
| +      testEvent(target.onTouchStart, 'touchstart');
 | 
| +      testEvent(target.onTransitionEnd, 'webkitTransitionEnd');
 | 
|      });
 | 
|    });
 | 
|  
 | 
| @@ -376,7 +271,7 @@ main() {
 | 
|      test('clickEvent', () {
 | 
|        var e = new DivElement();
 | 
|        var firedEvent = false;
 | 
| -      e.on.click.add((event) {
 | 
| +      e.onClick.listen((event) {
 | 
|          firedEvent = true;
 | 
|        });
 | 
|        expect(firedEvent, false);
 | 
| 
 |