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

Unified Diff: packages/web_components/test/build/import_crawler_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 side-by-side diff with in-line comments
Download patch
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);
+}

Powered by Google App Engine
This is Rietveld 408576698