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 'dart:uri'; | 5 import 'dart:uri'; |
6 import 'parser_helper.dart'; | 6 import 'parser_helper.dart'; |
7 import 'mock_compiler.dart'; | 7 import 'mock_compiler.dart'; |
8 import '../../../sdk/lib/_internal/compiler/compiler.dart'; | 8 import '../../../sdk/lib/_internal/compiler/compiler.dart'; |
9 import '../../../sdk/lib/_internal/compiler/implementation/dart2jslib.dart' as l
eg; | 9 import '../../../sdk/lib/_internal/compiler/implementation/dart2jslib.dart' as l
eg; |
10 import '../../../sdk/lib/_internal/compiler/implementation/dart_backend/dart_bac
kend.dart'; | 10 import '../../../sdk/lib/_internal/compiler/implementation/dart_backend/dart_bac
kend.dart'; |
11 import '../../../sdk/lib/_internal/compiler/implementation/elements/elements.dar
t'; | 11 import '../../../sdk/lib/_internal/compiler/implementation/elements/elements.dar
t'; |
12 import '../../../sdk/lib/_internal/compiler/implementation/tree/tree.dart'; | 12 import '../../../sdk/lib/_internal/compiler/implementation/tree/tree.dart'; |
13 | 13 |
14 const coreLib = r''' | 14 const coreLib = r''' |
15 #library('corelib'); | 15 library corelib; |
16 class Object {} | 16 class Object {} |
17 interface bool {} | 17 interface bool {} |
18 interface num {} | 18 interface num {} |
19 interface int extends num {} | 19 interface int extends num {} |
20 interface double extends num {} | 20 interface double extends num {} |
21 interface String {} | 21 interface String {} |
22 interface Function {} | 22 interface Function {} |
23 interface List {} | 23 interface List {} |
24 interface Map {} | 24 interface Map {} |
25 interface Closure {} | 25 interface Closure {} |
26 interface Dynamic_ {} | 26 interface Dynamic_ {} |
27 interface Null {} | 27 interface Null {} |
28 interface TypeError {} | 28 interface TypeError {} |
29 class Type {} | 29 class Type {} |
30 class Math { | 30 class Math { |
31 static double parseDouble(String s) => 1.0; | 31 static double parseDouble(String s) => 1.0; |
32 } | 32 } |
33 print(x) {} | 33 print(x) {} |
34 '''; | 34 '''; |
35 | 35 |
36 const ioLib = r''' | 36 const ioLib = r''' |
37 #library('io'); | 37 library io; |
38 class Platform { | 38 class Platform { |
39 static int operatingSystem; | 39 static int operatingSystem; |
40 } | 40 } |
41 '''; | 41 '''; |
42 | 42 |
43 const htmlLib = r''' | 43 const htmlLib = r''' |
44 #library('html'); | 44 library html; |
45 Window __window; | 45 Window __window; |
46 Window get window => __window; | 46 Window get window => __window; |
47 abstract class Window { | 47 abstract class Window { |
48 Navigator get navigator; | 48 Navigator get navigator; |
49 } | 49 } |
50 abstract class Navigator { | 50 abstract class Navigator { |
51 String get userAgent; | 51 String get userAgent; |
52 } | 52 } |
53 '''; | 53 '''; |
54 | 54 |
55 const helperLib = r''' | 55 const helperLib = r''' |
56 #library('js_helper'); | 56 library js_helper; |
57 class JSInvocationMirror {} | 57 class JSInvocationMirror {} |
58 '''; | 58 '''; |
59 | 59 |
60 testDart2Dart(String src, {void continuation(String s), bool minify: false, | 60 testDart2Dart(String src, {void continuation(String s), bool minify: false, |
61 bool stripTypes: false}) { | 61 bool stripTypes: false}) { |
62 // If continuation is not provided, check that source string remains the same. | 62 // If continuation is not provided, check that source string remains the same. |
63 if (continuation === null) { | 63 if (continuation === null) { |
64 continuation = (s) { Expect.equals(src, s); }; | 64 continuation = (s) { Expect.equals(src, s); }; |
65 } | 65 } |
66 testDart2DartWithLibrary(src, '', continuation: continuation, minify: minify, | 66 testDart2DartWithLibrary(src, '', continuation: continuation, minify: minify, |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
176 | 176 |
177 testAbstractClass() { | 177 testAbstractClass() { |
178 testDart2Dart('main(){A.foo;}abstract class A{final static num foo;}'); | 178 testDart2Dart('main(){A.foo;}abstract class A{final static num foo;}'); |
179 } | 179 } |
180 | 180 |
181 testConflictSendsRename() { | 181 testConflictSendsRename() { |
182 // Various Send-s to current library and external library. Verify that | 182 // Various Send-s to current library and external library. Verify that |
183 // everything is renamed correctly in conflicting class names and global | 183 // everything is renamed correctly in conflicting class names and global |
184 // functions. | 184 // functions. |
185 var librarySrc = ''' | 185 var librarySrc = ''' |
186 #library("mylib.dart"); | 186 library mylib; |
187 | 187 |
188 globalfoo() {} | 188 globalfoo() {} |
189 var globalVar; | 189 var globalVar; |
190 var globalVarInitialized = 6, globalVarInitialized2 = 7; | 190 var globalVarInitialized = 6, globalVarInitialized2 = 7; |
191 | 191 |
192 class A { | 192 class A { |
193 A(){} | 193 A(){} |
194 A.fromFoo(){} | 194 A.fromFoo(){} |
195 static staticfoo(){} | 195 static staticfoo(){} |
196 foo(){} | 196 foo(){} |
197 static const field = 5; | 197 static const field = 5; |
198 } | 198 } |
199 '''; | 199 '''; |
200 var mainSrc = ''' | 200 var mainSrc = ''' |
201 #import("mylib.dart", prefix: "mylib"); | 201 import 'mylib.dart' as mylib; |
202 | 202 |
203 globalfoo() {} | 203 globalfoo() {} |
204 var globalVar; | 204 var globalVar; |
205 var globalVarInitialized = 6, globalVarInitialized2 = 7; | 205 var globalVarInitialized = 6, globalVarInitialized2 = 7; |
206 | 206 |
207 class A { | 207 class A { |
208 A(){} | 208 A(){} |
209 A.fromFoo(){} | 209 A.fromFoo(){} |
210 static staticfoo(){} | 210 static staticfoo(){} |
211 foo(){} | 211 foo(){} |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
251 'A.field;A.staticfoo();' | 251 'A.field;A.staticfoo();' |
252 'new A();new A.fromFoo();new A().foo();}'; | 252 'new A();new A.fromFoo();new A().foo();}'; |
253 testDart2DartWithLibrary(mainSrc, librarySrc, | 253 testDart2DartWithLibrary(mainSrc, librarySrc, |
254 continuation: (String result) { Expect.equals(expectedResult, result); }); | 254 continuation: (String result) { Expect.equals(expectedResult, result); }); |
255 } | 255 } |
256 | 256 |
257 testNoConflictSendsRename() { | 257 testNoConflictSendsRename() { |
258 // Various Send-s to current library and external library. Nothing should be | 258 // Various Send-s to current library and external library. Nothing should be |
259 // renamed here, only library prefixes must be cut. | 259 // renamed here, only library prefixes must be cut. |
260 var librarySrc = ''' | 260 var librarySrc = ''' |
261 #library("mylib.dart"); | 261 library mylib; |
262 | 262 |
263 globalfoo() {} | 263 globalfoo() {} |
264 | 264 |
265 class A { | 265 class A { |
266 A(){} | 266 A(){} |
267 A.fromFoo(){} | 267 A.fromFoo(){} |
268 static staticfoo(){} | 268 static staticfoo(){} |
269 foo(){} | 269 foo(){} |
270 static const field = 5; | 270 static const field = 5; |
271 } | 271 } |
272 '''; | 272 '''; |
273 var mainSrc = ''' | 273 var mainSrc = ''' |
274 #import("mylib.dart", prefix: "mylib"); | 274 import 'mylib.dart' as mylib; |
275 | 275 |
276 myglobalfoo() {} | 276 myglobalfoo() {} |
277 | 277 |
278 class MyA { | 278 class MyA { |
279 MyA(){} | 279 MyA(){} |
280 MyA.myfromFoo(){} | 280 MyA.myfromFoo(){} |
281 static mystaticfoo(){} | 281 static mystaticfoo(){} |
282 myfoo(){} | 282 myfoo(){} |
283 static const myfield = 5; | 283 static const myfield = 5; |
284 } | 284 } |
(...skipping 23 matching lines...) Expand all Loading... |
308 'static const myfield=5;}' | 308 'static const myfield=5;}' |
309 'main(){myglobalfoo();MyA.myfield;MyA.mystaticfoo();new MyA();' | 309 'main(){myglobalfoo();MyA.myfield;MyA.mystaticfoo();new MyA();' |
310 'new MyA.myfromFoo();new MyA().myfoo();globalfoo();A.field;' | 310 'new MyA.myfromFoo();new MyA().myfoo();globalfoo();A.field;' |
311 'A.staticfoo();new A();new A.fromFoo();new A().foo();}'; | 311 'A.staticfoo();new A();new A.fromFoo();new A().foo();}'; |
312 testDart2DartWithLibrary(mainSrc, librarySrc, | 312 testDart2DartWithLibrary(mainSrc, librarySrc, |
313 continuation: (String result) { Expect.equals(expectedResult, result); }); | 313 continuation: (String result) { Expect.equals(expectedResult, result); }); |
314 } | 314 } |
315 | 315 |
316 testConflictLibraryClassRename() { | 316 testConflictLibraryClassRename() { |
317 var librarySrc = ''' | 317 var librarySrc = ''' |
318 #library('mylib'); | 318 library mylib; |
319 | 319 |
320 topfoo() {} | 320 topfoo() {} |
321 | 321 |
322 class A { | 322 class A { |
323 foo(){} | 323 foo(){} |
324 } | 324 } |
325 '''; | 325 '''; |
326 var mainSrc = ''' | 326 var mainSrc = ''' |
327 #import('mylib.dart', prefix: 'mylib'); | 327 import 'mylib.dart' as mylib; |
328 | 328 |
329 | 329 |
330 topfoo() {var x = 5;} | 330 topfoo() {var x = 5;} |
331 | 331 |
332 class A{ | 332 class A{ |
333 num foo() {} | 333 num foo() {} |
334 A.fromFoo() {} | 334 A.fromFoo() {} |
335 mylib.A myliba; | 335 mylib.A myliba; |
336 List<A> mylist; | 336 List<A> mylist; |
337 } | 337 } |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
373 'class A<T extends Object>{}' | 373 'class A<T extends Object>{}' |
374 'class B<T extends Object> extends A<T>{}'); | 374 'class B<T extends Object> extends A<T>{}'); |
375 } | 375 } |
376 | 376 |
377 testStaticInvocation() { | 377 testStaticInvocation() { |
378 testDart2Dart('main(){var x=Math.parseDouble("1");}'); | 378 testDart2Dart('main(){var x=Math.parseDouble("1");}'); |
379 } | 379 } |
380 | 380 |
381 testLibraryGetSet() { | 381 testLibraryGetSet() { |
382 var librarySrc = ''' | 382 var librarySrc = ''' |
383 #library('mylib'); | 383 library mylib; |
384 | 384 |
385 get topgetset => 5; | 385 get topgetset => 5; |
386 set topgetset(arg) {} | 386 set topgetset(arg) {} |
387 '''; | 387 '''; |
388 var mainSrc = ''' | 388 var mainSrc = ''' |
389 #import('mylib.dart', prefix: 'mylib'); | 389 import 'mylib.dart' as mylib; |
390 | 390 |
391 get topgetset => 6; | 391 get topgetset => 6; |
392 set topgetset(arg) {} | 392 set topgetset(arg) {} |
393 | 393 |
394 main() { | 394 main() { |
395 topgetset; | 395 topgetset; |
396 topgetset = 6; | 396 topgetset = 6; |
397 | 397 |
398 mylib.topgetset; | 398 mylib.topgetset; |
399 mylib.topgetset = 5; | 399 mylib.topgetset = 5; |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
471 // Check that 'C' in default clause of I gets into placeholders. | 471 // Check that 'C' in default clause of I gets into placeholders. |
472 Expect.isTrue(collector.elementNodes[classElement].contains(defaultTypeNode)); | 472 Expect.isTrue(collector.elementNodes[classElement].contains(defaultTypeNode)); |
473 } | 473 } |
474 | 474 |
475 testTypeVariablesAreRenamed() { | 475 testTypeVariablesAreRenamed() { |
476 // Somewhat a hack: we require all the references of the identifier | 476 // Somewhat a hack: we require all the references of the identifier |
477 // to be renamed in the same way for the whole library. Hence | 477 // to be renamed in the same way for the whole library. Hence |
478 // if we have a class and type variable with the same name, they | 478 // if we have a class and type variable with the same name, they |
479 // both should be renamed. | 479 // both should be renamed. |
480 var librarySrc = ''' | 480 var librarySrc = ''' |
481 #library('mylib'); | 481 library mylib; |
482 typedef void MyFunction<T extends num>(T arg); | 482 typedef void MyFunction<T extends num>(T arg); |
483 class T {} | 483 class T {} |
484 class B<T> {} | 484 class B<T> {} |
485 class A<T> extends B<T> { T f; } | 485 class A<T> extends B<T> { T f; } |
486 '''; | 486 '''; |
487 var mainSrc = ''' | 487 var mainSrc = ''' |
488 #import('mylib.dart', prefix: 'mylib'); | 488 import 'mylib.dart' as mylib; |
489 typedef void MyFunction<T extends num>(T arg); | 489 typedef void MyFunction<T extends num>(T arg); |
490 class T {} | 490 class T {} |
491 class B<T> {} | 491 class B<T> {} |
492 class A<T> extends B<T> { T f; } | 492 class A<T> extends B<T> { T f; } |
493 | 493 |
494 main() { | 494 main() { |
495 MyFunction myf1; | 495 MyFunction myf1; |
496 mylib.MyFunction myf2; | 496 mylib.MyFunction myf2; |
497 new A<int>().f; | 497 new A<int>().f; |
498 new T(); | 498 new T(); |
(...skipping 12 matching lines...) Expand all Loading... |
511 'class p_B<p_T>{}' | 511 'class p_B<p_T>{}' |
512 'class p_A<p_T> extends p_B<p_T>{p_T f;}' | 512 'class p_A<p_T> extends p_B<p_T>{p_T f;}' |
513 'main(){p_MyFunction myf1;MyFunction myf2;new p_A<int>().f;' | 513 'main(){p_MyFunction myf1;MyFunction myf2;new p_A<int>().f;' |
514 'new p_T();new A<int>().f;new T();}'; | 514 'new p_T();new A<int>().f;new T();}'; |
515 testDart2DartWithLibrary(mainSrc, librarySrc, | 515 testDart2DartWithLibrary(mainSrc, librarySrc, |
516 continuation: (String result) { Expect.equals(expectedResult, result); }); | 516 continuation: (String result) { Expect.equals(expectedResult, result); }); |
517 } | 517 } |
518 | 518 |
519 testClassTypeArgumentBound() { | 519 testClassTypeArgumentBound() { |
520 var librarySrc = ''' | 520 var librarySrc = ''' |
521 #library('mylib'); | 521 library mylib; |
522 | 522 |
523 interface I {} | 523 interface I {} |
524 class A<T extends I> {} | 524 class A<T extends I> {} |
525 | 525 |
526 '''; | 526 '''; |
527 var mainSrc = ''' | 527 var mainSrc = ''' |
528 #import('mylib.dart', prefix: 'mylib'); | 528 import 'mylib.dart' as mylib; |
529 | 529 |
530 interface I {} | 530 interface I {} |
531 class A<T extends I> {} | 531 class A<T extends I> {} |
532 | 532 |
533 main() { | 533 main() { |
534 new A(); | 534 new A(); |
535 new mylib.A(); | 535 new mylib.A(); |
536 } | 536 } |
537 '''; | 537 '''; |
538 var expectedResult = | 538 var expectedResult = |
539 'interface I{}' | 539 'interface I{}' |
540 'class A<T extends I>{}' | 540 'class A<T extends I>{}' |
541 'interface p_I{}' | 541 'interface p_I{}' |
542 'class p_A<p_T extends p_I>{}' | 542 'class p_A<p_T extends p_I>{}' |
543 'main(){new p_A();new A();}'; | 543 'main(){new p_A();new A();}'; |
544 testDart2DartWithLibrary(mainSrc, librarySrc, | 544 testDart2DartWithLibrary(mainSrc, librarySrc, |
545 continuation: (String result) { Expect.equals(expectedResult, result); }); | 545 continuation: (String result) { Expect.equals(expectedResult, result); }); |
546 } | 546 } |
547 | 547 |
548 testDoubleMains() { | 548 testDoubleMains() { |
549 var librarySrc = ''' | 549 var librarySrc = ''' |
550 #library('mylib'); | 550 library mylib; |
551 main() {} | 551 main() {} |
552 '''; | 552 '''; |
553 var mainSrc = ''' | 553 var mainSrc = ''' |
554 #import('mylib.dart', prefix: 'mylib'); | 554 import 'mylib.dart' as mylib; |
555 main() { | 555 main() { |
556 mylib.main(); | 556 mylib.main(); |
557 } | 557 } |
558 '''; | 558 '''; |
559 var expectedResult = | 559 var expectedResult = |
560 'p_main(){}' | 560 'p_main(){}' |
561 'main(){p_main();}'; | 561 'main(){p_main();}'; |
562 testDart2DartWithLibrary(mainSrc, librarySrc, | 562 testDart2DartWithLibrary(mainSrc, librarySrc, |
563 continuation: (String result) { Expect.equals(expectedResult, result); }); | 563 continuation: (String result) { Expect.equals(expectedResult, result); }); |
564 } | 564 } |
565 | 565 |
566 testStaticAccessIoLib() { | 566 testStaticAccessIoLib() { |
567 var src = ''' | 567 var src = ''' |
568 #import('dart:io'); | 568 import 'dart:io'; |
569 | 569 |
570 main() { | 570 main() { |
571 Platform.operatingSystem; | 571 Platform.operatingSystem; |
572 } | 572 } |
573 '''; | 573 '''; |
574 var expectedResult = 'import "dart:io" as p;' | 574 var expectedResult = 'import "dart:io" as p;' |
575 'main(){p.Platform.operatingSystem;}'; | 575 'main(){p.Platform.operatingSystem;}'; |
576 testDart2Dart(src, | 576 testDart2Dart(src, |
577 continuation: (String result) { Expect.equals(expectedResult, result); }); | 577 continuation: (String result) { Expect.equals(expectedResult, result); }); |
578 } | 578 } |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
651 '''; | 651 '''; |
652 var expectedResult = | 652 var expectedResult = |
653 ' foo( arg){}main(){var localvar;foo("5");}'; | 653 ' foo( arg){}main(){var localvar;foo("5");}'; |
654 testDart2Dart(src, | 654 testDart2Dart(src, |
655 continuation: (String result) { Expect.equals(expectedResult, result); }, | 655 continuation: (String result) { Expect.equals(expectedResult, result); }, |
656 stripTypes: true); | 656 stripTypes: true); |
657 } | 657 } |
658 | 658 |
659 testPlatformLibraryMemberNamesAreFixed() { | 659 testPlatformLibraryMemberNamesAreFixed() { |
660 var src = ''' | 660 var src = ''' |
661 #import('dart:html'); | 661 import 'dart:html'; |
662 | 662 |
663 class A { | 663 class A { |
664 static String get userAgent => window.navigator.userAgent; | 664 static String get userAgent => window.navigator.userAgent; |
665 } | 665 } |
666 | 666 |
667 main() { | 667 main() { |
668 A.userAgent; | 668 A.userAgent; |
669 } | 669 } |
670 '''; | 670 '''; |
671 var expectedResult = 'import "dart:html" as p;' | 671 var expectedResult = 'import "dart:html" as p;' |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
716 testDoubleMains(); | 716 testDoubleMains(); |
717 testStaticAccessIoLib(); | 717 testStaticAccessIoLib(); |
718 testLocalFunctionPlaceholder(); | 718 testLocalFunctionPlaceholder(); |
719 testMinification(); | 719 testMinification(); |
720 testClosureLocalsMinified(); | 720 testClosureLocalsMinified(); |
721 testParametersMinified(); | 721 testParametersMinified(); |
722 testDeclarationTypePlaceholders(); | 722 testDeclarationTypePlaceholders(); |
723 testPlatformLibraryMemberNamesAreFixed(); | 723 testPlatformLibraryMemberNamesAreFixed(); |
724 testConflictsWithCoreLib(); | 724 testConflictsWithCoreLib(); |
725 } | 725 } |
OLD | NEW |