CQ. Remove ResolutionTest.error/message, all goes through inline expected diagnostics now.

Change-Id: I46fd2efe14e1bb46fa7ec12423c19fcf551bdca9
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/510660
Reviewed-by: Johnni Winther <johnniwinther@google.com>
This commit is contained in:
Konstantin Shcheglov
2026-06-10 11:25:41 -07:00
parent cb41c7b055
commit bf71251dcd
3 changed files with 82 additions and 155 deletions
@@ -8,7 +8,6 @@ import 'package:analyzer/dart/constant/value.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/diagnostic/diagnostic.dart';
import 'package:analyzer/error/error.dart';
import 'package:analyzer/file_system/file_system.dart';
import 'package:analyzer/src/dart/analysis/results.dart';
import 'package:analyzer/src/dart/ast/ast.dart';
@@ -23,7 +22,6 @@ import 'package:analyzer/src/dart/element/type_system.dart';
import 'package:analyzer/src/test_utilities/find_element2.dart';
import 'package:analyzer/src/test_utilities/find_node.dart';
import 'package:analyzer_testing/resource_provider_mixin.dart';
import 'package:analyzer_testing/src/analysis_rule/pub_package_resolution.dart';
import 'package:analyzer_testing/src/expected_diagnostics.dart';
import 'package:analyzer_utilities/testing/tree_string_sink.dart';
import 'package:test/test.dart';
@@ -242,31 +240,6 @@ mixin ResolutionTest implements ResourceProviderMixin {
expect(node.staticType, isNull);
}
ExpectedError error(
DiagnosticCode code,
int offset,
int length, {
Pattern? correctionContains,
// TODO(FMorschel): refactor the uses of this to prefer `messageContains`
String? text,
List<Pattern> messageContains = const [],
List<ExpectedContextMessage> contextMessages =
const <ExpectedContextMessage>[],
}) {
assert(
text == null || messageContains.isEmpty,
'Only use one of text or messageContains',
);
return ExpectedError(
code,
offset,
length,
correctionContains: correctionContains,
messageContainsAll: text != null ? [text] : messageContains,
contextMessages: contextMessages,
);
}
Element? getNodeElement2(AstNode node) {
if (node is Annotation) {
return node.element;
@@ -318,9 +291,6 @@ mixin ResolutionTest implements ResourceProviderMixin {
}
}
ExpectedContextMessage message(File file, int offset, int length) =>
ExpectedContextMessage(file, offset, length);
Future<ResolvedUnitResultImpl> resolveFile(File file);
/// Resolve [file] and return a test view of it.
@@ -2,13 +2,8 @@
// 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/dart/analysis/results.dart';
import 'package:analyzer/src/diagnostic/diagnostic.dart' as diag;
import 'package:matcher/src/core_matchers.dart';
import 'package:test/test.dart' show expect;
import 'package:test_reflective_loader/test_reflective_loader.dart';
import '../../generated/test_support.dart';
import '../dart/resolution/context_collection_resolution.dart';
import '../dart/resolution/node_text_expectations.dart';
@@ -101,24 +96,23 @@ class N {}
newFile("$testPackageLibPath/lib2.dart", '''
class N {}
''');
var partFile = newFile('$testPackageLibPath/part.dart', '''
part of 'lib.dart';
class A extends N {}
''');
var libFile = newFile('$testPackageLibPath/lib.dart', '''
var partFile = getFile('$testPackageLibPath/part.dart');
var libFile = getFile('$testPackageLibPath/lib.dart');
await resolveFilesWithDiagnostics({
libFile: r'''
import 'lib1.dart';
import 'lib2.dart';
part 'part.dart';
''');
ResolvedUnitResult libResult = await resolveFile(libFile);
ResolvedUnitResult partResult = await resolveFile(partFile);
expect(libResult.diagnostics, hasLength(0));
GatheringDiagnosticListener()
..addAll(partResult.diagnostics)
..assertErrors([
error(diag.extendsNonClass, 36, 1),
error(diag.ambiguousImport, 36, 1),
]);
''',
partFile: r'''
part of 'lib.dart';
class A extends N {}
// ^
// [diag.extendsNonClass] Classes can only extend other classes.
// [diag.ambiguousImport] The name 'N' is defined in the libraries 'package:test/lib1.dart' and 'package:test/lib2.dart'.
''',
});
}
test_instanceCreation() async {
@@ -2,10 +2,8 @@
// 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/diagnostic/diagnostic.dart' as diag;
import 'package:test_reflective_loader/test_reflective_loader.dart';
import '../../generated/test_support.dart';
import '../dart/resolution/context_collection_resolution.dart';
import '../dart/resolution/node_text_expectations.dart';
@@ -4153,69 +4151,52 @@ augment class A {}
}
test_class_library_part() async {
var lib = newFile('$testPackageLibPath/lib.dart', '''
var lib = getFile('$testPackageLibPath/lib.dart');
var a = getFile('$testPackageLibPath/a.dart');
await resolveFilesWithDiagnostics({
lib: r'''
part 'a.dart';
class A {}
''');
var a = newFile('$testPackageLibPath/a.dart', '''
// ^
// [context 1] The first definition of this name.
''',
a: r'''
part of 'lib.dart';
class A {}
''');
await resolveFile(lib);
var aResult = await resolveFile(a);
GatheringDiagnosticListener()
..addAll(aResult.diagnostics)
..assertErrors([
error(
diag.duplicateDefinition,
27,
1,
contextMessages: [message(lib, 22, 1)],
),
]);
// ^
// [diag.duplicateDefinition][context 1] The name 'A' is already defined.
''',
});
}
test_class_part_part() async {
var lib = newFile('$testPackageLibPath/lib.dart', '''
var lib = getFile('$testPackageLibPath/lib.dart');
var a = getFile('$testPackageLibPath/a.dart');
var b = getFile('$testPackageLibPath/b.dart');
await resolveFilesWithDiagnostics({
lib: r'''
part 'a.dart';
part 'b.dart';
''');
var a = newFile('$testPackageLibPath/a.dart', '''
''',
a: r'''
part of 'lib.dart';
class A {}
''');
var b = newFile('$testPackageLibPath/b.dart', '''
// ^
// [context 1] The first definition of this name.
''',
b: r'''
part of 'lib.dart';
class A {}
''');
await resolveFile(lib);
var aResult = await resolveFile(a);
GatheringDiagnosticListener()
..addAll(aResult.diagnostics)
..assertNoErrors();
var bResult = await resolveFile(b);
GatheringDiagnosticListener()
..addAll(bResult.diagnostics)
..assertErrors([
error(
diag.duplicateDefinition,
27,
1,
contextMessages: [message(a, 27, 1)],
),
]);
// ^
// [diag.duplicateDefinition][context 1] The name 'A' is already defined.
''',
});
}
test_extension() async {
@@ -4231,31 +4212,25 @@ extension A on int {}
}
test_extension_library_part() async {
var lib = newFile('$testPackageLibPath/lib.dart', '''
var lib = getFile('$testPackageLibPath/lib.dart');
var a = getFile('$testPackageLibPath/a.dart');
await resolveFilesWithDiagnostics({
lib: r'''
part 'a.dart';
extension A on int {}
''');
var a = newFile('$testPackageLibPath/a.dart', '''
// ^
// [context 1] The first definition of this name.
''',
a: r'''
part of 'lib.dart';
extension A on int {}
''');
await resolveFile(lib);
var aResult = await resolveFile(a);
GatheringDiagnosticListener()
..addAll(aResult.diagnostics)
..assertErrors([
error(
diag.duplicateDefinition,
31,
1,
contextMessages: [message(lib, 26, 1)],
),
]);
// ^
// [diag.duplicateDefinition][context 1] The name 'A' is already defined.
''',
});
}
test_extensionType() async {
@@ -4271,31 +4246,25 @@ extension type A(int it) {}
}
test_extensionType_library_part() async {
var lib = newFile('$testPackageLibPath/lib.dart', '''
var lib = getFile('$testPackageLibPath/lib.dart');
var a = getFile('$testPackageLibPath/a.dart');
await resolveFilesWithDiagnostics({
lib: r'''
part 'a.dart';
extension type A(int it) {}
''');
var a = newFile('$testPackageLibPath/a.dart', '''
// ^
// [context 1] The first definition of this name.
''',
a: r'''
part of 'lib.dart';
extension type A(int it) {}
''');
await resolveFile(lib);
var aResult = await resolveFile(a);
GatheringDiagnosticListener()
..addAll(aResult.diagnostics)
..assertErrors([
error(
diag.duplicateDefinition,
36,
1,
contextMessages: [message(lib, 31, 1)],
),
]);
// ^
// [diag.duplicateDefinition][context 1] The name 'A' is already defined.
''',
});
}
test_mixin() async {
@@ -4318,31 +4287,25 @@ augment mixin A {}
}
test_mixin_library_part() async {
var lib = newFile('$testPackageLibPath/lib.dart', '''
var lib = getFile('$testPackageLibPath/lib.dart');
var a = getFile('$testPackageLibPath/a.dart');
await resolveFilesWithDiagnostics({
lib: r'''
part 'a.dart';
mixin A {}
''');
var a = newFile('$testPackageLibPath/a.dart', '''
// ^
// [context 1] The first definition of this name.
''',
a: r'''
part of 'lib.dart';
mixin A {}
''');
await resolveFile(lib);
var aResult = await resolveFile(a);
GatheringDiagnosticListener()
..addAll(aResult.diagnostics)
..assertErrors([
error(
diag.duplicateDefinition,
27,
1,
contextMessages: [message(lib, 22, 1)],
),
]);
// ^
// [diag.duplicateDefinition][context 1] The name 'A' is already defined.
''',
});
}
test_topLevelVariable() async {