| // Copyright (c) 2019, 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. |
| |
| import 'package:frontend_server/src/strong_components.dart'; |
| import 'package:kernel/ast.dart'; |
| import 'package:test/test.dart'; |
| |
| void main() { |
| test('empty component', () { |
| final Component testComponent = new Component(libraries: []); |
| final StrongComponents strongComponents = |
| new StrongComponents(testComponent, {}, new Uri.file('/c.dart')); |
| strongComponents.computeModules(); |
| |
| expect(strongComponents.modules, {}); |
| }); |
| |
| test('no circular imports', () { |
| final Library libraryA = new Library( |
| new Uri.file('/a.dart'), |
| fileUri: new Uri.file('/a.dart'), |
| ); |
| final Library libraryB = new Library( |
| new Uri.file('/b.dart'), |
| fileUri: new Uri.file('/b.dart'), |
| dependencies: [ |
| new LibraryDependency.import(libraryA), |
| ], |
| ); |
| final Library libraryC = new Library( |
| new Uri.file('/c.dart'), |
| fileUri: new Uri.file('/c.dart'), |
| dependencies: [ |
| new LibraryDependency.import(libraryB), |
| ], |
| ); |
| final Component testComponent = new Component(libraries: [ |
| libraryA, |
| libraryB, |
| libraryC, |
| ]); |
| final StrongComponents strongComponents = |
| new StrongComponents(testComponent, {}, new Uri.file('/c.dart')); |
| strongComponents.computeModules(); |
| |
| expect(strongComponents.modules, { |
| new Uri.file('/a.dart'): [libraryA], |
| new Uri.file('/b.dart'): [libraryB], |
| new Uri.file('/c.dart'): [libraryC], |
| }); |
| expect(strongComponents.moduleAssignment, { |
| new Uri.file('/a.dart'): new Uri.file('/a.dart'), |
| new Uri.file('/b.dart'): new Uri.file('/b.dart'), |
| new Uri.file('/c.dart'): new Uri.file('/c.dart'), |
| }); |
| }); |
| |
| test('no circular imports with partial component', () { |
| final Uri uriA = new Uri.file('/a.dart'); |
| final Library libraryA = new Library( |
| uriA, |
| fileUri: uriA, |
| ); |
| final Uri uriB = new Uri.file('/b.dart'); |
| final Library libraryB = new Library( |
| uriB, |
| fileUri: uriB, |
| dependencies: [ |
| new LibraryDependency.import(libraryA), |
| ], |
| ); |
| final Uri uriC = new Uri.file('/c.dart'); |
| final Library libraryC = new Library( |
| uriC, |
| fileUri: uriC, |
| dependencies: [ |
| new LibraryDependency.import(libraryB), |
| ], |
| ); |
| final Library partialA = new Library( |
| uriA, |
| fileUri: uriA, |
| ); |
| final Component testComponent = new Component(libraries: [ |
| libraryA, |
| libraryB, |
| libraryC, |
| ]); |
| final StrongComponents strongComponents = |
| new StrongComponents(testComponent, {}, uriC); |
| strongComponents.computeModules({uriA: partialA}); |
| |
| expect(strongComponents.modules, { |
| uriA: [partialA], |
| uriB: [libraryB], |
| uriC: [libraryC], |
| }); |
| expect(strongComponents.moduleAssignment, { |
| uriA: uriA, |
| uriB: uriB, |
| uriC: uriC, |
| }); |
| }); |
| |
| test('circular imports are combined into single module', () { |
| final Library libraryA = new Library( |
| new Uri.file('/a.dart'), |
| fileUri: new Uri.file('/a.dart'), |
| ); |
| final Library libraryB = new Library( |
| new Uri.file('/b.dart'), |
| fileUri: new Uri.file('/b.dart'), |
| ); |
| // induce circular import. |
| libraryB.dependencies.add(new LibraryDependency.import(libraryA)); |
| libraryA.dependencies.add(new LibraryDependency.import(libraryB)); |
| final Library libraryC = new Library( |
| new Uri.file('/c.dart'), |
| fileUri: new Uri.file('/c.dart'), |
| dependencies: [ |
| new LibraryDependency.import(libraryB), |
| ], |
| ); |
| final Component testComponent = new Component(libraries: [ |
| libraryA, |
| libraryB, |
| libraryC, |
| ]); |
| final StrongComponents strongComponents = |
| new StrongComponents(testComponent, {}, new Uri.file('/c.dart')); |
| strongComponents.computeModules(); |
| |
| expect(strongComponents.modules, { |
| // The choice of module here is arbitrary, but should be consistent for |
| // a given component. |
| new Uri.file('/a.dart'): [libraryA, libraryB], |
| new Uri.file('/c.dart'): [libraryC], |
| }); |
| expect(strongComponents.moduleAssignment, { |
| new Uri.file('/a.dart'): new Uri.file('/a.dart'), |
| new Uri.file('/b.dart'): new Uri.file('/a.dart'), |
| new Uri.file('/c.dart'): new Uri.file('/c.dart'), |
| }); |
| }); |
| |
| test('does not index loaded, dart:, or unimported libraries', () { |
| final Library libraryLoaded = new Library( |
| new Uri.file('a.dart'), |
| fileUri: new Uri.file('/a.dart'), |
| ); |
| final Library libraryDart = new Library( |
| Uri.parse('dart:foo'), |
| fileUri: new Uri.file('/b.dart'), |
| ); |
| final Library libraryUnrelated = new Library( |
| new Uri.file('/z.dart'), |
| fileUri: new Uri.file('/z.dart'), |
| ); |
| final Library libraryC = new Library( |
| new Uri.file('/c.dart'), |
| fileUri: new Uri.file('/c.dart'), |
| dependencies: [ |
| new LibraryDependency.import(libraryLoaded), |
| new LibraryDependency.import(libraryDart), |
| ], |
| ); |
| final Component testComponent = new Component(libraries: [ |
| libraryLoaded, |
| libraryDart, |
| libraryUnrelated, |
| libraryC, |
| ]); |
| final StrongComponents strongComponents = new StrongComponents( |
| testComponent, {libraryLoaded}, new Uri.file('/c.dart')); |
| strongComponents.computeModules(); |
| |
| expect(strongComponents.modules, { |
| new Uri.file('/c.dart'): [libraryC], |
| }); |
| expect(strongComponents.moduleAssignment, { |
| new Uri.file('/c.dart'): new Uri.file('/c.dart'), |
| }); |
| }); |
| } |