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

Side by Side Diff: packages/web_components/test/build/import_inliner_test.dart

Issue 1400473008: Roll Observatory packages and add a roll script (Closed) Base URL: git@github.com:dart-lang/observatory_pub_packages.git@master
Patch Set: Created 5 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
OLDNEW
(Empty)
1 // Copyright (c) 2015, 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 library web_components.test.build.import_inliner_test;
5
6 import 'package:code_transformers/tests.dart';
7 import 'package:web_components/build/import_inliner.dart';
8 import 'package:web_components/build/messages.dart';
9 import 'package:unittest/compact_vm_config.dart';
10 import 'package:unittest/unittest.dart';
11
12 var transformer = new ImportInlinerTransformer(null, ['{{', '[[']);
13 var phases = [[transformer]];
14
15 main() {
16 useCompactVMConfiguration();
17
18 group('rel=import', importTests);
19 group('url attributes', urlAttributeTests);
20 group('deep entrypoints', entryPointTests);
21 }
22
23 void importTests() {
24 testPhases('no imports', phases, {
25 'a|web/index.html': '''
26 <!DOCTYPE html><html><head></head><body></body></html>''',
27 }, {
28 'a|web/index.html': '''
29 <!DOCTYPE html><html><head></head><body></body></html>''',
30 }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
31
32 testPhases('one import, removes dart script', phases, {
33 'a|web/index.html': '''
34 <!DOCTYPE html>
35 <html>
36 <head><link rel="import" href="packages/a/foo.html"></head>
37 <body></body>
38 </html>''',
39 'a|lib/foo.html': '''
40 <div>hello from foo!</div>
41 <script type="application/dart" src="foo.dart"></script>
42 ''',
43 }, {
44 'a|web/index.html': '''
45 <!DOCTYPE html>
46 <html>
47 <head></head>
48 <body>
49 <div hidden="">
50 <div>hello from foo!</div>
51 </div>
52 </body>
53 </html>''',
54 }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
55
56 testPhases('preserves order of scripts', phases, {
57 'a|web/index.html': '''
58 <!DOCTYPE html><html><head>
59 <script type="text/javascript">/*first*/</script>
60 <script src="second.js"></script>
61 <link rel="import" href="packages/a/foo.html">
62 <script>/*forth*/</script>
63 </head></html>''',
64 'a|lib/foo.html': '''
65 <!DOCTYPE html><html><head><script>/*third*/</script>
66 </head><body><polymer-element>2</polymer-element></html>''',
67 'a|web/second.js': '/*second*/'
68 }, {
69 'a|web/index.html': '''
70 <!DOCTYPE html><html><head>
71 <script type="text/javascript">/*first*/</script>
72 <script src="second.js"></script>
73 </head><body>
74 <div hidden="">
75 <script>/*third*/</script>
76 <polymer-element>2</polymer-element>
77 <script>/*forth*/</script>
78 </div>
79 </body></html>''',
80 }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
81
82 testPhases('preserves order of scripts, extract Dart scripts', phases, {
83 'a|web/index.html': '''
84 <!DOCTYPE html>
85 <html>
86 <head>
87 <script type="text/javascript">/*first*/</script>
88 <script src="second.js"></script>
89 <link rel="import" href="test2.html">
90 <script type="application/dart">/*fifth*/</script>
91 </head>
92 </html>''',
93 'a|web/test2.html': '''
94 <!DOCTYPE html>
95 <html>
96 <head>
97 <script>/*third*/</script>
98 <script type="application/dart">/*forth*/</script>
99 </head>
100 <body>
101 <polymer-element>2</polymer-element>
102 </body>
103 </html>''',
104 'a|web/second.js': '/*second*/'
105 }, {
106 'a|web/index.html': '''
107 <!DOCTYPE html>
108 <html>
109 <head>
110 <script type="text/javascript">/*first*/</script>
111 <script src="second.js"></script>
112 </head>
113 <body>
114 <div hidden="">
115 <script>/*third*/</script>
116 <polymer-element>2</polymer-element>
117 <script type="application/dart">/*fifth*/</script>
118 </div>
119 </body>
120 </html>''',
121 'a|web/test2.html': '''
122 <!DOCTYPE html>
123 <html>
124 <head>
125 <script>/*third*/</script>
126 <script type="application/dart">/*forth*/</script>
127 </head>
128 <body>
129 <polymer-element>2</polymer-element>
130 </body>
131 </html>''',
132 }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
133
134 testPhases('no transformation outside web/', phases, {
135 'a|lib/test.html': '''
136 <!DOCTYPE html><html><head>
137 <link rel="import" href="test2.html">
138 </head></html>''',
139 'a|lib/test2.html': '''
140 <!DOCTYPE html><html><head>
141 </head><body><polymer-element>2</polymer-element></html>''',
142 }, {
143 'a|lib/test.html': '''
144 <!DOCTYPE html><html><head>
145 <link rel="import" href="test2.html">
146 </head></html>''',
147 'a|lib/test2.html': '''
148 <!DOCTYPE html><html><head>
149 </head><body><polymer-element>2</polymer-element></html>''',
150 }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
151
152 testPhases('shallow, elements, many', phases, {
153 'a|web/test.html': '''
154 <!DOCTYPE html><html><head>
155 <link rel="import" href="test2.html">
156 <link rel="import" href="test3.html">
157 </head></html>''',
158 'a|web/test2.html': '''
159 <!DOCTYPE html><html><head>
160 </head><body><polymer-element>2</polymer-element></html>''',
161 'a|web/test3.html': '''
162 <!DOCTYPE html><html><head>
163 </head><body><polymer-element>3</polymer-element></html>''',
164 }, {
165 'a|web/test.html': '''
166 <!DOCTYPE html><html><head>
167 </head><body>
168 <div hidden="">
169 <polymer-element>2</polymer-element>
170 <polymer-element>3</polymer-element>
171 </div>
172 </body></html>''',
173 'a|web/test2.html': '''
174 <!DOCTYPE html><html><head>
175 </head><body><polymer-element>2</polymer-element></html>''',
176 'a|web/test3.html': '''
177 <!DOCTYPE html><html><head>
178 </head><body><polymer-element>3</polymer-element></html>''',
179 }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
180
181 testPhases('deep, elements, one per file', phases, {
182 'a|web/test.html': '''
183 <!DOCTYPE html><html><head>
184 <link rel="import" href="test2.html">
185 </head></html>''',
186 'a|web/test2.html': '''
187 <!DOCTYPE html><html><head>
188 <link rel="import" href="assets/b/test3.html">
189 </head><body><polymer-element>2</polymer-element></html>''',
190 'b|asset/test3.html': '''
191 <!DOCTYPE html><html><head>
192 <link rel="import" href="../../packages/c/test4.html">
193 </head><body><polymer-element>3</polymer-element></html>''',
194 'c|lib/test4.html': '''
195 <!DOCTYPE html><html><head>
196 </head><body><polymer-element>4</polymer-element></html>''',
197 }, {
198 'a|web/test.html': '''
199 <!DOCTYPE html><html><head>
200 </head><body>
201 <div hidden="">
202 <polymer-element>4</polymer-element>
203 <polymer-element>3</polymer-element>
204 <polymer-element>2</polymer-element>
205 </div>
206 </body></html>''',
207 'a|web/test2.html': '''
208 <!DOCTYPE html><html><head>
209 </head><body>
210 <div hidden="">
211 <polymer-element>4</polymer-element>
212 <polymer-element>3</polymer-element>
213 </div>
214 <polymer-element>2</polymer-element>
215 </body></html>''',
216 'b|asset/test3.html': '''
217 <!DOCTYPE html><html><head>
218 <link rel="import" href="../../packages/c/test4.html">
219 </head><body><polymer-element>3</polymer-element></html>''',
220 'c|lib/test4.html': '''
221 <!DOCTYPE html><html><head>
222 </head><body><polymer-element>4</polymer-element></html>''',
223 }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
224
225 testPhases('deep, elements, many imports', phases, {
226 'a|web/test.html': '''
227 <!DOCTYPE html><html><head>
228 <link rel="import" href="test2a.html">
229 <link rel="import" href="test2b.html">
230 </head></html>''',
231 'a|web/test2a.html': '''
232 <!DOCTYPE html><html><head>
233 <link rel="import" href="test3a.html">
234 <link rel="import" href="test3b.html">
235 </head><body><polymer-element>2a</polymer-element></body></html>''',
236 'a|web/test2b.html': '''
237 <!DOCTYPE html><html><head>
238 <link rel="import" href="test4a.html">
239 <link rel="import" href="test4b.html">
240 </head><body><polymer-element>2b</polymer-element></body></html>''',
241 'a|web/test3a.html': '''
242 <!DOCTYPE html><html><head>
243 </head><body><polymer-element>3a</polymer-element></body></html>''',
244 'a|web/test3b.html': '''
245 <!DOCTYPE html><html><head>
246 </head><body><polymer-element>3b</polymer-element></body></html>''',
247 'a|web/test4a.html': '''
248 <!DOCTYPE html><html><head>
249 </head><body><polymer-element>4a</polymer-element></body></html>''',
250 'a|web/test4b.html': '''
251 <!DOCTYPE html><html><head>
252 </head><body><polymer-element>4b</polymer-element></body></html>''',
253 }, {
254 'a|web/test.html': '''
255 <!DOCTYPE html><html><head>
256 </head><body>
257 <div hidden="">
258 <polymer-element>3a</polymer-element>
259 <polymer-element>3b</polymer-element>
260 <polymer-element>2a</polymer-element>
261 <polymer-element>4a</polymer-element>
262 <polymer-element>4b</polymer-element>
263 <polymer-element>2b</polymer-element>
264 </div>
265 </body></html>''',
266 'a|web/test2a.html': '''
267 <!DOCTYPE html><html><head>
268 </head><body>
269 <div hidden="">
270 <polymer-element>3a</polymer-element>
271 <polymer-element>3b</polymer-element>
272 </div>
273 <polymer-element>2a</polymer-element>
274 </body></html>''',
275 'a|web/test2b.html': '''
276 <!DOCTYPE html><html><head>
277 </head><body>
278 <div hidden="">
279 <polymer-element>4a</polymer-element>
280 <polymer-element>4b</polymer-element>
281 </div>
282 <polymer-element>2b</polymer-element>
283 </body></html>''',
284 'a|web/test3a.html': '''
285 <!DOCTYPE html><html><head>
286 </head><body>
287 <polymer-element>3a</polymer-element>
288 </body></html>''',
289 'a|web/test3b.html': '''
290 <!DOCTYPE html><html><head>
291 </head><body>
292 <polymer-element>3b</polymer-element>
293 </body></html>''',
294 'a|web/test4a.html': '''
295 <!DOCTYPE html><html><head>
296 </head><body>
297 <polymer-element>4a</polymer-element>
298 </body></html>''',
299 'a|web/test4b.html': '''
300 <!DOCTYPE html><html><head>
301 </head><body>
302 <polymer-element>4b</polymer-element>
303 </body></html>''',
304 }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
305
306 testPhases('imports cycle, 1-step lasso', phases, {
307 'a|web/test.html': '''
308 <!DOCTYPE html><html><head>
309 <link rel="import" href="test_1.html">
310 </head></html>''',
311 'a|web/test_1.html': '''
312 <!DOCTYPE html><html><head>
313 <link rel="import" href="test_2.html">
314 </head><body><polymer-element>1</polymer-element></html>''',
315 'a|web/test_2.html': '''
316 <!DOCTYPE html><html><head>
317 <link rel="import" href="test_1.html">
318 </head><body><polymer-element>2</polymer-element></html>''',
319 }, {
320 'a|web/test.html': '''
321 <!DOCTYPE html><html><head>
322 </head><body>
323 <div hidden="">
324 <polymer-element>2</polymer-element>
325 <polymer-element>1</polymer-element>
326 </div>
327 </body></html>''',
328 'a|web/test_1.html': '''
329 <!DOCTYPE html><html><head>
330 </head><body>
331 <div hidden="">
332 <polymer-element>2</polymer-element>
333 </div>
334 <polymer-element>1</polymer-element></body></html>''',
335 'a|web/test_2.html': '''
336 <!DOCTYPE html><html><head>
337 </head><body>
338 <div hidden="">
339 <polymer-element>1</polymer-element>
340 </div>
341 <polymer-element>2</polymer-element></body></html>''',
342 }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
343
344 testPhases('imports cycle, 1-step lasso, scripts too', phases, {
345 'a|web/test.html': '''
346 <!DOCTYPE html><html><head>
347 <link rel="import" href="test_1.html">
348 </head></html>''',
349 'a|web/test_1.html': '''
350 <!DOCTYPE html><html><head>
351 <link rel="import" href="test_2.html">
352 </head><body><polymer-element>1</polymer-element>
353 <script src="s1"></script></html>''',
354 'a|web/test_2.html': '''
355 <!DOCTYPE html><html><head>
356 <link rel="import" href="test_1.html">
357 </head><body><polymer-element>2</polymer-element>
358 <script src="s2"></script></html>''',
359 }, {
360 'a|web/test.html': '''
361 <!DOCTYPE html><html><head>
362 </head><body>
363 <div hidden="">
364 <polymer-element>2</polymer-element>
365 <script src="s2"></script>
366 <polymer-element>1</polymer-element>
367 <script src="s1"></script>
368 </div>
369 </body></html>''',
370 'a|web/test_1.html': '''
371 <!DOCTYPE html><html><head>
372 </head><body>
373 <div hidden="">
374 <polymer-element>2</polymer-element>
375 <script src="s2"></script>
376 </div>
377 <polymer-element>1</polymer-element>
378 <script src="s1"></script></body></html>''',
379 'a|web/test_2.html': '''
380 <!DOCTYPE html><html><head>
381 </head><body>
382 <div hidden="">
383 <polymer-element>1</polymer-element>
384 <script src="s1"></script>
385 </div>
386 <polymer-element>2</polymer-element>
387 <script src="s2"></script></body></html>''',
388 }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
389
390 testPhases('imports cycle, 1-step lasso, Dart scripts too', phases, {
391 'a|web/test.html': '''
392 <!DOCTYPE html><html><head>
393 <link rel="import" href="test_1.html">
394 </head></html>''',
395 'a|web/test_1.html': '''
396 <!DOCTYPE html><html><head>
397 <link rel="import" href="test_2.html">
398 </head><body><polymer-element>1</polymer-element>
399 <script type="application/dart" src="s1.dart"></script>
400 </html>''',
401 'a|web/test_2.html': '''
402 <!DOCTYPE html><html><head>
403 <link rel="import" href="test_1.html">
404 </head><body><polymer-element>2
405 <script type="application/dart" src="s2.dart"></script>
406 </polymer-element>
407 </html>''',
408 'a|web/s1.dart': '',
409 'a|web/s2.dart': '',
410 }, {
411 'a|web/test.html': '''
412 <!DOCTYPE html><html><head>
413 </head><body>
414 <div hidden="">
415 <polymer-element>2</polymer-element>
416 <polymer-element>1</polymer-element>
417 </div>
418 </body></html>''',
419 'a|web/test_1.html': '''
420 <!DOCTYPE html><html><head>
421 </head><body>
422 <div hidden="">
423 <polymer-element>2</polymer-element>
424 </div>
425 <polymer-element>1</polymer-element>
426 <script type="application/dart" src="s1.dart"></script>
427 </body></html>''',
428 'a|web/test_2.html': '''
429 <!DOCTYPE html><html><head>
430 </head><body>
431 <div hidden="">
432 <polymer-element>1</polymer-element>
433 </div>
434 <polymer-element>2
435 <script type="application/dart" src="s2.dart"></script>
436 </polymer-element>
437 </body></html>''',
438 }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
439
440 testPhases('imports with Dart script after JS script', phases, {
441 'a|web/test.html': '''
442 <!DOCTYPE html><html><head>
443 <link rel="import" href="test_1.html">
444 </head></html>''',
445 'a|web/test_1.html': '''
446 <!DOCTYPE html><html><head>
447 <link rel="import" href="test_1.html">
448 </head><body>
449 <foo>42</foo><bar-baz></bar-baz>
450 <polymer-element>1'
451 <script src="s1.js"></script>
452 <script type="application/dart" src="s1.dart"></script>
453 </polymer-element>
454 'FOO'</body></html>''',
455 'a|web/s1.dart': '',
456 }, {
457 'a|web/test.html': '''
458 <!DOCTYPE html><html><head>
459 </head><body>
460 <div hidden="">
461 <foo>42</foo><bar-baz></bar-baz>
462 <polymer-element>1'
463 <script src="s1.js"></script>
464 </polymer-element>
465 'FOO'
466 </div>
467 </body></html>''',
468 'a|web/test_1.html': '''
469 <!DOCTYPE html><html><head>
470 </head><body>
471 <foo>42</foo><bar-baz></bar-baz>
472 <polymer-element>1'
473 <script src="s1.js"></script>
474 <script type="application/dart" src="s1.dart"></script>
475 </polymer-element>
476 'FOO'</body></html>''',
477 }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
478
479 testPhases('imports cycle, 2-step lasso', phases, {
480 'a|web/test.html': '''
481 <!DOCTYPE html><html><head>
482 <link rel="import" href="test_1.html">
483 </head></html>''',
484 'a|web/test_1.html': '''
485 <!DOCTYPE html><html><head>
486 <link rel="import" href="test_2.html">
487 </head><body><polymer-element>1</polymer-element></html>''',
488 'a|web/test_2.html': '''
489 <!DOCTYPE html><html><head>
490 <link rel="import" href="test_3.html">
491 </head><body><polymer-element>2</polymer-element></html>''',
492 'a|web/test_3.html': '''
493 <!DOCTYPE html><html><head>
494 <link rel="import" href="test_1.html">
495 </head><body><polymer-element>3</polymer-element></html>''',
496 }, {
497 'a|web/test.html': '''
498 <!DOCTYPE html><html><head>
499 </head><body>
500 <div hidden="">
501 <polymer-element>3</polymer-element>
502 <polymer-element>2</polymer-element>
503 <polymer-element>1</polymer-element>
504 </div>
505 </body></html>''',
506 'a|web/test_1.html': '''
507 <!DOCTYPE html><html><head>
508 </head><body>
509 <div hidden="">
510 <polymer-element>3</polymer-element>
511 <polymer-element>2</polymer-element>
512 </div>
513 <polymer-element>1</polymer-element></body></html>''',
514 'a|web/test_2.html': '''
515 <!DOCTYPE html><html><head>
516 </head><body>
517 <div hidden="">
518 <polymer-element>1</polymer-element>
519 <polymer-element>3</polymer-element>
520 </div>
521 <polymer-element>2</polymer-element></body></html>''',
522 'a|web/test_3.html': '''
523 <!DOCTYPE html><html><head>
524 </head><body>
525 <div hidden="">
526 <polymer-element>2</polymer-element>
527 <polymer-element>1</polymer-element>
528 </div>
529 <polymer-element>3</polymer-element></body></html>''',
530 }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
531
532 testPhases('imports cycle, self cycle', phases, {
533 'a|web/test.html': '''
534 <!DOCTYPE html><html><head>
535 <link rel="import" href="test_1.html">
536 </head></html>''',
537 'a|web/test_1.html': '''
538 <!DOCTYPE html><html><head>
539 <link rel="import" href="test_1.html">
540 </head><body><polymer-element>1</polymer-element></html>''',
541 }, {
542 'a|web/test.html': '''
543 <!DOCTYPE html><html><head>
544 </head><body>
545 <div hidden="">
546 <polymer-element>1</polymer-element>
547 </div>
548 </body></html>''',
549 'a|web/test_1.html': '''
550 <!DOCTYPE html><html><head>
551 </head><body>
552 <polymer-element>1</polymer-element></body></html>''',
553 }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
554
555 testPhases('imports DAG', phases, {
556 'a|web/test.html': '''
557 <!DOCTYPE html><html><head>
558 <link rel="import" href="test_1.html">
559 <link rel="import" href="test_2.html">
560 </head></html>''',
561 'a|web/test_1.html': '''
562 <!DOCTYPE html><html><head>
563 <link rel="import" href="test_3.html">
564 </head><body><polymer-element>1</polymer-element></body></html>''',
565 'a|web/test_2.html': '''
566 <!DOCTYPE html><html><head>
567 <link rel="import" href="test_3.html">
568 </head><body><polymer-element>2</polymer-element></body></html>''',
569 'a|web/test_3.html': '''
570 <!DOCTYPE html><html><head>
571 </head><body><polymer-element>3</polymer-element></body></html>''',
572 }, {
573 'a|web/test.html': '''
574 <!DOCTYPE html><html><head>
575 </head><body>
576 <div hidden="">
577 <polymer-element>3</polymer-element>
578 <polymer-element>1</polymer-element>
579 <polymer-element>2</polymer-element>
580 </div>
581 </body></html>''',
582 'a|web/test_1.html': '''
583 <!DOCTYPE html><html><head>
584 </head><body>
585 <div hidden="">
586 <polymer-element>3</polymer-element>
587 </div>
588 <polymer-element>1</polymer-element></body></html>''',
589 'a|web/test_2.html': '''
590 <!DOCTYPE html><html><head>
591 </head><body>
592 <div hidden="">
593 <polymer-element>3</polymer-element>
594 </div>
595 <polymer-element>2</polymer-element></body></html>''',
596 'a|web/test_3.html': '''
597 <!DOCTYPE html><html><head>
598 </head><body>
599 <polymer-element>3</polymer-element></body></html>''',
600 }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
601
602 testPhases('missing html imports throw errors', phases, {
603 'a|web/test.html': '''
604 <!DOCTYPE html><html><head>
605 <link rel="import" href="foo.html">
606 </head></html>''',
607 }, {}, [
608 'warning: ${inlineImportFail.create({
609 'error': 'Could not find asset a|web/foo.html.'
610 }).snippet} '
611 '(web/test.html 1 8)',
612 ], StringFormatter.noNewlinesOrSurroundingWhitespace);
613
614 testPhases('absolute uri', phases, {
615 'a|web/test.html': '''
616 <!DOCTYPE html><html><head>
617 <link rel="stylesheet" href="/foo.css">
618 </head></html>''',
619 'a|web/test2.html': '''
620 <!DOCTYPE html><html><head>
621 <link rel="stylesheet" href="http://example.com/bar.css">
622 </head></html>''',
623 }, {
624 'a|web/test.html': '''
625 <!DOCTYPE html><html><head>
626 <link rel="stylesheet" href="/foo.css">
627 </head></html>''',
628 'a|web/test2.html': '''
629 <!DOCTYPE html><html><head>
630 <link rel="stylesheet" href="http://example.com/bar.css">
631 </head></html>''',
632 }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
633 }
634
635 void urlAttributeTests() {
636 testPhases('url attributes are normalized', phases, {
637 'a|web/test.html': '''
638 <!DOCTYPE html><html><head>
639 <link rel="import" href="foo/test_1.html">
640 <link rel="import" href="foo/test_2.html">
641 </head></html>''',
642 'a|web/foo/test_1.html': '''
643 <script src="baz.jpg"></script>''',
644 'a|web/foo/test_2.html': '''
645 <foo-element src="baz.jpg"></foo-element>''',
646 }, {
647 'a|web/test.html': '''
648 <!DOCTYPE html><html><head></head><body>
649 <div hidden="">
650 <script src="foo/baz.jpg"></script>
651 <foo-element src="baz.jpg"></foo-element>
652 </div>
653 </body></html>''',
654 'a|web/foo/test_1.html': '''
655 <script src="baz.jpg"></script>''',
656 'a|web/foo/test_2.html': '''
657 <foo-element src="baz.jpg"></foo-element>''',
658 }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
659
660 testPhases('paths with an invalid prefix are not normalized', phases, {
661 'a|web/test.html': '''
662 <!DOCTYPE html><html><head>
663 <link rel="import" href="packages/a/test.html">
664 </head></html>''',
665 'a|lib/test.html': '''
666 <img src="[[bar]]">''',
667 }, {
668 'a|web/test.html': '''
669 <!DOCTYPE html><html><head></head><body>
670 <div hidden="">
671 <img src="[[bar]]">
672 </div>
673 </body></html>''',
674 }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
675
676 testPhases('relative paths followed by invalid characters are normalized',
677 phases, {
678 'a|web/test.html': '''
679 <!DOCTYPE html><html><head>
680 <link rel="import" href="foo/test.html">
681 </head></html>''',
682 'a|web/foo/test.html': '''
683 <img src="baz/{{bar}}">
684 <img src="./{{bar}}">''',
685 }, {
686 'a|web/test.html': '''
687 <!DOCTYPE html><html><head></head><body>
688 <div hidden="">
689 <img src="foo/baz/{{bar}}">
690 <img src="foo/{{bar}}">
691 </div>
692 </body></html>''',
693 }, null, StringFormatter.noNewlinesOrSurroundingWhitespace);
694
695 testPhases('relative paths in _* attributes are normalized', phases, {
696 'a|web/test.html': '''
697 <!DOCTYPE html><html><head>
698 <link rel="import" href="foo/test.html">
699 </head></html>''',
700 'a|web/foo/test.html': '''
701 <img _src="./{{bar}}">
702 <a _href="./{{bar}}">test</a>''',
703 }, {
704 'a|web/test.html': '''
705 <!DOCTYPE html><html><head></head><body>
706 <div hidden="">
707 <img _src="foo/{{bar}}">
708 <a _href="foo/{{bar}}">test</a>
709 </div>
710 </body></html>''',
711 }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
712
713 testPhases('paths starting with a binding are treated as absolute', phases, {
714 'a|web/test.html': '''
715 <!DOCTYPE html><html><head>
716 <link rel="import" href="packages/a/foo.html">
717 </head></html>''',
718 'a|lib/foo.html': '''
719 <img _src="{{bar}}">
720 <img _src="[[bar]]">''',
721 }, {
722 'a|web/test.html': '''
723 <!DOCTYPE html><html><head></head><body>
724 <div hidden="">
725 <img _src="{{bar}}">
726 <img _src="[[bar]]">
727 </div>
728 </body></html>''',
729 }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
730
731 testPhases('arbitrary bindings can exist in paths', phases, {
732 'a|web/test.html': '''
733 <!DOCTYPE html><html><head></head><body>
734 <img src="./{{(bar[2] + baz[\'foo\']) * 14 / foobar() - 0.5}}.jpg">
735 <img src="./[[bar[2]]].jpg">
736 </body></html>''',
737 }, {
738 'a|web/test.html': '''
739 <!DOCTYPE html><html><head></head><body>
740 <img src="{{(bar[2] + baz[\'foo\']) * 14 / foobar() - 0.5}}.jpg">
741 <img src="[[bar[2]]].jpg">
742 </body></html>''',
743 }, null, StringFormatter.noNewlinesOrSurroundingWhitespace);
744
745 testPhases('multiple bindings can exist in paths', phases, {
746 'a|web/test.html': '''
747 <!DOCTYPE html><html><head></head><body>
748 <img src="./{{bar[0]}}/{{baz[1]}}.{{extension}}">
749 </body></html>''',
750 }, {
751 'a|web/test.html': '''
752 <!DOCTYPE html><html><head></head><body>
753 <img src="{{bar[0]}}/{{baz[1]}}.{{extension}}">
754 </body></html>''',
755 }, null, StringFormatter.noNewlinesOrSurroundingWhitespace);
756
757 testPhases('relative paths in deep imports', phases, {
758 'a|web/test.html': '''
759 <!DOCTYPE html><html><head>
760 <link rel="import" href="foo/foo.html">
761 </head></html>''',
762 'a|web/foo/foo.html': '''
763 <link rel="import" href="bar.html">''',
764 'a|web/foo/bar.html': '''
765 <style rel="stylesheet" href="baz.css"></style>
766 <style rel="stylesheet" href="../css/zap.css"></style>''',
767 'a|web/foo/baz.css': '',
768 'a|web/css/zap.css': '',
769 }, {
770 'a|web/test.html': '''
771 <!DOCTYPE html><html><head></head><body>
772 <div hidden="">
773 <style rel="stylesheet" href="foo/baz.css"></style>
774 <style rel="stylesheet" href="css/zap.css"></style>
775 </div>
776 </body></html>''',
777 }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
778 }
779
780 void entryPointTests() {
781 testPhases('one level deep entry points normalize correctly', phases, {
782 'a|web/test/test.html': '''
783 <!DOCTYPE html><html><head>
784 <link rel="import" href="../../packages/a/foo/foo.html">
785 </head></html>''',
786 'a|lib/foo/foo.html': '''
787 <script rel="import" href="../../../packages/b/bar/bar.js">
788 </script>''',
789 'b|lib/bar/bar.js': '''
790 console.log("here");''',
791 }, {
792 'a|web/test/test.html': '''
793 <!DOCTYPE html><html><head></head><body>
794 <div hidden="">
795 <script rel="import" href="../packages/b/bar/bar.js"></script>
796 </div>
797 </body></html>''',
798 }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
799
800 testPhases('includes in entry points normalize correctly', phases, {
801 'a|web/test/test.html': '''
802 <!DOCTYPE html><html><head>
803 <script src="packages/a/foo/bar.js"></script>
804 </head></html>''',
805 'a|lib/foo/bar.js': '''
806 console.log("here");''',
807 }, {
808 'a|web/test/test.html': '''
809 <!DOCTYPE html><html><head>
810 <script src="../packages/a/foo/bar.js"></script>
811 </head><body>
812 </body></html>''',
813 }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
814
815 testPhases('two level deep entry points normalize correctly', phases, {
816 'a|web/test/well/test.html': '''
817 <!DOCTYPE html><html><head>
818 <link rel="import" href="../../../packages/a/foo/foo.html">
819 </head></html>''',
820 'a|lib/foo/foo.html': '''
821 <script rel="import" href="../../../packages/b/bar/bar.js"></script>''',
822 'b|lib/bar/bar.js': '''
823 console.log("here");''',
824 }, {
825 'a|web/test/well/test.html': '''
826 <!DOCTYPE html><html><head></head><body>
827 <div hidden="">
828 <script rel="import" href="../../packages/b/bar/bar.js"></script>
829 </div>
830 </body></html>''',
831 }, [], StringFormatter.noNewlinesOrSurroundingWhitespace);
832 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698