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..8d76320ad039a6e40061894a0e8376a76cafd1da |
--- /dev/null |
+++ b/tests/html/streams_test.dart |
@@ -0,0 +1,174 @@ |
+library streams_test; |
+import '../../pkg/unittest/lib/unittest.dart'; |
+import '../../pkg/unittest/lib/html_config.dart'; |
+import 'dart:async'; |
+import 'dart:html'; |
+ |
+class StreamHelper { |
+ var _a; |
+ var _b; |
+ StreamHelper() { |
+ _a = new TextInputElement(); |
+ document.body.append(_a); |
+ _b = new TextInputElement(); |
+ document.body.append(_b); |
+ } |
+ |
+ Stream<Event> get stream => _a.onFocus; |
+ |
+ // Causes an event on a to be fired. |
+ void pulse() { |
+ _b.focus(); |
+ _a.focus(); |
+ } |
+} |
+ |
+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 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); |
+ }); |
+ |
+ test('cancel', () { |
+ var helper = new StreamHelper(); |
+ |
+ var callCount = 0; |
+ var subscription = helper.stream.listen((_) { |
+ ++callCount; |
+ }); |
+ |
+ helper.pulse(); |
+ expect(callCount, 1); |
+ |
+ subscription.cancel(); |
+ helper.pulse(); |
+ expect(callCount, 1); |
+ |
+ expect(() { |
+ subscription.onData((_) {}); |
+ }, throws); |
+ |
+ expect(() { |
+ subscription.pause(); |
+ }, throws); |
+ |
+ expect(() { |
+ subscription.resume(); |
+ }, throws); |
+ }); |
+ |
+ test('pause/resume', () { |
+ var helper = new StreamHelper(); |
+ |
+ var callCount = 0; |
+ var subscription = helper.stream.listen((_) { |
+ ++callCount; |
+ }); |
+ |
+ helper.pulse(); |
+ expect(callCount, 1); |
+ |
+ subscription.pause(); |
+ helper.pulse(); |
+ expect(callCount, 1); |
+ |
+ subscription.resume(); |
+ helper.pulse(); |
+ expect(callCount, 2); |
+ |
+ var completer = new Completer<int>(); |
+ subscription.pause(completer.future); |
+ helper.pulse(); |
+ expect(callCount, 2); |
+ |
+ // Paused, should have no impact. |
+ subscription.pause(); |
+ helper.pulse(); |
+ subscription.resume(); |
+ helper.pulse(); |
+ expect(callCount, 2); |
+ |
+ completer.complete(0); |
+ helper.pulse(); |
+ expect(callCount, 3); |
+ |
+ // Not paused. |
+ expect(() { |
+ subscription.resume(); |
+ }, throws); |
+ }); |
+ |
+ test('onData', () { |
+ var helper = new StreamHelper(); |
+ |
+ var callCountOne = 0; |
+ var subscription = helper.stream.listen((_) { |
+ ++callCountOne; |
+ }); |
+ |
+ helper.pulse(); |
+ expect(callCountOne, 1); |
+ |
+ var callCountTwo = 0; |
+ subscription.onData((_) { |
+ ++callCountTwo; |
+ }); |
+ |
+ helper.pulse(); |
+ expect(callCountOne, 1); |
+ expect(callCountTwo, 1); |
+ }); |
+ |
+ test('null onData', () { |
+ var helper = new StreamHelper(); |
+ |
+ var subscription = helper.stream.listen(null); |
+ helper.pulse(); |
+ |
+ var callCountOne = 0; |
+ subscription.onData((_) { |
+ ++callCountOne; |
+ }); |
+ helper.pulse(); |
+ expect(callCountOne, 1); |
+ |
+ subscription.onData(null); |
+ helper.pulse(); |
+ expect(callCountOne, 1); |
+ }); |
+} |