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

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.matches('.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('matches', () {
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 Element elem4 = new Element.div()..classes.addAll(['i', 'j']);
759 Element elem5 = new Element.div()
760 ..classes.addAll(['g', 'h'])
761 ..children.add(elem4);
762 Element elem6 = new Element.div()
763 ..classes.addAll(['e', 'f'])
764 ..children.add(elem5);
765 document.body.append(elem6);
766
767 var firedEvent = false;
768 var elems = queryAll('.a');
769 queryAll('.a').onClick.listen((event) {
770 firedEvent = true;
771 });
772 expect(firedEvent, false);
773 query('.c').click();
774 expect(firedEvent, false);
775 query('#wat').click();
776 expect(firedEvent, true);
777
778 var firedEvent4 = false;
779 queryAll('.a').onClick.matches('.d').listen((event) {
780 firedEvent4 = true;
781 });
782 expect(firedEvent4, false);
783 query('.c').click();
784 expect(firedEvent4, false);
785 query('#wat').click();
786 expect(firedEvent4, false);
787 query('#cookie').click();
788 expect(firedEvent4, true);
789
790 var firedEvent2 = false;
791 queryAll('.a').onClick.listen((event) {
792 firedEvent2 = true;
793 });
794 Element elem2 = new Element.html('<div class="a"><br/>');
795 document.body.append(elem2);
796 elem2.click();
797 expect(firedEvent2, false);
798 elem2.classes.add('a');
799 elem2.click();
800 expect(firedEvent2, false);
801
802 var firedEvent3 = false;
803 queryAll(':root').onClick.matches('.a').listen((event) {
804 firedEvent3 = true;
805 });
806 Element elem3 = new Element.html('<div class="d"><br/>');
807 document.body.append(elem3);
808 elem3.click();
809 expect(firedEvent3, false);
810 elem3.classes.add('a');
811 elem3.click();
812 expect(firedEvent3, true);
813
814 var firedEvent5 = false;
815 queryAll(':root').onClick.matches('.e').listen((event) {
816 firedEvent5 = true;
817 });
818 expect(firedEvent5, false);
819 query('.i').click();
820 expect(firedEvent5, true);
821 });
822 });
731 } 823 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698