Index: pkg/analysis_server/test/services/dependencies/reachable_source_collector_test.dart |
diff --git a/pkg/analysis_server/test/services/dependencies/reachable_source_collector_test.dart b/pkg/analysis_server/test/services/dependencies/reachable_source_collector_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..b0409264c2fbe7bcea71bf59c52138151481c59f |
--- /dev/null |
+++ b/pkg/analysis_server/test/services/dependencies/reachable_source_collector_test.dart |
@@ -0,0 +1,84 @@ |
+// 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 test.services.dependencies.import_collector; |
+ |
+import 'package:analysis_server/src/services/dependencies/reachable_source_collector.dart'; |
+import 'package:analyzer/src/generated/ast.dart'; |
+import 'package:analyzer/src/generated/source.dart'; |
+import 'package:test_reflective_loader/test_reflective_loader.dart'; |
+import 'package:unittest/unittest.dart'; |
+ |
+import '../../abstract_context.dart'; |
+import '../../utils.dart'; |
+ |
+main() { |
+ initializeTestEnvironment(); |
+ defineReflectiveTests(ReachableSourceCollectorTest); |
+} |
+ |
+@reflectiveTest |
+class ReachableSourceCollectorTest extends AbstractContextTest { |
+ CompilationUnit addLibrary(String path, String contents) => |
+ resolveLibraryUnit(addSource(path, contents)); |
+ |
+ Map<String, List<String>> importsFor(Source source) => |
+ new ReachableSourceCollector(source, context).collectSources(); |
+ |
+ test_null_context() { |
+ Source lib = addSource('/lib.dart', ''); |
+ expect(() => new ReachableSourceCollector(lib, null), |
+ throwsA(new isInstanceOf<ArgumentError>())); |
+ } |
+ |
+ test_null_source() { |
+ expect(() => new ReachableSourceCollector(null, context), |
+ throwsA(new isInstanceOf<ArgumentError>())); |
+ } |
+ |
+ test_sources() { |
+ Source lib1 = addSource( |
+ '/lib1.dart', |
+ ''' |
+import "lib2.dart"; |
+import "dart:html";'''); |
+ Source lib2 = addSource('/lib2.dart', 'import "lib1.dart";'); |
+ |
+ Source lib3 = addSource('/lib3.dart', 'import "lib4.dart";'); |
+ addSource('/lib4.dart', 'import "lib3.dart";'); |
+ |
+ Map<String, List<String>> imports = importsFor(lib1); |
+ |
+ // Verify keys. |
+ expect( |
+ imports.keys, |
+ unorderedEquals([ |
+ 'dart:_internal', |
+ 'dart:async', |
+ 'dart:core', |
+ 'dart:html', |
+ 'dart:math', |
+ 'file:///lib1.dart', |
+ 'file:///lib2.dart', |
+ ])); |
+ // Values. |
+ expect(imports['file:///lib1.dart'], |
+ unorderedEquals(['dart:core', 'dart:html', 'file:///lib2.dart'])); |
+ |
+ // Check transitivity. |
+ expect(importsFor(lib2).keys, contains('dart:html')); |
+ |
+ // Cycles should be OK. |
+ expect( |
+ importsFor(lib3).keys, |
+ unorderedEquals([ |
+ 'dart:_internal', |
+ 'dart:async', |
+ 'dart:core', |
+ 'dart:math', |
+ 'file:///lib3.dart', |
+ 'file:///lib4.dart' |
+ ])); |
+ } |
+} |