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

Unified 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, 5 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 side-by-side diff with in-line comments
Download patch
Index: tests/html/element_test.dart
diff --git a/tests/html/element_test.dart b/tests/html/element_test.dart
index 7e137419a1317a5691d198ce6897c32a5e5872c4..c053a8cc2c877cd44e2172e8789d0eab62cd39a8 100644
--- a/tests/html/element_test.dart
+++ b/tests/html/element_test.dart
@@ -285,6 +285,17 @@ main() {
expect(firedEvent, false);
e.click();
expect(firedEvent, true);
+
+ var e2 = new DivElement();
+ var firedEvent2 = false;
+ e2.onClick.filter('.foo').listen((event) {
+ firedEvent2 = true;
+ });
+ e2.click();
+ expect(firedEvent2, false);
+ e2.classes.add('foo');
+ e2.click();
+ expect(firedEvent2, true);
});
});
@@ -728,4 +739,68 @@ main() {
expect(range[1], isInputElement);
});
});
+
+ group('eventDelegation', () {
+ test('filter', () {
+ Element elem = new Element.div()..classes.addAll(['a', 'b']);
+ Element img = new Element.img()
+ ..classes.addAll(['b', 'a', 'd'])
+ ..id = 'cookie';
+ Element input = new InputElement()..classes.addAll(['c', 'd']);
+ var div = new Element.div()
+ ..classes.add('a')
+ ..id = 'wat';
+ document.body.append(elem);
+ document.body.append(img);
+ document.body.append(input);
+ document.body.append(div);
+
+ var firedEvent = false;
+ var elems = queryAll('.a');
+ queryAll('.a').onClick.listen((event) {
+ firedEvent = true;
+ });
+ expect(firedEvent, false);
+ query('.c').click();
+ expect(firedEvent, false);
+ query('#wat').click();
+ expect(firedEvent, true);
+
+ var firedEvent4 = false;
+ queryAll('.a').onClick.filter('.d').listen((event) {
+ firedEvent4 = true;
+ });
+ expect(firedEvent4, false);
+ query('.c').click();
+ expect(firedEvent4, false);
+ query('#wat').click();
+ expect(firedEvent4, false);
+ query('#cookie').click();
+ expect(firedEvent4, true);
+
+ var firedEvent2 = false;
+ queryAll('.a').onClick.listen((event) {
+ firedEvent2 = true;
+ });
+ Element elem2 = new Element.html('<div class="a"><br/>');
+ document.body.append(elem2);
+ elem2.click();
+ expect(firedEvent2, false);
+ elem2.classes.add('a');
+ elem2.click();
+ expect(firedEvent2, false);
+
+ var firedEvent3 = false;
+ queryAll(':root').onClick.filter('.a').listen((event) {
+ firedEvent3 = true;
+ });
+ Element elem3 = new Element.html('<div class="d"><br/>');
+ document.body.append(elem3);
+ elem3.click();
+ expect(firedEvent3, false);
+ elem3.classes.add('a');
+ elem3.click();
+ expect(firedEvent3, true);
+ });
+ });
}

Powered by Google App Engine
This is Rietveld 408576698