blob: 02eadbed5c3d0a67fb3ebdff10e3c5e5d89b2db4 [file] [log] [blame]
// 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),
);
}
}