fix relative @HtmlImport paths in deep folders in deployment mode
diff --git a/lib/build/html_import_annotation_recorder.dart b/lib/build/html_import_annotation_recorder.dart index 336ee7c..e517e33 100644 --- a/lib/build/html_import_annotation_recorder.dart +++ b/lib/build/html_import_annotation_recorder.dart
@@ -79,7 +79,7 @@ path.url.joinAll(segments.getRange(1, segments.length)), from: path.url.dirname(path.url.join(bootstrapId.path))); } else if (segments[1] == 'lib') { - libPath = path.url.joinAll(segments.getRange(1, segments.length)); + libPath = path.url.joinAll(segments.getRange(2, segments.length)); } else { logger.error('Unable to import `${element.source.uri.path}` from ' '${bootstrapId}.');
diff --git a/lib/src/normalize_path.dart b/lib/src/normalize_path.dart index bac6b8b..129dfe6 100644 --- a/lib/src/normalize_path.dart +++ b/lib/src/normalize_path.dart
@@ -13,16 +13,13 @@ } var dartFileDir = path.url.dirname(dartFilePath); - var segments = path.url.split(dartFileDir); - // The dartFileDir without the leading dir (web, lib, test, etc). - var dartFileSubDir = path.url.joinAll(segments.getRange(1, segments.length)); // Relative paths have no package supplied. if (dartFilePackage == null) { - return path.url.normalize(path.url.join(dartFileSubDir, filePath)); + return path.url.normalize(path.url.join(dartFileDir, filePath)); } // Only option left is a packages/ path. return path.url.normalize( - path.url.join('packages/', dartFilePackage, dartFileSubDir, filePath)); + path.url.join('packages/', dartFilePackage, dartFileDir, filePath)); }
diff --git a/test/foo/bar.dart b/test/foo/bar.dart new file mode 100644 index 0000000..6784550 --- /dev/null +++ b/test/foo/bar.dart
@@ -0,0 +1,7 @@ +// 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. +@HtmlImport('bar.html') +library web_components.test.foo.bar; + +import 'package:web_components/web_components.dart';
diff --git a/test/foo/bar.html b/test/foo/bar.html new file mode 100644 index 0000000..5716ca5 --- /dev/null +++ b/test/foo/bar.html
@@ -0,0 +1 @@ +bar
diff --git a/test/html_import_annotation_test.dart b/test/html_import_annotation_test.dart index cae624a..09a3ffd 100644 --- a/test/html_import_annotation_test.dart +++ b/test/html_import_annotation_test.dart
@@ -11,6 +11,7 @@ import 'package:unittest/html_config.dart'; import 'package:unittest/unittest.dart'; import 'package:web_components/html_import_annotation.dart'; +import 'foo/bar.dart'; const String importPath = 'my_import.html'; @@ -19,8 +20,14 @@ test('adds import to head', () { return init.run().then((_) { - var good = document.head.querySelector('link[href="$importPath"]'); - expect(good.import.body.text, 'Hello world!\n'); + var my_import = document.head.querySelector('link[href="$importPath"]'); + expect(my_import, isNotNull); + expect(my_import.import.body.text, 'Hello world!\n'); + + var bar = document.head.querySelector('link[href="foo/bar.html"]'); + expect(bar, isNotNull); + expect(bar.import.body.text, 'bar\n'); + var bad = document.head.querySelector('link[href="bad_import.html"]'); expect(bad.import, isNull); });