| 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 LibraryUpdater (one compilation unit per library). | |
| 6 library trydart.library_updater_test; | |
| 7 | |
| 8 import 'package:dart2js_incremental/library_updater.dart' show | |
| 9 IncrementalCompilerContext, | |
| 10 LibraryUpdater, | |
| 11 Update; | |
| 12 | |
| 13 import 'package:compiler/src/script.dart' show | |
| 14 Script; | |
| 15 | |
| 16 import 'package:compiler/src/io/source_file.dart' show | |
| 17 StringSourceFile; | |
| 18 | |
| 19 import 'compiler_test_case.dart'; | |
| 20 | |
| 21 void nolog(_) {} | |
| 22 | |
| 23 Script newScriptFrom(LibraryElement library, String newSource) { | |
| 24 Script script = library.entryCompilationUnit.script; | |
| 25 return script.copyWithFile( | |
| 26 new StringSourceFile.fromUri(script.file.uri, newSource)); | |
| 27 } | |
| 28 | |
| 29 class LibraryUpdaterTestCase extends CompilerTestCase { | |
| 30 final String newSource; | |
| 31 | |
| 32 final bool expectedCanReuse; | |
| 33 | |
| 34 final List<String> expectedUpdates; | |
| 35 | |
| 36 LibraryUpdaterTestCase( | |
| 37 {String before, | |
| 38 String after, | |
| 39 bool canReuse, | |
| 40 List<String> updates}) | |
| 41 : this.newSource = after, | |
| 42 this.expectedCanReuse = canReuse, | |
| 43 this.expectedUpdates = updates, | |
| 44 super(before); | |
| 45 | |
| 46 Future run() => loadMainApp().then((LibraryElement library) { | |
| 47 var context = new IncrementalCompilerContext(); | |
| 48 LibraryUpdater updater = | |
| 49 new LibraryUpdater(this.compiler, null, nolog, nolog, context); | |
| 50 context.registerUriWithUpdates([scriptUri]); | |
| 51 bool actualCanReuse = | |
| 52 updater.canReuseLibrary( | |
| 53 library, <Script>[newScriptFrom(library, newSource)]); | |
| 54 Expect.equals(expectedCanReuse, actualCanReuse); | |
| 55 | |
| 56 Expect.setEquals( | |
| 57 expectedUpdates.toSet(), | |
| 58 updater.updates.map(nameOfUpdate).toSet()); | |
| 59 }); | |
| 60 | |
| 61 String toString() => 'Before:\n$source\n\n\nAfter:\n$newSource'; | |
| 62 } | |
| 63 | |
| 64 String nameOfUpdate(Update update) { | |
| 65 var element = update.before; | |
| 66 if (element == null) element = update.after; | |
| 67 return element.name; | |
| 68 } | |
| 69 | |
| 70 void main() { | |
| 71 runTests( | |
| 72 [ | |
| 73 // Only method body changed. Can be reused if 'main' is | |
| 74 // updated/patched. | |
| 75 new LibraryUpdaterTestCase( | |
| 76 before: 'main() { print("Hello, World!"); }', | |
| 77 after: 'main() { print("Hello, Brave New World!"); }', | |
| 78 canReuse: true, | |
| 79 updates: ['main']), | |
| 80 | |
| 81 // Signature changed. Can't be reused. | |
| 82 new LibraryUpdaterTestCase( | |
| 83 before: 'main() { print("Hello, World!"); }', | |
| 84 after: 'void main() { print("Hello, World!"); }', | |
| 85 canReuse: true, | |
| 86 updates: ['main']), | |
| 87 | |
| 88 // Only whitespace changes. Can be reused; no updates/patches needed. | |
| 89 new LibraryUpdaterTestCase( | |
| 90 before: 'main(){print("Hello, World!");}', | |
| 91 after: 'main() { print ( "Hello, World!" ) ; }', | |
| 92 canReuse: true, | |
| 93 updates: []), | |
| 94 | |
| 95 // Only whitespace/comment changes (in signature). Can be reused; no | |
| 96 // updates/patches needed. | |
| 97 new LibraryUpdaterTestCase( | |
| 98 before: | |
| 99 '/* Implicitly dynamic. */ main ( /* No parameters. */ ) ' | |
| 100 '{print("Hello, World!");}', | |
| 101 after: 'main() {print("Hello, World!");}', | |
| 102 canReuse: true, | |
| 103 updates: []), | |
| 104 | |
| 105 // Arrow function changed to method body. Can be reused if 'main' is | |
| 106 // updated/patched. | |
| 107 new LibraryUpdaterTestCase( | |
| 108 before: 'main() => null', | |
| 109 after: 'main() { return null; }', | |
| 110 canReuse: true, | |
| 111 updates: ['main']), | |
| 112 | |
| 113 // Empty body changed to contain a statement. Can be reused if 'main' | |
| 114 // is updated/patched. | |
| 115 new LibraryUpdaterTestCase( | |
| 116 before: 'main() {}', | |
| 117 after: 'main() { return null; }', | |
| 118 canReuse: true, | |
| 119 updates: ['main']), | |
| 120 | |
| 121 // Empty body changed to arrow. Can be reused if 'main' | |
| 122 // is updated/patched. | |
| 123 new LibraryUpdaterTestCase( | |
| 124 before: 'main() {}', | |
| 125 after: 'main() => null;', | |
| 126 canReuse: true, | |
| 127 updates: ['main']), | |
| 128 | |
| 129 // Arrow changed to empty body. Can be reused if 'main' | |
| 130 // is updated/patched. | |
| 131 new LibraryUpdaterTestCase( | |
| 132 before: 'main() => null;', | |
| 133 after: 'main() {}', | |
| 134 canReuse: true, | |
| 135 updates: ['main']), | |
| 136 | |
| 137 // TODO(ahe): When supporting class members, test abstract methods. | |
| 138 ] | |
| 139 ); | |
| 140 } | |
| OLD | NEW |