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

Side by Side Diff: tests/lib/observe/observe_test.dart

Issue 14732003: Implement Model-Driven-Views spec for Dart (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: trying upload again Created 7 years, 7 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
(Empty)
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
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.
4
5 import '../../../pkg/unittest/lib/unittest.dart';
6 import '../../../sdk/lib/observe/observe.dart';
7
8 main() {
9 // Note: to test the basic Observable system, we use ObservableBox due to its
10 // simplicity.
11
12 group('ObservableBox', () {
13 test('no observers', () {
14 var t = new ObservableBox<int>(123);
15 expect(t.value, 123);
16 t.value = 42;
17 expect(t.value, 42);
18 expect(t.hasObservers, false);
19 });
20
21 test('listen adds an observer', () {
22 var t = new ObservableBox<int>(123);
23 expect(t.hasObservers, false);
24
25 t.changes.listen((n) {});
26 expect(t.hasObservers, true);
27 });
28
29 test('changes delived async', () {
30 var t = new ObservableBox<int>(123);
31 int called = 0;
32
33 t.changes.listen(expectAsync1((records) {
34 called++;
35 expect(records, [_record('value', 123, 41), _record('value', 41, 42)]);
36 }));
37 t.value = 41;
38 t.value = 42;
39 expect(called, 0);
40 });
41
42 test('cause changes in handler', () {
43 var t = new ObservableBox<int>(123);
44 t.changes.listen(expectAsync1((records) {
45 expect(records.length, 1);
46 var record = records[0];
47 if (record.oldValue == 123) {
48 expect(record.newValue, 42);
49 // Cause another change
50 t.value = 777;
51 } else {
52 expect(record.oldValue, 42);
53 expect(record.newValue, 777);
54 }
55 }, count: 2));
56
57 t.value = 42;
58 });
59
60 test('multiple observers', () {
61 var t = new ObservableBox<int>(123);
62
63 verifyRecords(records) {
64 expect(records, [_record('value', 123, 41), _record('value', 41, 42)]);
65 };
66
67 t.changes.listen(expectAsync1(verifyRecords));
68 t.changes.listen(expectAsync1(verifyRecords));
69
70 t.value = 41;
71 t.value = 42;
72 });
73
74 test('deliverChangeRecords', () {
75 var t = new ObservableBox<int>(123);
76 var records = [];
77 t.changes.listen((r) { records.addAll(r); });
78 t.value = 41;
79 t.value = 42;
80 expect(records, [], reason: 'changes delived async');
81
82 deliverChangeRecords();
83 expect(records, [_record('value', 123, 41), _record('value', 41, 42)]);
84 records.clear();
85
86 t.value = 777;
87 expect(records, [], reason: 'changes delived async');
88
89 deliverChangeRecords();
90 expect(records, [_record('value', 42, 777)]);
91
92 // Has no effect if there are no changes
93 deliverChangeRecords();
94 expect(records, [_record('value', 42, 777)]);
95 });
96
97 test('cancel listening', () {
98 var t = new ObservableBox<int>(123);
99 var sub;
100 sub = t.changes.listen(expectAsync1((records) {
101 expect(records, [_record('value', 123, 42)]);
102 sub.cancel();
103 t.value = 777;
104 }));
105 t.value = 42;
106 });
107 });
108
109 // We only really support equality on these for testing purposes.
110 // However we need .hashCode because we've implemented operator ==.
111 test('ChangeRecord.hashCode', () {
112 var a = _record('a', 1, null, ChangeRecord.REMOVE);
113 var b = _record('a', 1, null, ChangeRecord.REMOVE);
114 var c = _record('b', 1, null, ChangeRecord.REMOVE);
115 expect(a.hashCode, b.hashCode, reason: 'a == b');
116 expect(b.hashCode, isNot(equals(c.hashCode)), reason: 'b != c');
117 });
118 }
119
120 _record(key, oldValue, newValue, [kind = ChangeRecord.FIELD]) =>
121 new ChangeRecord(key, oldValue, newValue, kind: kind);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698