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

Side by Side Diff: tests/compiler/dart2js/metadata_test.dart

Issue 10964016: Change the type inference for fields in dart2js (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Final round of changes Created 8 years, 2 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 | Annotate | Revision Log
OLDNEW
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 6
7 #import('compiler_helper.dart'); 7 #import('compiler_helper.dart');
8 #import('parser_helper.dart'); 8 #import('parser_helper.dart');
9 9
10 #import('../../../lib/compiler/implementation/elements/elements.dart'); 10 #import('../../../lib/compiler/implementation/elements/elements.dart');
11 #import('../../../lib/compiler/implementation/leg.dart'); 11 #import('../../../lib/compiler/implementation/leg.dart');
12 12
13 void checkAnnotation(String name, String declaration, 13 void checkAnnotation(String name, String declaration,
14 [bool isTopLevelOnly = false]) { 14 [bool isTopLevelOnly = false]) {
15 var source; 15 var source;
16 16
17 // Ensure that a compile-time constant can be resolved from an 17 // Ensure that a compile-time constant can be resolved from an
18 // annotation. 18 // annotation.
19 source = """const native = 'xyz'; 19 source = """const native = 'xyz';
20 @native 20 @native
21 $declaration 21 $declaration
22 main() {}"""; 22 main() {}""";
23 23
24 compileAndCheck(source, name, (compiler, element) { 24 compileAndCheck(source, name, (compiler, element) {
25 compiler.enqueuer.resolution.queueIsClosed = false;
25 Expect.equals(1, length(element.metadata)); 26 Expect.equals(1, length(element.metadata));
26 MetadataAnnotation annotation = element.metadata.head; 27 MetadataAnnotation annotation = element.metadata.head;
27 annotation.ensureResolved(compiler); 28 annotation.ensureResolved(compiler);
28 Constant value = annotation.value; 29 Constant value = annotation.value;
29 Expect.stringEquals('xyz', value.value.slowToString()); 30 Expect.stringEquals('xyz', value.value.slowToString());
30 }); 31 });
31 32
32 // Ensure that each repeated annotation has a unique instance of 33 // Ensure that each repeated annotation has a unique instance of
33 // [MetadataAnnotation]. 34 // [MetadataAnnotation].
34 source = """const native = 'xyz'; 35 source = """const native = 'xyz';
35 @native @native 36 @native @native
36 $declaration 37 $declaration
37 main() {}"""; 38 main() {}""";
38 39
39 compileAndCheck(source, name, (compiler, element) { 40 compileAndCheck(source, name, (compiler, element) {
41 compiler.enqueuer.resolution.queueIsClosed = false;
40 Expect.equals(2, length(element.metadata)); 42 Expect.equals(2, length(element.metadata));
41 MetadataAnnotation annotation1 = element.metadata.head; 43 MetadataAnnotation annotation1 = element.metadata.head;
42 MetadataAnnotation annotation2 = element.metadata.tail.head; 44 MetadataAnnotation annotation2 = element.metadata.tail.head;
43 annotation1.ensureResolved(compiler); 45 annotation1.ensureResolved(compiler);
44 annotation2.ensureResolved(compiler); 46 annotation2.ensureResolved(compiler);
45 Expect.isTrue(annotation1 !== annotation2, 'expected unique instances'); 47 Expect.isTrue(annotation1 !== annotation2, 'expected unique instances');
46 Expect.notEquals(annotation1, annotation2, 'expected unequal instances'); 48 Expect.notEquals(annotation1, annotation2, 'expected unequal instances');
47 Constant value1 = annotation1.value; 49 Constant value1 = annotation1.value;
48 Constant value2 = annotation2.value; 50 Constant value2 = annotation2.value;
49 Expect.identical(value1, value2, 'expected same compile-time constant'); 51 Expect.identical(value1, value2, 'expected same compile-time constant');
50 Expect.stringEquals('xyz', value1.value.slowToString()); 52 Expect.stringEquals('xyz', value1.value.slowToString());
51 Expect.stringEquals('xyz', value2.value.slowToString()); 53 Expect.stringEquals('xyz', value2.value.slowToString());
52 }); 54 });
53 55
54 if (isTopLevelOnly) return; 56 if (isTopLevelOnly) return;
55 57
56 // Ensure that a compile-time constant can be resolved from an 58 // Ensure that a compile-time constant can be resolved from an
57 // annotation. 59 // annotation.
58 source = """const native = 'xyz'; 60 source = """const native = 'xyz';
59 class Foo { 61 class Foo {
60 @native 62 @native
61 $declaration 63 $declaration
62 } 64 }
63 main() {}"""; 65 main() {}""";
64 66
65 compileAndCheck(source, 'Foo', (compiler, element) { 67 compileAndCheck(source, 'Foo', (compiler, element) {
68 compiler.enqueuer.resolution.queueIsClosed = false;
66 Expect.equals(0, length(element.metadata)); 69 Expect.equals(0, length(element.metadata));
67 element.ensureResolved(compiler); 70 element.ensureResolved(compiler);
68 Expect.equals(0, length(element.metadata)); 71 Expect.equals(0, length(element.metadata));
69 element = element.lookupLocalMember(buildSourceString(name)); 72 element = element.lookupLocalMember(buildSourceString(name));
70 Expect.equals(1, length(element.metadata)); 73 Expect.equals(1, length(element.metadata));
71 MetadataAnnotation annotation = element.metadata.head; 74 MetadataAnnotation annotation = element.metadata.head;
72 annotation.ensureResolved(compiler); 75 annotation.ensureResolved(compiler);
73 Constant value = annotation.value; 76 Constant value = annotation.value;
74 Expect.stringEquals('xyz', value.value.slowToString()); 77 Expect.stringEquals('xyz', value.value.slowToString());
75 }); 78 });
76 79
77 // Ensure that each repeated annotation has a unique instance of 80 // Ensure that each repeated annotation has a unique instance of
78 // [MetadataAnnotation]. 81 // [MetadataAnnotation].
79 source = """const native = 'xyz'; 82 source = """const native = 'xyz';
80 class Foo { 83 class Foo {
81 @native @native 84 @native @native
82 $declaration 85 $declaration
83 } 86 }
84 main() {}"""; 87 main() {}""";
85 88
86 compileAndCheck(source, 'Foo', (compiler, element) { 89 compileAndCheck(source, 'Foo', (compiler, element) {
90 compiler.enqueuer.resolution.queueIsClosed = false;
87 Expect.equals(0, length(element.metadata)); 91 Expect.equals(0, length(element.metadata));
88 element.ensureResolved(compiler); 92 element.ensureResolved(compiler);
89 Expect.equals(0, length(element.metadata)); 93 Expect.equals(0, length(element.metadata));
90 element = element.lookupLocalMember(buildSourceString(name)); 94 element = element.lookupLocalMember(buildSourceString(name));
91 Expect.equals(2, length(element.metadata)); 95 Expect.equals(2, length(element.metadata));
92 MetadataAnnotation annotation1 = element.metadata.head; 96 MetadataAnnotation annotation1 = element.metadata.head;
93 MetadataAnnotation annotation2 = element.metadata.tail.head; 97 MetadataAnnotation annotation2 = element.metadata.tail.head;
94 annotation1.ensureResolved(compiler); 98 annotation1.ensureResolved(compiler);
95 annotation2.ensureResolved(compiler); 99 annotation2.ensureResolved(compiler);
96 Expect.isTrue(annotation1 !== annotation2, 'expected unique instances'); 100 Expect.isTrue(annotation1 !== annotation2, 'expected unique instances');
(...skipping 16 matching lines...) Expand all
113 117
114 void testTopLevelFieldMetadata() { 118 void testTopLevelFieldMetadata() {
115 checkAnnotation('foo', 'var foo;'); 119 checkAnnotation('foo', 'var foo;');
116 } 120 }
117 121
118 void main() { 122 void main() {
119 testClassMetadata(); 123 testClassMetadata();
120 testTopLevelMethodMetadata(); 124 testTopLevelMethodMetadata();
121 testTopLevelFieldMetadata(); 125 testTopLevelFieldMetadata();
122 } 126 }
OLDNEW
« no previous file with comments | « tests/compiler/dart2js/field_type_inferer_test.dart ('k') | tests/language/language_dart2js.status » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698