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 // TODO(jakemac): swap this to @TestOn('pub-serve') once | 5 // TODO(jakemac): swap this to @TestOn('pub-serve') once |
6 // https://github.com/dart-lang/test/issues/388 is completed. | 6 // https://github.com/dart-lang/test/issues/388 is completed. |
7 @TestOn('!js') | 7 @TestOn('!js') |
8 library initialize.initializer_custom_filter_test; | 8 library initialize.initializer_custom_filter_test; |
9 | 9 |
10 import 'dart:async'; | 10 import 'dart:async'; |
11 import 'package:initialize/initialize.dart'; | 11 import 'package:initialize/initialize.dart'; |
12 import 'package:test/test.dart'; | 12 import 'package:test/test.dart'; |
13 import 'package:initialize/src/initialize_tracker.dart'; | 13 import 'package:initialize/src/initialize_tracker.dart'; |
14 | 14 |
15 main() { | 15 main() { |
16 test('filter option limits which types of annotations will be ran', () { | 16 test('filter option limits which types of annotations will be ran', () { |
17 var originalSize; | 17 var originalSize; |
18 return runPhase(1).then((_) { | 18 return runPhase(1) |
19 // Even though Baz extends Bar, only Baz should be run. | 19 .then((_) { |
20 expect(InitializeTracker.seen, [Baz]); | 20 // Even though Baz extends Bar, only Baz should be run. |
21 }).then((_) => runPhase(2)).then((_) { | 21 expect(InitializeTracker.seen, [Baz]); |
22 expect(InitializeTracker.seen, [Baz, foo]); | 22 }) |
23 }).then((_) => runPhase(3)).then((_) { | 23 .then((_) => runPhase(2)) |
24 expect(InitializeTracker.seen, [Baz, foo, Foo]); | 24 .then((_) { |
25 }).then((_) => runPhase(4)).then((_) { | 25 expect(InitializeTracker.seen, [Baz, foo]); |
26 expect(InitializeTracker.seen, [Baz, foo, Foo, Bar]); | 26 }) |
27 }).then((_) { | 27 .then((_) => runPhase(3)) |
28 originalSize = InitializeTracker.seen.length; | 28 .then((_) { |
29 }) | 29 expect(InitializeTracker.seen, [Baz, foo, Foo]); |
| 30 }) |
| 31 .then((_) => runPhase(4)) |
| 32 .then((_) { |
| 33 expect(InitializeTracker.seen, [Baz, foo, Foo, Bar]); |
| 34 }) |
| 35 .then((_) { |
| 36 originalSize = InitializeTracker.seen.length; |
| 37 }) |
30 .then((_) => runPhase(1)) | 38 .then((_) => runPhase(1)) |
31 .then((_) => runPhase(2)) | 39 .then((_) => runPhase(2)) |
32 .then((_) => runPhase(3)) | 40 .then((_) => runPhase(3)) |
33 .then((_) => runPhase(4)) | 41 .then((_) => runPhase(4)) |
34 .then((_) => run()) | 42 .then((_) => run()) |
35 .then((_) { | 43 .then((_) { |
36 expect(InitializeTracker.seen.length, originalSize); | 44 expect(InitializeTracker.seen.length, originalSize); |
37 }); | 45 }); |
38 }); | 46 }); |
39 } | 47 } |
40 | 48 |
41 Future runPhase(int phase) => run( | 49 Future runPhase(int phase) => run( |
42 customFilter: (Initializer meta) => | 50 customFilter: (Initializer meta) => |
43 meta is PhasedInitializer && meta.phase == phase); | 51 meta is PhasedInitializer && meta.phase == phase); |
44 | 52 |
45 @PhasedInitializer(3) | 53 @PhasedInitializer(3) |
46 class Foo {} | 54 class Foo {} |
47 | 55 |
48 @PhasedInitializer(2) | 56 @PhasedInitializer(2) |
49 foo() {} | 57 foo() {} |
50 | 58 |
51 @PhasedInitializer(4) | 59 @PhasedInitializer(4) |
52 class Bar {} | 60 class Bar {} |
53 | 61 |
54 @PhasedInitializer(1) | 62 @PhasedInitializer(1) |
55 class Baz extends Bar {} | 63 class Baz extends Bar {} |
56 | 64 |
57 // Initializer that has a phase associated with it, this can be used in | 65 // Initializer that has a phase associated with it, this can be used in |
58 // combination with a custom filter to run intialization in phases. | 66 // combination with a custom filter to run intialization in phases. |
59 class PhasedInitializer extends InitializeTracker { | 67 class PhasedInitializer extends InitializeTracker { |
60 final int phase; | 68 final int phase; |
61 | 69 |
62 const PhasedInitializer(this.phase); | 70 const PhasedInitializer(this.phase); |
63 } | 71 } |
OLD | NEW |