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

Side by Side Diff: test/typed_wrapper/list_test.dart

Issue 1840573002: Add type-asserting wrapper constructors. (Closed) Base URL: git@github.com:dart-lang/collection@master
Patch Set: Code review changes Created 4 years, 8 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
« no previous file with comments | « test/typed_wrapper/iterable_test.dart ('k') | test/typed_wrapper/map_test.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2016, 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 'dart:math' as math;
6
7 import "package:collection/collection.dart";
8 import "package:test/test.dart";
9
10 import '../utils.dart';
11
12 void main() {
13 group("with valid types, forwards", () {
14 var wrapper;
15 var emptyWrapper;
16 setUp(() {
17 wrapper = DelegatingList.typed/*<int>*/(<Object>[1, 2, 3, 4, 5]);
18 emptyWrapper = DelegatingList.typed/*<int>*/(<Object>[]);
19 });
20
21 test("[]", () {
22 expect(wrapper[0], equals(1));
23 expect(wrapper[1], equals(2));
24 expect(() => wrapper[-1], throwsRangeError);
25 expect(() => wrapper[10], throwsRangeError);
26 });
27
28 test("[]=", () {
29 wrapper[1] = 10;
30 wrapper[3] = 15;
31 expect(wrapper, equals([1, 10, 3, 15, 5]));
32 expect(() => wrapper[-1] = 10, throwsRangeError);
33 expect(() => wrapper[10] = 10, throwsRangeError);
34 });
35
36 test("add()", () {
37 wrapper.add(6);
38 wrapper.add(7);
39 expect(wrapper, equals([1, 2, 3, 4, 5, 6, 7]));
40 });
41
42 test("addAll()", () {
43 wrapper.addAll([6, 7, 8]);
44 expect(wrapper, equals([1, 2, 3, 4, 5, 6, 7, 8]));
45 });
46
47 test("asMap()", () {
48 expect(wrapper.asMap(), equals({0: 1, 1: 2, 2: 3, 3: 4, 4: 5}));
49 });
50
51 test("clear()", () {
52 wrapper.clear();
53 expect(wrapper, isEmpty);
54 });
55
56 test("fillRange()", () {
57 wrapper.fillRange(2, 4);
58 expect(wrapper, equals([1, 2, null, null, 5]));
59
60 wrapper.fillRange(1, 2, 7);
61 expect(wrapper, equals([1, 7, null, null, 5]));
62
63 expect(() => wrapper.fillRange(-1, 2), throwsRangeError);
64 expect(() => wrapper.fillRange(1, 10), throwsRangeError);
65 expect(() => wrapper.fillRange(4, 2), throwsRangeError);
66 expect(() => wrapper.fillRange(10, 12), throwsRangeError);
67 });
68
69 test("getRange()", () {
70 expect(wrapper.getRange(2, 4), equals([3, 4]));
71 expect(wrapper.getRange(1, 2), equals([2]));
72
73 expect(() => wrapper.getRange(-1, 2), throwsRangeError);
74 expect(() => wrapper.getRange(1, 10), throwsRangeError);
75 expect(() => wrapper.getRange(4, 2), throwsRangeError);
76 expect(() => wrapper.getRange(10, 12), throwsRangeError);
77 });
78
79 test("indexOf()", () {
80 expect(wrapper.indexOf(4), equals(3));
81 expect(wrapper.indexOf(10), equals(-1));
82 expect(wrapper.indexOf(4, 2), equals(3));
83 expect(wrapper.indexOf(4, 4), equals(-1));
84 });
85
86 test("insert()", () {
87 wrapper.insert(3, 10);
88 expect(wrapper, equals([1, 2, 3, 10, 4, 5]));
89
90 wrapper.insert(0, 15);
91 expect(wrapper, equals([15, 1, 2, 3, 10, 4, 5]));
92
93 expect(() => wrapper.insert(-1, 0), throwsRangeError);
94 expect(() => wrapper.insert(10, 0), throwsRangeError);
95 });
96
97 test("insertAll()", () {
98 wrapper.insertAll(3, [10, 11, 12]);
99 expect(wrapper, equals([1, 2, 3, 10, 11, 12, 4, 5]));
100
101 wrapper.insertAll(0, [15, 16, 17]);
102 expect(wrapper, equals([15, 16, 17, 1, 2, 3, 10, 11, 12, 4, 5]));
103
104 expect(() => wrapper.insertAll(-1, []), throwsRangeError);
105 expect(() => wrapper.insertAll(100, []), throwsRangeError);
106 });
107
108 test("lastIndexOf()", () {
109 expect(wrapper.lastIndexOf(4), equals(3));
110 expect(wrapper.lastIndexOf(10), equals(-1));
111 expect(wrapper.lastIndexOf(4, 4), equals(3));
112 expect(wrapper.lastIndexOf(4, 2), equals(-1));
113 });
114
115 test("length=", () {
116 wrapper.length = 10;
117 expect(wrapper, equals([1, 2, 3, 4, 5, null, null, null, null, null]));
118
119 wrapper.length = 3;
120 expect(wrapper, equals([1, 2, 3]));
121 });
122
123 test("remove()", () {
124 expect(wrapper.remove(3), isTrue);
125 expect(wrapper, equals([1, 2, 4, 5]));
126
127 expect(wrapper.remove(3), isFalse);
128 expect(wrapper.remove("foo"), isFalse);
129 });
130
131 test("removeAt()", () {
132 expect(wrapper.removeAt(3), equals(4));
133 expect(wrapper, equals([1, 2, 3, 5]));
134
135 expect(() => wrapper.removeAt(-1), throwsRangeError);
136 expect(() => wrapper.removeAt(10), throwsRangeError);
137 });
138
139 test("removeLast()", () {
140 expect(wrapper.removeLast(), equals(5));
141 expect(wrapper, equals([1, 2, 3, 4]));
142
143 // See sdk#26087. We want this to pass with the current implementation and
144 // with the fix.
145 expect(() => emptyWrapper.removeLast(),
146 anyOf(throwsStateError, throwsRangeError));
147 });
148
149 test("removeRange()", () {
150 wrapper.removeRange(2, 4);
151 expect(wrapper, equals([1, 2, 5]));
152
153 expect(() => wrapper.removeRange(-1, 2), throwsRangeError);
154 expect(() => wrapper.removeRange(1, 10), throwsRangeError);
155 expect(() => wrapper.removeRange(4, 2), throwsRangeError);
156 expect(() => wrapper.removeRange(10, 12), throwsRangeError);
157 });
158
159 test("removeWhere()", () {
160 wrapper.removeWhere((i) => i.isOdd);
161 expect(wrapper, equals([2, 4]));
162 });
163
164 test("replaceRange()", () {
165 wrapper.replaceRange(2, 4, [10, 11, 12]);
166 expect(wrapper, equals([1, 2, 10, 11, 12, 5]));
167
168 expect(() => wrapper.replaceRange(-1, 2, []), throwsRangeError);
169 expect(() => wrapper.replaceRange(1, 10, []), throwsRangeError);
170 expect(() => wrapper.replaceRange(4, 2, []), throwsRangeError);
171 expect(() => wrapper.replaceRange(10, 12, []), throwsRangeError);
172 });
173
174 test("retainWhere()", () {
175 wrapper.retainWhere((i) => i.isOdd);
176 expect(wrapper, equals([1, 3, 5]));
177 });
178
179 test("reversed", () {
180 expect(wrapper.reversed, equals([5, 4, 3, 2, 1]));
181 });
182
183 test("setAll()", () {
184 wrapper.setAll(2, [10, 11]);
185 expect(wrapper, equals([1, 2, 10, 11, 5]));
186
187 expect(() => wrapper.setAll(-1, []), throwsRangeError);
188 expect(() => wrapper.setAll(10, []), throwsRangeError);
189 });
190
191 test("setRange()", () {
192 wrapper.setRange(2, 4, [10, 11, 12]);
193 expect(wrapper, equals([1, 2, 10, 11, 5]));
194
195 wrapper.setRange(2, 4, [10, 11, 12], 1);
196 expect(wrapper, equals([1, 2, 11, 12, 5]));
197
198 expect(() => wrapper.setRange(-1, 2, []), throwsRangeError);
199 expect(() => wrapper.setRange(1, 10, []), throwsRangeError);
200 expect(() => wrapper.setRange(4, 2, []), throwsRangeError);
201 expect(() => wrapper.setRange(10, 12, []), throwsRangeError);
202 expect(() => wrapper.setRange(2, 4, []), throwsStateError);
203 });
204
205 test("shuffle()", () {
206 wrapper.shuffle(new math.Random(1234));
207 expect(wrapper, equals([1, 2, 3, 4, 5]..shuffle(new math.Random(1234))));
208 });
209
210 test("sort()", () {
211 wrapper.sort((a, b) => b.compareTo(a));
212 expect(wrapper, equals([5, 4, 3, 2, 1]));
213
214 wrapper.sort();
215 expect(wrapper, equals([1, 2, 3, 4, 5]));
216 });
217
218 test("sublist()", () {
219 expect(wrapper.sublist(2), equals([3, 4, 5]));
220 expect(wrapper.sublist(2, 4), equals([3, 4]));
221 });
222 });
223
224 group("with invalid types", () {
225 var inner;
226 var wrapper;
227 setUp(() {
228 inner = <Object>["foo", "bar", "baz"];
229 wrapper = DelegatingList.typed/*<int>*/(inner);
230 });
231
232 group("throws a CastError for", () {
233 test("[]", () {
234 expect(() => wrapper[0], throwsCastError);
235 });
236
237 test("asMap()", () {
238 var map = wrapper.asMap();
239 expect(() => map[1], throwsCastError);
240 });
241
242 test("getRange()", () {
243 var lazy = wrapper.getRange(1, 2);
244 expect(() => lazy.first, throwsCastError);
245 });
246
247 test("removeAt()", () {
248 expect(() => wrapper.removeAt(2), throwsCastError);
249 });
250
251 test("removeLast()", () {
252 expect(() => wrapper.removeLast(), throwsCastError);
253 });
254
255 test("removeWhere()", () {
256 expect(() => wrapper.removeWhere(expectAsync((_) => false, count: 0)),
257 throwsCastError);
258 });
259
260 test("retainWhere()", () {
261 expect(() => wrapper.retainWhere(expectAsync((_) => false, count: 0)),
262 throwsCastError);
263 });
264
265 test("reversed", () {
266 var lazy = wrapper.reversed;
267 expect(() => lazy.first, throwsCastError);
268 });
269
270 test("sort()", () {
271 expect(() => wrapper.sort(expectAsync((_, __) => 0, count: 0)),
272 throwsCastError);
273 });
274
275 test("sublist()", () {
276 var list = wrapper.sublist(1);
277 expect(() => list[0], throwsCastError);
278 });
279 });
280
281 group("doesn't throw a CastError for", () {
282 test("[]", () {
283 expect(() => wrapper[-1], throwsRangeError);
284 expect(() => wrapper[10], throwsRangeError);
285 });
286
287 test("[]=", () {
288 wrapper[1] = 10;
289 expect(inner, equals(["foo", 10, "baz"]));
290 expect(() => wrapper[-1] = 10, throwsRangeError);
291 expect(() => wrapper[10] = 10, throwsRangeError);
292 });
293
294 test("add()", () {
295 wrapper.add(6);
296 wrapper.add(7);
297 expect(inner, equals(["foo", "bar", "baz", 6, 7]));
298 });
299
300 test("addAll()", () {
301 wrapper.addAll([6, 7, 8]);
302 expect(inner, equals(["foo", "bar", "baz", 6, 7, 8]));
303 });
304
305 test("clear()", () {
306 wrapper.clear();
307 expect(wrapper, isEmpty);
308 });
309
310 test("fillRange()", () {
311 wrapper.fillRange(1, 3, 7);
312 expect(inner, equals(["foo", 7, 7]));
313
314 expect(() => wrapper.fillRange(-1, 2), throwsRangeError);
315 expect(() => wrapper.fillRange(1, 10), throwsRangeError);
316 expect(() => wrapper.fillRange(4, 2), throwsRangeError);
317 expect(() => wrapper.fillRange(10, 12), throwsRangeError);
318 });
319
320 test("getRange()", () {
321 expect(() => wrapper.getRange(-1, 2), throwsRangeError);
322 expect(() => wrapper.getRange(1, 10), throwsRangeError);
323 expect(() => wrapper.getRange(4, 2), throwsRangeError);
324 expect(() => wrapper.getRange(10, 12), throwsRangeError);
325 });
326
327 test("indexOf()", () {
328 expect(wrapper.indexOf(4), equals(-1));
329 });
330
331 test("insert()", () {
332 wrapper.insert(0, 15);
333 expect(inner, equals([15, "foo", "bar", "baz"]));
334
335 expect(() => wrapper.insert(-1, 0), throwsRangeError);
336 expect(() => wrapper.insert(10, 0), throwsRangeError);
337 });
338
339 test("insertAll()", () {
340 wrapper.insertAll(0, [15, 16, 17]);
341 expect(inner, equals([15, 16, 17, "foo", "bar", "baz"]));
342
343 expect(() => wrapper.insertAll(-1, []), throwsRangeError);
344 expect(() => wrapper.insertAll(100, []), throwsRangeError);
345 });
346
347 test("lastIndexOf()", () {
348 expect(wrapper.lastIndexOf(4), equals(-1));
349 });
350
351 test("length=", () {
352 wrapper.length = 5;
353 expect(inner, equals(["foo", "bar", "baz", null, null]));
354
355 wrapper.length = 1;
356 expect(inner, equals(["foo"]));
357 });
358
359 test("remove()", () {
360 expect(wrapper.remove(3), isFalse);
361 expect(wrapper.remove("foo"), isTrue);
362 expect(inner, equals(["bar", "baz"]));
363 });
364
365 test("removeAt()", () {
366 expect(() => wrapper.removeAt(-1), throwsRangeError);
367 expect(() => wrapper.removeAt(10), throwsRangeError);
368 });
369
370 test("removeRange()", () {
371 wrapper.removeRange(1, 3);
372 expect(inner, equals(["foo"]));
373
374 expect(() => wrapper.removeRange(-1, 2), throwsRangeError);
375 expect(() => wrapper.removeRange(1, 10), throwsRangeError);
376 expect(() => wrapper.removeRange(4, 2), throwsRangeError);
377 expect(() => wrapper.removeRange(10, 12), throwsRangeError);
378 });
379
380 test("replaceRange()", () {
381 wrapper.replaceRange(1, 2, [10, 11, 12]);
382 expect(inner, equals(["foo", 10, 11, 12, "baz"]));
383
384 expect(() => wrapper.replaceRange(-1, 2, []), throwsRangeError);
385 expect(() => wrapper.replaceRange(1, 10, []), throwsRangeError);
386 expect(() => wrapper.replaceRange(4, 2, []), throwsRangeError);
387 expect(() => wrapper.replaceRange(10, 12, []), throwsRangeError);
388 });
389
390 test("setAll()", () {
391 wrapper.setAll(1, [10, 11]);
392 expect(inner, equals(["foo", 10, 11]));
393
394 expect(() => wrapper.setAll(-1, []), throwsRangeError);
395 expect(() => wrapper.setAll(10, []), throwsRangeError);
396 });
397
398 test("setRange()", () {
399 wrapper.setRange(1, 2, [10, 11, 12]);
400 expect(inner, equals(["foo", 10, "baz"]));
401
402 expect(() => wrapper.setRange(-1, 2, []), throwsRangeError);
403 expect(() => wrapper.setRange(1, 10, []), throwsRangeError);
404 expect(() => wrapper.setRange(4, 2, []), throwsRangeError);
405 expect(() => wrapper.setRange(10, 12, []), throwsRangeError);
406 expect(() => wrapper.setRange(1, 2, []), throwsStateError);
407 });
408
409 test("shuffle()", () {
410 wrapper.shuffle(new math.Random(1234));
411 expect(inner,
412 equals(["foo", "bar", "baz"]..shuffle(new math.Random(1234))));
413 });
414
415 test("sort()", () {
416 wrapper.sort();
417 expect(inner, equals(["bar", "baz", "foo"]));
418 });
419 });
420 }, skip: "Re-enable this when test can run DDC (test#414).");
421 }
OLDNEW
« no previous file with comments | « test/typed_wrapper/iterable_test.dart ('k') | test/typed_wrapper/map_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698