| 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 import "../../../lib/compiler/implementation/dart2jslib.dart"; | 5 import "../../../lib/compiler/implementation/dart2jslib.dart"; |
| 6 import "../../../lib/compiler/implementation/elements/elements.dart"; | 6 import "../../../lib/compiler/implementation/elements/elements.dart"; |
| 7 import "../../../lib/compiler/implementation/tree/tree.dart"; | 7 import "../../../lib/compiler/implementation/tree/tree.dart"; |
| 8 import "../../../lib/compiler/implementation/util/util.dart"; | 8 import "../../../lib/compiler/implementation/util/util.dart"; |
| 9 import "mock_compiler.dart"; | 9 import "mock_compiler.dart"; |
| 10 import "parser_helper.dart"; | 10 import "parser_helper.dart"; |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 105 return element; | 105 return element; |
| 106 } | 106 } |
| 107 | 107 |
| 108 testPatchFunction() { | 108 testPatchFunction() { |
| 109 var compiler = applyPatch( | 109 var compiler = applyPatch( |
| 110 "external test();", | 110 "external test();", |
| 111 "patch test() { return 'string'; } "); | 111 "patch test() { return 'string'; } "); |
| 112 ensure(compiler, "test", compiler.coreLibrary.find, isPatched: true); | 112 ensure(compiler, "test", compiler.coreLibrary.find, isPatched: true); |
| 113 ensure(compiler, "test", compiler.coreLibrary.patch.find, isPatch: true); | 113 ensure(compiler, "test", compiler.coreLibrary.patch.find, isPatch: true); |
| 114 | 114 |
| 115 Expect.isTrue(compiler.warnings.isEmpty(), | 115 Expect.isTrue(compiler.warnings.isEmpty, |
| 116 "Unexpected warnings: ${compiler.warnings}"); | 116 "Unexpected warnings: ${compiler.warnings}"); |
| 117 Expect.isTrue(compiler.errors.isEmpty(), | 117 Expect.isTrue(compiler.errors.isEmpty, |
| 118 "Unexpected errors: ${compiler.errors}"); | 118 "Unexpected errors: ${compiler.errors}"); |
| 119 } | 119 } |
| 120 | 120 |
| 121 testPatchMember() { | 121 testPatchMember() { |
| 122 var compiler = applyPatch( | 122 var compiler = applyPatch( |
| 123 """ | 123 """ |
| 124 class Class { | 124 class Class { |
| 125 external String toString(); | 125 external String toString(); |
| 126 } | 126 } |
| 127 """, | 127 """, |
| 128 """ | 128 """ |
| 129 patch class Class { | 129 patch class Class { |
| 130 patch String toString() => 'string'; | 130 patch String toString() => 'string'; |
| 131 } | 131 } |
| 132 """); | 132 """); |
| 133 var container = ensure(compiler, "Class", compiler.coreLibrary.find, | 133 var container = ensure(compiler, "Class", compiler.coreLibrary.find, |
| 134 isMethod: false, isPatched: true); | 134 isMethod: false, isPatched: true); |
| 135 container.parseNode(compiler); | 135 container.parseNode(compiler); |
| 136 ensure(compiler, "Class", compiler.coreLibrary.patch.find, | 136 ensure(compiler, "Class", compiler.coreLibrary.patch.find, |
| 137 isMethod: false, isPatch: true); | 137 isMethod: false, isPatch: true); |
| 138 | 138 |
| 139 ensure(compiler, "toString", container.lookupLocalMember, | 139 ensure(compiler, "toString", container.lookupLocalMember, |
| 140 isPatched: true); | 140 isPatched: true); |
| 141 ensure(compiler, "toString", container.patch.lookupLocalMember, | 141 ensure(compiler, "toString", container.patch.lookupLocalMember, |
| 142 isPatch: true); | 142 isPatch: true); |
| 143 | 143 |
| 144 Expect.isTrue(compiler.warnings.isEmpty(), | 144 Expect.isTrue(compiler.warnings.isEmpty, |
| 145 "Unexpected warnings: ${compiler.warnings}"); | 145 "Unexpected warnings: ${compiler.warnings}"); |
| 146 Expect.isTrue(compiler.errors.isEmpty(), | 146 Expect.isTrue(compiler.errors.isEmpty, |
| 147 "Unexpected errors: ${compiler.errors}"); | 147 "Unexpected errors: ${compiler.errors}"); |
| 148 } | 148 } |
| 149 | 149 |
| 150 testPatchGetter() { | 150 testPatchGetter() { |
| 151 var compiler = applyPatch( | 151 var compiler = applyPatch( |
| 152 """ | 152 """ |
| 153 class Class { | 153 class Class { |
| 154 external int get field; | 154 external int get field; |
| 155 } | 155 } |
| 156 """, | 156 """, |
| 157 """ | 157 """ |
| 158 patch class Class { | 158 patch class Class { |
| 159 patch int get field => 5; | 159 patch int get field => 5; |
| 160 } | 160 } |
| 161 """); | 161 """); |
| 162 var container = ensure(compiler, "Class", compiler.coreLibrary.find, | 162 var container = ensure(compiler, "Class", compiler.coreLibrary.find, |
| 163 isPatched: true, isMethod: false); | 163 isPatched: true, isMethod: false); |
| 164 container.parseNode(compiler); | 164 container.parseNode(compiler); |
| 165 ensure(compiler, | 165 ensure(compiler, |
| 166 "field", | 166 "field", |
| 167 container.lookupLocalMember, | 167 container.lookupLocalMember, |
| 168 isGetter: true, | 168 isGetter: true, |
| 169 isPatched: true); | 169 isPatched: true); |
| 170 ensure(compiler, | 170 ensure(compiler, |
| 171 "field", | 171 "field", |
| 172 container.patch.lookupLocalMember, | 172 container.patch.lookupLocalMember, |
| 173 isGetter: true, | 173 isGetter: true, |
| 174 isPatch: true); | 174 isPatch: true); |
| 175 | 175 |
| 176 Expect.isTrue(compiler.warnings.isEmpty(), | 176 Expect.isTrue(compiler.warnings.isEmpty, |
| 177 "Unexpected warnings: ${compiler.warnings}"); | 177 "Unexpected warnings: ${compiler.warnings}"); |
| 178 Expect.isTrue(compiler.errors.isEmpty(), | 178 Expect.isTrue(compiler.errors.isEmpty, |
| 179 "Unexpected errors: ${compiler.errors}"); | 179 "Unexpected errors: ${compiler.errors}"); |
| 180 } | 180 } |
| 181 | 181 |
| 182 testRegularMember() { | 182 testRegularMember() { |
| 183 var compiler = applyPatch( | 183 var compiler = applyPatch( |
| 184 """ | 184 """ |
| 185 class Class { | 185 class Class { |
| 186 void regular() {} | 186 void regular() {} |
| 187 } | 187 } |
| 188 """, | 188 """, |
| 189 """ | 189 """ |
| 190 patch class Class { | 190 patch class Class { |
| 191 } | 191 } |
| 192 """); | 192 """); |
| 193 var container = ensure(compiler, "Class", compiler.coreLibrary.find, | 193 var container = ensure(compiler, "Class", compiler.coreLibrary.find, |
| 194 isMethod: false, isPatched: true); | 194 isMethod: false, isPatched: true); |
| 195 container.parseNode(compiler); | 195 container.parseNode(compiler); |
| 196 ensure(compiler, "Class", compiler.coreLibrary.patch.find, | 196 ensure(compiler, "Class", compiler.coreLibrary.patch.find, |
| 197 isMethod: false, isPatch: true); | 197 isMethod: false, isPatch: true); |
| 198 | 198 |
| 199 ensure(compiler, "regular", container.lookupLocalMember); | 199 ensure(compiler, "regular", container.lookupLocalMember); |
| 200 ensure(compiler, "regular", container.patch.lookupLocalMember); | 200 ensure(compiler, "regular", container.patch.lookupLocalMember); |
| 201 | 201 |
| 202 Expect.isTrue(compiler.warnings.isEmpty(), | 202 Expect.isTrue(compiler.warnings.isEmpty, |
| 203 "Unexpected warnings: ${compiler.warnings}"); | 203 "Unexpected warnings: ${compiler.warnings}"); |
| 204 Expect.isTrue(compiler.errors.isEmpty(), | 204 Expect.isTrue(compiler.errors.isEmpty, |
| 205 "Unexpected errors: ${compiler.errors}"); | 205 "Unexpected errors: ${compiler.errors}"); |
| 206 } | 206 } |
| 207 | 207 |
| 208 testGhostMember() { | 208 testGhostMember() { |
| 209 var compiler = applyPatch( | 209 var compiler = applyPatch( |
| 210 """ | 210 """ |
| 211 class Class { | 211 class Class { |
| 212 } | 212 } |
| 213 """, | 213 """, |
| 214 """ | 214 """ |
| 215 patch class Class { | 215 patch class Class { |
| 216 void ghost() {} | 216 void ghost() {} |
| 217 } | 217 } |
| 218 """); | 218 """); |
| 219 var container = ensure(compiler, "Class", compiler.coreLibrary.find, | 219 var container = ensure(compiler, "Class", compiler.coreLibrary.find, |
| 220 isMethod: false, isPatched: true); | 220 isMethod: false, isPatched: true); |
| 221 container.parseNode(compiler); | 221 container.parseNode(compiler); |
| 222 ensure(compiler, "Class", compiler.coreLibrary.patch.find, | 222 ensure(compiler, "Class", compiler.coreLibrary.patch.find, |
| 223 isMethod: false, isPatch: true); | 223 isMethod: false, isPatch: true); |
| 224 | 224 |
| 225 ensure(compiler, "ghost", container.lookupLocalMember, isFound: false); | 225 ensure(compiler, "ghost", container.lookupLocalMember, isFound: false); |
| 226 ensure(compiler, "ghost", container.patch.lookupLocalMember); | 226 ensure(compiler, "ghost", container.patch.lookupLocalMember); |
| 227 | 227 |
| 228 Expect.isTrue(compiler.warnings.isEmpty(), | 228 Expect.isTrue(compiler.warnings.isEmpty, |
| 229 "Unexpected warnings: ${compiler.warnings}"); | 229 "Unexpected warnings: ${compiler.warnings}"); |
| 230 Expect.isTrue(compiler.errors.isEmpty(), | 230 Expect.isTrue(compiler.errors.isEmpty, |
| 231 "Unexpected errors: ${compiler.errors}"); | 231 "Unexpected errors: ${compiler.errors}"); |
| 232 } | 232 } |
| 233 | 233 |
| 234 testInjectFunction() { | 234 testInjectFunction() { |
| 235 var compiler = applyPatch( | 235 var compiler = applyPatch( |
| 236 "", | 236 "", |
| 237 "int _function() => 5;"); | 237 "int _function() => 5;"); |
| 238 ensure(compiler, | 238 ensure(compiler, |
| 239 "_function", | 239 "_function", |
| 240 compiler.coreLibrary.find, | 240 compiler.coreLibrary.find, |
| 241 isFound: false); | 241 isFound: false); |
| 242 ensure(compiler, | 242 ensure(compiler, |
| 243 "_function", | 243 "_function", |
| 244 compiler.coreLibrary.patch.find); | 244 compiler.coreLibrary.patch.find); |
| 245 | 245 |
| 246 Expect.isTrue(compiler.warnings.isEmpty(), | 246 Expect.isTrue(compiler.warnings.isEmpty, |
| 247 "Unexpected warnings: ${compiler.warnings}"); | 247 "Unexpected warnings: ${compiler.warnings}"); |
| 248 Expect.isTrue(compiler.errors.isEmpty(), | 248 Expect.isTrue(compiler.errors.isEmpty, |
| 249 "Unexpected errors: ${compiler.errors}"); | 249 "Unexpected errors: ${compiler.errors}"); |
| 250 } | 250 } |
| 251 | 251 |
| 252 testPatchSignatureCheck() { | 252 testPatchSignatureCheck() { |
| 253 var compiler = applyPatch( | 253 var compiler = applyPatch( |
| 254 """ | 254 """ |
| 255 class Class { | 255 class Class { |
| 256 external String method1(); | 256 external String method1(); |
| 257 external void method2(String str); | 257 external void method2(String str); |
| 258 external void method3(String s1); | 258 external void method3(String s1); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 276 } | 276 } |
| 277 """); | 277 """); |
| 278 var container = ensure(compiler, "Class", compiler.coreLibrary.find, | 278 var container = ensure(compiler, "Class", compiler.coreLibrary.find, |
| 279 isMethod: false, isPatched: true); | 279 isMethod: false, isPatched: true); |
| 280 container.ensureResolved(compiler); | 280 container.ensureResolved(compiler); |
| 281 container.parseNode(compiler); | 281 container.parseNode(compiler); |
| 282 | 282 |
| 283 compiler.resolver.resolveMethodElement( | 283 compiler.resolver.resolveMethodElement( |
| 284 ensure(compiler, "method1", container.lookupLocalMember, | 284 ensure(compiler, "method1", container.lookupLocalMember, |
| 285 isPatched: true)); | 285 isPatched: true)); |
| 286 Expect.isTrue(compiler.warnings.isEmpty(), | 286 Expect.isTrue(compiler.warnings.isEmpty, |
| 287 "Unexpected warnings: ${compiler.warnings}"); | 287 "Unexpected warnings: ${compiler.warnings}"); |
| 288 Expect.isFalse(compiler.errors.isEmpty()); | 288 Expect.isFalse(compiler.errors.isEmpty); |
| 289 print('method1:${compiler.errors}'); | 289 print('method1:${compiler.errors}'); |
| 290 | 290 |
| 291 compiler.warnings.clear(); | 291 compiler.warnings.clear(); |
| 292 compiler.errors.clear(); | 292 compiler.errors.clear(); |
| 293 compiler.resolver.resolveMethodElement( | 293 compiler.resolver.resolveMethodElement( |
| 294 ensure(compiler, "method2", container.lookupLocalMember, | 294 ensure(compiler, "method2", container.lookupLocalMember, |
| 295 isPatched: true)); | 295 isPatched: true)); |
| 296 Expect.isTrue(compiler.warnings.isEmpty(), | 296 Expect.isTrue(compiler.warnings.isEmpty, |
| 297 "Unexpected warnings: ${compiler.warnings}"); | 297 "Unexpected warnings: ${compiler.warnings}"); |
| 298 Expect.isFalse(compiler.errors.isEmpty()); | 298 Expect.isFalse(compiler.errors.isEmpty); |
| 299 print('method2:${compiler.errors}'); | 299 print('method2:${compiler.errors}'); |
| 300 | 300 |
| 301 compiler.warnings.clear(); | 301 compiler.warnings.clear(); |
| 302 compiler.errors.clear(); | 302 compiler.errors.clear(); |
| 303 compiler.resolver.resolveMethodElement( | 303 compiler.resolver.resolveMethodElement( |
| 304 ensure(compiler, "method3", container.lookupLocalMember, | 304 ensure(compiler, "method3", container.lookupLocalMember, |
| 305 isPatched: true)); | 305 isPatched: true)); |
| 306 Expect.isTrue(compiler.warnings.isEmpty(), | 306 Expect.isTrue(compiler.warnings.isEmpty, |
| 307 "Unexpected warnings: ${compiler.warnings}"); | 307 "Unexpected warnings: ${compiler.warnings}"); |
| 308 Expect.isFalse(compiler.errors.isEmpty()); | 308 Expect.isFalse(compiler.errors.isEmpty); |
| 309 print('method3:${compiler.errors}'); | 309 print('method3:${compiler.errors}'); |
| 310 | 310 |
| 311 compiler.warnings.clear(); | 311 compiler.warnings.clear(); |
| 312 compiler.errors.clear(); | 312 compiler.errors.clear(); |
| 313 compiler.resolver.resolveMethodElement( | 313 compiler.resolver.resolveMethodElement( |
| 314 ensure(compiler, "method4", container.lookupLocalMember, | 314 ensure(compiler, "method4", container.lookupLocalMember, |
| 315 isPatched: true)); | 315 isPatched: true)); |
| 316 Expect.isTrue(compiler.warnings.isEmpty(), | 316 Expect.isTrue(compiler.warnings.isEmpty, |
| 317 "Unexpected warnings: ${compiler.warnings}"); | 317 "Unexpected warnings: ${compiler.warnings}"); |
| 318 Expect.isFalse(compiler.errors.isEmpty()); | 318 Expect.isFalse(compiler.errors.isEmpty); |
| 319 print('method4:${compiler.errors}'); | 319 print('method4:${compiler.errors}'); |
| 320 | 320 |
| 321 compiler.warnings.clear(); | 321 compiler.warnings.clear(); |
| 322 compiler.errors.clear(); | 322 compiler.errors.clear(); |
| 323 compiler.resolver.resolveMethodElement( | 323 compiler.resolver.resolveMethodElement( |
| 324 ensure(compiler, "method5", container.lookupLocalMember, | 324 ensure(compiler, "method5", container.lookupLocalMember, |
| 325 isPatched: true)); | 325 isPatched: true)); |
| 326 Expect.isTrue(compiler.warnings.isEmpty(), | 326 Expect.isTrue(compiler.warnings.isEmpty, |
| 327 "Unexpected warnings: ${compiler.warnings}"); | 327 "Unexpected warnings: ${compiler.warnings}"); |
| 328 Expect.isFalse(compiler.errors.isEmpty()); | 328 Expect.isFalse(compiler.errors.isEmpty); |
| 329 print('method5:${compiler.errors}'); | 329 print('method5:${compiler.errors}'); |
| 330 | 330 |
| 331 compiler.warnings.clear(); | 331 compiler.warnings.clear(); |
| 332 compiler.errors.clear(); | 332 compiler.errors.clear(); |
| 333 compiler.resolver.resolveMethodElement( | 333 compiler.resolver.resolveMethodElement( |
| 334 ensure(compiler, "method6", container.lookupLocalMember, | 334 ensure(compiler, "method6", container.lookupLocalMember, |
| 335 isPatched: true)); | 335 isPatched: true)); |
| 336 Expect.isTrue(compiler.warnings.isEmpty(), | 336 Expect.isTrue(compiler.warnings.isEmpty, |
| 337 "Unexpected warnings: ${compiler.warnings}"); | 337 "Unexpected warnings: ${compiler.warnings}"); |
| 338 Expect.isFalse(compiler.errors.isEmpty()); | 338 Expect.isFalse(compiler.errors.isEmpty); |
| 339 print('method6:${compiler.errors}'); | 339 print('method6:${compiler.errors}'); |
| 340 | 340 |
| 341 compiler.warnings.clear(); | 341 compiler.warnings.clear(); |
| 342 compiler.errors.clear(); | 342 compiler.errors.clear(); |
| 343 compiler.resolver.resolveMethodElement( | 343 compiler.resolver.resolveMethodElement( |
| 344 ensure(compiler, "method7", container.lookupLocalMember, | 344 ensure(compiler, "method7", container.lookupLocalMember, |
| 345 isPatched: true)); | 345 isPatched: true)); |
| 346 Expect.isTrue(compiler.warnings.isEmpty(), | 346 Expect.isTrue(compiler.warnings.isEmpty, |
| 347 "Unexpected warnings: ${compiler.warnings}"); | 347 "Unexpected warnings: ${compiler.warnings}"); |
| 348 Expect.isFalse(compiler.errors.isEmpty()); | 348 Expect.isFalse(compiler.errors.isEmpty); |
| 349 print('method7:${compiler.errors}'); | 349 print('method7:${compiler.errors}'); |
| 350 | 350 |
| 351 compiler.warnings.clear(); | 351 compiler.warnings.clear(); |
| 352 compiler.errors.clear(); | 352 compiler.errors.clear(); |
| 353 compiler.resolver.resolveMethodElement( | 353 compiler.resolver.resolveMethodElement( |
| 354 ensure(compiler, "method8", container.lookupLocalMember, | 354 ensure(compiler, "method8", container.lookupLocalMember, |
| 355 isPatched: true)); | 355 isPatched: true)); |
| 356 Expect.isTrue(compiler.warnings.isEmpty(), | 356 Expect.isTrue(compiler.warnings.isEmpty, |
| 357 "Unexpected warnings: ${compiler.warnings}"); | 357 "Unexpected warnings: ${compiler.warnings}"); |
| 358 Expect.isFalse(compiler.errors.isEmpty()); | 358 Expect.isFalse(compiler.errors.isEmpty); |
| 359 print('method8:${compiler.errors}'); | 359 print('method8:${compiler.errors}'); |
| 360 } | 360 } |
| 361 | 361 |
| 362 main() { | 362 main() { |
| 363 testPatchFunction(); | 363 testPatchFunction(); |
| 364 testPatchMember(); | 364 testPatchMember(); |
| 365 testPatchGetter(); | 365 testPatchGetter(); |
| 366 testRegularMember(); | 366 testRegularMember(); |
| 367 testGhostMember(); | 367 testGhostMember(); |
| 368 testInjectFunction(); | 368 testInjectFunction(); |
| 369 testPatchSignatureCheck(); | 369 testPatchSignatureCheck(); |
| 370 } | 370 } |
| OLD | NEW |