Index: tests/html/streams_test.dart |
diff --git a/tests/html/streams_test.dart b/tests/html/streams_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c0b3b4cac79427a9b6ef250ffcdab2eb8a6e4fdb |
--- /dev/null |
+++ b/tests/html/streams_test.dart |
@@ -0,0 +1,85 @@ |
+library streams_test; |
+import '../../pkg/unittest/lib/unittest.dart'; |
+import '../../pkg/unittest/lib/html_config.dart'; |
+import 'dart:async'; |
+import 'dart:html'; |
+ |
+main() { |
+ useHtmlConfiguration(); |
+ |
+ test('simple', () { |
+ var a = new TextInputElement(); |
+ document.body.append(a); |
+ |
+ var callCount = 0; |
+ a.onFocus.listen((Event e) { |
+ ++callCount; |
+ }); |
+ |
+ a.focus(); |
+ expect(callCount, 1); |
+ }); |
+ |
+ // Validates that events are not automatically unsubscribed. |
+ test('unsubscribeOnError', () { |
+ var a = new TextInputElement(); |
+ document.body.append(a); |
+ |
+ var b = new TextInputElement(); |
+ document.body.append(b); |
+ |
+ var callCountOne = 0; |
+ var callCountTwo = 0; |
+ var callCountThree = 0; |
+ // Unsubscribe on error handlers still get their events. |
Jennifer Messerly
2013/01/11 21:57:17
Q: what is the effect of unsubscribeOnError? I thi
blois
2013/01/11 22:51:30
We have no way of triggering unsubscribeOnError fo
floitsch
2013/01/11 22:55:45
Correct. unsubscribeOnError (similar to the onErro
Jennifer Messerly
2013/01/11 23:30:14
Makes sense. Thanks for clarifying!
|
+ a.onFocus.listen((Event e) { |
+ ++callCountOne; |
+ throw 'this error should not cause any problems.'; |
+ }, unsubscribeOnError:true); |
Jennifer Messerly
2013/01/11 21:57:17
I think we usually have space after : in named arg
blois
2013/01/11 22:51:30
Done.
|
+ |
+ // Handler which throws an exception should still get events. |
+ a.onFocus.listen((Event e) { |
+ ++callCountTwo; |
+ if (callCountTwo == 0) { |
+ throw 'this error should not cause any problems.'; |
+ } |
+ }); |
+ |
+ // Standard handler should still always get events |
+ a.onFocus.listen((Event e) { |
+ ++callCountThree; |
+ }); |
+ |
+ a.focus(); |
+ b.focus(); |
+ a.focus(); |
+ expect(callCountOne, 2); |
+ expect(callCountTwo, 2); |
+ expect(callCountThree, 2); |
+ }); |
+ |
+ // Validates that capturing events fire on parent before child. |
+ test('capture', () { |
+ var parent = new DivElement(); |
+ document.body.append(parent); |
+ |
+ var child = new TextInputElement(); |
+ parent.append(child); |
+ |
+ var childCallCount = 0; |
+ var parentCallCount = 0; |
+ Element.focusEvent.forTarget(parent, useCapture:true).listen((Event e) { |
+ ++parentCallCount; |
+ expect(childCallCount, 0); |
+ }); |
+ |
+ Element.focusEvent.forTarget(child, useCapture:true).listen((Event e) { |
+ ++childCallCount; |
+ expect(parentCallCount, 1); |
+ }); |
+ |
+ child.focus(); |
+ expect(childCallCount, 1); |
+ expect(parentCallCount, 1); |
+ }); |
+} |