| OLD | NEW |
| 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 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 | 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 import 'dart:async'; | 5 import 'dart:async'; |
| 6 | 6 |
| 7 import 'package:front_end/compiler_options.dart'; | 7 import 'package:front_end/compiler_options.dart'; |
| 8 import 'package:front_end/dependency_grapher.dart'; | 8 import 'package:front_end/dependency_grapher.dart'; |
| 9 import 'package:front_end/memory_file_system.dart'; | 9 import 'package:front_end/memory_file_system.dart'; |
| 10 import 'package:path/path.dart' as pathos; | 10 import 'package:path/path.dart' as pathos; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 24 List<String> parts: const []}) { | 24 List<String> parts: const []}) { |
| 25 var library = cycle.libraries[Uri.parse(uri)]; | 25 var library = cycle.libraries[Uri.parse(uri)]; |
| 26 expect('${library.uri}', uri); | 26 expect('${library.uri}', uri); |
| 27 expect(library.dependencies.map((dep) => '${dep.uri}'), | 27 expect(library.dependencies.map((dep) => '${dep.uri}'), |
| 28 unorderedEquals(dependencies)); | 28 unorderedEquals(dependencies)); |
| 29 expect(library.parts.map((part) => '$part'), unorderedEquals(parts)); | 29 expect(library.parts.map((part) => '$part'), unorderedEquals(parts)); |
| 30 return library; | 30 return library; |
| 31 } | 31 } |
| 32 | 32 |
| 33 Future<List<LibraryCycleNode>> getCycles(Map<String, String> contents, | 33 Future<List<LibraryCycleNode>> getCycles(Map<String, String> contents, |
| 34 {List<String> startingPoints, String packagesFilePath = ''}) async { | 34 {List<String> startingPoints, String packagesFilePath}) async { |
| 35 // If no starting points given, assume the first entry in [contents] is the | 35 // If no starting points given, assume the first entry in [contents] is the |
| 36 // single starting point. | 36 // single starting point. |
| 37 startingPoints ??= [contents.keys.first]; | 37 startingPoints ??= [contents.keys.first]; |
| 38 var fileSystem = new MemoryFileSystem(Uri.parse('file:///')); | 38 var fileSystem = new MemoryFileSystem(Uri.parse('file:///')); |
| 39 if (packagesFilePath == null) { |
| 40 fileSystem.entityForUri(Uri.parse('.packages')).writeAsStringSync(''); |
| 41 } |
| 39 contents.forEach((path, text) { | 42 contents.forEach((path, text) { |
| 40 fileSystem.entityForUri(pathos.posix.toUri(path)).writeAsStringSync(text); | 43 fileSystem.entityForUri(pathos.posix.toUri(path)).writeAsStringSync(text); |
| 41 }); | 44 }); |
| 42 // TODO(paulberry): implement and test other option possibilities. | 45 // TODO(paulberry): implement and test other option possibilities. |
| 43 var options = new CompilerOptions() | 46 var options = new CompilerOptions() |
| 44 ..fileSystem = fileSystem | 47 ..fileSystem = fileSystem |
| 45 ..chaseDependencies = true | 48 ..chaseDependencies = true |
| 46 ..packagesFileUri = packagesFilePath == '' | 49 ..packagesFileUri = packagesFilePath == null |
| 47 ? new Uri() | 50 ? Uri.parse('.packages') |
| 48 : pathos.posix.toUri(packagesFilePath); | 51 : pathos.posix.toUri(packagesFilePath); |
| 49 var graph = await graphForProgram( | 52 var graph = await graphForProgram( |
| 50 startingPoints.map(pathos.posix.toUri).toList(), options); | 53 startingPoints.map(pathos.posix.toUri).toList(), options); |
| 51 return graph.topologicallySortedCycles; | 54 return graph.topologicallySortedCycles; |
| 52 } | 55 } |
| 53 | 56 |
| 54 /// Sort the given library cycles into a deterministic order based on their | 57 /// Sort the given library cycles into a deterministic order based on their |
| 55 /// URIs for easier unit testing. | 58 /// URIs for easier unit testing. |
| 56 List<LibraryCycleNode> sortCycles(Iterable<LibraryCycleNode> cycles) { | 59 List<LibraryCycleNode> sortCycles(Iterable<LibraryCycleNode> cycles) { |
| 57 var result = cycles.toList(); | 60 var result = cycles.toList(); |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 186 expect(bar.dependencies[0], same(foo)); | 189 expect(bar.dependencies[0], same(foo)); |
| 187 } | 190 } |
| 188 | 191 |
| 189 test_singleFile() async { | 192 test_singleFile() async { |
| 190 var cycles = await getCycles({'/foo.dart': ''}); | 193 var cycles = await getCycles({'/foo.dart': ''}); |
| 191 expect(cycles, hasLength(1)); | 194 expect(cycles, hasLength(1)); |
| 192 expect(cycles[0].libraries, hasLength(1)); | 195 expect(cycles[0].libraries, hasLength(1)); |
| 193 checkLibrary(cycles[0], 'file:///foo.dart'); | 196 checkLibrary(cycles[0], 'file:///foo.dart'); |
| 194 } | 197 } |
| 195 } | 198 } |
| OLD | NEW |