blob: c39b2c1d3e921c6208ebe8ba00beb4c94e6a95ab [file] [log] [blame]
// Copyright (c) 2014, 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:analysis_server/protocol/protocol.dart';
import 'package:analysis_server/protocol/protocol_generated.dart';
import 'package:analysis_server/src/domain_analysis.dart';
import 'package:analyzer/src/util/file_paths.dart' as file_paths;
import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
import '../analysis_abstract.dart';
import '../mocks.dart';
void main() {
defineReflectiveSuite(() {
defineReflectiveTests(SetPriorityFilesTest);
});
}
@reflectiveTest
class SetPriorityFilesTest extends AbstractAnalysisTest {
@override
Future<void> setUp() async {
super.setUp();
server.handlers = [
AnalysisDomainHandler(server),
];
await createProject();
}
Future<void> test_fileDoesNotExist() async {
var file = convertPath('$projectPath/doesNotExist.dart');
var response = await _setPriorityFile(file);
expect(response, isResponseSuccess('0'));
}
Future<void> test_fileInAnalysisRoot() async {
addTestFile('');
// set priority files
var response = await _setPriorityFile(testFile);
expect(response, isResponseSuccess('0'));
// verify
_verifyPriorityFiles(testFile);
}
Future<void> test_fileInAnalysisRootAddedLater() async {
var path = convertPath('/other/file.dart');
newFile(path);
await _setPriorityFile(path);
await _setAnalysisRoots('/other');
_verifyPriorityFiles(path);
}
Future<void> test_fileInSdk() async {
addTestFile('');
// set priority files
var filePath = convertPath('/lib/convert/convert.dart');
var response = await _setPriorityFile(filePath);
expect(response, isResponseSuccess('0'));
// verify
_verifyPriorityFiles(filePath);
}
Future<void> test_fileNotInAnalysisRoot() async {
var path = convertPath('/other/file.dart');
newFile(path);
await _setPriorityFile(path);
_verifyPriorityFiles(path);
}
Future<void> test_ignoredInAnalysisOptions() async {
var sampleFile = convertPath('$projectPath/samples/sample.dart');
newFile('$projectPath/${file_paths.analysisOptionsYaml}', content: r'''
analyzer:
exclude:
- 'samples/**'
''');
newFile(sampleFile);
// attempt to set priority file
await _setPriorityFile(sampleFile);
_verifyPriorityFiles(sampleFile);
}
Future<void> test_ignoredInAnalysisOptions_inChildContext() async {
newDotPackagesFile(projectPath);
newDotPackagesFile('$projectPath/child');
var sampleFile = convertPath('$projectPath/child/samples/sample.dart');
newFile('$projectPath/child/${file_paths.analysisOptionsYaml}',
content: r'''
analyzer:
exclude:
- 'samples/**'
''');
newFile(sampleFile);
// attempt to set priority file
await _setPriorityFile(sampleFile);
_verifyPriorityFiles(sampleFile);
}
Future<void> test_ignoredInAnalysisOptions_inRootContext() async {
newDotPackagesFile(projectPath);
newDotPackagesFile('$projectPath/child');
var sampleFile = convertPath('$projectPath/child/samples/sample.dart');
newFile('$projectPath/${file_paths.analysisOptionsYaml}', content: r'''
analyzer:
exclude:
- 'child/samples/**'
''');
newFile(sampleFile);
// attempt to set priority file
await _setPriorityFile(sampleFile);
_verifyPriorityFiles(sampleFile);
}
Future<void> test_invalidFilePathFormat_notAbsolute() async {
var request = AnalysisSetPriorityFilesParams(['test.dart']).toRequest('0');
var response = await waitResponse(request);
expect(
response,
isResponseFailure('0', RequestErrorCode.INVALID_FILE_PATH_FORMAT),
);
}
Future<void> test_invalidFilePathFormat_notNormalized() async {
var request =
AnalysisSetPriorityFilesParams([convertPath('/foo/../bar/test.dart')])
.toRequest('0');
var response = await waitResponse(request);
expect(
response,
isResponseFailure('0', RequestErrorCode.INVALID_FILE_PATH_FORMAT),
);
}
Future<void> test_sentToPlugins() async {
addTestFile('');
// set priority files
var response = await _setPriorityFile(testFile);
expect(response, isResponseSuccess('0'));
// verify
var params = pluginManager.analysisSetPriorityFilesParams!;
expect(params.files, <String>[testFile]);
}
Future<Response> _setAnalysisRoots(String folder) async {
var request = AnalysisSetAnalysisRootsParams([folder], []).toRequest('1');
return await serverChannel.sendRequest(request);
}
Future<Response> _setPriorityFile(String file) async {
var request = AnalysisSetPriorityFilesParams(<String>[file]).toRequest('0');
return await serverChannel.sendRequest(request);
}
void _verifyPriorityFiles(String path) {
var driver = server.getAnalysisDriver(path)!;
var prioritySources = driver.priorityFiles;
expect(prioritySources, [path]);
}
}