| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 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. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 import 'package:analyzer/dart/ast/ast.dart'; | 5 import 'package:analyzer/dart/ast/ast.dart'; |
| 6 import 'package:analyzer/dart/ast/standard_ast_factory.dart'; | 6 import 'package:analyzer/dart/ast/standard_ast_factory.dart'; |
| 7 import 'package:analyzer/dart/ast/token.dart'; | 7 import 'package:analyzer/dart/ast/token.dart'; |
| 8 import 'package:analyzer/dart/ast/visitor.dart'; | 8 import 'package:analyzer/dart/ast/visitor.dart'; |
| 9 import 'package:analyzer/error/error.dart'; | 9 import 'package:analyzer/error/error.dart'; |
| 10 import 'package:analyzer/error/listener.dart'; | 10 import 'package:analyzer/error/listener.dart'; |
| (...skipping 2157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2168 parseCompilationUnit("enum E { @override C }", | 2168 parseCompilationUnit("enum E { @override C }", |
| 2169 [ParserErrorCode.ANNOTATION_ON_ENUM_CONSTANT]); | 2169 [ParserErrorCode.ANNOTATION_ON_ENUM_CONSTANT]); |
| 2170 } | 2170 } |
| 2171 | 2171 |
| 2172 void test_annotationOnEnumConstant_middle() { | 2172 void test_annotationOnEnumConstant_middle() { |
| 2173 parseCompilationUnit("enum E { C, @override D, E }", | 2173 parseCompilationUnit("enum E { C, @override D, E }", |
| 2174 [ParserErrorCode.ANNOTATION_ON_ENUM_CONSTANT]); | 2174 [ParserErrorCode.ANNOTATION_ON_ENUM_CONSTANT]); |
| 2175 } | 2175 } |
| 2176 | 2176 |
| 2177 void test_breakOutsideOfLoop_breakInDoStatement() { | 2177 void test_breakOutsideOfLoop_breakInDoStatement() { |
| 2178 createParser('do {break;} while (x);'); | 2178 DoStatement statement = parseStatement('do {break;} while (x);'); |
| 2179 DoStatement statement = parser.parseDoStatement(); | |
| 2180 expectNotNullIfNoErrors(statement); | 2179 expectNotNullIfNoErrors(statement); |
| 2181 listener.assertNoErrors(); | 2180 listener.assertNoErrors(); |
| 2182 } | 2181 } |
| 2183 | 2182 |
| 2184 void test_breakOutsideOfLoop_breakInForStatement() { | 2183 void test_breakOutsideOfLoop_breakInForStatement() { |
| 2185 createParser('for (; x;) {break;}'); | 2184 Statement statement = parseStatement('for (; x;) {break;}'); |
| 2186 Statement statement = parser.parseForStatement(); | |
| 2187 expectNotNullIfNoErrors(statement); | 2185 expectNotNullIfNoErrors(statement); |
| 2188 listener.assertNoErrors(); | 2186 listener.assertNoErrors(); |
| 2189 } | 2187 } |
| 2190 | 2188 |
| 2191 void test_breakOutsideOfLoop_breakInIfStatement() { | 2189 void test_breakOutsideOfLoop_breakInIfStatement() { |
| 2192 createParser('if (x) {break;}'); | 2190 IfStatement statement = parseStatement('if (x) {break;}'); |
| 2193 IfStatement statement = parser.parseIfStatement(); | |
| 2194 expectNotNullIfNoErrors(statement); | 2191 expectNotNullIfNoErrors(statement); |
| 2195 listener.assertErrorsWithCodes([ParserErrorCode.BREAK_OUTSIDE_OF_LOOP]); | 2192 listener.assertErrorsWithCodes([ParserErrorCode.BREAK_OUTSIDE_OF_LOOP]); |
| 2196 } | 2193 } |
| 2197 | 2194 |
| 2198 void test_breakOutsideOfLoop_breakInSwitchStatement() { | 2195 void test_breakOutsideOfLoop_breakInSwitchStatement() { |
| 2199 createParser('switch (x) {case 1: break;}'); | 2196 SwitchStatement statement = parseStatement('switch (x) {case 1: break;}'); |
| 2200 SwitchStatement statement = parser.parseSwitchStatement(); | |
| 2201 expectNotNullIfNoErrors(statement); | 2197 expectNotNullIfNoErrors(statement); |
| 2202 listener.assertNoErrors(); | 2198 listener.assertNoErrors(); |
| 2203 } | 2199 } |
| 2204 | 2200 |
| 2205 void test_breakOutsideOfLoop_breakInWhileStatement() { | 2201 void test_breakOutsideOfLoop_breakInWhileStatement() { |
| 2206 createParser('while (x) {break;}'); | 2202 WhileStatement statement = parseStatement('while (x) {break;}'); |
| 2207 WhileStatement statement = parser.parseWhileStatement(); | |
| 2208 expectNotNullIfNoErrors(statement); | 2203 expectNotNullIfNoErrors(statement); |
| 2209 listener.assertNoErrors(); | 2204 listener.assertNoErrors(); |
| 2210 } | 2205 } |
| 2211 | 2206 |
| 2212 void test_breakOutsideOfLoop_functionExpression_inALoop() { | 2207 void test_breakOutsideOfLoop_functionExpression_inALoop() { |
| 2213 parseStatement("for(; x;) {() {break;};}"); | 2208 parseStatement("for(; x;) {() {break;};}"); |
| 2214 assertErrorsWithCodes([ParserErrorCode.BREAK_OUTSIDE_OF_LOOP]); | 2209 assertErrorsWithCodes([ParserErrorCode.BREAK_OUTSIDE_OF_LOOP]); |
| 2215 } | 2210 } |
| 2216 | 2211 |
| 2217 void test_breakOutsideOfLoop_functionExpression_withALoop() { | 2212 void test_breakOutsideOfLoop_functionExpression_withALoop() { |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2308 expectNotNullIfNoErrors(member); | 2303 expectNotNullIfNoErrors(member); |
| 2309 listener | 2304 listener |
| 2310 .assertErrorsWithCodes([ParserErrorCode.CONSTRUCTOR_WITH_RETURN_TYPE]); | 2305 .assertErrorsWithCodes([ParserErrorCode.CONSTRUCTOR_WITH_RETURN_TYPE]); |
| 2311 } | 2306 } |
| 2312 | 2307 |
| 2313 void test_constTypedef() { | 2308 void test_constTypedef() { |
| 2314 parseCompilationUnit("const typedef F();", [ParserErrorCode.CONST_TYPEDEF]); | 2309 parseCompilationUnit("const typedef F();", [ParserErrorCode.CONST_TYPEDEF]); |
| 2315 } | 2310 } |
| 2316 | 2311 |
| 2317 void test_continueOutsideOfLoop_continueInDoStatement() { | 2312 void test_continueOutsideOfLoop_continueInDoStatement() { |
| 2318 createParser('do {continue;} while (x);'); | 2313 DoStatement statement = parseStatement('do {continue;} while (x);'); |
| 2319 DoStatement statement = parser.parseDoStatement(); | |
| 2320 expectNotNullIfNoErrors(statement); | 2314 expectNotNullIfNoErrors(statement); |
| 2321 listener.assertNoErrors(); | 2315 listener.assertNoErrors(); |
| 2322 } | 2316 } |
| 2323 | 2317 |
| 2324 void test_continueOutsideOfLoop_continueInForStatement() { | 2318 void test_continueOutsideOfLoop_continueInForStatement() { |
| 2325 createParser('for (; x;) {continue;}'); | 2319 Statement statement = parseStatement('for (; x;) {continue;}'); |
| 2326 Statement statement = parser.parseForStatement(); | |
| 2327 expectNotNullIfNoErrors(statement); | 2320 expectNotNullIfNoErrors(statement); |
| 2328 listener.assertNoErrors(); | 2321 listener.assertNoErrors(); |
| 2329 } | 2322 } |
| 2330 | 2323 |
| 2331 void test_continueOutsideOfLoop_continueInIfStatement() { | 2324 void test_continueOutsideOfLoop_continueInIfStatement() { |
| 2332 createParser('if (x) {continue;}'); | 2325 IfStatement statement = parseStatement('if (x) {continue;}'); |
| 2333 IfStatement statement = parser.parseIfStatement(); | |
| 2334 expectNotNullIfNoErrors(statement); | 2326 expectNotNullIfNoErrors(statement); |
| 2335 listener.assertErrorsWithCodes([ParserErrorCode.CONTINUE_OUTSIDE_OF_LOOP]); | 2327 listener.assertErrorsWithCodes([ParserErrorCode.CONTINUE_OUTSIDE_OF_LOOP]); |
| 2336 } | 2328 } |
| 2337 | 2329 |
| 2338 void test_continueOutsideOfLoop_continueInSwitchStatement() { | 2330 void test_continueOutsideOfLoop_continueInSwitchStatement() { |
| 2339 createParser('switch (x) {case 1: continue a;}'); | 2331 SwitchStatement statement = |
| 2340 SwitchStatement statement = parser.parseSwitchStatement(); | 2332 parseStatement('switch (x) {case 1: continue a;}'); |
| 2341 expectNotNullIfNoErrors(statement); | 2333 expectNotNullIfNoErrors(statement); |
| 2342 listener.assertNoErrors(); | 2334 listener.assertNoErrors(); |
| 2343 } | 2335 } |
| 2344 | 2336 |
| 2345 void test_continueOutsideOfLoop_continueInWhileStatement() { | 2337 void test_continueOutsideOfLoop_continueInWhileStatement() { |
| 2346 createParser('while (x) {continue;}'); | 2338 WhileStatement statement = parseStatement('while (x) {continue;}'); |
| 2347 WhileStatement statement = parser.parseWhileStatement(); | |
| 2348 expectNotNullIfNoErrors(statement); | 2339 expectNotNullIfNoErrors(statement); |
| 2349 listener.assertNoErrors(); | 2340 listener.assertNoErrors(); |
| 2350 } | 2341 } |
| 2351 | 2342 |
| 2352 void test_continueOutsideOfLoop_functionExpression_inALoop() { | 2343 void test_continueOutsideOfLoop_functionExpression_inALoop() { |
| 2353 parseStatement("for(; x;) {() {continue;};}"); | 2344 parseStatement("for(; x;) {() {continue;};}"); |
| 2354 assertErrorsWithCodes([ParserErrorCode.CONTINUE_OUTSIDE_OF_LOOP]); | 2345 assertErrorsWithCodes([ParserErrorCode.CONTINUE_OUTSIDE_OF_LOOP]); |
| 2355 } | 2346 } |
| 2356 | 2347 |
| 2357 void test_continueOutsideOfLoop_functionExpression_withALoop() { | 2348 void test_continueOutsideOfLoop_functionExpression_withALoop() { |
| 2358 parseStatement("() {for (; x;) {continue;}};"); | 2349 parseStatement("() {for (; x;) {continue;}};"); |
| 2359 } | 2350 } |
| 2360 | 2351 |
| 2361 void test_continueWithoutLabelInCase_error() { | 2352 void test_continueWithoutLabelInCase_error() { |
| 2362 createParser('switch (x) {case 1: continue;}'); | 2353 SwitchStatement statement = |
| 2363 SwitchStatement statement = parser.parseSwitchStatement(); | 2354 parseStatement('switch (x) {case 1: continue;}'); |
| 2364 expectNotNullIfNoErrors(statement); | 2355 expectNotNullIfNoErrors(statement); |
| 2365 listener.assertErrorsWithCodes( | 2356 listener.assertErrorsWithCodes( |
| 2366 [ParserErrorCode.CONTINUE_WITHOUT_LABEL_IN_CASE]); | 2357 [ParserErrorCode.CONTINUE_WITHOUT_LABEL_IN_CASE]); |
| 2367 } | 2358 } |
| 2368 | 2359 |
| 2369 void test_continueWithoutLabelInCase_noError() { | 2360 void test_continueWithoutLabelInCase_noError() { |
| 2370 createParser('switch (x) {case 1: continue a;}'); | 2361 SwitchStatement statement = |
| 2371 SwitchStatement statement = parser.parseSwitchStatement(); | 2362 parseStatement('switch (x) {case 1: continue a;}'); |
| 2372 expectNotNullIfNoErrors(statement); | 2363 expectNotNullIfNoErrors(statement); |
| 2373 listener.assertNoErrors(); | 2364 listener.assertNoErrors(); |
| 2374 } | 2365 } |
| 2375 | 2366 |
| 2376 void test_continueWithoutLabelInCase_noError_switchInLoop() { | 2367 void test_continueWithoutLabelInCase_noError_switchInLoop() { |
| 2377 createParser('while (a) { switch (b) {default: continue;}}'); | 2368 WhileStatement statement = |
| 2378 WhileStatement statement = parser.parseWhileStatement(); | 2369 parseStatement('while (a) { switch (b) {default: continue;}}'); |
| 2379 expectNotNullIfNoErrors(statement); | 2370 expectNotNullIfNoErrors(statement); |
| 2380 listener.assertNoErrors(); | 2371 listener.assertNoErrors(); |
| 2381 } | 2372 } |
| 2382 | 2373 |
| 2383 void test_covariantAfterVar() { | 2374 void test_covariantAfterVar() { |
| 2384 createParser('var covariant f;'); | 2375 createParser('var covariant f;'); |
| 2385 ClassMember member = parser.parseClassMember('C'); | 2376 ClassMember member = parser.parseClassMember('C'); |
| 2386 expectNotNullIfNoErrors(member); | 2377 expectNotNullIfNoErrors(member); |
| 2387 listener.assertErrorsWithCodes([ParserErrorCode.COVARIANT_AFTER_VAR]); | 2378 listener.assertErrorsWithCodes([ParserErrorCode.COVARIANT_AFTER_VAR]); |
| 2388 } | 2379 } |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2437 listener.assertErrorsWithCodes( | 2428 listener.assertErrorsWithCodes( |
| 2438 [ParserErrorCode.COVARIANT_TOP_LEVEL_DECLARATION]); | 2429 [ParserErrorCode.COVARIANT_TOP_LEVEL_DECLARATION]); |
| 2439 } | 2430 } |
| 2440 | 2431 |
| 2441 void test_covariantTopLevelDeclaration_typedef() { | 2432 void test_covariantTopLevelDeclaration_typedef() { |
| 2442 parseCompilationUnit("covariant typedef F();", | 2433 parseCompilationUnit("covariant typedef F();", |
| 2443 [ParserErrorCode.COVARIANT_TOP_LEVEL_DECLARATION]); | 2434 [ParserErrorCode.COVARIANT_TOP_LEVEL_DECLARATION]); |
| 2444 } | 2435 } |
| 2445 | 2436 |
| 2446 void test_defaultValueInFunctionType_named_colon() { | 2437 void test_defaultValueInFunctionType_named_colon() { |
| 2447 createParser('int x : 0'); | 2438 createParser('({int x : 0})'); |
| 2448 FormalParameter parameter = | 2439 FormalParameter parameter = |
| 2449 parser.parseFormalParameter(ParameterKind.NAMED, inFunctionType: true); | 2440 parser.parseFormalParameterList(inFunctionType: true).parameters[0]; |
| 2450 expectNotNullIfNoErrors(parameter); | 2441 expectNotNullIfNoErrors(parameter); |
| 2451 listener.assertErrorsWithCodes( | 2442 listener.assertErrorsWithCodes( |
| 2452 [ParserErrorCode.DEFAULT_VALUE_IN_FUNCTION_TYPE]); | 2443 [ParserErrorCode.DEFAULT_VALUE_IN_FUNCTION_TYPE]); |
| 2453 } | 2444 } |
| 2454 | 2445 |
| 2455 void test_defaultValueInFunctionType_named_equal() { | 2446 void test_defaultValueInFunctionType_named_equal() { |
| 2456 createParser('int x = 0'); | 2447 createParser('({int x = 0})'); |
| 2457 FormalParameter parameter = | 2448 FormalParameter parameter = |
| 2458 parser.parseFormalParameter(ParameterKind.NAMED, inFunctionType: true); | 2449 parser.parseFormalParameterList(inFunctionType: true).parameters[0]; |
| 2459 expectNotNullIfNoErrors(parameter); | 2450 expectNotNullIfNoErrors(parameter); |
| 2460 listener.assertErrorsWithCodes( | 2451 listener.assertErrorsWithCodes( |
| 2461 [ParserErrorCode.DEFAULT_VALUE_IN_FUNCTION_TYPE]); | 2452 [ParserErrorCode.DEFAULT_VALUE_IN_FUNCTION_TYPE]); |
| 2462 } | 2453 } |
| 2463 | 2454 |
| 2464 void test_defaultValueInFunctionType_positional() { | 2455 void test_defaultValueInFunctionType_positional() { |
| 2465 createParser('int x = 0'); | 2456 createParser('([int x = 0])'); |
| 2466 FormalParameter parameter = parser | 2457 FormalParameter parameter = |
| 2467 .parseFormalParameter(ParameterKind.POSITIONAL, inFunctionType: true); | 2458 parser.parseFormalParameterList(inFunctionType: true).parameters[0]; |
| 2468 expectNotNullIfNoErrors(parameter); | 2459 expectNotNullIfNoErrors(parameter); |
| 2469 listener.assertErrorsWithCodes( | 2460 listener.assertErrorsWithCodes( |
| 2470 [ParserErrorCode.DEFAULT_VALUE_IN_FUNCTION_TYPE]); | 2461 [ParserErrorCode.DEFAULT_VALUE_IN_FUNCTION_TYPE]); |
| 2471 } | 2462 } |
| 2472 | 2463 |
| 2473 void test_directiveAfterDeclaration_classBeforeDirective() { | 2464 void test_directiveAfterDeclaration_classBeforeDirective() { |
| 2474 CompilationUnit unit = parseCompilationUnit("class Foo{} library l;", | 2465 CompilationUnit unit = parseCompilationUnit("class Foo{} library l;", |
| 2475 [ParserErrorCode.DIRECTIVE_AFTER_DECLARATION]); | 2466 [ParserErrorCode.DIRECTIVE_AFTER_DECLARATION]); |
| 2476 expect(unit, isNotNull); | 2467 expect(unit, isNotNull); |
| 2477 } | 2468 } |
| (...skipping 12949 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 15427 expectCommentText(typeVariable.documentationComment, '/// Doc'); | 15418 expectCommentText(typeVariable.documentationComment, '/// Doc'); |
| 15428 } | 15419 } |
| 15429 | 15420 |
| 15430 /** | 15421 /** |
| 15431 * Assert that the given [name] is in declaration context. | 15422 * Assert that the given [name] is in declaration context. |
| 15432 */ | 15423 */ |
| 15433 void _assertIsDeclarationName(SimpleIdentifier name) { | 15424 void _assertIsDeclarationName(SimpleIdentifier name) { |
| 15434 expect(name.inDeclarationContext(), isTrue); | 15425 expect(name.inDeclarationContext(), isTrue); |
| 15435 } | 15426 } |
| 15436 } | 15427 } |
| OLD | NEW |