| OLD | NEW | 
|---|
|  | (Empty) | 
| 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 |  | 
| 3 // BSD-style license that can be found in the LICENSE file. |  | 
| 4 |  | 
| 5 // Test of FunctionUpdate by pretty printing the updated element before and |  | 
| 6 // after. |  | 
| 7 library trydart.library_updater_test; |  | 
| 8 |  | 
| 9 import 'package:dart2js_incremental/library_updater.dart' show |  | 
| 10     IncrementalCompilerContext, |  | 
| 11     LibraryUpdater, |  | 
| 12     Update; |  | 
| 13 |  | 
| 14 import 'package:compiler/src/parser/partial_elements.dart' show |  | 
| 15     PartialFunctionElement; |  | 
| 16 |  | 
| 17 import 'package:compiler/src/script.dart' show |  | 
| 18     Script; |  | 
| 19 |  | 
| 20 import 'package:compiler/src/io/source_file.dart' show |  | 
| 21     StringSourceFile; |  | 
| 22 |  | 
| 23 import 'compiler_test_case.dart'; |  | 
| 24 |  | 
| 25 import 'library_updater_test.dart' show |  | 
| 26     LibraryUpdaterTestCase, |  | 
| 27     newScriptFrom, |  | 
| 28     nolog; |  | 
| 29 |  | 
| 30 class ApplyUpdateTestCase extends LibraryUpdaterTestCase { |  | 
| 31   final String expectedUpdate; |  | 
| 32 |  | 
| 33   ApplyUpdateTestCase( |  | 
| 34       {String before, |  | 
| 35       String after, |  | 
| 36       String update}) |  | 
| 37       : this.expectedUpdate = update, |  | 
| 38         super(before: before, after: after, canReuse: true); |  | 
| 39 |  | 
| 40   Future run() => loadMainApp().then((LibraryElement library) { |  | 
| 41     // Capture the current version of [before] before invoking the [updater]. |  | 
| 42     PartialFunctionElement before = library.localLookup(expectedUpdate); |  | 
| 43     var beforeNode = before.parseNode(compiler.parsingContext); |  | 
| 44 |  | 
| 45     var context = new IncrementalCompilerContext(); |  | 
| 46     LibraryUpdater updater = |  | 
| 47         new LibraryUpdater(this.compiler, null, nolog, nolog, context); |  | 
| 48     context.registerUriWithUpdates([scriptUri]); |  | 
| 49 |  | 
| 50     bool actualCanReuse = |  | 
| 51         updater.canReuseLibrary( |  | 
| 52             library, <Script>[newScriptFrom(library, newSource)]); |  | 
| 53     Expect.equals(expectedCanReuse, actualCanReuse); |  | 
| 54 |  | 
| 55     Update update = updater.updates.single; |  | 
| 56 |  | 
| 57     // Check that the [updater] didn't modify the changed element. |  | 
| 58     Expect.identical(before, update.before); |  | 
| 59     Expect.identical(beforeNode, before.parseNode(compiler.parsingContext)); |  | 
| 60 |  | 
| 61     PartialFunctionElement after = update.after; |  | 
| 62     var afterNode = after.parseNode(compiler.parsingContext); |  | 
| 63 |  | 
| 64     // Check that pretty-printing the elements match [source] (before), and |  | 
| 65     // [newSource] (after). |  | 
| 66     Expect.stringEquals(source, '$beforeNode'); |  | 
| 67     Expect.stringEquals(newSource, '$afterNode'); |  | 
| 68     Expect.notEquals(source, newSource); |  | 
| 69 |  | 
| 70     // Apply the update. |  | 
| 71     update.apply(); |  | 
| 72 |  | 
| 73     // Check that the update was applied by pretty-printing [before]. Make no |  | 
| 74     // assumptions about [after], as the update may destroy that element. |  | 
| 75     beforeNode = before.parseNode(compiler.parsingContext); |  | 
| 76     Expect.notEquals(source, '$beforeNode'); |  | 
| 77     Expect.stringEquals(newSource, '$beforeNode'); |  | 
| 78   }); |  | 
| 79 } |  | 
| 80 |  | 
| 81 void main() { |  | 
| 82   runTests( |  | 
| 83       [ |  | 
| 84           new ApplyUpdateTestCase( |  | 
| 85               before: 'main(){print("Hello, World!");}', |  | 
| 86               after: 'main(){print("Hello, Brave New World!");}', |  | 
| 87               update: 'main'), |  | 
| 88 |  | 
| 89           new ApplyUpdateTestCase( |  | 
| 90               before: 'main(){foo(){return 1;}return foo();}', |  | 
| 91               after: 'main(){bar(){return "1";}return bar();}', |  | 
| 92               update: 'main'), |  | 
| 93 |  | 
| 94           new ApplyUpdateTestCase( |  | 
| 95               before: 'main()=>null;', |  | 
| 96               after: 'main(){}', |  | 
| 97               update: 'main'), |  | 
| 98 |  | 
| 99           new ApplyUpdateTestCase( |  | 
| 100               before: 'main(){}', |  | 
| 101               after: 'main()=>null;', |  | 
| 102               update: 'main'), |  | 
| 103 |  | 
| 104           // TODO(ahe): When supporting class members, test abstract methods. |  | 
| 105       ] |  | 
| 106   ); |  | 
| 107 } |  | 
| OLD | NEW | 
|---|