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

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

Issue 21607003: Add Event delegation to Elements and groups of elements. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 4 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:async';
9 import 'dart:html'; 9 import 'dart:html';
10 import 'dart:svg' as svg; 10 import 'dart:svg' as svg;
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 group('click', () { 278 group('click', () {
279 test('clickEvent', () { 279 test('clickEvent', () {
280 var e = new DivElement(); 280 var e = new DivElement();
281 var firedEvent = false; 281 var firedEvent = false;
282 e.onClick.listen((event) { 282 e.onClick.listen((event) {
283 firedEvent = true; 283 firedEvent = true;
284 }); 284 });
285 expect(firedEvent, false); 285 expect(firedEvent, false);
286 e.click(); 286 e.click();
287 expect(firedEvent, true); 287 expect(firedEvent, true);
288
289 var e2 = new DivElement();
290 var firedEvent2 = false;
291 e2.onClick.filter('.foo').listen((event) {
292 firedEvent2 = true;
293 });
294 e2.click();
295 expect(firedEvent2, false);
296 e2.classes.add('foo');
297 e2.click();
298 expect(firedEvent2, true);
288 }); 299 });
289 }); 300 });
290 301
291 group('attributes', () { 302 group('attributes', () {
292 test('manipulation', () { 303 test('manipulation', () {
293 final element = new Element.html( 304 final element = new Element.html(
294 '''<div class="foo" style="overflow: hidden" data-foo="bar" 305 '''<div class="foo" style="overflow: hidden" data-foo="bar"
295 data-foo2="bar2" dir="rtl"> 306 data-foo2="bar2" dir="rtl">
296 </div>'''); 307 </div>''');
297 final attributes = element.attributes; 308 final attributes = element.attributes;
(...skipping 423 matching lines...) Expand 10 before | Expand all | Expand 10 after
721 expect(filtered, isElementIterable); 732 expect(filtered, isElementIterable);
722 }); 733 });
723 734
724 test('sublist', () { 735 test('sublist', () {
725 var range = makeElList().sublist(1, 3); 736 var range = makeElList().sublist(1, 3);
726 expect(range, isElementList); 737 expect(range, isElementList);
727 expect(range[0], isImageElement); 738 expect(range[0], isImageElement);
728 expect(range[1], isInputElement); 739 expect(range[1], isInputElement);
729 }); 740 });
730 }); 741 });
742
743 group('eventDelegation', () {
744 test('filter', () {
745 Element elem = new Element.div()..classes.addAll(['a', 'b']);
746 Element img = new Element.img()
747 ..classes.addAll(['b', 'a', 'd'])
748 ..id = 'cookie';
749 Element input = new InputElement()..classes.addAll(['c', 'd']);
750 var div = new Element.div()
751 ..classes.add('a')
752 ..id = 'wat';
753 document.body.append(elem);
754 document.body.append(img);
755 document.body.append(input);
756 document.body.append(div);
757
758 var firedEvent = false;
759 var elems = queryAll('.a');
760 queryAll('.a').onClick.listen((event) {
761 firedEvent = true;
762 });
763 expect(firedEvent, false);
764 query('.c').click();
765 expect(firedEvent, false);
766 query('#wat').click();
767 expect(firedEvent, true);
768
769 var firedEvent4 = false;
770 queryAll('.a').onClick.filter('.d').listen((event) {
771 firedEvent4 = true;
772 });
773 expect(firedEvent4, false);
774 query('.c').click();
775 expect(firedEvent4, false);
776 query('#wat').click();
777 expect(firedEvent4, false);
778 query('#cookie').click();
779 expect(firedEvent4, true);
780
781 var firedEvent2 = false;
782 queryAll('.a').onClick.listen((event) {
783 firedEvent2 = true;
784 });
785 Element elem2 = new Element.html('<div class="a"><br/>');
786 document.body.append(elem2);
787 elem2.click();
788 expect(firedEvent2, false);
789 elem2.classes.add('a');
790 elem2.click();
791 expect(firedEvent2, false);
792
793 var firedEvent3 = false;
794 queryAll(':root').onClick.filter('.a').listen((event) {
795 firedEvent3 = true;
796 });
797 Element elem3 = new Element.html('<div class="d"><br/>');
798 document.body.append(elem3);
799 elem3.click();
800 expect(firedEvent3, false);
801 elem3.classes.add('a');
802 elem3.click();
803 expect(firedEvent3, true);
804 });
805 });
731 } 806 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698