| // Copyright (c) 2018, 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:analyzer/src/dart/analysis/analysis_context_collection.dart'; |
| import 'package:analyzer/src/test_utilities/mock_sdk.dart'; |
| import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart'; |
| import 'package:meta/meta.dart'; |
| import 'package:test/test.dart'; |
| import 'package:test_reflective_loader/test_reflective_loader.dart'; |
| |
| main() { |
| defineReflectiveSuite(() { |
| defineReflectiveTests(AnalysisContextCollectionTest); |
| }); |
| } |
| |
| @reflectiveTest |
| class AnalysisContextCollectionTest with ResourceProviderMixin { |
| void setUp() { |
| MockSdk(resourceProvider: resourceProvider); |
| } |
| |
| test_contextFor_noContext() { |
| var collection = _newCollection(includedPaths: [convertPath('/root')]); |
| expect( |
| () => collection.contextFor(convertPath('/other/test.dart')), |
| throwsStateError, |
| ); |
| } |
| |
| test_contextFor_notAbsolute() { |
| var collection = _newCollection(includedPaths: [convertPath('/root')]); |
| expect( |
| () => collection.contextFor(convertPath('test.dart')), |
| throwsArgumentError, |
| ); |
| } |
| |
| test_contextFor_notNormalized() { |
| var collection = _newCollection(includedPaths: [convertPath('/root')]); |
| expect( |
| () => collection.contextFor(convertPath('/test/lib/../lib/test.dart')), |
| throwsArgumentError, |
| ); |
| } |
| |
| test_new_includedPaths_notAbsolute() { |
| expect( |
| () => AnalysisContextCollectionImpl(includedPaths: ['root']), |
| throwsArgumentError, |
| ); |
| } |
| |
| test_new_includedPaths_notNormalized() { |
| expect( |
| () => AnalysisContextCollectionImpl( |
| includedPaths: [convertPath('/root/lib/../lib')]), |
| throwsArgumentError, |
| ); |
| } |
| |
| test_new_outer_inner() { |
| var outerFolder = newFolder('/test/outer'); |
| newFile('/test/outer/lib/outer.dart'); |
| |
| var innerFolder = newFolder('/test/outer/inner'); |
| newOptionsFile('/test/outer/inner'); |
| newFile('/test/outer/inner/inner.dart'); |
| |
| var collection = _newCollection(includedPaths: [outerFolder.path]); |
| |
| expect(collection.contexts, hasLength(2)); |
| |
| var outerContext = collection.contexts |
| .singleWhere((c) => c.contextRoot.root == outerFolder); |
| var innerContext = collection.contexts |
| .singleWhere((c) => c.contextRoot.root == innerFolder); |
| expect(innerContext, isNot(same(outerContext))); |
| |
| // Outer and inner contexts own corresponding files. |
| expect(collection.contextFor(convertPath('/test/outer/lib/outer.dart')), |
| same(outerContext)); |
| expect(collection.contextFor(convertPath('/test/outer/inner/inner.dart')), |
| same(innerContext)); |
| |
| // The file does not have to exist, during creation, or at all. |
| expect(collection.contextFor(convertPath('/test/outer/lib/outer2.dart')), |
| same(outerContext)); |
| expect(collection.contextFor(convertPath('/test/outer/inner/inner2.dart')), |
| same(innerContext)); |
| } |
| |
| test_new_sdkPath_notAbsolute() { |
| expect( |
| () => AnalysisContextCollectionImpl( |
| includedPaths: ['/root'], sdkPath: 'sdk'), |
| throwsArgumentError, |
| ); |
| } |
| |
| test_new_sdkPath_notNormalized() { |
| expect( |
| () => AnalysisContextCollectionImpl( |
| includedPaths: [convertPath('/root')], sdkPath: '/home/sdk/../sdk'), |
| throwsArgumentError, |
| ); |
| } |
| |
| AnalysisContextCollectionImpl _newCollection( |
| {@required List<String> includedPaths}) { |
| return AnalysisContextCollectionImpl( |
| resourceProvider: resourceProvider, |
| includedPaths: includedPaths, |
| sdkPath: convertPath(sdkRoot), |
| ); |
| } |
| } |