Fix a crash.
We were choking on URIs without path components. This doesn't come up
frequently for file: URIs, but it's common for http: URIs.
R=rnystrom@google.com
Review URL: https://codereview.chromium.org//2268153003 .
diff --git a/CHANGELOG.md b/CHANGELOG.md
index c280641..086a015 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 1.0.2
+
+* Don't crash on URIs without path components.
+
## 1.0.1
* Internal changes only.
diff --git a/lib/src/utils.dart b/lib/src/utils.dart
index 77de03d..e7c605c 100644
--- a/lib/src/utils.dart
+++ b/lib/src/utils.dart
@@ -77,6 +77,7 @@
///
/// If [uri] already ends in a slash, returns it as-is.
Uri ensureTrailingSlash(Uri uri) {
+ if (uri.pathSegments.isEmpty) return uri.replace(path: "/");
if (uri.pathSegments.last.isEmpty) return uri;
return uri.replace(pathSegments: uri.pathSegments.toList()..add(""));
}
diff --git a/pubspec.yaml b/pubspec.yaml
index de2c1bb..05454ee 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
name: package_resolver
-version: 1.0.1
+version: 1.0.2
description: First-class package resolution strategy classes.
author: Dart Team <misc@dartlang.org>
homepage: https://github.com/dart-lang/package_resolver
diff --git a/test/package_root_info_test.dart b/test/package_root_info_test.dart
index c0edba6..f05f20c 100644
--- a/test/package_root_info_test.dart
+++ b/test/package_root_info_test.dart
@@ -22,6 +22,12 @@
expect(resolver.packageRoot, equals(Uri.parse("file:///foo/bar/")));
});
+ test("with a URI without a path component", () {
+ var resolver =
+ new SyncPackageResolver.root(Uri.parse("http://localhost:1234"));
+ expect(resolver.packageRoot, equals(Uri.parse("http://localhost:1234/")));
+ });
+
test("with an invalid URI type", () {
expect(() => new SyncPackageResolver.root(12), throwsArgumentError);
});