OLD | NEW |
| (Empty) |
1 // Copyright (c) 2013, 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 polymer.test.build.all_phases_test; | |
6 | |
7 import 'package:code_transformers/tests.dart' show testingDartSdkDirectory; | |
8 import 'package:polymer/src/build/common.dart'; | |
9 import 'package:polymer/src/build/polymer_smoke_generator.dart' | |
10 show MAIN_HEADER; | |
11 import 'package:polymer/transformer.dart'; | |
12 import 'package:smoke/codegen/generator.dart' show DEFAULT_IMPORTS; | |
13 import 'package:unittest/compact_vm_config.dart'; | |
14 | |
15 import 'common.dart'; | |
16 | |
17 void main() { | |
18 useCompactVMConfiguration(); | |
19 var phases = createDeployPhases(new TransformOptions(), | |
20 sdkDir: testingDartSdkDirectory); | |
21 | |
22 testPhases('observable changes', phases, { | |
23 'a|web/test.dart': _sampleInput('A', 'foo'), | |
24 'a|web/test2.dart': _sampleOutput('B', 'bar'), | |
25 }, { | |
26 'a|web/test.dart': _sampleOutput('A', 'foo'), | |
27 'a|web/test2.dart': _sampleOutput('B', 'bar'), | |
28 }); | |
29 | |
30 testPhases('single script', phases, { | |
31 'a|web/test.html': '<!DOCTYPE html><html><head>' | |
32 '<link rel="import" href="packages/polymer/polymer.html">' | |
33 '<script type="application/dart" src="a.dart"></script>', | |
34 'a|web/a.dart': _sampleInput('A', 'foo'), | |
35 }, { | |
36 'a|web/test.html': '<!DOCTYPE html><html><head>' | |
37 '$COMPATIBILITY_JS_TAGS' | |
38 '</head><body><div hidden="">' | |
39 '<script src="test.html.polymer.bootstrap.dart.js" async=""></script>' | |
40 '</div>' | |
41 '</body></html>', | |
42 'a|web/test.html.polymer.bootstrap.dart': '''$MAIN_HEADER | |
43 import 'test.web_components.bootstrap.dart' as i0; | |
44 ${DEFAULT_IMPORTS.join('\n')} | |
45 import 'package:polymer/polymer.dart' as smoke_0; | |
46 import 'a.dart' as smoke_1; | |
47 | |
48 main() { | |
49 useGeneratedCode(new StaticConfiguration( | |
50 checkedMode: false, | |
51 parents: { | |
52 smoke_1.XA: smoke_0.PolymerElement, | |
53 }, | |
54 declarations: { | |
55 smoke_1.XA: {}, | |
56 smoke_0.PolymerElement: {}, | |
57 })); | |
58 configureForDeployment(); | |
59 return i0.main(); | |
60 } | |
61 '''.replaceAll('\n ', '\n'), | |
62 'a|web/test.web_components.bootstrap.dart': ''' | |
63 import 'package:initialize/src/static_loader.dart'; | |
64 import 'package:initialize/initialize.dart'; | |
65 import 'test.bootstrap.dart' as i0; | |
66 import 'a.dart' as i1; | |
67 import 'package:polymer/polymer.dart' as i2; | |
68 | |
69 main() { | |
70 initializers.addAll([new InitEntry(const i2.CustomTag('x-A'), i1.XA)
,]); | |
71 | |
72 return i0.main(); | |
73 } | |
74 '''.replaceAll(' ', ''), | |
75 'a|web/test.bootstrap.dart': ''' | |
76 library a.web.test_bootstrap_dart; | |
77 | |
78 import 'a.dart' as i0; | |
79 | |
80 main() => i0.main(); | |
81 '''.replaceAll(' ', ''), | |
82 }, []); | |
83 | |
84 testPhases('single script in subfolder', phases, { | |
85 'a|web/test.html': '<!DOCTYPE html><html><head>' | |
86 '<link rel="import" href="packages/polymer/polymer.html">' | |
87 '<script type="application/dart" src="foo/a.dart"></script>', | |
88 'a|web/foo/a.dart': _sampleInput('A', 'foo'), | |
89 }, { | |
90 'a|web/test.html': '<!DOCTYPE html><html><head>' | |
91 '$COMPATIBILITY_JS_TAGS' | |
92 '</head><body><div hidden="">' | |
93 '<script src="test.html.polymer.bootstrap.dart.js" async=""></script>' | |
94 '</div>' | |
95 '</body></html>', | |
96 'a|web/test.html.polymer.bootstrap.dart': '''$MAIN_HEADER | |
97 import 'test.web_components.bootstrap.dart' as i0; | |
98 ${DEFAULT_IMPORTS.join('\n')} | |
99 import 'package:polymer/polymer.dart' as smoke_0; | |
100 import 'foo/a.dart' as smoke_1; | |
101 | |
102 main() { | |
103 useGeneratedCode(new StaticConfiguration( | |
104 checkedMode: false, | |
105 parents: { | |
106 smoke_1.XA: smoke_0.PolymerElement, | |
107 }, | |
108 declarations: { | |
109 smoke_1.XA: {}, | |
110 smoke_0.PolymerElement: {}, | |
111 })); | |
112 configureForDeployment(); | |
113 return i0.main(); | |
114 } | |
115 '''.replaceAll('\n ', '\n'), | |
116 'a|web/test.web_components.bootstrap.dart': ''' | |
117 import 'package:initialize/src/static_loader.dart'; | |
118 import 'package:initialize/initialize.dart'; | |
119 import 'test.bootstrap.dart' as i0; | |
120 import 'foo/a.dart' as i1; | |
121 import 'package:polymer/polymer.dart' as i2; | |
122 | |
123 main() { | |
124 initializers.addAll([new InitEntry(const i2.CustomTag('x-A'), i1.XA),]
); | |
125 | |
126 return i0.main(); | |
127 } | |
128 '''.replaceAll(' ', ''), | |
129 'a|web/test.bootstrap.dart': ''' | |
130 library a.web.test_bootstrap_dart; | |
131 | |
132 import 'foo/a.dart' as i0; | |
133 | |
134 main() => i0.main(); | |
135 '''.replaceAll(' ', ''), | |
136 }, []); | |
137 | |
138 testPhases('single inline script', phases, { | |
139 'a|web/test.html': '<!DOCTYPE html><html><head>' | |
140 '<link rel="import" href="packages/polymer/polymer.html">' | |
141 '<script type="application/dart">' | |
142 '${_sampleInput("B", "bar")}</script>', | |
143 }, { | |
144 'a|web/test.html': '<!DOCTYPE html><html><head>' | |
145 '$COMPATIBILITY_JS_TAGS' | |
146 '</head><body><div hidden="">' | |
147 '<script src="test.html.polymer.bootstrap.dart.js" async=""></script>' | |
148 '</div>' | |
149 '</body></html>', | |
150 'a|web/test.html.polymer.bootstrap.dart': '''$MAIN_HEADER | |
151 import 'test.web_components.bootstrap.dart' as i0; | |
152 ${DEFAULT_IMPORTS.join('\n')} | |
153 import 'package:polymer/polymer.dart' as smoke_0; | |
154 import 'test.html.0.dart' as smoke_1; | |
155 | |
156 main() { | |
157 useGeneratedCode(new StaticConfiguration( | |
158 checkedMode: false, | |
159 parents: { | |
160 smoke_1.XB: smoke_0.PolymerElement, | |
161 }, | |
162 declarations: { | |
163 smoke_0.PolymerElement: {}, | |
164 smoke_1.XB: {}, | |
165 })); | |
166 configureForDeployment(); | |
167 return i0.main(); | |
168 } | |
169 '''.replaceAll('\n ', '\n'), | |
170 'a|web/test.web_components.bootstrap.dart': ''' | |
171 import 'package:initialize/src/static_loader.dart'; | |
172 import 'package:initialize/initialize.dart'; | |
173 import 'test.bootstrap.dart' as i0; | |
174 import 'test.html.0.dart' as i1; | |
175 import 'package:polymer/polymer.dart' as i2; | |
176 | |
177 main() { | |
178 initializers.addAll([new InitEntry(const i2.CustomTag('x-B'), i1.XB)
,]); | |
179 | |
180 return i0.main(); | |
181 } | |
182 '''.replaceAll(' ', ''), | |
183 'a|web/test.bootstrap.dart': ''' | |
184 library a.web.test_bootstrap_dart; | |
185 | |
186 import 'test.html.0.dart' as i0; | |
187 | |
188 main() => i0.main(); | |
189 '''.replaceAll(' ', ''), | |
190 'a|web/test.html.0.dart': _sampleOutput("B", "bar"), | |
191 }, []); | |
192 | |
193 testPhases('with imports', phases, { | |
194 'a|web/index.html': '<!DOCTYPE html><html><head>' | |
195 '<link rel="import" href="packages/polymer/polymer.html">' | |
196 '<link rel="import" href="packages/a/test2.html">' | |
197 '</head><body>' | |
198 '<script type="application/dart" src="b.dart"></script>', | |
199 'a|web/b.dart': _sampleInput('B', 'bar'), | |
200 'a|lib/test2.html': '<!DOCTYPE html><html><head>' | |
201 '<link rel="import" href="../../packages/polymer/polymer.html">' | |
202 '</head><body>' | |
203 '<polymer-element name="x-a">1' | |
204 '<script type="application/dart">' | |
205 '${_sampleInput("A", "foo")}</script>' | |
206 '</polymer-element></html>', | |
207 }, { | |
208 'a|web/index.html': '<!DOCTYPE html><html><head>' | |
209 '$COMPATIBILITY_JS_TAGS' | |
210 '</head><body>' | |
211 '<div hidden="">' | |
212 '<polymer-element name="x-a">1</polymer-element>' | |
213 '</div>' | |
214 '<script src="index.html.polymer.bootstrap.dart.js" async=""></script>' | |
215 '</body></html>', | |
216 'a|web/index.html.polymer.bootstrap.dart': '''$MAIN_HEADER | |
217 import 'index.web_components.bootstrap.dart' as i0; | |
218 ${DEFAULT_IMPORTS.join('\n')} | |
219 import 'package:polymer/polymer.dart' as smoke_0; | |
220 import 'index.html.0.dart' as smoke_1; | |
221 import 'b.dart' as smoke_2; | |
222 | |
223 main() { | |
224 useGeneratedCode(new StaticConfiguration( | |
225 checkedMode: false, | |
226 parents: { | |
227 smoke_2.XB: smoke_0.PolymerElement, | |
228 smoke_1.XA: smoke_0.PolymerElement, | |
229 }, | |
230 declarations: { | |
231 smoke_2.XB: {}, | |
232 smoke_1.XA: {}, | |
233 smoke_0.PolymerElement: {}, | |
234 })); | |
235 configureForDeployment(); | |
236 return i0.main(); | |
237 } | |
238 '''.replaceAll('\n ', '\n'), | |
239 'a|web/index.web_components.bootstrap.dart': ''' | |
240 import 'package:initialize/src/static_loader.dart'; | |
241 import 'package:initialize/initialize.dart'; | |
242 import 'index.bootstrap.dart' as i0; | |
243 import 'index.html.0.dart' as i1; | |
244 import 'package:polymer/polymer.dart' as i2; | |
245 import 'b.dart' as i3; | |
246 | |
247 main() { | |
248 initializers.addAll([ | |
249 new InitEntry(const i2.CustomTag('x-A'), i1.XA), | |
250 new InitEntry(const i2.CustomTag('x-B'), i3.XB), | |
251 ]); | |
252 | |
253 return i0.main(); | |
254 } | |
255 '''.replaceAll(' ', ''), | |
256 'a|web/index.bootstrap.dart': ''' | |
257 library a.web.index_bootstrap_dart; | |
258 | |
259 import 'index.html.0.dart' as i0; | |
260 import 'b.dart' as i1; | |
261 | |
262 main() => i1.main(); | |
263 '''.replaceAll(' ', ''), | |
264 'a|web/index.html.0.dart': _sampleOutput("A", "foo"), | |
265 }, []); | |
266 | |
267 testPhases('test compatibility', phases, { | |
268 'a|test/test.html': '<!DOCTYPE html><html><head>' | |
269 '<link rel="x-dart-test" href="a.dart">' | |
270 '<script src="packages/test/dart.js"></script>', | |
271 'a|test/a.dart': _sampleInput('A', 'foo'), | |
272 }, { | |
273 'a|test/test.html': '<!DOCTYPE html><html><head>' | |
274 '$COMPATIBILITY_JS_TAGS' | |
275 '<link rel="x-dart-test" href="test.html.polymer.bootstrap.dart">' | |
276 '<script src="packages/test/dart.js"></script>' | |
277 '</head><body></body></html>', | |
278 }, []); | |
279 } | |
280 | |
281 String _sampleInput(String className, String fieldName) => ''' | |
282 library ${className}_$fieldName; | |
283 import 'package:observe/observe.dart'; | |
284 import 'package:polymer/polymer.dart'; | |
285 | |
286 class $className extends Observable { | |
287 @observable int $fieldName; | |
288 $className(this.$fieldName); | |
289 } | |
290 | |
291 @CustomTag('x-$className') | |
292 class X${className} extends PolymerElement { | |
293 X${className}.created() : super.created(); | |
294 } | |
295 @initMethod m_$fieldName() {} | |
296 main() {} | |
297 '''; | |
298 | |
299 String _sampleOutput(String className, String fieldName) { | |
300 var fieldReplacement = '@reflectable @observable ' | |
301 'int get $fieldName => __\$$fieldName; ' | |
302 'int __\$$fieldName; ' | |
303 '@reflectable set $fieldName(int value) { ' | |
304 '__\$$fieldName = notifyPropertyChange(#$fieldName, ' | |
305 '__\$$fieldName, value); }'; | |
306 return ''' | |
307 library ${className}_$fieldName; | |
308 import 'package:observe/observe.dart'; | |
309 import 'package:polymer/polymer.dart'; | |
310 | |
311 class $className extends ChangeNotifier { | |
312 $fieldReplacement | |
313 $className($fieldName) : __\$$fieldName = $fieldName; | |
314 } | |
315 | |
316 @CustomTag('x-$className') | |
317 class X${className} extends PolymerElement { | |
318 X${className}.created() : super.created(); | |
319 } | |
320 @initMethod m_$fieldName() {} | |
321 main() {} | |
322 '''; | |
323 } | |
OLD | NEW |