OLD | NEW |
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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 library dart.pkg.isolate.test.registry; | 5 library isolate.test.registry_test; |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 import 'dart:isolate'; | 8 import 'dart:isolate'; |
9 | 9 |
10 import 'package:isolate/isolate_runner.dart'; | 10 import 'package:isolate/isolate_runner.dart'; |
11 import 'package:isolate/registry.dart'; | 11 import 'package:isolate/registry.dart'; |
12 | 12 |
13 import 'package:unittest/unittest.dart'; | 13 import 'package:unittest/unittest.dart'; |
14 | 14 |
15 const MS = const Duration(milliseconds: 1); | 15 const MS = const Duration(milliseconds: 1); |
16 | 16 |
17 void main() { | 17 void main() { |
18 testLookup(); | 18 group('lookup', testLookup); |
19 testAddLookup(); | 19 group('AddLookup', testAddLookup); |
20 testAddRemoveTags(); | 20 group('AddRemoveTags', testAddRemoveTags); |
21 testRemove(); | 21 group('Remove', testRemove); |
22 testCrossIsolate(); | 22 group('CrossIsolate', testCrossIsolate); |
23 testTimeout(); | 23 group('Timeout', testTimeout); |
24 testMultiRegistry(); | 24 group('MultiRegistry', testMultiRegistry); |
25 testObjectsAndTags(); | 25 group('ObjectsAndTags', testObjectsAndTags); |
26 } | 26 } |
27 | 27 |
28 class Oddity { | 28 class Oddity { |
29 static const int EVEN = 0; | 29 static const int EVEN = 0; |
30 static const int ODD = 1; | 30 static const int ODD = 1; |
31 } | 31 } |
32 | 32 |
33 Future<List> waitAll(int n, Future action(int n)) { | 33 Future<List> waitAll(int n, Future action(int n)) { |
34 return Future.wait(new Iterable.generate(n, action)); | 34 return Future.wait(new Iterable.generate(n, action)); |
35 } | 35 } |
36 | 36 |
37 void testLookup() { | 37 void testLookup() { |
38 test("lookupAll", () { | 38 test("All", () { |
39 RegistryManager regman = new RegistryManager(); | 39 RegistryManager regman = new RegistryManager(); |
40 Registry registry = regman.registry; | 40 Registry registry = regman.registry; |
41 return waitAll(10, (i) { | 41 return waitAll(10, (i) { |
42 var element = new Element(i); | 42 var element = new Element(i); |
43 var tag = i.isEven ? Oddity.EVEN : Oddity.ODD; | 43 var tag = i.isEven ? Oddity.EVEN : Oddity.ODD; |
44 return registry.add(element, tags: [tag]); | 44 return registry.add(element, tags: [tag]); |
45 }).then((_) { | 45 }).then((_) { |
46 return registry.lookup(); | 46 return registry.lookup(); |
47 }).then((all) { | 47 }).then((all) { |
48 expect(all.length, 10); | 48 expect(all.length, 10); |
49 expect(all.map((v) => v.id).toList()..sort(), | 49 expect(all.map((v) => v.id).toList()..sort(), |
50 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]); | 50 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]); |
51 }) | 51 }) |
52 .whenComplete(regman.close); | 52 .whenComplete(regman.close); |
53 }); | 53 }); |
54 | 54 |
55 test("lookupOdd", () { | 55 test("Odd", () { |
56 RegistryManager regman = new RegistryManager(); | 56 RegistryManager regman = new RegistryManager(); |
57 Registry registry = regman.registry; | 57 Registry registry = regman.registry; |
58 return waitAll(10, (i) { | 58 return waitAll(10, (i) { |
59 var element = new Element(i); | 59 var element = new Element(i); |
60 var tag = i.isEven ? Oddity.EVEN : Oddity.ODD; | 60 var tag = i.isEven ? Oddity.EVEN : Oddity.ODD; |
61 return registry.add(element, tags: [tag]); | 61 return registry.add(element, tags: [tag]); |
62 }).then((_) { | 62 }).then((_) { |
63 return registry.lookup(tags:[Oddity.ODD]); | 63 return registry.lookup(tags:[Oddity.ODD]); |
64 }).then((all) { | 64 }).then((all) { |
65 expect(all.length, 5); | 65 expect(all.length, 5); |
66 expect(all.map((v) => v.id).toList()..sort(), | 66 expect(all.map((v) => v.id).toList()..sort(), |
67 [1, 3, 5, 7, 9]); | 67 [1, 3, 5, 7, 9]); |
68 }) | 68 }) |
69 .whenComplete(regman.close); | 69 .whenComplete(regman.close); |
70 }); | 70 }); |
71 | 71 |
72 test("lookupMax", () { | 72 test("Max", () { |
73 RegistryManager regman = new RegistryManager(); | 73 RegistryManager regman = new RegistryManager(); |
74 Registry registry = regman.registry; | 74 Registry registry = regman.registry; |
75 return waitAll(10, (i) { | 75 return waitAll(10, (i) { |
76 var element = new Element(i); | 76 var element = new Element(i); |
77 var tag = i.isEven ? Oddity.EVEN : Oddity.ODD; | 77 var tag = i.isEven ? Oddity.EVEN : Oddity.ODD; |
78 return registry.add(element, tags: [tag]); | 78 return registry.add(element, tags: [tag]); |
79 }).then((_) { | 79 }).then((_) { |
80 return registry.lookup(max: 5); | 80 return registry.lookup(max: 5); |
81 }).then((all) { | 81 }).then((all) { |
82 expect(all.length, 5); | 82 expect(all.length, 5); |
83 }) | 83 }) |
84 .whenComplete(regman.close); | 84 .whenComplete(regman.close); |
85 }); | 85 }); |
86 | 86 |
87 test("lookupMultiTag", () { | 87 test("MultiTag", () { |
88 RegistryManager regman = new RegistryManager(); | 88 RegistryManager regman = new RegistryManager(); |
89 Registry registry = regman.registry; | 89 Registry registry = regman.registry; |
90 return waitAll(25, (i) { | 90 return waitAll(25, (i) { |
91 var element = new Element(i); | 91 var element = new Element(i); |
92 // Collect all numbers dividing i. | 92 // Collect all numbers dividing i. |
93 var tags = [i]; | 93 var tags = [i]; |
94 for (int j = 2; j < 25; j++) { | 94 for (int j = 2; j < 25; j++) { |
95 if (i % j == 0) tags.add(j); | 95 if (i % j == 0) tags.add(j); |
96 } | 96 } |
97 return registry.add(element, tags: tags); | 97 return registry.add(element, tags: tags); |
98 }).then((_) { | 98 }).then((_) { |
99 return registry.lookup(tags: [2, 3]); | 99 return registry.lookup(tags: [2, 3]); |
100 }).then((all) { | 100 }).then((all) { |
101 expect(all.length, 5); | 101 expect(all.length, 5); |
102 expect(all.map((v) => v.id).toList()..sort(), | 102 expect(all.map((v) => v.id).toList()..sort(), |
103 [0, 6, 12, 18, 24]); | 103 [0, 6, 12, 18, 24]); |
104 }) | 104 }) |
105 .whenComplete(regman.close); | 105 .whenComplete(regman.close); |
106 }); | 106 }); |
107 | 107 |
108 test("lookupMultiTagMax", () { | 108 test("MultiTagMax", () { |
109 RegistryManager regman = new RegistryManager(); | 109 RegistryManager regman = new RegistryManager(); |
110 Registry registry = regman.registry; | 110 Registry registry = regman.registry; |
111 return waitAll(25, (i) { | 111 return waitAll(25, (i) { |
112 var element = new Element(i); | 112 var element = new Element(i); |
113 // Collect all numbers dividing i. | 113 // Collect all numbers dividing i. |
114 var tags = [i]; | 114 var tags = [i]; |
115 for (int j = 2; j < 25; j++) { | 115 for (int j = 2; j < 25; j++) { |
116 if (i % j == 0) tags.add(j); | 116 if (i % j == 0) tags.add(j); |
117 } | 117 } |
118 return registry.add(element, tags: tags); | 118 return registry.add(element, tags: tags); |
(...skipping 411 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
530 } | 530 } |
531 | 531 |
532 class Element { | 532 class Element { |
533 final int id; | 533 final int id; |
534 Element(this.id); | 534 Element(this.id); |
535 int get hashCode => id; | 535 int get hashCode => id; |
536 bool operator ==(Object other) => other is Element && id == other.id; | 536 bool operator ==(Object other) => other is Element && id == other.id; |
537 } | 537 } |
538 | 538 |
539 void topLevelFunction() {} | 539 void topLevelFunction() {} |
OLD | NEW |