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

Unified Diff: sky/tests/events/dispatcher.sky

Issue 936973002: Dispatcher tests (tests the code in events.md) (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 years, 10 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
« no previous file with comments | « sky/tests/TestExpectations ('k') | sky/tests/events/dispatcher-expected.txt » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sky/tests/events/dispatcher.sky
diff --git a/sky/tests/events/dispatcher.sky b/sky/tests/events/dispatcher.sky
new file mode 100644
index 0000000000000000000000000000000000000000..ffd657b707e14cec2e85847743e9384005b2b86e
--- /dev/null
+++ b/sky/tests/events/dispatcher.sky
@@ -0,0 +1,103 @@
+<script>
+import "../resources/third_party/unittest/unittest.dart";
+import "../resources/unit.dart";
+import "dart:sky";
+import 'dart:async';
+
+void send20IntegersToDispatcherController(DispatcherController d) {
+ for (var index = 0; index < 20; index += 1)
+ d.add(index);
+}
+
+void main() {
+ initUnit();
+
+ group('Dispatcher', () {
+
+ test('simple listen', () {
+ var d = new DispatcherController();
+ var result = new List();
+ d.dispatcher.listen((v) => result.add(v));
+ send20IntegersToDispatcherController(d);
+ expect(result, orderedEquals([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]));
+ });
+
+ test('firstWhere', () {
+ var d = new DispatcherController();
+ var result = new List();
+ d.dispatcher.firstWhere((n) => n > 15).then((v) => result.add(v));
+ send20IntegersToDispatcherController(d);
+ new Timer(new Duration(), expectAsync(() => expect(result, orderedEquals([16]))));
+ });
+
+ test('where', () {
+ var d = new DispatcherController();
+ var result = new List();
+ d.dispatcher.where((n) => n % 2 == 0).until((n) => n > 10).listen((v) => result.add(v));
+ send20IntegersToDispatcherController(d);
+ expect(result, orderedEquals([0,2,4,6,8,10]));
+ });
+
+ test('where without listener', () {
+ var d = new DispatcherController();
+ var result = new List();
+ d.dispatcher.where((n) => result.add(n));
+ send20IntegersToDispatcherController(d);
+ expect(result, orderedEquals([]));
+ });
+
+ test('where with listeners removed', () {
+ var d = new DispatcherController();
+ var result = new List();
+ var w = d.dispatcher.where((n) { result.add(n); return true; });
+ d.add(0);
+ var f1 = (v) => result.add(100 + v);
+ w.listen(f1);
+ d.add(1);
+ var f2 = (v) => result.add(200 + v);
+ w.listen(f2);
+ d.add(2);
+ w.unlisten(f1);
+ d.add(3);
+ w.unlisten(f2);
+ d.add(4);
+ expect(result, orderedEquals([1, 101, 2, 102, 202, 3, 203]));
+ });
+
+ test('double listeners', () {
+ var d = new DispatcherController();
+ var result = new List();
+ d.dispatcher..listen((v) => result.add(v))
+ ..where((n) => n < 3).listen((v) => result.add(v*100));
+ send20IntegersToDispatcherController(d);
+ expect(result, orderedEquals([0,0,1,100,2,200,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]));
+ });
+
+ test('zones', () {
+ var d = new DispatcherController();
+ var result = new List();
+ runZoned(() {
+ var zoneA = Zone.current;
+ var listener;
+ listener = (v) {
+ if (Zone.current == zoneA)
+ result.add(v + 0.1);
+ if (v >= 18)
+ d.dispatcher.unlisten(listener);
+ };
+ d.dispatcher.listen(listener);
+ });
+ runZoned(() {
+ var zoneB = Zone.current;
+ d.dispatcher.until((n) => n >= 10).listen((v) {
+ if (Zone.current == zoneB)
+ result.add(v + 0.2);
+ });
+ });
+ send20IntegersToDispatcherController(d);
+ expect(result, orderedEquals([0.1,0.2,1.1,1.2,2.1,2.2,3.1,3.2,4.1,4.2,5.1,5.2,6.1,6.2,7.1,7.2,8.1,8.2,9.1,9.2,10.1,11.1,12.1,13.1,14.1,15.1,16.1,17.1,18.1]));
+ });
+
+ });
+}
+</script>
« no previous file with comments | « sky/tests/TestExpectations ('k') | sky/tests/events/dispatcher-expected.txt » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698