| OLD | NEW |
| 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, 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:expect/expect.dart"; | 5 import "package:expect/expect.dart"; |
| 6 import 'parser_helper.dart'; | 6 import 'parser_helper.dart'; |
| 7 import 'package:compiler/src/tree/tree.dart'; | 7 import 'package:compiler/src/tree/tree.dart'; |
| 8 | 8 |
| 9 void testStatement(String statement) { | 9 void testStatement(String statement) { |
| 10 Node node = parseStatement(statement); | 10 Node node = parseStatement(statement); |
| (...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 297 } | 297 } |
| 298 | 298 |
| 299 class Collector extends DiagnosticReporter { | 299 class Collector extends DiagnosticReporter { |
| 300 int token = -1; | 300 int token = -1; |
| 301 | 301 |
| 302 void reportFatalError(Token token) { | 302 void reportFatalError(Token token) { |
| 303 this.token = token.kind; | 303 this.token = token.kind; |
| 304 throw this; | 304 throw this; |
| 305 } | 305 } |
| 306 | 306 |
| 307 void reportError( | 307 void reportError(DiagnosticMessage message, |
| 308 DiagnosticMessage message, | |
| 309 [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]) { | 308 [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]) { |
| 310 reportFatalError(message.spannable); | 309 reportFatalError(message.spannable); |
| 311 } | 310 } |
| 312 | 311 |
| 313 void log(message) { | 312 void log(message) { |
| 314 print(message); | 313 print(message); |
| 315 } | 314 } |
| 316 | 315 |
| 317 noSuchMethod(Invocation invocation) { | 316 noSuchMethod(Invocation invocation) { |
| 318 throw 'unsupported operation'; | 317 throw 'unsupported operation'; |
| 319 } | 318 } |
| 320 | 319 |
| 321 @override | 320 @override |
| 322 DiagnosticMessage createMessage( | 321 DiagnosticMessage createMessage(spannable, messageKind, |
| 323 spannable, messageKind, [arguments = const {}]) { | 322 [arguments = const {}]) { |
| 324 return new DiagnosticMessage(null, spannable, null); | 323 return new DiagnosticMessage(null, spannable, null); |
| 325 } | 324 } |
| 326 } | 325 } |
| 327 | 326 |
| 328 void testMissingCloseParen() { | 327 void testMissingCloseParen() { |
| 329 final String source = | 328 final String source = '''foo(x { // <= missing closing ")" |
| 330 '''foo(x { // <= missing closing ")" | |
| 331 return x; | 329 return x; |
| 332 }'''; | 330 }'''; |
| 333 parse() { | 331 parse() { |
| 334 parseMember(source, reporter: new Collector()); | 332 parseMember(source, reporter: new Collector()); |
| 335 } | 333 } |
| 334 |
| 336 check(Collector c) { | 335 check(Collector c) { |
| 337 Expect.equals(OPEN_CURLY_BRACKET_TOKEN, c.token); | 336 Expect.equals(OPEN_CURLY_BRACKET_TOKEN, c.token); |
| 338 return true; | 337 return true; |
| 339 } | 338 } |
| 339 |
| 340 Expect.throws(parse, check); | 340 Expect.throws(parse, check); |
| 341 } | 341 } |
| 342 | 342 |
| 343 void testMissingCloseBraceInClass() { | 343 void testMissingCloseBraceInClass() { |
| 344 final String source = 'class Foo {'; // Missing close '}'. | 344 final String source = 'class Foo {'; // Missing close '}'. |
| 345 parse() { | 345 parse() { |
| 346 fullParseUnit(source, reporter: new Collector()); | 346 fullParseUnit(source, reporter: new Collector()); |
| 347 } | 347 } |
| 348 |
| 348 check(Collector c) { | 349 check(Collector c) { |
| 349 Expect.equals(BAD_INPUT_TOKEN, c.token); | 350 Expect.equals(BAD_INPUT_TOKEN, c.token); |
| 350 return true; | 351 return true; |
| 351 } | 352 } |
| 353 |
| 352 Expect.throws(parse, check); | 354 Expect.throws(parse, check); |
| 353 } | 355 } |
| 354 | 356 |
| 355 void testUnmatchedAngleBracket() { | 357 void testUnmatchedAngleBracket() { |
| 356 final String source = 'A<'; // unmatched '<' | 358 final String source = 'A<'; // unmatched '<' |
| 357 parse() { | 359 parse() { |
| 358 fullParseUnit(source, reporter: new Collector()); | 360 fullParseUnit(source, reporter: new Collector()); |
| 359 } | 361 } |
| 362 |
| 360 check(Collector c) { | 363 check(Collector c) { |
| 361 Expect.equals(LT_TOKEN, c.token); | 364 Expect.equals(LT_TOKEN, c.token); |
| 362 return true; | 365 return true; |
| 363 } | 366 } |
| 367 |
| 364 Expect.throws(parse, check); | 368 Expect.throws(parse, check); |
| 365 } | 369 } |
| 366 | 370 |
| 367 void main() { | 371 void main() { |
| 368 testGenericTypes(); | 372 testGenericTypes(); |
| 369 // TODO(ahe): Enable this test when we handle library prefixes. | 373 // TODO(ahe): Enable this test when we handle library prefixes. |
| 370 // testPrefixedGenericTypes(); | 374 // testPrefixedGenericTypes(); |
| 371 testUnaryExpression(); | 375 testUnaryExpression(); |
| 372 testChainedMethodCalls(); | 376 testChainedMethodCalls(); |
| 373 testFunctionStatement(); | 377 testFunctionStatement(); |
| 374 testDoStatement(); | 378 testDoStatement(); |
| 375 testWhileStatement(); | 379 testWhileStatement(); |
| 376 testConditionalExpression(); | 380 testConditionalExpression(); |
| 377 testNullOperators(); | 381 testNullOperators(); |
| 378 testAssignment(); | 382 testAssignment(); |
| 379 testIndex(); | 383 testIndex(); |
| 380 testPostfix(); | 384 testPostfix(); |
| 381 testOperatorParse(); | 385 testOperatorParse(); |
| 382 testMissingCloseParen(); | 386 testMissingCloseParen(); |
| 383 testMissingCloseBraceInClass(); | 387 testMissingCloseBraceInClass(); |
| 384 testUnmatchedAngleBracket(); | 388 testUnmatchedAngleBracket(); |
| 385 } | 389 } |
| OLD | NEW |