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

Side by Side Diff: pkg/observe/test/path_observer_test.dart

Issue 26734004: use symbol literals instead of const ctor in packages (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 2 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
« no previous file with comments | « pkg/observe/test/observe_test.dart ('k') | pkg/path/lib/path.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 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 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. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 import 'package:observe/observe.dart'; 5 import 'package:observe/observe.dart';
6 import 'package:unittest/unittest.dart'; 6 import 'package:unittest/unittest.dart';
7 import 'observe_test_utils.dart'; 7 import 'observe_test_utils.dart';
8 8
9 // This file contains code ported from: 9 // This file contains code ported from:
10 // https://github.com/rafaelw/ChangeSummary/blob/master/tests/test.js 10 // https://github.com/rafaelw/ChangeSummary/blob/master/tests/test.js
11 11
12 main() { 12 main() {
13 group('PathObserver', observePathTests); 13 group('PathObserver', observePathTests);
14 } 14 }
15 15
16 observePath(obj, path) => new PathObserver(obj, path); 16 observePath(obj, path) => new PathObserver(obj, path);
17 17
18 sym(x) => new Symbol(x);
19
20 toSymbolMap(Map map) { 18 toSymbolMap(Map map) {
21 var result = new ObservableMap.linked(); 19 var result = new ObservableMap.linked();
22 map.forEach((key, value) { 20 map.forEach((key, value) {
23 if (value is Map) value = toSymbolMap(value); 21 if (value is Map) value = toSymbolMap(value);
24 result[new Symbol(key)] = value; 22 result[new Symbol(key)] = value;
25 }); 23 });
26 return result; 24 return result;
27 } 25 }
28 26
29 observePathTests() { 27 observePathTests() {
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 obj.value = new ObservableBox(4); 62 obj.value = new ObservableBox(4);
65 expect(observePath(obj, 'value.value.value').value, null); 63 expect(observePath(obj, 'value.value.value').value, null);
66 expect(observePath(obj, 'value.value').value, 4); 64 expect(observePath(obj, 'value.value').value, 4);
67 }); 65 });
68 66
69 67
70 observeTest('get value at path ObservableMap', () { 68 observeTest('get value at path ObservableMap', () {
71 var obj = toSymbolMap({'a': {'b': {'c': 1}}}); 69 var obj = toSymbolMap({'a': {'b': {'c': 1}}});
72 70
73 expect(observePath(obj, '').value, obj); 71 expect(observePath(obj, '').value, obj);
74 expect(observePath(obj, 'a').value, obj[sym('a')]); 72 expect(observePath(obj, 'a').value, obj[#a]);
75 expect(observePath(obj, 'a.b').value, obj[sym('a')][sym('b')]); 73 expect(observePath(obj, 'a.b').value, obj[#a][#b]);
76 expect(observePath(obj, 'a.b.c').value, 1); 74 expect(observePath(obj, 'a.b.c').value, 1);
77 75
78 obj[sym('a')][sym('b')][sym('c')] = 2; 76 obj[#a][#b][#c] = 2;
79 expect(observePath(obj, 'a.b.c').value, 2); 77 expect(observePath(obj, 'a.b.c').value, 2);
80 78
81 obj[sym('a')][sym('b')] = toSymbolMap({'c': 3}); 79 obj[#a][#b] = toSymbolMap({'c': 3});
82 expect(observePath(obj, 'a.b.c').value, 3); 80 expect(observePath(obj, 'a.b.c').value, 3);
83 81
84 obj[sym('a')] = toSymbolMap({'b': 4}); 82 obj[#a] = toSymbolMap({'b': 4});
85 expect(observePath(obj, 'a.b.c').value, null); 83 expect(observePath(obj, 'a.b.c').value, null);
86 expect(observePath(obj, 'a.b').value, 4); 84 expect(observePath(obj, 'a.b').value, 4);
87 }); 85 });
88 86
89 observeTest('set value at path', () { 87 observeTest('set value at path', () {
90 var obj = toSymbolMap({}); 88 var obj = toSymbolMap({});
91 observePath(obj, 'foo').value = 3; 89 observePath(obj, 'foo').value = 3;
92 expect(obj[sym('foo')], 3); 90 expect(obj[#foo], 3);
93 91
94 var bar = toSymbolMap({ 'baz': 3 }); 92 var bar = toSymbolMap({ 'baz': 3 });
95 observePath(obj, 'bar').value = bar; 93 observePath(obj, 'bar').value = bar;
96 expect(obj[sym('bar')], bar); 94 expect(obj[#bar], bar);
97 95
98 observePath(obj, 'bar.baz.bat').value = 'not here'; 96 observePath(obj, 'bar.baz.bat').value = 'not here';
99 expect(observePath(obj, 'bar.baz.bat').value, null); 97 expect(observePath(obj, 'bar.baz.bat').value, null);
100 }); 98 });
101 99
102 observeTest('set value back to same', () { 100 observeTest('set value back to same', () {
103 var obj = toSymbolMap({}); 101 var obj = toSymbolMap({});
104 var path = observePath(obj, 'foo'); 102 var path = observePath(obj, 'foo');
105 var values = []; 103 var values = [];
106 path.changes.listen((_) { values.add(path.value); }); 104 path.changes.listen((_) { values.add(path.value); });
107 105
108 path.value = 3; 106 path.value = 3;
109 expect(obj[sym('foo')], 3); 107 expect(obj[#foo], 3);
110 expect(path.value, 3); 108 expect(path.value, 3);
111 109
112 observePath(obj, 'foo').value = 2; 110 observePath(obj, 'foo').value = 2;
113 performMicrotaskCheckpoint(); 111 performMicrotaskCheckpoint();
114 expect(path.value, 2); 112 expect(path.value, 2);
115 expect(observePath(obj, 'foo').value, 2); 113 expect(observePath(obj, 'foo').value, 2);
116 114
117 observePath(obj, 'foo').value = 3; 115 observePath(obj, 'foo').value = 3;
118 performMicrotaskCheckpoint(); 116 performMicrotaskCheckpoint();
119 expect(path.value, 3); 117 expect(path.value, 3);
120 118
121 performMicrotaskCheckpoint(); 119 performMicrotaskCheckpoint();
122 expect(values, [2, 3]); 120 expect(values, [2, 3]);
123 }); 121 });
124 122
125 observeTest('Observe and Unobserve - Paths', () { 123 observeTest('Observe and Unobserve - Paths', () {
126 var arr = toSymbolMap({}); 124 var arr = toSymbolMap({});
127 125
128 arr[sym('foo')] = 'bar'; 126 arr[#foo] = 'bar';
129 var fooValues = []; 127 var fooValues = [];
130 var fooPath = observePath(arr, 'foo'); 128 var fooPath = observePath(arr, 'foo');
131 var fooSub = fooPath.changes.listen((_) { 129 var fooSub = fooPath.changes.listen((_) {
132 fooValues.add(fooPath.value); 130 fooValues.add(fooPath.value);
133 }); 131 });
134 arr[sym('foo')] = 'baz'; 132 arr[#foo] = 'baz';
135 arr[sym('bat')] = 'bag'; 133 arr[#bat] = 'bag';
136 var batValues = []; 134 var batValues = [];
137 var batPath = observePath(arr, 'bat'); 135 var batPath = observePath(arr, 'bat');
138 var batSub = batPath.changes.listen((_) { 136 var batSub = batPath.changes.listen((_) {
139 batValues.add(batPath.value); 137 batValues.add(batPath.value);
140 }); 138 });
141 139
142 performMicrotaskCheckpoint(); 140 performMicrotaskCheckpoint();
143 expect(fooValues, ['baz']); 141 expect(fooValues, ['baz']);
144 expect(batValues, []); 142 expect(batValues, []);
145 143
146 arr[sym('foo')] = 'bar'; 144 arr[#foo] = 'bar';
147 fooSub.cancel(); 145 fooSub.cancel();
148 arr[sym('bat')] = 'boo'; 146 arr[#bat] = 'boo';
149 batSub.cancel(); 147 batSub.cancel();
150 arr[sym('bat')] = 'boot'; 148 arr[#bat] = 'boot';
151 149
152 performMicrotaskCheckpoint(); 150 performMicrotaskCheckpoint();
153 expect(fooValues, ['baz']); 151 expect(fooValues, ['baz']);
154 expect(batValues, []); 152 expect(batValues, []);
155 }); 153 });
156 154
157 observeTest('Path Value With Indices', () { 155 observeTest('Path Value With Indices', () {
158 var model = toObservable([]); 156 var model = toObservable([]);
159 var path = observePath(model, '0'); 157 var path = observePath(model, '0');
160 path.changes.listen(expectAsync1((_) { 158 path.changes.listen(expectAsync1((_) {
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 } 206 }
209 207
210 observeTest('observe map', () { 208 observeTest('observe map', () {
211 var model = toSymbolMap({'a': 1}); 209 var model = toSymbolMap({'a': 1});
212 var path = observePath(model, 'a'); 210 var path = observePath(model, 'a');
213 211
214 var values = [path.value]; 212 var values = [path.value];
215 var sub = path.changes.listen((_) { values.add(path.value); }); 213 var sub = path.changes.listen((_) { values.add(path.value); });
216 expect(values, [1]); 214 expect(values, [1]);
217 215
218 model[sym('a')] = 2; 216 model[#a] = 2;
219 performMicrotaskCheckpoint(); 217 performMicrotaskCheckpoint();
220 expect(values, [1, 2]); 218 expect(values, [1, 2]);
221 219
222 sub.cancel(); 220 sub.cancel();
223 model[sym('a')] = 3; 221 model[#a] = 3;
224 performMicrotaskCheckpoint(); 222 performMicrotaskCheckpoint();
225 expect(values, [1, 2]); 223 expect(values, [1, 2]);
226 }); 224 });
227 } 225 }
228 226
229 class TestModel extends ChangeNotifierBase { 227 class TestModel extends ChangeNotifierBase {
230 var _a, _b, _c; 228 var _a, _b, _c;
231 229
232 TestModel(); 230 TestModel();
233 231
234 get a => _a; 232 get a => _a;
235 233
236 void set a(newValue) { 234 void set a(newValue) {
237 _a = notifyPropertyChange(const Symbol('a'), _a, newValue); 235 _a = notifyPropertyChange(#a, _a, newValue);
238 } 236 }
239 237
240 get b => _b; 238 get b => _b;
241 239
242 void set b(newValue) { 240 void set b(newValue) {
243 _b = notifyPropertyChange(const Symbol('b'), _b, newValue); 241 _b = notifyPropertyChange(#b, _b, newValue);
244 } 242 }
245 243
246 get c => _c; 244 get c => _c;
247 245
248 void set c(newValue) { 246 void set c(newValue) {
249 _c = notifyPropertyChange(const Symbol('c'), _c, newValue); 247 _c = notifyPropertyChange(#c, _c, newValue);
250 } 248 }
251 } 249 }
252 250
253 class WatcherModel extends ObservableBase { 251 class WatcherModel extends ObservableBase {
254 // TODO(jmesserly): dart2js does not let these be on the same line: 252 // TODO(jmesserly): dart2js does not let these be on the same line:
255 // @observable var a, b, c; 253 // @observable var a, b, c;
256 @observable var a; 254 @observable var a;
257 @observable var b; 255 @observable var b;
258 @observable var c; 256 @observable var c;
259 257
260 WatcherModel(); 258 WatcherModel();
261 } 259 }
OLDNEW
« no previous file with comments | « pkg/observe/test/observe_test.dart ('k') | pkg/path/lib/path.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698