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

Side by Side Diff: pkg/polymer/test/build/import_inliner_test.dart

Issue 794473002: Delete polymer from the Dart repo (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years 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
« no previous file with comments | « pkg/polymer/test/build/common.dart ('k') | pkg/polymer/test/build/index_page_builder_test.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(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.import_inliner_test;
6
7 import 'dart:convert';
8 import 'package:polymer/src/build/common.dart';
9 import 'package:polymer/src/build/import_inliner.dart';
10 import 'package:polymer/src/build/messages.dart';
11 import 'package:unittest/compact_vm_config.dart';
12 import 'package:unittest/unittest.dart';
13 import 'common.dart';
14
15 part 'code_extractor.dart';
16
17 final phases = [[new ImportInliner(new TransformOptions())]];
18
19 void main() {
20 useCompactVMConfiguration();
21 group('rel=import', importTests);
22 group('rel=stylesheet', stylesheetTests);
23 group('script type=dart', codeExtractorTests);
24 group('url attributes', urlAttributeTests);
25 group('deep entrypoints', entryPointTests);
26 }
27
28 void importTests() {
29 testPhases('no changes', phases, {
30 'a|web/test.html': '<!DOCTYPE html><html></html>',
31 }, {
32 'a|web/test.html': '<!DOCTYPE html><html></html>',
33 'a|web/test.html._data': EMPTY_DATA,
34 });
35
36 testPhases('empty import', phases, {
37 'a|web/test.html':
38 '<!DOCTYPE html><html><head>'
39 '<link rel="import" href="">' // empty href
40 '</head></html>',
41 'a|web/test2.html':
42 '<!DOCTYPE html><html><head>'
43 '<link rel="import">' // no href
44 '</head></html>',
45 }, {
46 'a|web/test.html':
47 '<!DOCTYPE html><html><head>'
48 '</head><body></body></html>',
49 'a|web/test.html._data': EMPTY_DATA,
50 'a|web/test2.html':
51 '<!DOCTYPE html><html><head>'
52 '</head><body></body></html>',
53 'a|web/test2.html._data': EMPTY_DATA,
54 });
55
56 testPhases('shallow, no elements', phases, {
57 'a|web/test.html':
58 '<!DOCTYPE html><html><head>'
59 '<link rel="import" href="test2.html">'
60 '</head></html>',
61 'a|web/test2.html':
62 '<!DOCTYPE html><html><head>'
63 '</head></html>',
64 }, {
65 'a|web/test.html':
66 '<!DOCTYPE html><html><head>'
67 '</head><body></body></html>',
68 'a|web/test.html._data': EMPTY_DATA,
69 'a|web/test2.html':
70 '<!DOCTYPE html><html><head>'
71 '</head></html>',
72 'a|web/test2.html._data': EMPTY_DATA,
73 });
74
75 testPhases('shallow, elements, one import', phases,
76 {
77 'a|web/test.html':
78 '<!DOCTYPE html><html><head>'
79 '<link rel="import" href="test2.html">'
80 '</head></html>',
81 'a|web/test2.html':
82 '<!DOCTYPE html><html><head>'
83 '</head><body><polymer-element>2</polymer-element></html>',
84 }, {
85 'a|web/test.html':
86 '<!DOCTYPE html><html><head>'
87 '</head><body>'
88 '<div hidden="">'
89 '<polymer-element>2</polymer-element>'
90 '</div>'
91 '</body></html>',
92 'a|web/test.html._data': EMPTY_DATA,
93 'a|web/test2.html':
94 '<!DOCTYPE html><html><head>'
95 '</head><body><polymer-element>2</polymer-element></html>',
96 'a|web/test2.html._data': EMPTY_DATA,
97 });
98
99 testPhases('preserves order of scripts', phases,
100 {
101 'a|web/test.html':
102 '<!DOCTYPE html><html><head>'
103 '<script type="text/javascript">/*first*/</script>'
104 '<script src="second.js"></script>'
105 '<link rel="import" href="test2.html">'
106 '<script>/*forth*/</script>'
107 '</head></html>',
108 'a|web/test2.html':
109 '<!DOCTYPE html><html><head><script>/*third*/</script>'
110 '</head><body><polymer-element>2</polymer-element></html>',
111 'a|web/second.js': '/*second*/'
112 }, {
113 'a|web/test.html':
114 '<!DOCTYPE html><html><head>'
115 '<script type="text/javascript">/*first*/</script>'
116 '<script src="second.js"></script>'
117 '</head><body>'
118 '<div hidden="">'
119 '<script>/*third*/</script>'
120 '<polymer-element>2</polymer-element>'
121 '<script>/*forth*/</script>'
122 '</div>'
123 '</body></html>',
124 'a|web/test.html._data': EMPTY_DATA,
125 'a|web/test2.html':
126 '<!DOCTYPE html><html><head><script>/*third*/</script>'
127 '</head><body><polymer-element>2</polymer-element></html>',
128 'a|web/test2.html._data': EMPTY_DATA,
129 'a|web/second.js': '/*second*/'
130 });
131
132 testPhases('preserves order of scripts, extract Dart scripts', phases,
133 {
134 'a|web/test.html':
135 '<!DOCTYPE html><html><head>'
136 '<script type="text/javascript">/*first*/</script>'
137 '<script src="second.js"></script>'
138 '<link rel="import" href="test2.html">'
139 '<script type="application/dart">/*fifth*/</script>'
140 '</head></html>',
141 'a|web/test2.html':
142 '<!DOCTYPE html><html><head><script>/*third*/</script>'
143 '<script type="application/dart">/*forth*/</script>'
144 '</head><body><polymer-element>2</polymer-element></html>',
145 'a|web/second.js': '/*second*/'
146 }, {
147 'a|web/test.html':
148 '<!DOCTYPE html><html><head>'
149 '<script type="text/javascript">/*first*/</script>'
150 '<script src="second.js"></script>'
151 '</head><body>'
152 '<div hidden="">'
153 '<script>/*third*/</script>'
154 '<polymer-element>2</polymer-element>'
155 '</div>'
156 '</body></html>',
157 'a|web/test.html._data': expectedData([
158 'web/test.html.1.dart','web/test.html.0.dart']),
159 'a|web/test.html.1.dart': 'library a.web.test2_html_0;\n/*forth*/',
160 'a|web/test.html.0.dart': 'library a.web.test_html_0;\n/*fifth*/',
161 'a|web/test2.html':
162 '<!DOCTYPE html><html><head>'
163 '<script>/*third*/</script>'
164 '</head><body>'
165 '<polymer-element>2</polymer-element>'
166 '</body></html>',
167 'a|web/test2.html._data': expectedData(['web/test2.html.0.dart']),
168 'a|web/test2.html.0.dart': 'library a.web.test2_html_0;\n/*forth*/',
169 'a|web/second.js': '/*second*/'
170 });
171
172 testLogOutput(
173 (options) => new ImportInliner(options),
174 'removes duplicate scripts', {
175 'a|web/test.html':
176 '<!DOCTYPE html><html><head>'
177 '<link rel="import" href="packages/a/x_a.html">'
178 '<link rel="import" href="packages/a/x_b.html">'
179 '</head></html>',
180 'a|lib/x_a.html':
181 '<script type="application/dart" src="bar.dart"></script>',
182 'a|lib/x_b.html':
183 '<script type="application/dart" src="bar.dart"></script>',
184 'a|lib/bar.dart': 'var i = 0;'
185 }, {
186 'a|web/test.html':
187 '<!DOCTYPE html><html><head></head><body></body></html>',
188 'a|web/test.html._data': expectedData(['lib/bar.dart']),
189 }, [
190 'warning: ${SCRIPT_INCLUDED_MORE_THAN_ONCE.create(
191 {'url': 'packages/a/bar.dart'}).snippet} (lib/x_b.html 0 0)'
192 ]);
193
194 final cspPhases = [[new ImportInliner(
195 new TransformOptions(contentSecurityPolicy: true))]];
196 testPhases('extract Js scripts in CSP mode', cspPhases,
197 {
198 'a|web/test.html':
199 '<!DOCTYPE html><html><head>'
200 '<script type="text/javascript">/*first*/</script>'
201 '<script src="second.js"></script>'
202 '<link rel="import" href="test2.html">'
203 '<script type="application/dart">/*fifth*/</script>'
204 '</head></html>',
205 'a|web/test2.html':
206 '<!DOCTYPE html><html><head><script>/*third*/</script>'
207 '<script type="application/dart">/*forth*/</script>'
208 '</head><body><polymer-element>2</polymer-element></html>',
209 'a|web/second.js': '/*second*/'
210 }, {
211 'a|web/test.html':
212 '<!DOCTYPE html><html><head>'
213 '<script type="text/javascript" src="test.html.0.js"></script>'
214 '<script src="second.js"></script>'
215 '</head><body>'
216 '<div hidden="">'
217 '<script src="test.html.2.js"></script>'
218 '<polymer-element>2</polymer-element>'
219 '</div>'
220 '</body></html>',
221 'a|web/test.html._data': expectedData([
222 'web/test.html.3.dart','web/test.html.1.dart']),
223 'a|web/test.html.3.dart': 'library a.web.test2_html_0;\n/*forth*/',
224 'a|web/test.html.1.dart': 'library a.web.test_html_0;\n/*fifth*/',
225 'a|web/test.html.0.js': '/*first*/',
226 'a|web/test.html.2.js': '/*third*/',
227 'a|web/test2.html':
228 '<!DOCTYPE html><html><head>'
229 '<script src="test2.html.0.js"></script>'
230 '</head><body>'
231 '<polymer-element>2</polymer-element></body></html>',
232 'a|web/test2.html._data': expectedData(['web/test2.html.1.dart']),
233 'a|web/test2.html.0.js': '/*third*/',
234 'a|web/test2.html.1.dart': 'library a.web.test2_html_0;\n/*forth*/',
235 'a|web/second.js': '/*second*/'
236 });
237
238 testPhases('Cleans library names generated from file paths.', phases,
239 {
240 'a|web/01_test.html':
241 '<!DOCTYPE html><html><head>'
242 '<script type="application/dart">/*1*/</script>'
243 '</head></html>',
244 'a|web/foo_02_test.html':
245 '<!DOCTYPE html><html><head>'
246 '<script type="application/dart">/*2*/</script>'
247 '</head></html>',
248 'a|web/test_03.html':
249 '<!DOCTYPE html><html><head>'
250 '<script type="application/dart">/*3*/</script>'
251 '</head></html>',
252 'a|web/*test_%foo_04!.html':
253 '<!DOCTYPE html><html><head>'
254 '<script type="application/dart">/*4*/</script>'
255 '</head></html>',
256 'a|web/%05_test.html':
257 '<!DOCTYPE html><html><head>'
258 '<script type="application/dart">/*5*/</script>'
259 '</head></html>',
260 }, {
261 'a|web/01_test.html.0.dart':
262 'library a.web._01_test_html_0;\n/*1*/', // Appends an _ if i t starts with a number.
263 'a|web/foo_02_test.html.0.dart':
264 'library a.web.foo_02_test_html_0;\n/*2*/', // Allows numbers in the middle.
265 'a|web/test_03.html.0.dart':
266 'library a.web.test_03_html_0;\n/*3*/', // Allows numbers at the end.
267 'a|web/*test_%foo_04!.html.0.dart':
268 'library a.web._test__foo_04__html_0;\n/*4*/', // Replaces invalid characters with _.
269 'a|web/%05_test.html.0.dart':
270 'library a.web._05_test_html_0;\n/*5*/', // Replace invalid c haracter followed by number.
271 });
272
273 testPhases('no transformation outside web/', phases,
274 {
275 'a|lib/test.html':
276 '<!DOCTYPE html><html><head>'
277 '<link rel="import" href="test2.html">'
278 '</head></html>',
279 'a|lib/test2.html':
280 '<!DOCTYPE html><html><head>'
281 '</head><body><polymer-element>2</polymer-element></html>',
282 }, {
283 'a|lib/test.html':
284 '<!DOCTYPE html><html><head>'
285 '<link rel="import" href="test2.html">'
286 '</head></html>',
287 'a|lib/test2.html':
288 '<!DOCTYPE html><html><head>'
289 '</head><body><polymer-element>2</polymer-element></html>',
290 });
291
292 testPhases('shallow, elements, many', phases,
293 {
294 'a|web/test.html':
295 '<!DOCTYPE html><html><head>'
296 '<link rel="import" href="test2.html">'
297 '<link rel="import" href="test3.html">'
298 '</head></html>',
299 'a|web/test2.html':
300 '<!DOCTYPE html><html><head>'
301 '</head><body><polymer-element>2</polymer-element></html>',
302 'a|web/test3.html':
303 '<!DOCTYPE html><html><head>'
304 '</head><body><polymer-element>3</polymer-element></html>',
305 }, {
306 'a|web/test.html':
307 '<!DOCTYPE html><html><head>'
308 '</head><body>'
309 '<div hidden="">'
310 '<polymer-element>2</polymer-element>'
311 '<polymer-element>3</polymer-element>'
312 '</div>'
313 '</body></html>',
314 'a|web/test2.html':
315 '<!DOCTYPE html><html><head>'
316 '</head><body><polymer-element>2</polymer-element></html>',
317 'a|web/test3.html':
318 '<!DOCTYPE html><html><head>'
319 '</head><body><polymer-element>3</polymer-element></html>',
320 });
321
322 testPhases('deep, elements, one per file', phases, {
323 'a|web/test.html':
324 '<!DOCTYPE html><html><head>'
325 '<link rel="import" href="test2.html">'
326 '</head></html>',
327 'a|web/test2.html':
328 '<!DOCTYPE html><html><head>'
329 '<link rel="import" href="assets/b/test3.html">'
330 '</head><body><polymer-element>2</polymer-element></html>',
331 'b|asset/test3.html':
332 '<!DOCTYPE html><html><head>'
333 '<link rel="import" href="../../packages/c/test4.html">'
334 '</head><body><polymer-element>3</polymer-element></html>',
335 'c|lib/test4.html':
336 '<!DOCTYPE html><html><head>'
337 '</head><body><polymer-element>4</polymer-element></html>',
338 }, {
339 'a|web/test.html':
340 '<!DOCTYPE html><html><head>'
341 '</head><body>'
342 '<div hidden="">'
343 '<polymer-element>4</polymer-element>'
344 '<polymer-element>3</polymer-element>'
345 '<polymer-element>2</polymer-element>'
346 '</div>'
347 '</body></html>',
348 'a|web/test2.html':
349 '<!DOCTYPE html><html><head>'
350 '</head><body>'
351 '<div hidden="">'
352 '<polymer-element>4</polymer-element>'
353 '<polymer-element>3</polymer-element>'
354 '</div>'
355 '<polymer-element>2</polymer-element>'
356 '</body></html>',
357 'b|asset/test3.html':
358 '<!DOCTYPE html><html><head>'
359 '<link rel="import" href="../../packages/c/test4.html">'
360 '</head><body><polymer-element>3</polymer-element></html>',
361 'c|lib/test4.html':
362 '<!DOCTYPE html><html><head>'
363 '</head><body><polymer-element>4</polymer-element></html>',
364 });
365
366 testPhases('deep, elements, many imports', phases, {
367 'a|web/test.html':
368 '<!DOCTYPE html><html><head>'
369 '<link rel="import" href="test2a.html">'
370 '<link rel="import" href="test2b.html">'
371 '</head></html>',
372 'a|web/test2a.html':
373 '<!DOCTYPE html><html><head>'
374 '<link rel="import" href="test3a.html">'
375 '<link rel="import" href="test3b.html">'
376 '</head><body><polymer-element>2a</polymer-element></body></html>',
377 'a|web/test2b.html':
378 '<!DOCTYPE html><html><head>'
379 '<link rel="import" href="test4a.html">'
380 '<link rel="import" href="test4b.html">'
381 '</head><body><polymer-element>2b</polymer-element></body></html>',
382 'a|web/test3a.html':
383 '<!DOCTYPE html><html><head>'
384 '</head><body><polymer-element>3a</polymer-element></body></html>',
385 'a|web/test3b.html':
386 '<!DOCTYPE html><html><head>'
387 '</head><body><polymer-element>3b</polymer-element></body></html>',
388 'a|web/test4a.html':
389 '<!DOCTYPE html><html><head>'
390 '</head><body><polymer-element>4a</polymer-element></body></html>',
391 'a|web/test4b.html':
392 '<!DOCTYPE html><html><head>'
393 '</head><body><polymer-element>4b</polymer-element></body></html>',
394 }, {
395 'a|web/test.html':
396 '<!DOCTYPE html><html><head>'
397 '</head><body>'
398 '<div hidden="">'
399 '<polymer-element>3a</polymer-element>'
400 '<polymer-element>3b</polymer-element>'
401 '<polymer-element>2a</polymer-element>'
402 '<polymer-element>4a</polymer-element>'
403 '<polymer-element>4b</polymer-element>'
404 '<polymer-element>2b</polymer-element>'
405 '</div>'
406 '</body></html>',
407 'a|web/test2a.html':
408 '<!DOCTYPE html><html><head>'
409 '</head><body>'
410 '<div hidden="">'
411 '<polymer-element>3a</polymer-element>'
412 '<polymer-element>3b</polymer-element>'
413 '</div>'
414 '<polymer-element>2a</polymer-element>'
415 '</body></html>',
416 'a|web/test2b.html':
417 '<!DOCTYPE html><html><head>'
418 '</head><body>'
419 '<div hidden="">'
420 '<polymer-element>4a</polymer-element>'
421 '<polymer-element>4b</polymer-element>'
422 '</div>'
423 '<polymer-element>2b</polymer-element>'
424 '</body></html>',
425 'a|web/test3a.html':
426 '<!DOCTYPE html><html><head>'
427 '</head><body>'
428 '<polymer-element>3a</polymer-element>'
429 '</body></html>',
430 'a|web/test3b.html':
431 '<!DOCTYPE html><html><head>'
432 '</head><body>'
433 '<polymer-element>3b</polymer-element>'
434 '</body></html>',
435 'a|web/test4a.html':
436 '<!DOCTYPE html><html><head>'
437 '</head><body>'
438 '<polymer-element>4a</polymer-element>'
439 '</body></html>',
440 'a|web/test4b.html':
441 '<!DOCTYPE html><html><head>'
442 '</head><body>'
443 '<polymer-element>4b</polymer-element>'
444 '</body></html>',
445 });
446
447 testPhases('imports cycle, 1-step lasso', phases, {
448 'a|web/test.html':
449 '<!DOCTYPE html><html><head>'
450 '<link rel="import" href="test_1.html">'
451 '</head></html>',
452 'a|web/test_1.html':
453 '<!DOCTYPE html><html><head>'
454 '<link rel="import" href="test_2.html">'
455 '</head><body><polymer-element>1</polymer-element></html>',
456 'a|web/test_2.html':
457 '<!DOCTYPE html><html><head>'
458 '<link rel="import" href="test_1.html">'
459 '</head><body><polymer-element>2</polymer-element></html>',
460 }, {
461 'a|web/test.html':
462 '<!DOCTYPE html><html><head>'
463 '</head><body>'
464 '<div hidden="">'
465 '<polymer-element>2</polymer-element>'
466 '<polymer-element>1</polymer-element>'
467 '</div>'
468 '</body></html>',
469 'a|web/test_1.html':
470 '<!DOCTYPE html><html><head>'
471 '</head><body>'
472 '<div hidden="">'
473 '<polymer-element>2</polymer-element>'
474 '</div>'
475 '<polymer-element>1</polymer-element></body></html>',
476 'a|web/test_2.html':
477 '<!DOCTYPE html><html><head>'
478 '</head><body>'
479 '<div hidden="">'
480 '<polymer-element>1</polymer-element>'
481 '</div>'
482 '<polymer-element>2</polymer-element></body></html>',
483 });
484
485 testPhases('imports cycle, 1-step lasso, scripts too', phases, {
486 'a|web/test.html':
487 '<!DOCTYPE html><html><head>'
488 '<link rel="import" href="test_1.html">'
489 '</head></html>',
490 'a|web/test_1.html':
491 '<!DOCTYPE html><html><head>'
492 '<link rel="import" href="test_2.html">'
493 '</head><body><polymer-element>1</polymer-element>'
494 '<script src="s1"></script></html>',
495 'a|web/test_2.html':
496 '<!DOCTYPE html><html><head>'
497 '<link rel="import" href="test_1.html">'
498 '</head><body><polymer-element>2</polymer-element>'
499 '<script src="s2"></script></html>',
500 }, {
501 'a|web/test.html':
502 '<!DOCTYPE html><html><head>'
503 '</head><body>'
504 '<div hidden="">'
505 '<polymer-element>2</polymer-element>'
506 '<script src="s2"></script>'
507 '<polymer-element>1</polymer-element>'
508 '<script src="s1"></script>'
509 '</div>'
510 '</body></html>',
511 'a|web/test.html._data': EMPTY_DATA,
512 'a|web/test_1.html':
513 '<!DOCTYPE html><html><head>'
514 '</head><body>'
515 '<div hidden="">'
516 '<polymer-element>2</polymer-element>'
517 '<script src="s2"></script>'
518 '</div>'
519 '<polymer-element>1</polymer-element>'
520 '<script src="s1"></script></body></html>',
521 'a|web/test_1.html._data': EMPTY_DATA,
522 'a|web/test_2.html':
523 '<!DOCTYPE html><html><head>'
524 '</head><body>'
525 '<div hidden="">'
526 '<polymer-element>1</polymer-element>'
527 '<script src="s1"></script>'
528 '</div>'
529 '<polymer-element>2</polymer-element>'
530 '<script src="s2"></script></body></html>',
531 'a|web/test_2.html._data': EMPTY_DATA,
532 });
533
534 testPhases('imports cycle, 1-step lasso, Dart scripts too', phases, {
535 'a|web/test.html':
536 '<!DOCTYPE html><html><head>'
537 '<link rel="import" href="test_1.html">'
538 '</head></html>',
539 'a|web/test_1.html':
540 '<!DOCTYPE html><html><head>'
541 '<link rel="import" href="test_2.html">'
542 '</head><body><polymer-element>1</polymer-element>'
543 '<script type="application/dart" src="s1.dart">'
544 '</script></html>',
545 'a|web/test_2.html':
546 '<!DOCTYPE html><html><head>'
547 '<link rel="import" href="test_1.html">'
548 '</head><body><polymer-element>2'
549 '<script type="application/dart" src="s2.dart"></script>'
550 '</polymer-element>'
551 '</html>',
552 'a|web/s1.dart': '',
553 'a|web/s2.dart': '',
554 }, {
555 'a|web/test.html':
556 '<!DOCTYPE html><html><head>'
557 '</head><body>'
558 '<div hidden="">'
559 '<polymer-element>2</polymer-element>'
560 '<polymer-element>1</polymer-element>'
561 '</div>'
562 '</body></html>',
563 'a|web/test.html._data': expectedData(['web/s2.dart', 'web/s1.dart']),
564 'a|web/test_1.html':
565 '<!DOCTYPE html><html><head>'
566 '</head><body>'
567 '<div hidden="">'
568 '<polymer-element>2</polymer-element>'
569 '</div>'
570 '<polymer-element>1</polymer-element>'
571 '</body></html>',
572 'a|web/test_1.html._data': expectedData(['web/s2.dart', 'web/s1.dart']),
573 'a|web/test_2.html':
574 '<!DOCTYPE html><html><head>'
575 '</head><body>'
576 '<div hidden="">'
577 '<polymer-element>1</polymer-element>'
578 '</div>'
579 '<polymer-element>2'
580 '</polymer-element>'
581 '</body></html>',
582 'a|web/test_2.html._data': expectedData(['web/s1.dart', 'web/s2.dart']),
583 });
584
585 testPhases('imports with Dart script after JS script', phases, {
586 'a|web/test.html':
587 '<!DOCTYPE html><html><head>'
588 '<link rel="import" href="test_1.html">'
589 '</head></html>',
590 'a|web/test_1.html':
591 '<!DOCTYPE html><html><head>'
592 '<link rel="import" href="test_1.html">'
593 '</head><body>'
594 '<foo>42</foo><bar-baz></bar-baz>'
595 '<polymer-element>1'
596 '<script src="s1.js"></script>'
597 '<script type="application/dart" src="s1.dart"></script>'
598 '</polymer-element>'
599 'FOO</body></html>',
600 'a|web/s1.dart': '',
601 }, {
602 'a|web/test.html':
603 '<!DOCTYPE html><html><head>'
604 '</head><body>'
605 '<div hidden="">'
606 '<foo>42</foo><bar-baz></bar-baz>'
607 '<polymer-element>1'
608 '<script src="s1.js"></script>'
609 '</polymer-element>'
610 'FOO'
611 '</div>'
612 '</body></html>',
613 'a|web/test.html._data': expectedData(['web/s1.dart']),
614 'a|web/test_1.html':
615 '<!DOCTYPE html><html><head>'
616 '</head><body>'
617 '<foo>42</foo><bar-baz></bar-baz>'
618 '<polymer-element>1'
619 '<script src="s1.js"></script>'
620 '</polymer-element>'
621 'FOO</body></html>',
622 'a|web/test_1.html._data': expectedData(['web/s1.dart']),
623 });
624
625 testPhases('imports cycle, 2-step lasso', phases, {
626 'a|web/test.html':
627 '<!DOCTYPE html><html><head>'
628 '<link rel="import" href="test_1.html">'
629 '</head></html>',
630 'a|web/test_1.html':
631 '<!DOCTYPE html><html><head>'
632 '<link rel="import" href="test_2.html">'
633 '</head><body><polymer-element>1</polymer-element></html>',
634 'a|web/test_2.html':
635 '<!DOCTYPE html><html><head>'
636 '<link rel="import" href="test_3.html">'
637 '</head><body><polymer-element>2</polymer-element></html>',
638 'a|web/test_3.html':
639 '<!DOCTYPE html><html><head>'
640 '<link rel="import" href="test_1.html">'
641 '</head><body><polymer-element>3</polymer-element></html>',
642 }, {
643 'a|web/test.html':
644 '<!DOCTYPE html><html><head>'
645 '</head><body>'
646 '<div hidden="">'
647 '<polymer-element>3</polymer-element>'
648 '<polymer-element>2</polymer-element>'
649 '<polymer-element>1</polymer-element>'
650 '</div>'
651 '</body></html>',
652 'a|web/test_1.html':
653 '<!DOCTYPE html><html><head>'
654 '</head><body>'
655 '<div hidden="">'
656 '<polymer-element>3</polymer-element>'
657 '<polymer-element>2</polymer-element>'
658 '</div>'
659 '<polymer-element>1</polymer-element></body></html>',
660 'a|web/test_2.html':
661 '<!DOCTYPE html><html><head>'
662 '</head><body>'
663 '<div hidden="">'
664 '<polymer-element>1</polymer-element>'
665 '<polymer-element>3</polymer-element>'
666 '</div>'
667 '<polymer-element>2</polymer-element></body></html>',
668 'a|web/test_3.html':
669 '<!DOCTYPE html><html><head>'
670 '</head><body>'
671 '<div hidden="">'
672 '<polymer-element>2</polymer-element>'
673 '<polymer-element>1</polymer-element>'
674 '</div>'
675 '<polymer-element>3</polymer-element></body></html>',
676 });
677
678 testPhases('imports cycle, self cycle', phases, {
679 'a|web/test.html':
680 '<!DOCTYPE html><html><head>'
681 '<link rel="import" href="test_1.html">'
682 '</head></html>',
683 'a|web/test_1.html':
684 '<!DOCTYPE html><html><head>'
685 '<link rel="import" href="test_1.html">'
686 '</head><body><polymer-element>1</polymer-element></html>',
687 }, {
688 'a|web/test.html':
689 '<!DOCTYPE html><html><head>'
690 '</head><body>'
691 '<div hidden="">'
692 '<polymer-element>1</polymer-element>'
693 '</div>'
694 '</body></html>',
695 'a|web/test_1.html':
696 '<!DOCTYPE html><html><head>'
697 '</head><body>'
698 '<polymer-element>1</polymer-element></body></html>',
699 });
700
701 testPhases('imports DAG', phases, {
702 'a|web/test.html':
703 '<!DOCTYPE html><html><head>'
704 '<link rel="import" href="test_1.html">'
705 '<link rel="import" href="test_2.html">'
706 '</head></html>',
707 'a|web/test_1.html':
708 '<!DOCTYPE html><html><head>'
709 '<link rel="import" href="test_3.html">'
710 '</head><body><polymer-element>1</polymer-element></body></html>',
711 'a|web/test_2.html':
712 '<!DOCTYPE html><html><head>'
713 '<link rel="import" href="test_3.html">'
714 '</head><body><polymer-element>2</polymer-element></body></html>',
715 'a|web/test_3.html':
716 '<!DOCTYPE html><html><head>'
717 '</head><body><polymer-element>3</polymer-element></body></html>',
718 }, {
719 'a|web/test.html':
720 '<!DOCTYPE html><html><head>'
721 '</head><body>'
722 '<div hidden="">'
723 '<polymer-element>3</polymer-element>'
724 '<polymer-element>1</polymer-element>'
725 '<polymer-element>2</polymer-element>'
726 '</div>'
727 '</body></html>',
728 'a|web/test_1.html':
729 '<!DOCTYPE html><html><head>'
730 '</head><body>'
731 '<div hidden="">'
732 '<polymer-element>3</polymer-element>'
733 '</div>'
734 '<polymer-element>1</polymer-element></body></html>',
735 'a|web/test_2.html':
736 '<!DOCTYPE html><html><head>'
737 '</head><body>'
738 '<div hidden="">'
739 '<polymer-element>3</polymer-element>'
740 '</div>'
741 '<polymer-element>2</polymer-element></body></html>',
742 'a|web/test_3.html':
743 '<!DOCTYPE html><html><head>'
744 '</head><body>'
745 '<polymer-element>3</polymer-element></body></html>',
746 });
747
748 testLogOutput(
749 (options) => new ImportInliner(options),
750 "missing styles don't throw errors and are not inlined", {
751 'a|web/test.html':
752 '<!DOCTYPE html><html><head>'
753 '<link rel="stylesheet" href="foo.css">'
754 '</head></html>',
755 }, {
756 'a|web/test.html':
757 '<!DOCTYPE html><html><head>'
758 '<link rel="stylesheet" href="foo.css">'
759 '</head><body>'
760 '</body></html>',
761 }, [
762 'warning: Failed to inline stylesheet: '
763 'Could not find asset a|web/foo.css. (web/test.html 0 27)',
764 ]);
765
766 testLogOutput(
767 (options) => new ImportInliner(options),
768 "missing html imports throw errors", {
769 'a|web/test.html':
770 '<!DOCTYPE html><html><head>'
771 '<link rel="import" href="foo.html">'
772 '</head></html>',
773 }, {
774 'a|web/test.html._buildLogs.1':
775 '{"polymer#25":[{'
776 '"level":"Error",'
777 '"message":{'
778 '"id":"polymer#25",'
779 '"snippet":"Failed to inline HTML import: '
780 'Could not find asset a|web/foo.html."'
781 '},'
782 '"span":{'
783 '"start":{'
784 '"url":"web/test.html",'
785 '"offset":27,'
786 '"line":0,'
787 '"column":27'
788 '},'
789 '"end":{'
790 '"url":"web/test.html",'
791 '"offset":62,'
792 '"line":0,'
793 '"column":62'
794 '},'
795 '"text":"<link rel=\\"import\\" href=\\"foo.html\\">"'
796 '}'
797 '}]}',
798 }, [
799 'error: ${INLINE_IMPORT_FAIL.create({
800 'error': 'Could not find asset a|web/foo.html.'}).snippet} '
801 '(web/test.html 0 27)',
802 ]);
803 }
804
805 void stylesheetTests() {
806
807 testPhases('empty stylesheet', phases, {
808 'a|web/test.html':
809 '<!DOCTYPE html><html><head>'
810 '<link rel="stylesheet" href="">' // empty href
811 '</head></html>',
812 'a|web/test2.html':
813 '<!DOCTYPE html><html><head>'
814 '<link rel="stylesheet">' // no href
815 '</head></html>',
816 }, {
817 'a|web/test.html':
818 '<!DOCTYPE html><html><head>'
819 '<link rel="stylesheet" href="">' // empty href
820 '</head></html>',
821 'a|web/test.html._data': EMPTY_DATA,
822 'a|web/test2.html':
823 '<!DOCTYPE html><html><head>'
824 '<link rel="stylesheet">' // no href
825 '</head></html>',
826 'a|web/test2.html._data': EMPTY_DATA,
827 });
828
829 testPhases('absolute uri', phases, {
830 'a|web/test.html':
831 '<!DOCTYPE html><html><head>'
832 '<link rel="stylesheet" href="/foo.css">'
833 '</head></html>',
834 'a|web/test2.html':
835 '<!DOCTYPE html><html><head>'
836 '<link rel="stylesheet" href="http://example.com/bar.css">'
837 '</head></html>',
838 }, {
839 'a|web/test.html':
840 '<!DOCTYPE html><html><head>'
841 '<link rel="stylesheet" href="/foo.css">'
842 '</head></html>',
843 'a|web/test.html._data': EMPTY_DATA,
844 'a|web/test2.html':
845 '<!DOCTYPE html><html><head>'
846 '<link rel="stylesheet" href="http://example.com/bar.css">'
847 '</head></html>',
848 'a|web/test2.html._data': EMPTY_DATA,
849 });
850
851 testPhases('shallow, inlines css', phases, {
852 'a|web/test.html':
853 '<!DOCTYPE html><html><head>'
854 '<link rel="stylesheet" href="test2.css">'
855 '</head></html>',
856 'a|web/test2.css':
857 'h1 { font-size: 70px; }',
858 }, {
859 'a|web/test.html':
860 '<!DOCTYPE html><html><head>'
861 '<style>h1 { font-size: 70px; }</style>'
862 '</head><body>'
863 '</body></html>',
864 'a|web/test.html._data': EMPTY_DATA,
865 'a|web/test2.css':
866 'h1 { font-size: 70px; }',
867 });
868
869 testPhases('deep, inlines css', phases, {
870 'a|web/test.html':
871 '<!DOCTYPE html><html><head>'
872 '<link rel="import" href="test2.html">'
873 '</head></html>',
874 'a|web/test2.html':
875 '<polymer-element>2'
876 '<link rel="stylesheet" href="assets/b/test3.css">'
877 '</polymer-element>',
878 'b|asset/test3.css':
879 'body {\n background: #eaeaea url("../../assets/b/test4.png");\n}\n'
880 '.foo {\n background: url("../../packages/c/test5.png");\n}',
881 'b|asset/test4.png': 'PNG',
882 'c|lib/test5.png': 'PNG',
883 }, {
884 'a|web/test.html':
885 '<!DOCTYPE html><html><head></head><body>'
886 '<div hidden="">'
887 '<polymer-element>2'
888 '<style>'
889 'body {\n background: #eaeaea url(assets/b/test4.png);\n}\n'
890 '.foo {\n background: url(packages/c/test5.png);\n}'
891 '</style>'
892 '</polymer-element>'
893 '</div>'
894 '</body></html>',
895 'a|web/test2.html':
896 '<html><head></head><body>'
897 '<polymer-element>2'
898 '<style>'
899 'body {\n background: #eaeaea url(assets/b/test4.png);\n}\n'
900 '.foo {\n background: url(packages/c/test5.png);\n}'
901 '</style>'
902 '</polymer-element>'
903 '</body></html>',
904 'b|asset/test3.css':
905 'body {\n background: #eaeaea url("../../assets/b/test4.png");\n}\n'
906 '.foo {\n background: url("../../packages/c/test5.png");\n}',
907 'b|asset/test4.png': 'PNG',
908 'c|lib/test5.png': 'PNG',
909 });
910
911 testPhases('deep, inlines css, multiple nesting', phases, {
912 'a|web/test.html':
913 '<!DOCTYPE html><html><head>'
914 '<link rel="import" href="foo/test2.html">'
915 '</head></html>',
916 'a|web/foo/test2.html':
917 // When parsed, this is in the <head>.
918 '<link rel="import" href="bar/test3.html">'
919 // This is where the parsed <body> starts.
920 '<polymer-element>2'
921 '<link rel="stylesheet" href="test.css">'
922 '</polymer-element>',
923 'a|web/foo/bar/test3.html':
924 '<img src="qux.png">',
925 'a|web/foo/test.css':
926 'body {\n background: #eaeaea url("test4.png");\n}\n'
927 '.foo {\n background: url("test5.png");\n}',
928 }, {
929 'a|web/test.html':
930 '<!DOCTYPE html><html><head></head><body>'
931 '<div hidden="">'
932 '<img src="foo/bar/qux.png">'
933 '<polymer-element>2'
934 '<style>'
935 'body {\n background: #eaeaea url(foo/test4.png);\n}\n'
936 '.foo {\n background: url(foo/test5.png);\n}'
937 '</style></polymer-element>'
938 '</div>'
939 '</body></html>',
940 'a|web/foo/test2.html':
941 '<html><head></head><body>'
942 '<div hidden="">'
943 '<img src="bar/qux.png">'
944 '</div>'
945 '<polymer-element>2'
946 '<style>'
947 'body {\n background: #eaeaea url(test4.png);\n}\n'
948 '.foo {\n background: url(test5.png);\n}'
949 '</style></polymer-element>'
950 '</body></html>',
951 'a|web/foo/bar/test3.html':
952 '<img src="qux.png">',
953 'a|web/foo/test.css':
954 'body {\n background: #eaeaea url("test4.png");\n}\n'
955 '.foo {\n background: url("test5.png");\n}',
956 });
957
958 testPhases('shallow, inlines css and preserves order', phases, {
959 'a|web/test.html':
960 '<!DOCTYPE html><html><head>'
961 '<style>.first { color: black }</style>'
962 '<link rel="stylesheet" href="test2.css">'
963 '<style>.second { color: black }</style>'
964 '</head></html>',
965 'a|web/test2.css':
966 'h1 { font-size: 70px; }',
967 }, {
968 'a|web/test.html':
969 '<!DOCTYPE html><html><head>'
970 '<style>.first { color: black }</style>'
971 '<style>h1 { font-size: 70px; }</style>'
972 '<style>.second { color: black }</style>'
973 '</head><body>'
974 '</body></html>',
975 'a|web/test.html._data': EMPTY_DATA,
976 'a|web/test2.css':
977 'h1 { font-size: 70px; }',
978 });
979
980 testPhases('inlined tags keep original attributes', phases, {
981 'a|web/test.html':
982 '<!DOCTYPE html><html><head>'
983 '<link rel="stylesheet" href="foo.css" no-shim>'
984 '<link rel="stylesheet" href="bar.css" shim-shadow foo>'
985 '</head></html>',
986 'a|web/foo.css':
987 'h1 { font-size: 70px; }',
988 'a|web/bar.css':
989 'h2 { font-size: 35px; }',
990 }, {
991 'a|web/test.html':
992 '<!DOCTYPE html><html><head>'
993 '<style no-shim="">h1 { font-size: 70px; }</style>'
994 '<style shim-shadow="" foo="">h2 { font-size: 35px; }</style>'
995 '</head><body>'
996 '</body></html>',
997 'a|web/foo.css':
998 'h1 { font-size: 70px; }',
999 'a|web/bar.css':
1000 'h2 { font-size: 35px; }',
1001 });
1002
1003 testPhases(
1004 'can configure default stylesheet inlining',
1005 [[new ImportInliner(new TransformOptions(
1006 inlineStylesheets: {'default': false}))]], {
1007 'a|web/test.html':
1008 '<!DOCTYPE html><html><head></head><body>'
1009 '<link rel="stylesheet" href="foo.css">'
1010 '</body></html>',
1011 'a|web/foo.css':
1012 'h1 { font-size: 70px; }',
1013 }, {
1014 'a|web/test.html':
1015 '<!DOCTYPE html><html><head></head><body>'
1016 '<link rel="stylesheet" href="foo.css">'
1017 '</body></html>',
1018 });
1019
1020 testPhases(
1021 'can override default stylesheet inlining',
1022 [[new ImportInliner(new TransformOptions(
1023 inlineStylesheets: {
1024 'default': false,
1025 'web/foo.css': true,
1026 'b|lib/baz.css': true,
1027 }))]],
1028 {
1029 'a|web/test.html':
1030 '<!DOCTYPE html><html><head></head><body>'
1031 '<link rel="stylesheet" href="bar.css">'
1032 '<link rel="stylesheet" href="foo.css">'
1033 '<link rel="stylesheet" href="packages/b/baz.css">'
1034 '<link rel="stylesheet" href="packages/c/buz.css">'
1035 '</body></html>',
1036 'a|web/foo.css':
1037 'h1 { font-size: 70px; }',
1038 'a|web/bar.css':
1039 'h1 { font-size: 35px; }',
1040 'b|lib/baz.css':
1041 'h1 { font-size: 20px; }',
1042 'c|lib/buz.css':
1043 'h1 { font-size: 10px; }',
1044 }, {
1045 'a|web/test.html':
1046 '<!DOCTYPE html><html><head></head><body>'
1047 '<link rel="stylesheet" href="bar.css">'
1048 '<style>h1 { font-size: 70px; }</style>'
1049 '<style>h1 { font-size: 20px; }</style>'
1050 '<link rel="stylesheet" href="packages/c/buz.css">'
1051 '</body></html>',
1052 });
1053
1054 testLogOutput(
1055 (options) => new ImportInliner(options),
1056 'warns about multiple inlinings of the same css', {
1057 'a|web/test.html':
1058 '<!DOCTYPE html><html><head>'
1059 '<link rel="stylesheet" href="packages/a/foo.css">'
1060 '<link rel="stylesheet" href="packages/a/foo.css">'
1061 '</head><body></body></html>',
1062 'a|web/test1.html':
1063 '<!DOCTYPE html><html><head>'
1064 '<link rel="stylesheet" href="packages/a/foo.css">'
1065 '<link rel="import" href="packages/a/import1.html">'
1066 '</head><body></body></html>',
1067 'a|web/test2.html':
1068 '<!DOCTYPE html><html><head>'
1069 '<link rel="import" href="packages/a/import1.html">'
1070 '<link rel="import" href="packages/a/import2.html">'
1071 '</head><body></body></html>',
1072 'a|lib/import1.html':
1073 '<link rel="stylesheet" href="foo.css">',
1074 'a|lib/import2.html':
1075 '<link rel="stylesheet" href="foo.css">',
1076 'a|lib/foo.css':
1077 'body {position: relative;}',
1078 }, {}, [
1079 'warning: ${CSS_FILE_INLINED_MULTIPLE_TIMES.create(
1080 {'url': 'lib/foo.css'}).snippet}'
1081 ' (web/test.html 0 76)',
1082 'warning: ${CSS_FILE_INLINED_MULTIPLE_TIMES.create(
1083 {'url': 'lib/foo.css'}).snippet}'
1084 ' (lib/import1.html 0 0)',
1085 'warning: ${CSS_FILE_INLINED_MULTIPLE_TIMES.create(
1086 {'url': 'lib/foo.css'}).snippet}'
1087 ' (lib/import2.html 0 0)',
1088 ]);
1089
1090 testPhases(
1091 'doesn\'t warn about multiple css inlinings if overriden',
1092 [[new ImportInliner(new TransformOptions(
1093 inlineStylesheets: {'lib/foo.css': true}))]], {
1094 'a|web/test.html':
1095 '<!DOCTYPE html><html><head>'
1096 '<link rel="stylesheet" href="packages/a/foo.css">'
1097 '<link rel="stylesheet" href="packages/a/foo.css">'
1098 '</head><body></body></html>',
1099 'a|web/test1.html':
1100 '<!DOCTYPE html><html><head>'
1101 '<link rel="stylesheet" href="packages/a/foo.css">'
1102 '<link rel="import" href="packages/a/import1.html">'
1103 '</head><body></body></html>',
1104 'a|web/test2.html':
1105 '<!DOCTYPE html><html><head>'
1106 '<link rel="import" href="packages/a/import1.html">'
1107 '<link rel="import" href="packages/a/import2.html">'
1108 '</head><body></body></html>',
1109 'a|lib/import1.html':
1110 '<link rel="stylesheet" href="foo.css">',
1111 'a|lib/import2.html':
1112 '<link rel="stylesheet" href="foo.css">',
1113 'a|lib/foo.css':
1114 'body {position: relative;}',
1115 }, {}, []);
1116 }
1117
1118 void urlAttributeTests() {
1119
1120 testPhases('url attributes are normalized', phases, {
1121 'a|web/test.html':
1122 '<!DOCTYPE html><html><head>'
1123 '<link rel="import" href="foo/test_1.html">'
1124 '<link rel="import" href="foo/test_2.html">'
1125 '</head></html>',
1126 'a|web/foo/test_1.html':
1127 '<script src="baz.jpg"></script>',
1128 'a|web/foo/test_2.html':
1129 '<foo-element src="baz.jpg"></foo-element>'
1130 }, {
1131 'a|web/test.html':
1132 '<!DOCTYPE html><html><head></head><body>'
1133 '<div hidden="">'
1134 '<script src="foo/baz.jpg"></script>' // normalized
1135 '<foo-element src="baz.jpg"></foo-element>' // left alone (custom)
1136 '</div>'
1137 '</body></html>',
1138 'a|web/foo/test_1.html':
1139 '<script src="baz.jpg"></script>',
1140 'a|web/foo/test_2.html':
1141 '<foo-element src="baz.jpg"></foo-element>',
1142 });
1143
1144 testPhases('paths with a binding prefix are not normalized', phases, {
1145 'a|web/test.html':
1146 '<!DOCTYPE html><html><head>'
1147 '<link rel="import" href="foo/test.html">'
1148 '</head></html>',
1149 'a|web/foo/test.html':
1150 '<img src="{{bar}}">'
1151 '<img src="[[bar]]">',
1152 }, {
1153 'a|web/test.html':
1154 '<!DOCTYPE html><html><head></head><body>'
1155 '<div hidden="">'
1156 '<img src="{{bar}}">'
1157 '<img src="[[bar]]">'
1158 '</div>'
1159 '</body></html>',
1160 'a|web/foo/test.html':
1161 '<img src="{{bar}}">'
1162 '<img src="[[bar]]">',
1163 });
1164
1165 testPhases('relative paths followed by bindings are normalized', phases, {
1166 'a|web/test.html':
1167 '<!DOCTYPE html><html><head>'
1168 '<link rel="import" href="foo/test.html">'
1169 '</head></html>',
1170 'a|web/foo/test.html':
1171 '<img src="baz/{{bar}}">'
1172 '<img src="./{{bar}}">',
1173 }, {
1174 'a|web/test.html':
1175 '<!DOCTYPE html><html><head></head><body>'
1176 '<div hidden="">'
1177 '<img src="foo/baz/{{bar}}">'
1178 '<img src="foo/{{bar}}">'
1179 '</div>'
1180 '</body></html>',
1181 });
1182
1183 testPhases('relative paths in _* attributes are normalized', phases, {
1184 'a|web/test.html':
1185 '<!DOCTYPE html><html><head>'
1186 '<link rel="import" href="foo/test.html">'
1187 '</head></html>',
1188 'a|web/foo/test.html':
1189 '<img _src="./{{bar}}">'
1190 '<a _href="./{{bar}}">test</a>',
1191 }, {
1192 'a|web/test.html':
1193 '<!DOCTYPE html><html><head></head><body>'
1194 '<div hidden="">'
1195 '<img _src="foo/{{bar}}">'
1196 '<a _href="foo/{{bar}}">test</a>'
1197 '</div>'
1198 '</body></html>',
1199 });
1200
1201
1202 testLogOutput(
1203 (options) => new ImportInliner(options),
1204 'warnings are given about _* attributes', {
1205 'a|web/test.html':
1206 '<!DOCTYPE html><html><head></head><body>'
1207 '<img src="foo/{{bar}}">'
1208 '<a _href="foo/bar">test</a>'
1209 '</body></html>',
1210 }, {}, [
1211 'warning: When using bindings with the "src" attribute you may '
1212 'experience errors in certain browsers. Please use the "_src" '
1213 'attribute instead. (web/test.html 0 40)',
1214 'warning: The "_href" attribute is only supported when using '
1215 'bindings. Please change to the "href" attribute. '
1216 '(web/test.html 0 63)',
1217
1218 ]);
1219
1220 testPhases('arbitrary bindings can exist in paths', phases, {
1221 'a|web/test.html':
1222 '<!DOCTYPE html><html><head></head><body>'
1223 '<img src="./{{(bar[2] + baz[\'foo\']) * 14 / foobar() - 0.5}}.jpg">'
1224 '<img src="./[[bar[2]]].jpg">'
1225 '</body></html>',
1226 }, {
1227 'a|web/test.html':
1228 '<!DOCTYPE html><html><head></head><body>'
1229 '<img src="{{(bar[2] + baz[\'foo\']) * 14 / foobar() - 0.5}}.jpg">'
1230 '<img src="[[bar[2]]].jpg">'
1231 '</body></html>',
1232 });
1233
1234 testPhases('multiple bindings can exist in paths', phases, {
1235 'a|web/test.html':
1236 '<!DOCTYPE html><html><head></head><body>'
1237 '<img src="./{{bar[0]}}/{{baz[1]}}.{{extension}}">'
1238 '</body></html>',
1239 }, {
1240 'a|web/test.html':
1241 '<!DOCTYPE html><html><head></head><body>'
1242 '<img src="{{bar[0]}}/{{baz[1]}}.{{extension}}">'
1243 '</body></html>',
1244 });
1245 }
1246
1247 void entryPointTests() {
1248 testPhases('one level deep entry points normalize correctly', phases, {
1249 'a|web/test/test.html':
1250 '<!DOCTYPE html><html><head>'
1251 '<link rel="import" href="../../packages/a/foo/foo.html">'
1252 '</head></html>',
1253 'a|lib/foo/foo.html':
1254 '<script rel="import" href="../../../packages/b/bar/bar.js">'
1255 '</script>',
1256 'b|lib/bar/bar.js':
1257 'console.log("here");',
1258 }, {
1259 'a|web/test/test.html':
1260 '<!DOCTYPE html><html><head></head><body>'
1261 '<div hidden="">'
1262 '<script rel="import" href="../packages/b/bar/bar.js"></script>'
1263 '</div>'
1264 '</body></html>',
1265 });
1266
1267 testPhases('includes in entry points normalize correctly', phases, {
1268 'a|web/test/test.html':
1269 '<!DOCTYPE html><html><head>'
1270 '<script src="packages/a/foo/bar.js"></script>'
1271 '</head></html>',
1272 'a|lib/foo/bar.js':
1273 'console.log("here");',
1274 }, {
1275 'a|web/test/test.html':
1276 '<!DOCTYPE html><html><head>'
1277 '<script src="../packages/a/foo/bar.js"></script>'
1278 '</head><body>'
1279 '</body></html>',
1280 });
1281
1282 testPhases('two level deep entry points normalize correctly', phases, {
1283 'a|web/test/well/test.html':
1284 '<!DOCTYPE html><html><head>'
1285 '<link rel="import" href="../../../packages/a/foo/foo.html">'
1286 '</head></html>',
1287 'a|lib/foo/foo.html':
1288 '<script rel="import" href="../../../packages/b/bar/bar.js"></script>',
1289 'b|lib/bar/bar.js':
1290 'console.log("here");',
1291 }, {
1292 'a|web/test/well/test.html':
1293 '<!DOCTYPE html><html><head></head><body>'
1294 '<div hidden="">'
1295 '<script rel="import" href="../../packages/b/bar/bar.js"></script>'
1296 '</div>'
1297 '</body></html>',
1298 });
1299 }
OLDNEW
« no previous file with comments | « pkg/polymer/test/build/common.dart ('k') | pkg/polymer/test/build/index_page_builder_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698