Skip to content

Commit cad324c

Browse files
srawlinscommit-bot@chromium.org
authored andcommitted
Analyzer: Extract all parser tests to individual files
Change-Id: Ia3f85355186e25d4cc38fcb15ed3770a1db5805c Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/176360 Commit-Queue: Samuel Rawlins <[email protected]> Reviewed-by: Brian Wilkerson <[email protected]> Reviewed-by: Konstantin Shcheglov <[email protected]>
1 parent a64db87 commit cad324c

18 files changed

+19416
-19250
lines changed

pkg/analyzer/test/generated/class_member_parser_test.dart

Lines changed: 1929 additions & 0 deletions
Large diffs are not rendered by default.

pkg/analyzer/test/generated/collection_literal_parser_test.dart

Lines changed: 649 additions & 0 deletions
Large diffs are not rendered by default.

pkg/analyzer/test/generated/complex_parser_test.dart

Lines changed: 573 additions & 0 deletions
Large diffs are not rendered by default.

pkg/analyzer/test/generated/error_parser_test.dart

Lines changed: 3068 additions & 0 deletions
Large diffs are not rendered by default.

pkg/analyzer/test/generated/expression_parser_test.dart

Lines changed: 2558 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 261 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,261 @@
1+
// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
2+
// for details. All rights reserved. Use of this source code is governed by a
3+
// BSD-style license that can be found in the LICENSE file.
4+
5+
import 'package:analyzer/dart/analysis/features.dart';
6+
import 'package:analyzer/dart/ast/ast.dart';
7+
import 'package:analyzer/src/dart/ast/ast.dart' show CompilationUnitImpl;
8+
import 'package:analyzer/src/dart/scanner/scanner.dart';
9+
import 'package:analyzer/src/generated/parser.dart' show ParserErrorCode;
10+
import 'package:pub_semver/src/version.dart';
11+
import 'package:test/test.dart';
12+
import 'package:test_reflective_loader/test_reflective_loader.dart';
13+
14+
import 'parser_test_base.dart';
15+
16+
main() {
17+
defineReflectiveSuite(() {
18+
defineReflectiveTests(ExtensionMethodsParserTest);
19+
});
20+
}
21+
22+
@reflectiveTest
23+
class ExtensionMethodsParserTest extends FastaParserTestCase {
24+
void test_complex_extends() {
25+
var unit = parseCompilationUnit(
26+
'extension E extends A with B, C implements D { }',
27+
errors: [
28+
expectedError(ParserErrorCode.EXPECTED_INSTEAD, 12, 7),
29+
expectedError(ParserErrorCode.UNEXPECTED_TOKEN, 22, 4),
30+
expectedError(ParserErrorCode.UNEXPECTED_TOKEN, 28, 1),
31+
expectedError(ParserErrorCode.UNEXPECTED_TOKEN, 32, 10),
32+
]);
33+
expect(unit.declarations, hasLength(1));
34+
var extension = unit.declarations[0] as ExtensionDeclaration;
35+
expect(extension.name.name, 'E');
36+
expect(extension.onKeyword.lexeme, 'extends');
37+
expect((extension.extendedType as NamedType).name.name, 'A');
38+
expect(extension.members, hasLength(0));
39+
}
40+
41+
void test_complex_implements() {
42+
var unit = parseCompilationUnit('extension E implements C, D { }', errors: [
43+
expectedError(ParserErrorCode.EXPECTED_INSTEAD, 12, 10),
44+
expectedError(ParserErrorCode.UNEXPECTED_TOKEN, 24, 1),
45+
]);
46+
expect(unit.declarations, hasLength(1));
47+
var extension = unit.declarations[0] as ExtensionDeclaration;
48+
expect(extension.name.name, 'E');
49+
expect(extension.onKeyword.lexeme, 'implements');
50+
expect((extension.extendedType as NamedType).name.name, 'C');
51+
expect(extension.members, hasLength(0));
52+
}
53+
54+
void test_complex_type() {
55+
var unit = parseCompilationUnit('extension E on C<T> { }');
56+
expect(unit.declarations, hasLength(1));
57+
var extension = unit.declarations[0] as ExtensionDeclaration;
58+
expect(extension.name.name, 'E');
59+
expect(extension.onKeyword.lexeme, 'on');
60+
var namedType = extension.extendedType as NamedType;
61+
expect(namedType.name.name, 'C');
62+
expect(namedType.typeArguments.arguments, hasLength(1));
63+
expect(extension.members, hasLength(0));
64+
}
65+
66+
void test_complex_type2() {
67+
var unit = parseCompilationUnit('extension E<T> on C<T> { }');
68+
expect(unit.declarations, hasLength(1));
69+
var extension = unit.declarations[0] as ExtensionDeclaration;
70+
expect(extension.name.name, 'E');
71+
expect(extension.onKeyword.lexeme, 'on');
72+
var namedType = extension.extendedType as NamedType;
73+
expect(namedType.name.name, 'C');
74+
expect(namedType.typeArguments.arguments, hasLength(1));
75+
expect(extension.members, hasLength(0));
76+
}
77+
78+
void test_complex_type2_no_name() {
79+
var unit = parseCompilationUnit('extension<T> on C<T> { }');
80+
expect(unit.declarations, hasLength(1));
81+
var extension = unit.declarations[0] as ExtensionDeclaration;
82+
expect(extension.name, isNull);
83+
expect(extension.onKeyword.lexeme, 'on');
84+
var namedType = extension.extendedType as NamedType;
85+
expect(namedType.name.name, 'C');
86+
expect(namedType.typeArguments.arguments, hasLength(1));
87+
expect(extension.members, hasLength(0));
88+
}
89+
90+
void test_constructor_named() {
91+
var unit = parseCompilationUnit('''
92+
extension E on C {
93+
E.named();
94+
}
95+
class C {}
96+
''', errors: [
97+
expectedError(ParserErrorCode.EXTENSION_DECLARES_CONSTRUCTOR, 21, 1),
98+
]);
99+
expect(unit.declarations, hasLength(2));
100+
var extension = unit.declarations[0] as ExtensionDeclaration;
101+
expect(extension.members, hasLength(0));
102+
}
103+
104+
void test_constructor_unnamed() {
105+
var unit = parseCompilationUnit('''
106+
extension E on C {
107+
E();
108+
}
109+
class C {}
110+
''', errors: [
111+
expectedError(ParserErrorCode.EXTENSION_DECLARES_CONSTRUCTOR, 21, 1),
112+
]);
113+
expect(unit.declarations, hasLength(2));
114+
var extension = unit.declarations[0] as ExtensionDeclaration;
115+
expect(extension.members, hasLength(0));
116+
}
117+
118+
void test_missing_on() {
119+
var unit = parseCompilationUnit('extension E', errors: [
120+
expectedError(ParserErrorCode.EXPECTED_TOKEN, 10, 1),
121+
expectedError(ParserErrorCode.EXPECTED_TYPE_NAME, 11, 0),
122+
expectedError(ParserErrorCode.EXPECTED_BODY, 11, 0),
123+
]);
124+
expect(unit.declarations, hasLength(1));
125+
var extension = unit.declarations[0] as ExtensionDeclaration;
126+
expect(extension.name.name, 'E');
127+
expect(extension.onKeyword.lexeme, 'on');
128+
expect((extension.extendedType as NamedType).name.name, '');
129+
expect(extension.members, hasLength(0));
130+
}
131+
132+
void test_missing_on_withBlock() {
133+
var unit = parseCompilationUnit('extension E {}', errors: [
134+
expectedError(ParserErrorCode.EXPECTED_TOKEN, 10, 1),
135+
expectedError(ParserErrorCode.EXPECTED_TYPE_NAME, 12, 1),
136+
]);
137+
expect(unit.declarations, hasLength(1));
138+
var extension = unit.declarations[0] as ExtensionDeclaration;
139+
expect(extension.name.name, 'E');
140+
expect(extension.onKeyword.lexeme, 'on');
141+
expect((extension.extendedType as NamedType).name.name, '');
142+
expect(extension.members, hasLength(0));
143+
}
144+
145+
void test_missing_on_withClassAndBlock() {
146+
var unit = parseCompilationUnit('extension E C {}', errors: [
147+
expectedError(ParserErrorCode.EXPECTED_TOKEN, 10, 1),
148+
]);
149+
expect(unit.declarations, hasLength(1));
150+
var extension = unit.declarations[0] as ExtensionDeclaration;
151+
expect(extension.name.name, 'E');
152+
expect(extension.onKeyword.lexeme, 'on');
153+
expect((extension.extendedType as NamedType).name.name, 'C');
154+
expect(extension.members, hasLength(0));
155+
}
156+
157+
void test_parse_toplevel_member_called_late_calling_self() {
158+
CompilationUnitImpl unit = parseCompilationUnit('void late() { late(); }',
159+
featureSet: nonNullable);
160+
FunctionDeclaration method = unit.declarations[0];
161+
162+
expect(method.documentationComment, isNull);
163+
expect(method.externalKeyword, isNull);
164+
expect(method.propertyKeyword, isNull);
165+
expect(method.returnType, isNotNull);
166+
expect(method.name.name, 'late');
167+
expect(method.functionExpression, isNotNull);
168+
169+
BlockFunctionBody body = method.functionExpression.body;
170+
ExpressionStatement statement = body.block.statements[0];
171+
MethodInvocation invocation = statement.expression;
172+
expect(invocation.operator, isNull);
173+
expect(invocation.toSource(), 'late()');
174+
}
175+
176+
void test_simple() {
177+
var unit = parseCompilationUnit('extension E on C { }');
178+
expect(unit.declarations, hasLength(1));
179+
var extension = unit.declarations[0] as ExtensionDeclaration;
180+
expect(extension.name.name, 'E');
181+
expect(extension.onKeyword.lexeme, 'on');
182+
expect((extension.extendedType as NamedType).name.name, 'C');
183+
var namedType = extension.extendedType as NamedType;
184+
expect(namedType.name.name, 'C');
185+
expect(namedType.typeArguments, isNull);
186+
expect(extension.members, hasLength(0));
187+
}
188+
189+
void test_simple_extends() {
190+
var unit = parseCompilationUnit('extension E extends C { }', errors: [
191+
expectedError(ParserErrorCode.EXPECTED_INSTEAD, 12, 7),
192+
]);
193+
expect(unit.declarations, hasLength(1));
194+
var extension = unit.declarations[0] as ExtensionDeclaration;
195+
expect(extension.name.name, 'E');
196+
expect(extension.onKeyword.lexeme, 'extends');
197+
expect((extension.extendedType as NamedType).name.name, 'C');
198+
expect(extension.members, hasLength(0));
199+
}
200+
201+
void test_simple_implements() {
202+
var unit = parseCompilationUnit('extension E implements C { }', errors: [
203+
expectedError(ParserErrorCode.EXPECTED_INSTEAD, 12, 10),
204+
]);
205+
expect(unit.declarations, hasLength(1));
206+
var extension = unit.declarations[0] as ExtensionDeclaration;
207+
expect(extension.name.name, 'E');
208+
expect(extension.onKeyword.lexeme, 'implements');
209+
expect((extension.extendedType as NamedType).name.name, 'C');
210+
expect(extension.members, hasLength(0));
211+
}
212+
213+
void test_simple_no_name() {
214+
var unit = parseCompilationUnit('extension on C { }');
215+
expect(unit.declarations, hasLength(1));
216+
var extension = unit.declarations[0] as ExtensionDeclaration;
217+
expect(extension.name, isNull);
218+
expect(extension.onKeyword.lexeme, 'on');
219+
expect((extension.extendedType as NamedType).name.name, 'C');
220+
var namedType = extension.extendedType as NamedType;
221+
expect(namedType.name.name, 'C');
222+
expect(namedType.typeArguments, isNull);
223+
expect(extension.members, hasLength(0));
224+
}
225+
226+
void test_simple_not_enabled() {
227+
parseCompilationUnit(
228+
'extension E on C { }',
229+
errors: [
230+
expectedError(ParserErrorCode.EXPERIMENT_NOT_ENABLED, 0, 9),
231+
expectedError(ParserErrorCode.MISSING_FUNCTION_PARAMETERS, 15, 1)
232+
],
233+
featureSet: FeatureSet.fromEnableFlags2(
234+
sdkLanguageVersion: Version.parse('2.3.0'),
235+
flags: [],
236+
),
237+
);
238+
}
239+
240+
void test_simple_with() {
241+
var unit = parseCompilationUnit('extension E with C { }', errors: [
242+
expectedError(ParserErrorCode.EXPECTED_INSTEAD, 12, 4),
243+
]);
244+
expect(unit.declarations, hasLength(1));
245+
var extension = unit.declarations[0] as ExtensionDeclaration;
246+
expect(extension.name.name, 'E');
247+
expect(extension.onKeyword.lexeme, 'with');
248+
expect((extension.extendedType as NamedType).name.name, 'C');
249+
expect(extension.members, hasLength(0));
250+
}
251+
252+
void test_void_type() {
253+
var unit = parseCompilationUnit('extension E on void { }');
254+
expect(unit.declarations, hasLength(1));
255+
var extension = unit.declarations[0] as ExtensionDeclaration;
256+
expect(extension.name.name, 'E');
257+
expect(extension.onKeyword.lexeme, 'on');
258+
expect((extension.extendedType as NamedType).name.name, 'void');
259+
expect(extension.members, hasLength(0));
260+
}
261+
}

0 commit comments

Comments
 (0)