Files
sdk/pkg/analysis_server/test/analysis/get_errors_test.dart
T
Danny Tuppeny 916272331b [analysis_server] Remove the singleton uriConverter and pass explicitly to all toJson/fromJson methods
This avoids accidentally using the converter when talking to plugins, (at least for now) URIs are never expected, and file paths should always be used regardless of which mode the server is in.

This unfortunately touches a _lot_ of code, so I've pushed in many separate patch sets to Gerrit.

Fixes https://github.com/Dart-Code/Dart-Code/issues/5156

Change-Id: I312c3e2cbc35a05a078aaa0138aec7288b3c7dd6
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/373745
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
2024-07-02 14:15:11 +00:00

137 lines
3.6 KiB
Dart

// 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:analyzer_plugin/protocol/protocol_common.dart';
import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
import '../analysis_server_base.dart';
void main() {
defineReflectiveSuite(() {
defineReflectiveTests(GetErrorsTest);
});
}
@reflectiveTest
class GetErrorsTest extends PubPackageAnalysisServerTest {
static const String _requestId = 'test-getError';
@override
Future<void> setUp() async {
super.setUp();
await setRoots(included: [workspaceRootPath], excluded: []);
}
Future<void> test_afterAnalysisComplete() async {
newFile(testFilePath, '''
void f() {
print(42)
}
''');
await waitForTasksFinished();
var errors = await _getErrors(testFile.path);
expect(errors, hasLength(1));
}
Future<void> test_errorInPart() async {
var libraryFile = newFile('$testPackageLibPath/a.dart', r'''
part 'b.dart';
class A {}
''');
var partFile = newFile('$testPackageLibPath/b.dart', r'''
part of 'a.dart';
class A {}
''');
{
var libErrors = await _getErrors(libraryFile.path);
expect(libErrors, isEmpty);
}
{
var partErrors = await _getErrors(partFile.path);
expect(partErrors, hasLength(1));
}
}
Future<void> test_fileWithoutContext() async {
await setRoots(included: [], excluded: []);
var request = _createGetErrorsRequest(testFile.path);
var response = await serverChannel.simulateRequestFromClient(request);
assertResponseFailure(
response,
requestId: _requestId,
errorCode: RequestErrorCode.GET_ERRORS_INVALID_FILE,
);
}
Future<void> test_hasErrors() async {
newFile(testFilePath, '''
void f() {
print(42)
}
''');
var errors = await _getErrors(testFile.path);
expect(errors, hasLength(1));
{
var error = errors[0];
expect(error.severity, AnalysisErrorSeverity.ERROR);
expect(error.type, AnalysisErrorType.SYNTACTIC_ERROR);
expect(error.location.file, testFile.path);
expect(error.location.startLine, 2);
}
}
Future<void> test_invalidFilePathFormat_notAbsolute() async {
var request = _createGetErrorsRequest('test.dart');
var response = await handleRequest(request);
assertResponseFailure(
response,
requestId: _requestId,
errorCode: RequestErrorCode.INVALID_FILE_PATH_FORMAT,
);
}
Future<void> test_invalidFilePathFormat_notNormalized() async {
var request = _createGetErrorsRequest(convertPath('/foo/../bar/test.dart'));
var response = await handleRequest(request);
assertResponseFailure(
response,
requestId: _requestId,
errorCode: RequestErrorCode.INVALID_FILE_PATH_FORMAT,
);
}
Future<void> test_noErrors() async {
newFile(testFilePath, '''
void f() {
print(42);
}
''');
var errors = await _getErrors(testFile.path);
expect(errors, isEmpty);
}
Request _createGetErrorsRequest(String path) {
return AnalysisGetErrorsParams(path)
.toRequest(_requestId, clientUriConverter: server.uriConverter);
}
Future<List<AnalysisError>> _getErrors(String path) async {
var request = _createGetErrorsRequest(path);
var response = await handleSuccessfulRequest(request);
return AnalysisGetErrorsResult.fromResponse(response,
clientUriConverter: server.uriConverter)
.errors;
}
}