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 library smoke.test.codegen.generator_test; | |
6 | |
7 import 'package:smoke/codegen/generator.dart'; | |
8 import 'package:unittest/unittest.dart'; | |
9 | |
10 main() { | |
11 test('getters', () { | |
12 var generator = new SmokeCodeGenerator(); | |
13 generator.addGetter('i'); | |
14 _checkResults(generator, initCall: | |
15 'useGeneratedCode(new StaticConfiguration(\n' | |
16 ' checkedMode: false,\n' | |
17 ' getters: {\n' | |
18 ' #i: (o) => o.i,\n' | |
19 ' }));\n'); | |
20 | |
21 generator.addGetter('foo'); | |
22 _checkResults(generator, initCall: | |
23 'useGeneratedCode(new StaticConfiguration(\n' | |
24 ' checkedMode: false,\n' | |
25 ' getters: {\n' | |
26 ' #foo: (o) => o.foo,\n' | |
27 ' #i: (o) => o.i,\n' | |
28 ' }));\n'); | |
29 }); | |
30 | |
31 test('setters', () { | |
32 var generator = new SmokeCodeGenerator(); | |
33 generator.addSetter('i'); | |
34 _checkResults(generator, initCall: | |
35 'useGeneratedCode(new StaticConfiguration(\n' | |
36 ' checkedMode: false,\n' | |
37 ' setters: {\n' | |
38 ' #i: (o, v) { o.i = v; },\n' | |
39 ' }));\n'); | |
40 | |
41 generator.addSetter('foo'); | |
42 _checkResults(generator, initCall: | |
43 'useGeneratedCode(new StaticConfiguration(\n' | |
44 ' checkedMode: false,\n' | |
45 ' setters: {\n' | |
46 ' #foo: (o, v) { o.foo = v; },\n' | |
47 ' #i: (o, v) { o.i = v; },\n' | |
48 ' }));\n'); | |
49 }); | |
50 | |
51 test('names/symbols', () { | |
52 var generator = new SmokeCodeGenerator(); | |
53 generator.addSymbol('i'); | |
54 generator.addSymbol('foo'); | |
55 _checkResults(generator, initCall: | |
56 'useGeneratedCode(new StaticConfiguration(\n' | |
57 ' checkedMode: false,\n' | |
58 ' names: {\n' | |
59 ' #foo: \'foo\',\n' | |
60 ' #i: \'i\',\n' | |
61 ' }));\n'); | |
62 }); | |
63 | |
64 test('getters, setters, and names', () { | |
65 var generator = new SmokeCodeGenerator(); | |
66 generator.addGetter('i'); | |
67 generator.addSetter('i'); | |
68 generator.addSetter('foo'); | |
69 generator.addSymbol('foo'); | |
70 _checkResults(generator, initCall: | |
71 'useGeneratedCode(new StaticConfiguration(\n' | |
72 ' checkedMode: false,\n' | |
73 ' getters: {\n' | |
74 ' #i: (o) => o.i,\n' | |
75 ' },\n' | |
76 ' setters: {\n' | |
77 ' #foo: (o, v) { o.foo = v; },\n' | |
78 ' #i: (o, v) { o.i = v; },\n' | |
79 ' },\n' | |
80 ' names: {\n' | |
81 ' #foo: \'foo\',\n' | |
82 ' }));\n'); | |
83 }); | |
84 | |
85 test('parents', () { | |
86 var generator = new SmokeCodeGenerator(); | |
87 generator.addParent(new TypeIdentifier('a.dart', 'A'), | |
88 new TypeIdentifier('b.dart', 'B')); | |
89 generator.addParent(new TypeIdentifier('a.dart', 'C'), | |
90 new TypeIdentifier('a.dart', 'A')); | |
91 _checkResults(generator, | |
92 imports: [ | |
93 "import 'a.dart' as smoke_0;", | |
94 "import 'b.dart' as smoke_1;" | |
95 ], | |
96 initCall: | |
97 'useGeneratedCode(new StaticConfiguration(\n' | |
98 ' checkedMode: false,\n' | |
99 ' parents: {\n' | |
100 ' smoke_0.A: smoke_1.B,\n' | |
101 ' smoke_0.C: smoke_0.A,\n' | |
102 ' }));\n'); | |
103 }); | |
104 | |
105 test('declarations', () { | |
106 var generator = new SmokeCodeGenerator(); | |
107 generator.addDeclaration(new TypeIdentifier('a.dart', 'A'), 'foo', | |
108 new TypeIdentifier('dart:core', 'int'), isField: true, isFinal: true); | |
109 generator.addDeclaration(new TypeIdentifier('a.dart', 'A'), 'bar', | |
110 new TypeIdentifier('dart:core', 'Function'), isMethod: true, | |
111 annotations: [new ConstExpression.constructor(null, 'Annotation', | |
112 [new ConstExpression.string("hi")], const {})]); | |
113 _checkResults(generator, | |
114 imports: ["import 'a.dart' as smoke_0;"], | |
115 initCall: | |
116 'useGeneratedCode(new StaticConfiguration(\n' | |
117 ' checkedMode: false,\n' | |
118 ' declarations: {\n' | |
119 ' smoke_0.A: {\n' | |
120 ' #bar: const Declaration(#bar, Function, kind: METHOD, ' | |
121 'annotations: const [const Annotation(\'hi\')]),\n' | |
122 ' #foo: const Declaration(#foo, int, isFinal: true),\n' | |
123 ' },\n' | |
124 ' }));\n'); | |
125 }); | |
126 | |
127 test('repeated entries appear only once', () { | |
128 var generator = new SmokeCodeGenerator(); | |
129 generator.addGetter('a'); | |
130 generator.addGetter('a'); | |
Jennifer Messerly
2014/03/17 22:38:48
hmmm. I wonder if this should be an error?
Siggi Cherem (dart-lang)
2014/03/18 01:52:29
good question. I had it as an error initially, but
Jennifer Messerly
2014/03/19 00:15:48
makes sense :)
| |
131 generator.addSetter('b'); | |
132 generator.addSetter('b'); | |
133 generator.addSymbol('d'); | |
134 generator.addSymbol('d'); | |
135 generator.addSymbol('c'); | |
136 generator.addSymbol('c'); | |
137 generator.addSymbol('c'); | |
138 | |
139 generator.addParent(new TypeIdentifier('a.dart', 'C'), | |
140 new TypeIdentifier('a.dart', 'A')); | |
141 generator.addParent(new TypeIdentifier('a.dart', 'C'), | |
142 new TypeIdentifier('a.dart', 'A')); | |
143 generator.addParent(new TypeIdentifier('a.dart', 'C'), | |
144 new TypeIdentifier('a.dart', 'A')); | |
145 | |
146 generator.addDeclaration(new TypeIdentifier('a.dart', 'A'), 'foo', | |
147 new TypeIdentifier('dart:core', 'int'), isField: true, isFinal: true); | |
148 generator.addDeclaration(new TypeIdentifier('a.dart', 'A'), 'foo', | |
149 new TypeIdentifier('dart:core', 'int'), isField: true, isFinal: true); | |
150 generator.addDeclaration(new TypeIdentifier('a.dart', 'A'), 'foo', | |
151 new TypeIdentifier('dart:core', 'int'), isField: true, isFinal: true); | |
152 | |
153 _checkResults(generator, | |
154 imports: [ | |
155 "import 'a.dart' as smoke_0;", | |
156 ], | |
157 initCall: | |
158 'useGeneratedCode(new StaticConfiguration(\n' | |
159 ' checkedMode: false,\n' | |
160 ' getters: {\n' | |
161 ' #a: (o) => o.a,\n' | |
162 ' },\n' | |
163 ' setters: {\n' | |
164 ' #b: (o, v) { o.b = v; },\n' | |
165 ' },\n' | |
166 ' parents: {\n' | |
167 ' smoke_0.C: smoke_0.A,\n' | |
168 ' },\n' | |
169 ' declarations: {\n' | |
170 ' smoke_0.A: {\n' | |
171 ' #foo: const Declaration(#foo, int, isFinal: true),\n' | |
172 ' },\n' | |
173 ' },\n' | |
174 ' names: {\n' | |
175 ' #c: \'c\',\n' | |
176 ' #d: \'d\',\n' | |
177 ' }));\n'); | |
178 }); | |
179 } | |
180 | |
181 _checkResults(SmokeCodeGenerator generator, {List<String> imports: const [], | |
182 String topLevel: '', String initCall}) { | |
183 var allImports = []..addAll(DEFAULT_IMPORTS)..addAll(imports); | |
184 expect(generator.generateImports(), allImports); | |
185 expect(generator.generateTopLevelDeclarations(), topLevel); | |
186 var indentedCode = initCall.replaceAll("\n", "\n ").trim(); | |
187 expect(generator.generateInitCall(), ' $indentedCode\n'); | |
188 } | |
OLD | NEW |