| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 library mock_compiler; | 5 library mock_compiler; |
| 6 | 6 |
| 7 import "package:expect/expect.dart"; | 7 import "package:expect/expect.dart"; |
| 8 import 'dart:async'; | 8 import 'dart:async'; |
| 9 import 'dart:collection'; | 9 import 'dart:collection'; |
| 10 | 10 |
| (...skipping 416 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 427 } | 427 } |
| 428 | 428 |
| 429 Element lookupElementIn(ScopeContainerElement container, name) { | 429 Element lookupElementIn(ScopeContainerElement container, name) { |
| 430 Element element = container.localLookup(name); | 430 Element element = container.localLookup(name); |
| 431 return element != null | 431 return element != null |
| 432 ? element | 432 ? element |
| 433 : new ErroneousElementX(null, null, name, container); | 433 : new ErroneousElementX(null, null, name, container); |
| 434 } | 434 } |
| 435 } | 435 } |
| 436 | 436 |
| 437 void compareWarningKinds(String text, expectedWarnings, foundWarnings) { | 437 /// A function the checks [message]. If the check fails or if [message] is |
| 438 /// `null`, an error string is returned. Otherwise `null` is returned. |
| 439 typedef String CheckMessage(Message message); |
| 440 |
| 441 CheckMessage checkMessage(MessageKind kind, Map arguments) { |
| 442 return (Message message) { |
| 443 if (message == null) return '$kind'; |
| 444 if (message.kind != kind) return 'Expected message $kind, found $message.'; |
| 445 for (var key in arguments.keys) { |
| 446 if (!message.arguments.containsKey(key)) { |
| 447 return 'Expected argument $key not found in $message.kind.'; |
| 448 } |
| 449 String expectedValue = '${arguments[key]}'; |
| 450 String foundValue = '${message.arguments[key]}'; |
| 451 if (expectedValue != foundValue) { |
| 452 return 'Expected argument $key with value $expectedValue, ' |
| 453 'found $foundValue.'; |
| 454 } |
| 455 } |
| 456 return null; |
| 457 }; |
| 458 } |
| 459 |
| 460 /// [expectedWarnings] must be a list of either [MessageKind] or [CheckMessage]. |
| 461 void compareWarningKinds(String text, |
| 462 List expectedWarnings, |
| 463 List<WarningMessage> foundWarnings) { |
| 438 var fail = (message) => Expect.fail('$text: $message'); | 464 var fail = (message) => Expect.fail('$text: $message'); |
| 439 HasNextIterator<MessageKind> expected = | 465 HasNextIterator expectedIterator = |
| 440 new HasNextIterator(expectedWarnings.iterator); | 466 new HasNextIterator(expectedWarnings.iterator); |
| 441 HasNextIterator<WarningMessage> found = | 467 HasNextIterator<WarningMessage> foundIterator = |
| 442 new HasNextIterator(foundWarnings.iterator); | 468 new HasNextIterator(foundWarnings.iterator); |
| 443 while (expected.hasNext && found.hasNext) { | 469 while (expectedIterator.hasNext && foundIterator.hasNext) { |
| 444 Expect.equals(expected.next(), found.next().message.kind); | 470 var expected = expectedIterator.next(); |
| 471 var found = foundIterator.next(); |
| 472 if (expected is MessageKind) { |
| 473 Expect.equals(expected, found.message.kind); |
| 474 } else if (expected is CheckMessage) { |
| 475 String error = expected(found.message); |
| 476 Expect.isNull(error, error); |
| 477 } else { |
| 478 Expect.fail("Unexpected expectedWarnings value: $expected."); |
| 479 } |
| 445 } | 480 } |
| 446 if (expected.hasNext) { | 481 if (expectedIterator.hasNext) { |
| 447 do { | 482 do { |
| 448 print('Expected warning "${expected.next()}" did not occur'); | 483 var expected = expectedIterator.next(); |
| 449 } while (expected.hasNext); | 484 if (expected is CheckMessage) expected = expected(null); |
| 485 print('Expected warning "${expected}" did not occur'); |
| 486 } while (expectedIterator.hasNext); |
| 450 fail('Too few warnings'); | 487 fail('Too few warnings'); |
| 451 } | 488 } |
| 452 if (found.hasNext) { | 489 if (foundIterator.hasNext) { |
| 453 do { | 490 do { |
| 454 print('Additional warning "${found.next()}"'); | 491 print('Additional warning "${foundIterator.next()}"'); |
| 455 } while (found.hasNext); | 492 } while (foundIterator.hasNext); |
| 456 fail('Too many warnings'); | 493 fail('Too many warnings'); |
| 457 } | 494 } |
| 458 } | 495 } |
| 459 | 496 |
| 460 void importLibrary(LibraryElement target, LibraryElementX imported, | 497 void importLibrary(LibraryElement target, LibraryElementX imported, |
| 461 Compiler compiler) { | 498 Compiler compiler) { |
| 462 for (var element in imported.localMembers) { | 499 for (var element in imported.localMembers) { |
| 463 compiler.withCurrentElement(element, () { | 500 compiler.withCurrentElement(element, () { |
| 464 target.addToScope(element, compiler); | 501 target.addToScope(element, compiler); |
| 465 }); | 502 }); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 506 } else { | 543 } else { |
| 507 sourceFile = compiler.sourceFiles[uri.toString()]; | 544 sourceFile = compiler.sourceFiles[uri.toString()]; |
| 508 } | 545 } |
| 509 if (sourceFile != null && begin != null && end != null) { | 546 if (sourceFile != null && begin != null && end != null) { |
| 510 print(sourceFile.getLocationMessage(message, begin, end, true, (x) => x)); | 547 print(sourceFile.getLocationMessage(message, begin, end, true, (x) => x)); |
| 511 } else { | 548 } else { |
| 512 print(message); | 549 print(message); |
| 513 } | 550 } |
| 514 }; | 551 }; |
| 515 } | 552 } |
| OLD | NEW |