| Index: packages/initialize/test/initializer_custom_filter_test.dart
|
| diff --git a/packages/initialize/test/initializer_custom_filter_test.dart b/packages/initialize/test/initializer_custom_filter_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..f8f789dc97c33ac226c1347b1944d100a43d3e87
|
| --- /dev/null
|
| +++ b/packages/initialize/test/initializer_custom_filter_test.dart
|
| @@ -0,0 +1,62 @@
|
| +// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
|
| +// for details. All rights reserved. Use of this source code is governed by a
|
| +// BSD-style license that can be found in the LICENSE file.
|
| +library initialize.initializer_custom_filter_test;
|
| +
|
| +import 'dart:async';
|
| +import 'package:initialize/initialize.dart';
|
| +import 'package:unittest/unittest.dart';
|
| +import 'package:unittest/compact_vm_config.dart';
|
| +import 'package:initialize/src/initialize_tracker.dart';
|
| +
|
| +main() {
|
| + useCompactVMConfiguration();
|
| +
|
| + test('filter option limits which types of annotations will be ran', () {
|
| + var originalSize;
|
| + return runPhase(1).then((_) {
|
| + // Even though Baz extends Bar, only Baz should be run.
|
| + expect(InitializeTracker.seen, [Baz]);
|
| + }).then((_) => runPhase(2)).then((_) {
|
| + expect(InitializeTracker.seen, [Baz, foo]);
|
| + }).then((_) => runPhase(3)).then((_) {
|
| + expect(InitializeTracker.seen, [Baz, foo, Foo]);
|
| + }).then((_) => runPhase(4)).then((_) {
|
| + expect(InitializeTracker.seen, [Baz, foo, Foo, Bar]);
|
| + }).then((_) {
|
| + originalSize = InitializeTracker.seen.length;
|
| + })
|
| + .then((_) => runPhase(1))
|
| + .then((_) => runPhase(2))
|
| + .then((_) => runPhase(3))
|
| + .then((_) => runPhase(4))
|
| + .then((_) => run())
|
| + .then((_) {
|
| + expect(InitializeTracker.seen.length, originalSize);
|
| + });
|
| + });
|
| +}
|
| +
|
| +Future runPhase(int phase) => run(
|
| + customFilter: (Initializer meta) =>
|
| + meta is PhasedInitializer && meta.phase == phase);
|
| +
|
| +@PhasedInitializer(3)
|
| +class Foo {}
|
| +
|
| +@PhasedInitializer(2)
|
| +foo() {}
|
| +
|
| +@PhasedInitializer(4)
|
| +class Bar {}
|
| +
|
| +@PhasedInitializer(1)
|
| +class Baz extends Bar {}
|
| +
|
| +// Initializer that has a phase associated with it, this can be used in
|
| +// combination with a custom filter to run intialization in phases.
|
| +class PhasedInitializer extends InitializeTracker {
|
| + final int phase;
|
| +
|
| + const PhasedInitializer(this.phase);
|
| +}
|
|
|