Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(100)

Side by Side Diff: tests/compiler/dart2js/backend_dart/dart_backend_test.dart

Issue 2213673002: Delete dart_backend from compiler. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
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
3 // BSD-style license that can be found in the LICENSE file.
4
5 import "package:expect/expect.dart";
6 import 'dart:async';
7 import 'dart:io' as io;
8 import "package:async_helper/async_helper.dart";
9 import '../mock_compiler.dart';
10 import '../mock_libraries.dart';
11 import '../output_collector.dart';
12 import 'package:compiler/compiler.dart';
13 import 'package:compiler/src/common/names.dart' show Identifiers;
14 import 'package:compiler/src/dart_backend/dart_backend.dart';
15 import 'package:compiler/src/elements/elements.dart';
16 import 'package:compiler/src/tree/tree.dart';
17
18 const ioLib = r'''
19 library io;
20 class Platform {
21 static int operatingSystem;
22 }
23 ''';
24
25 const htmlLib = r'''
26 library html;
27 Window __window;
28 Window get window => __window;
29 abstract class Window {
30 Navigator get navigator;
31 }
32 abstract class Navigator {
33 String get userAgent;
34 }
35 ''';
36
37 /**
38 * Library name is assumed to be 'mylib' in 'mylib.dart' file.
39 */
40 testDart2Dart(String mainSrc, {String librarySrc,
41 String expectedResult,
42 bool minify: false,
43 bool stripTypes: false}) {
44
45 // If expectedResult is not provided, check that source string remains the
46 // same.
47 if (expectedResult == null) {
48 Expect.equals(null, librarySrc);
49 expectedResult = mainSrc;
50 }
51
52 fileUri(path) => new Uri(scheme: 'file', path: path);
53
54 final scriptUri = fileUri('script.dart');
55 final libUri = fileUri('mylib.dart');
56
57 provider(uri) {
58 if (uri == scriptUri) return new Future.value(mainSrc);
59 if (uri.toString() == libUri.toString()) {
60 return new Future.value(librarySrc);
61 }
62 if (uri.path.endsWith('/dart2dart.platform')) {
63 return new io.File.fromUri(uri).readAsBytes();
64 } else if (uri.path.endsWith('/core.dart')) {
65 return new Future.value(buildLibrarySource(DEFAULT_CORE_LIBRARY));
66 } else if (uri.path.endsWith('/core_patch.dart')) {
67 return new Future.value(DEFAULT_PATCH_CORE_SOURCE);
68 } else if (uri.path.endsWith('/io.dart')) {
69 return new Future.value(ioLib);
70 } else if (uri.path.endsWith('/js_helper.dart')) {
71 return new Future.value(buildLibrarySource(DEFAULT_JS_HELPER_LIBRARY));
72 } else if (uri.path.endsWith('/html_dart2js.dart')) {
73 // TODO(smok): The file should change to html_dartium at some point.
74 return new Future.value(htmlLib);
75 } else if (uri.path.endsWith('/foreign_helper.dart')) {
76 return new Future.value(
77 buildLibrarySource(DEFAULT_FOREIGN_HELPER_LIBRARY));
78 } else if (uri.path.endsWith('/isolate_helper.dart')) {
79 return new Future.value(
80 buildLibrarySource(DEFAULT_ISOLATE_HELPER_LIBRARY));
81 }
82 return new Future.value('');
83 }
84
85 handler(uri, begin, end, message, kind) {
86 if (identical(kind, Diagnostic.ERROR) || identical(kind, Diagnostic.CRASH)) {
87 Expect.fail('$uri: $begin-$end: $message [$kind]');
88 }
89 }
90
91 final options = <String>['--output-type=dart'];
92 // Some tests below are using dart:io.
93 if (minify) options.add('--minify');
94 if (stripTypes) options.add('--force-strip=types');
95
96 asyncTest(() {
97 OutputCollector outputCollector = new OutputCollector();
98 return compile(
99 scriptUri,
100 Uri.base.resolve('sdk/'),
101 fileUri('packageRoot/'),
102 provider,
103 handler,
104 options,
105 outputCollector).then((_) {
106 String code = outputCollector.getOutput('', 'dart');
107 Expect.equals(expectedResult, code,
108 'expected:\n$expectedResult\nactual:\n$code');
109 });
110 });
111 }
112
113 testSimpleFileUnparse() {
114 final src = '''
115 should_be_dropped() {
116 }
117
118 should_be_kept() {
119 }
120
121 main() {
122 should_be_kept();
123 }
124 ''';
125 testDart2Dart(src, expectedResult: '''
126 should_be_kept() {}
127 main() {
128 should_be_kept();
129 }
130 ''');
131 }
132 testTopLevelField() {
133 testDart2Dart('''
134 final String x = "asd";
135 main() {
136 x;
137 }
138 ''');
139 }
140
141 testSimpleTopLevelClass() {
142 testDart2Dart('''
143 main() {
144 new A();
145 }
146 class A {
147 A() {}
148 }
149 ''');
150 }
151
152 testClassWithSynthesizedConstructor() {
153 testDart2Dart('''
154 main() {
155 new A();
156 }
157 class A {}
158 ''');
159 }
160
161 testClassWithMethod() {
162 testDart2Dart(r'''
163 main() {
164 var a = new A();
165 a.foo();
166 }
167 class A {
168 void foo() {}
169 }
170 ''');
171 }
172
173 testExtendsImplements() {
174 testDart2Dart('''
175 main() {
176 new B<Object>();
177 }
178 class A<T> {}
179 class B<T> extends A<T> {}
180 ''');
181 }
182
183 testVariableDefinitions() {
184 testDart2Dart('''
185 main() {
186 var x, y;
187 final String s = null;
188 }
189 ''');
190 testDart2Dart('''
191 main() {
192 final int x = 0, y = 0;
193 final String s = null;
194 }
195 ''');
196 testDart2Dart('''
197 foo(f, g) {}
198 main() {
199 foo(1, 2);
200 }
201 ''');
202 testDart2Dart('''
203 foo(f(arg)) {}
204 main() {
205 foo(main);
206 }
207 ''');
208 // A couple of static/finals inside a class.
209 testDart2Dart('''
210 main() {
211 A.a;
212 A.b;
213 }
214 class A {
215 static const String a = "5";
216 static const String b = "4";
217 }
218 ''');
219 // Class member of typedef-ed function type.
220 // Maybe typedef should be included in the result too, but it
221 // works fine without it.
222 testDart2Dart('''
223 typedef void foofunc(_0);
224 main() {
225 new A((arg) {});
226 }
227 class A {
228 A(foofunc this.handler);
229 final foofunc handler;
230 }
231 ''');
232 }
233
234 testGetSet() {
235 // Top-level get/set.
236 testDart2Dart('''
237 set foo(arg) {}
238 get foo {
239 return 5;
240 }
241 main() {
242 foo;
243 foo = 5;
244 }
245 ''');
246 // Field get/set.
247 testDart2Dart('''
248 main() {
249 var a = new A();
250 a.foo;
251 a.foo = 5;
252 }
253 class A {
254 set foo(a) {}
255 get foo {
256 return 5;
257 }
258 }
259 ''');
260 // Typed get/set.
261 testDart2Dart('''
262 String get foo {
263 return "a";
264 }
265 main() {
266 foo;
267 }
268 ''');
269 }
270
271 testAbstractClass() {
272 testDart2Dart('''
273 main() {
274 A.foo;
275 }
276 abstract class A {
277 static final num foo = 0;
278 }
279 ''');
280 }
281
282 testConflictSendsRename() {
283 // Various Send-s to current library and external library. Verify that
284 // everything is renamed correctly in conflicting class names and global
285 // functions.
286 var librarySrc = '''
287 library mylib;
288
289 globalfoo() {}
290 var globalVar;
291 var globalVarInitialized = 6, globalVarInitialized2 = 7;
292
293 class A {
294 A(){}
295 A.fromFoo(){}
296 static staticfoo(){}
297 foo(){}
298 static const field = 5;
299 }
300 ''';
301 var mainSrc = '''
302 import 'mylib.dart' as mylib;
303
304 globalfoo() {}
305 var globalVar;
306 var globalVarInitialized = 6, globalVarInitialized2 = 7;
307
308 class A {
309 A(){}
310 A.fromFoo(){}
311 static staticfoo(){}
312 foo(){}
313 static const field = 5;
314 }
315
316 main() {
317 globalVar;
318 globalVarInitialized;
319 globalVarInitialized2;
320 globalfoo();
321 A.field;
322 A.staticfoo();
323 new A();
324 new A.fromFoo();
325 new A().foo();
326
327 mylib.globalVar;
328 mylib.globalVarInitialized;
329 mylib.globalVarInitialized2;
330 mylib.globalfoo();
331 mylib.A.field;
332 mylib.A.staticfoo();
333 new mylib.A();
334 new mylib.A.fromFoo();
335 new mylib.A().foo();
336 }
337 ''';
338 var expectedResult = '''
339 globalfoo() {}
340 var globalVar;
341 var globalVarInitialized = 6;
342 var globalVarInitialized2 = 7;
343 class A {
344 A() {}
345 A.fromFoo() {}
346 static staticfoo() {}
347 foo() {}
348 static const field = 5;
349 }
350 globalfoo_A() {}
351 var globalVar_A;
352 var globalVarInitialized_A = 6;
353 var globalVarInitialized2_A = 7;
354 class A_A {
355 A_A() {}
356 A_A.fromFoo_A() {}
357 static staticfoo_A() {}
358 foo() {}
359 static const field_A = 5;
360 }
361 main() {
362 globalVar_A;
363 globalVarInitialized_A;
364 globalVarInitialized2_A;
365 globalfoo_A();
366 A_A.field_A;
367 A_A.staticfoo_A();
368 new A_A();
369 new A_A.fromFoo_A();
370 new A_A().foo();
371 globalVar;
372 globalVarInitialized;
373 globalVarInitialized2;
374 globalfoo();
375 A.field;
376 A.staticfoo();
377 new A();
378 new A.fromFoo();
379 new A().foo();
380 }
381 ''';
382 testDart2Dart(mainSrc, librarySrc: librarySrc,
383 expectedResult: expectedResult);
384 }
385
386 testNoConflictSendsRename() {
387 // Various Send-s to current library and external library. Nothing should be
388 // renamed here, only library prefixes must be cut.
389 var librarySrc = '''
390 library mylib;
391
392 globalfoo() {}
393
394 class A {
395 A(){}
396 A.fromFoo(){}
397 static staticfoo(){}
398 foo(){}
399 static const field = 5;
400 }
401 ''';
402 var mainSrc = '''
403 import 'mylib.dart' as mylib;
404
405 myglobalfoo() {}
406
407 class MyA {
408 MyA(){}
409 MyA.myfromFoo(){}
410 static mystaticfoo(){}
411 myfoo(){}
412 static const myfield = 5;
413 }
414
415 main() {
416 myglobalfoo();
417 MyA.myfield;
418 MyA.mystaticfoo();
419 new MyA();
420 new MyA.myfromFoo();
421 new MyA().myfoo();
422
423 mylib.globalfoo();
424 mylib.A.field;
425 mylib.A.staticfoo();
426 new mylib.A();
427 new mylib.A.fromFoo();
428 new mylib.A().foo();
429 }
430 ''';
431 var expectedResult = '''
432 globalfoo() {}
433 class A {
434 A() {}
435 A.fromFoo() {}
436 static staticfoo() {}
437 foo() {}
438 static const field = 5;
439 }
440 myglobalfoo() {}
441 class MyA {
442 MyA() {}
443 MyA.myfromFoo() {}
444 static mystaticfoo() {}
445 myfoo() {}
446 static const myfield = 5;
447 }
448 main() {
449 myglobalfoo();
450 MyA.myfield;
451 MyA.mystaticfoo();
452 new MyA();
453 new MyA.myfromFoo();
454 new MyA().myfoo();
455 globalfoo();
456 A.field;
457 A.staticfoo();
458 new A();
459 new A.fromFoo();
460 new A().foo();
461 }
462 ''';
463 testDart2Dart(mainSrc, librarySrc: librarySrc,
464 expectedResult: expectedResult);
465 }
466
467 testConflictLibraryClassRename() {
468 var librarySrc = '''
469 library mylib;
470
471 topfoo() {}
472
473 class A {
474 foo() {}
475 }
476 ''';
477 var mainSrc = '''
478 import 'mylib.dart' as mylib;
479 topfoo() {
480 var x = 5;
481 }
482 class A {
483 num foo() {}
484 A.fromFoo() {}
485 mylib.A myliba;
486 List<A> mylist;
487 }
488 mylib.A getA() => null;
489 main() {
490 var a = new mylib.A();
491 a.foo();
492 var b = new A.fromFoo();
493 b.foo();
494 var GREATVAR = b.myliba;
495 b.mylist;
496 a = getA();
497 topfoo();
498 mylib.topfoo();
499 }
500 ''';
501 var expectedResult = '''
502 topfoo() {}
503 class A {
504 foo() {}
505 }
506 topfoo_A() {
507 var x = 5;
508 }
509 class A_A {
510 num foo() {}
511 A_A.fromFoo() {}
512 A myliba;
513 List<A_A> mylist;
514 }
515 A getA() => null;
516 main() {
517 var a = new A();
518 a.foo();
519 var b = new A_A.fromFoo();
520 b.foo();
521 var GREATVAR = b.myliba;
522 b.mylist;
523 a = getA();
524 topfoo_A();
525 topfoo();
526 }
527 ''';
528 testDart2Dart(mainSrc, librarySrc: librarySrc,
529 expectedResult: expectedResult);
530 }
531
532 testClassExtendsWithArgs() {
533 testDart2Dart('''
534 main() {
535 new B<Object>();
536 }
537 class A<T extends Object> {}
538 class B<T extends Object> extends A<T> {}
539 ''', expectedResult: '''
540 main() {
541 new B<Object>();
542 }
543 class A<T> {}
544 class B<T> extends A<T> {}
545 ''');
546 }
547
548 testStaticInvocation() {
549 testDart2Dart('''
550 main() {
551 var x = double.parseDouble("1");
552 }
553 ''');
554 }
555
556 testLibraryGetSet() {
557 var librarySrc = '''
558 library mylib;
559
560 get topgetset => 5;
561 set topgetset(arg) {}
562 ''';
563 var mainSrc = '''
564 import 'mylib.dart' as mylib;
565
566 get topgetset => 6;
567 set topgetset(arg) {}
568
569 main() {
570 topgetset;
571 topgetset = 6;
572
573 mylib.topgetset;
574 mylib.topgetset = 5;
575 }
576 ''';
577 var expectedResult = '''
578 get topgetset => 5;
579 set topgetset(arg) {}
580 get topgetset_A => 6;
581 set topgetset_A(arg) {}
582 main() {
583 topgetset_A;
584 topgetset_A = 6;
585 topgetset;
586 topgetset = 5;
587 }
588 ''';
589 testDart2Dart(mainSrc, librarySrc: librarySrc,
590 expectedResult: expectedResult);
591 }
592
593 testFieldTypeOutput() {
594 testDart2Dart('''
595 main() {
596 new A().field;
597 }
598 class B {}
599 class A {
600 B field;
601 }
602 ''');
603 }
604
605 class DynoMap implements Map<Element, ElementAst> {
606 final compiler;
607 DynoMap(this.compiler);
608
609 ElementAst operator[](AstElement element) {
610 return new ElementAst(element.resolvedAst.node,
611 element.resolvedAst.elements);
612 }
613
614 noSuchMethod(Invocation invocation) => throw 'unimplemented method';
615 }
616
617 PlaceholderCollector collectPlaceholders(compiler, element) {
618 DartBackend backend = compiler.backend;
619 return new PlaceholderCollector(
620 compiler.reporter,
621 backend.mirrorRenamer,
622 new Set<String>(),
623 new DynoMap(compiler),
624 compiler.mainFunction)
625 ..collect(element);
626 }
627
628 testLocalFunctionPlaceholder() {
629 var src = '''
630 main() {
631 function localfoo() {}
632 localfoo();
633 }
634 ''';
635 MockCompiler compiler = new MockCompiler.internal(emitJavaScript: false);
636 asyncTest(() => compiler.init().then((_) {
637 assert(compiler.backend is DartBackend);
638 compiler.parseScript(src);
639 FunctionElement mainElement = compiler.mainApp.find(Identifiers.main);
640 compiler.processQueue(compiler.enqueuer.resolution, mainElement);
641 PlaceholderCollector collector = collectPlaceholders(compiler, mainElement);
642 FunctionExpression mainNode = mainElement.node;
643 Block body = mainNode.body;
644 FunctionDeclaration functionDeclaration = body.statements.nodes.head;
645 FunctionExpression fooNode = functionDeclaration.function;
646 LocalPlaceholder fooPlaceholder =
647 collector.functionScopes[mainElement].localPlaceholders.first;
648 Expect.isTrue(fooPlaceholder.nodes.contains(fooNode.name));
649 }));
650 }
651
652 testTypeVariablesAreRenamed() {
653 // Somewhat a hack: we require all the references of the identifier
654 // to be renamed in the same way for the whole library. Hence
655 // if we have a class and type variable with the same name, they
656 // both should be renamed.
657 var librarySrc = '''
658 library mylib;
659 typedef void MyFunction<T extends num>(T arg);
660 class T {}
661 class B<T> {}
662 class A<T> extends B<T> { T f; }
663 ''';
664 var mainSrc = '''
665 import 'mylib.dart' as mylib;
666 typedef void MyFunction<T extends num>(T arg);
667 class T {}
668 class B<T> {}
669 class A<T> extends B<T> { T f; }
670
671 main() {
672 MyFunction myf1;
673 mylib.MyFunction myf2;
674 new A<int>().f;
675 new T();
676
677 new mylib.A<int>().f;
678 new mylib.T();
679 }
680 ''';
681 var expectedResult = '''
682 typedef void MyFunction<T_B extends num>(T_B _0);
683 class T {}
684 class B<T_B> {}
685 class A<T_B> extends B<T_B> {
686 T_B f;
687 }
688 typedef void MyFunction_A<T_B extends num>(T_B _0);
689 class T_A {}
690 class B_A<T_B> {}
691 class A_A<T_B> extends B_A<T_B> {
692 T_B f;
693 }
694 main() {
695 MyFunction_A myf1;
696 MyFunction myf2;
697 new A_A<int>().f;
698 new T_A();
699 new A<int>().f;
700 new T();
701 }
702 ''';
703 testDart2Dart(mainSrc, librarySrc: librarySrc,
704 expectedResult: expectedResult);
705 }
706
707 testClassTypeArgumentBound() {
708 var librarySrc = '''
709 library mylib;
710
711 class I {}
712 class A<T extends I> {}
713
714 ''';
715 var mainSrc = '''
716 import 'mylib.dart' as mylib;
717
718 class I {}
719 class A<T extends I> {}
720
721 main() {
722 new A();
723 new mylib.A();
724 }
725 ''';
726 var expectedResult = '''
727 class I {}
728 class A<T extends I> {}
729 class I_A {}
730 class A_A<T extends I_A> {}
731 main() {
732 new A_A();
733 new A();
734 }
735 ''';
736 testDart2Dart(mainSrc, librarySrc: librarySrc,
737 expectedResult: expectedResult);
738 }
739
740 testDoubleMains() {
741 var librarySrc = '''
742 library mylib;
743 main() {}
744 ''';
745 var mainSrc = '''
746 import 'mylib.dart' as mylib;
747 main() {
748 mylib.main();
749 }
750 ''';
751 var expectedResult = '''
752 main_A() {}
753 main() {
754 main_A();
755 }
756 ''';
757 testDart2Dart(mainSrc, librarySrc: librarySrc,
758 expectedResult: expectedResult);
759 }
760
761 testStaticAccessIoLib() {
762 var src = '''
763 import 'dart:io';
764
765 main() {
766 Platform.operatingSystem;
767 }
768 ''';
769 var expectedResult = '''
770 import "dart:io";
771 main() {
772 Platform.operatingSystem;
773 }
774 ''';
775 testDart2Dart(src, expectedResult: expectedResult);
776 }
777
778 testMinification() {
779 var src = '''
780 class ClassWithVeryVeryLongName {}
781 main() {
782 new ClassWithVeryVeryLongName();
783 }
784 ''';
785 var expectedResult =
786 'class A{}'
787 'main(){new A();}';
788 testDart2Dart(src, expectedResult: expectedResult, minify: true);
789 }
790
791 testClosureLocalsMinified() {
792 var src = '''
793 main() {
794 var a = 7;
795 void foo1(a,b) {
796 void foo2(c,d) {
797 var E = a;
798 }
799 foo2(b, a);
800 }
801 foo1(a, 8);
802 }
803 ''';
804 var expectedResult =
805 'main(){var A=7; B(A,C){ D(E,F){var G=A;}D(C,A);}B(A,8);}';
806 testDart2Dart(src, expectedResult: expectedResult, minify: true);
807 }
808
809 testParametersMinified() {
810 var src = '''
811 class A {
812 var a;
813 static foo(arg1) {
814 // Should not rename arg1 to a.
815 arg1 = 5;
816 }
817 }
818
819 fooglobal(arg,{optionalarg: 7}) {
820 arg = 6;
821 }
822
823 main() {
824 new A().a;
825 A.foo(8);
826 fooglobal(8);
827 }
828 ''';
829 var expectedResult =
830 'class B{var E;static C(A){A=5;}}D(A,{optionalarg: 7}){A=6;}'
831 'main(){new B().E;B.C(8);D(8);}';
832 testDart2Dart(src, expectedResult: expectedResult, minify: true);
833 }
834
835 testDeclarationTypePlaceholders() {
836 var src = '''
837 String globalfield;
838 const String globalconstfield;
839
840 void foo(String arg) {}
841
842 main() {
843 String localvar;
844 foo("5");
845 }
846 ''';
847 var expectedResult = '''
848 foo( arg) {}
849 main() {
850 var localvar;
851 foo("5");
852 }
853 ''';
854 testDart2Dart(src, expectedResult: expectedResult, stripTypes: true);
855 }
856
857 testPlatformLibraryMemberNamesAreFixed() {
858 var src = '''
859 import 'dart:html';
860
861 class A {
862 static String get userAgent => window.navigator.userAgent;
863 }
864
865 main() {
866 A.userAgent;
867 }
868 ''';
869 var expectedResult = '''
870 import "dart:html";
871 class A {
872 static String get userAgent_A => window.navigator.userAgent;
873 }
874 main() {
875 A.userAgent_A;
876 }
877 ''';
878 testDart2Dart(src, expectedResult: expectedResult);
879 }
880
881 testConflictsWithCoreLib() {
882 var src = '''
883 import 'dart:core' as fisk;
884
885 print(x) { throw 'fisk'; }
886
887 main() {
888 fisk.print('corelib');
889 print('local');
890 }
891 ''';
892 var expectedResult = """
893 print_A(x) {
894 throw 'fisk';
895 }
896 main() {
897 print('corelib');
898 print_A('local');
899 }
900 """;
901 testDart2Dart(src, expectedResult: expectedResult);
902 }
903
904 testUnresolvedNamedConstructor1() {
905 var src = '''
906 class A {
907 }
908
909 main() {
910 new A.named();
911 }
912 ''';
913 var expectedResult = """
914 main() {
915 new Unresolved();
916 }
917 """;
918 testDart2Dart(src, expectedResult: expectedResult);
919 }
920
921 testUnresolvedNamedConstructor2() {
922 var src = '''
923 class A {
924 A() {}
925 }
926
927 main() {
928 new A();
929 new A.named();
930 }
931 ''';
932 var expectedResult = """
933 class A {
934 A() {}
935 }
936 main() {
937 new A();
938 new Unresolved();
939 }
940 """;
941 testDart2Dart(src, expectedResult: expectedResult);
942 }
943
944 testUnresolvedNamedConstructor3() {
945 var src = '''
946 class A {
947 static method() {}
948 }
949
950 main() {
951 A.method();
952 new A.named();
953 }
954 ''';
955 var expectedResult = """
956 class A {
957 static method() {}
958 }
959 main() {
960 A.method();
961 new Unresolved();
962 }
963 """;
964 testDart2Dart(src, expectedResult: expectedResult);
965 }
966
967 testClassAndNamedMixinDeclarations() {
968 test(String declarations, {String expectedDeclarations}) {
969 const String mainSource = 'main() => new A();';
970 if (expectedDeclarations == null) {
971 expectedDeclarations = declarations;
972 }
973 testDart2Dart('$declarations\n$mainSource\n',
974 expectedResult: '$expectedDeclarations\n$mainSource\n');
975 }
976
977 test('class A {}');
978 test('class A<T> {}');
979 test('class A<T extends num> {}');
980 test('class A<T extends Object> {}', expectedDeclarations: 'class A<T> {}');
981 test('class A extends Object {}', expectedDeclarations: 'class A {}');
982
983 test('''
984 class S1 {}
985 class A extends S1 {}''');
986
987 test('''
988 class S1 {}
989 class A implements S1 {}''');
990
991 test('''
992 class S1 {}
993 class S2 {}
994 class A extends S1 implements S2 {}''');
995
996 test('''
997 class S1 {}
998 class S2 {}
999 class S3 {}
1000 class A extends S1 implements S2, S3 {}''');
1001
1002 test('''
1003 class S1 {}
1004 class S2 {}
1005 class A implements S1, S2 {}''');
1006
1007 test('''
1008 class S1 {}
1009 class S2 {}
1010 class A extends Object implements S1, S2 {}''',
1011 expectedDeclarations: '''
1012 class S1 {}
1013 class S2 {}
1014 class A implements S1, S2 {}''');
1015
1016 test('''
1017 class S1 {}
1018 class A extends Object with S1 {}''');
1019
1020 test('''
1021 class S1 {}
1022 class A = Object with S1;''');
1023
1024 test('''
1025 class S1 {}
1026 class S2 {}
1027 class A extends S1 with S2 {}''');
1028
1029 test('''
1030 class S1 {}
1031 class S2 {}
1032 class A = S1 with S2;''');
1033
1034 test('''
1035 class S1 {}
1036 class S2 {}
1037 class S3 {}
1038 class A extends S1 with S2, S3 {}''');
1039
1040 test('''
1041 class S1 {}
1042 class S2 {}
1043 class S3 {}
1044 class A = S1 with S2, S3;''');
1045
1046 test('''
1047 class S1 {}
1048 class S2 {}
1049 class S3 {}
1050 class S4 {}
1051 class S5 {}
1052 class A extends S1 with S2, S3 implements S4, S5 {}''');
1053
1054 test('''
1055 class S1 {}
1056 class S2 {}
1057 class S3 {}
1058 class S4 {}
1059 class S5 {}
1060 class A = S1 with S2, S3 implements S4, S5;''');
1061
1062 test('''
1063 class S1 {}
1064 class A extends Object with S1 implements S1 {}''',
1065 expectedDeclarations: '''
1066 class S1 {}
1067 class A extends Object with S1 {}''');
1068
1069 test('''
1070 class S1 {}
1071 class A = Object with S1 implements S1;''',
1072 expectedDeclarations: '''
1073 class S1 {}
1074 class A = Object with S1;''');
1075
1076 test('''
1077 class S1<T1> {}
1078 class S2<T2> {}
1079 class S3<T3> {}
1080 class S4<T4> {}
1081 class S5<T5, T6> {}
1082 class A<U1, U2, U3, U4, U5> extends S1<U1> with S2<U2>, S3<U3> '''
1083 '''implements S4<U4>, S5<U5, S5<U5, int>> {}''');
1084 }
1085
1086 main() {
1087 testSimpleFileUnparse();
1088 testTopLevelField();
1089 testSimpleTopLevelClass();
1090 testClassWithSynthesizedConstructor();
1091 testClassWithMethod();
1092 testExtendsImplements();
1093 testVariableDefinitions();
1094 testGetSet();
1095 testAbstractClass();
1096 testConflictSendsRename();
1097 testNoConflictSendsRename();
1098 testConflictLibraryClassRename();
1099 testClassExtendsWithArgs();
1100 testStaticInvocation();
1101 testLibraryGetSet();
1102 testFieldTypeOutput();
1103 testTypeVariablesAreRenamed();
1104 testClassTypeArgumentBound();
1105 testDoubleMains();
1106 testStaticAccessIoLib();
1107 testLocalFunctionPlaceholder();
1108 testMinification();
1109 testClosureLocalsMinified();
1110 testParametersMinified();
1111 testDeclarationTypePlaceholders();
1112 testPlatformLibraryMemberNamesAreFixed();
1113 testConflictsWithCoreLib();
1114 testUnresolvedNamedConstructor1();
1115 testUnresolvedNamedConstructor2();
1116 testUnresolvedNamedConstructor3();
1117 testClassAndNamedMixinDeclarations();
1118 }
1119
OLDNEW
« no previous file with comments | « tests/compiler/dart2js/analyze_unused_dart2js_test.dart ('k') | tests/compiler/dart2js/backend_dart/dart_printer_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698