Index: packages/web_components/test/build/import_crawler_test.dart |
diff --git a/packages/web_components/test/build/import_crawler_test.dart b/packages/web_components/test/build/import_crawler_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..50d6d808916de8a11905426c38103a6fd20a25d6 |
--- /dev/null |
+++ b/packages/web_components/test/build/import_crawler_test.dart |
@@ -0,0 +1,117 @@ |
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
+// for details. All rights reserved. Use of this source code is governed by a |
+// BSD-style license that can be found in the LICENSE file. |
+library web_components.test.build.import_crawler_test; |
+ |
+import 'dart:async'; |
+import 'package:barback/barback.dart'; |
+import 'package:code_transformers/tests.dart'; |
+import 'package:code_transformers/messages/build_logger.dart'; |
+import 'package:html/dom.dart' show Document; |
+import 'package:web_components/build/common.dart'; |
+import 'package:web_components/build/import_crawler.dart'; |
+import 'package:unittest/compact_vm_config.dart'; |
+ |
+class _TestTransformer extends Transformer { |
+ final String _entryPoint; |
+ Map<AssetId, ImportData> documents; |
+ final bool _preParseDocument; |
+ |
+ _TestTransformer(this._entryPoint, [this._preParseDocument = false]); |
+ |
+ isPrimary(AssetId id) => id.path == _entryPoint; |
+ |
+ apply(Transform transform) { |
+ var primaryInput = transform.primaryInput; |
+ var logger = new BuildLogger(transform, primaryId: primaryInput.id); |
+ if (_preParseDocument) { |
+ return primaryInput.readAsString().then((html) { |
+ var document = parseHtml(html, primaryInput.id.path); |
+ return crawlDocument(transform, logger, document); |
+ }); |
+ } else { |
+ return crawlDocument(transform, logger); |
+ } |
+ } |
+ |
+ Future crawlDocument(Transform transform, BuildLogger logger, |
+ [Document document]) { |
+ var primaryInput = transform.primaryInput; |
+ var crawler = new ImportCrawler(transform, primaryInput.id, logger, |
+ primaryDocument: document); |
+ return crawler.crawlImports().then((docs) { |
+ documents = docs; |
+ transform.addOutput(new Asset.fromString( |
+ new AssetId('a', 'web/result.txt'), '${documents.keys}')); |
+ }); |
+ } |
+} |
+ |
+main() { |
+ useCompactVMConfiguration(); |
+ runTests([[new _TestTransformer('web/index.html')]]); |
+ // Test with a preparsed original document as well. |
+ runTests([[new _TestTransformer('web/index.html', true)]]); |
+} |
+ |
+runTests(List<List<Transformer>> phases) { |
+ testPhases('basic', phases, { |
+ 'a|web/index.html': ''' |
+ <link rel="import" href="foo.html"> |
+ <link rel="import" href="packages/a/foo.html"> |
+ <link rel="import" href="packages/b/foo.html"> |
+ <link rel="import" href="packages/b/foo/bar.html"> |
+ <div>a|web/index.html</div> |
+ ''', |
+ 'a|web/foo.html': '<div>a|web/foo.html</div>', |
+ 'a|lib/foo.html': '<div>a|lib/foo.html</div>', |
+ 'b|lib/foo.html': ''' |
+ <link rel="import" href="foo/bar.html"> |
+ <div>b|lib/foo.html</div> |
+ ''', |
+ 'b|lib/foo/bar.html': '<div>b|lib/foo/bar.html</div>', |
+ }, { |
+ 'a|web/result.txt': ''' |
+ (a|web/foo.html, a|lib/foo.html, b|lib/foo/bar.html, b|lib/foo.html, a|web/index.html) |
+ ''', |
+ }, [], StringFormatter.noNewlinesOrSurroundingWhitespace); |
+ |
+ testPhases('cycle', phases, { |
+ 'a|web/index.html': ''' |
+ <link rel="import" href="packages/a/foo.html"> |
+ <div>a|web/index.html</div> |
+ ''', |
+ 'a|lib/foo.html': ''' |
+ <link rel="import" href="bar.html"> |
+ <div>a|lib/foo.html</div>''', |
+ 'a|lib/bar.html': ''' |
+ <link rel="import" href="foo.html"> |
+ <div>a|lib/bar.html</div>''', |
+ }, { |
+ 'a|web/result.txt': ''' |
+ (a|lib/bar.html, a|lib/foo.html, a|web/index.html) |
+ ''', |
+ }, [], StringFormatter.noNewlinesOrSurroundingWhitespace); |
+ |
+ testPhases('deep imports', phases, { |
+ 'a|web/index.html': ''' |
+ <link rel="import" href="packages/a/foo.html"> |
+ <div>a|web/index.html</div> |
+ ''', |
+ 'a|lib/foo.html': ''' |
+ <link rel="import" href="one/bar.html"> |
+ <div>a|lib/foo.html</div>''', |
+ 'a|lib/one/bar.html': ''' |
+ <link rel="import" href="two/baz.html"> |
+ <div>a|lib/one/bar.html</div>''', |
+ 'a|lib/one/two/baz.html': ''' |
+ <link rel="import" href="three/zap.html"> |
+ <div>a|lib/one/two/baz.html</div>''', |
+ 'a|lib/one/two/three/zap.html': ''' |
+ <div>a|lib/one/two/three/zap.html</div>''', |
+ }, { |
+ 'a|web/result.txt': |
+ '(a|lib/one/two/three/zap.html, a|lib/one/two/baz.html, ' |
+ 'a|lib/one/bar.html, a|lib/foo.html, a|web/index.html)', |
+ }, [], StringFormatter.noNewlinesOrSurroundingWhitespace); |
+} |