| Index: test/test_packagemap.dart
 | 
| diff --git a/test/test_packagemap.dart b/test/test_packagemap.dart
 | 
| deleted file mode 100644
 | 
| index bce20d4b82647776c2dfab2a0b5ee46a956ac0c2..0000000000000000000000000000000000000000
 | 
| --- a/test/test_packagemap.dart
 | 
| +++ /dev/null
 | 
| @@ -1,149 +0,0 @@
 | 
| -// 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 test_all;
 | 
| -
 | 
| -import "package:package_config/packagemap.dart";
 | 
| -import "package:test/test.dart";
 | 
| -
 | 
| -main() {
 | 
| -  var base = Uri.parse("file:///one/two/three/packages.map");
 | 
| -  test("empty", () {
 | 
| -    var packages = Packages.parse(emptySample, base);
 | 
| -    expect(packages.packageMapping, isEmpty);
 | 
| -  });
 | 
| -  test("comment only", () {
 | 
| -    var packages = Packages.parse(commentOnlySample, base);
 | 
| -    expect(packages.packageMapping, isEmpty);
 | 
| -  });
 | 
| -  test("empty lines only", () {
 | 
| -    var packages = Packages.parse(emptyLinesSample, base);
 | 
| -    expect(packages.packageMapping, isEmpty);
 | 
| -  });
 | 
| -
 | 
| -  test("empty lines only", () {
 | 
| -    var packages = Packages.parse(emptyLinesSample, base);
 | 
| -    expect(packages.packageMapping, isEmpty);
 | 
| -  });
 | 
| -
 | 
| -  test("single", () {
 | 
| -    var packages = Packages.parse(singleRelativeSample, base);
 | 
| -    expect(packages.packageMapping.keys.toList(), equals(["foo"]));
 | 
| -    expect(packages.resolve(Uri.parse("package:foo/bar/baz.dart")),
 | 
| -        equals(base.resolve("../test/").resolve("bar/baz.dart")));
 | 
| -  });
 | 
| -
 | 
| -  test("single no slash", () {
 | 
| -    var packages = Packages.parse(singleRelativeSampleNoSlash, base);
 | 
| -    expect(packages.packageMapping.keys.toList(), equals(["foo"]));
 | 
| -    expect(packages.resolve(Uri.parse("package:foo/bar/baz.dart")),
 | 
| -        equals(base.resolve("../test/").resolve("bar/baz.dart")));
 | 
| -  });
 | 
| -
 | 
| -  test("single no newline", () {
 | 
| -    var packages = Packages.parse(singleRelativeSampleNoNewline, base);
 | 
| -    expect(packages.packageMapping.keys.toList(), equals(["foo"]));
 | 
| -    expect(packages.resolve(Uri.parse("package:foo/bar/baz.dart")),
 | 
| -        equals(base.resolve("../test/").resolve("bar/baz.dart")));
 | 
| -  });
 | 
| -
 | 
| -  test("single absolute", () {
 | 
| -    var packages = Packages.parse(singleAbsoluteSample, base);
 | 
| -    expect(packages.packageMapping.keys.toList(), equals(["foo"]));
 | 
| -    expect(packages.resolve(Uri.parse("package:foo/bar/baz.dart")),
 | 
| -        equals(Uri.parse("http://example.com/some/where/bar/baz.dart")));
 | 
| -  });
 | 
| -
 | 
| -  test("multiple", () {
 | 
| -    var packages = Packages.parse(multiRelativeSample, base);
 | 
| -    expect(
 | 
| -        packages.packageMapping.keys.toList()..sort(), equals(["bar", "foo"]));
 | 
| -    expect(packages.resolve(Uri.parse("package:foo/bar/baz.dart")),
 | 
| -        equals(base.resolve("../test/").resolve("bar/baz.dart")));
 | 
| -    expect(packages.resolve(Uri.parse("package:bar/foo/baz.dart")),
 | 
| -        equals(base.resolve("../test2/").resolve("foo/baz.dart")));
 | 
| -  });
 | 
| -
 | 
| -  test("dot-dot 1", () {
 | 
| -    var packages = Packages.parse(singleRelativeSample, base);
 | 
| -    expect(packages.packageMapping.keys.toList(), equals(["foo"]));
 | 
| -    expect(packages.resolve(Uri.parse("package:foo/qux/../bar/baz.dart")),
 | 
| -        equals(base.resolve("../test/").resolve("bar/baz.dart")));
 | 
| -  });
 | 
| -
 | 
| -  test("dot-dot 2", () {
 | 
| -    var packages = Packages.parse(singleRelativeSample, base);
 | 
| -    expect(packages.packageMapping.keys.toList(), equals(["foo"]));
 | 
| -    expect(packages.resolve(Uri.parse("package:qux/../foo/bar/baz.dart")),
 | 
| -        equals(base.resolve("../test/").resolve("bar/baz.dart")));
 | 
| -  });
 | 
| -
 | 
| -  test("all valid chars", () {
 | 
| -    var packages = Packages.parse(allValidCharsSample, base);
 | 
| -    expect(packages.packageMapping.keys.toList(), equals([allValidChars]));
 | 
| -    expect(packages.resolve(Uri.parse("package:$allValidChars/bar/baz.dart")),
 | 
| -        equals(base.resolve("../test/").resolve("bar/baz.dart")));
 | 
| -  });
 | 
| -
 | 
| -  test("no escapes", () {
 | 
| -    expect(() => Packages.parse("x%41x=x", base), throws);
 | 
| -  });
 | 
| -
 | 
| -  test("not identifiers", () {
 | 
| -    expect(() => Packages.parse("1x=x", base), throws);
 | 
| -    expect(() => Packages.parse(" x=x", base), throws);
 | 
| -    expect(() => Packages.parse("\\x41x=x", base), throws);
 | 
| -    expect(() => Packages.parse("x@x=x", base), throws);
 | 
| -    expect(() => Packages.parse("x[x=x", base), throws);
 | 
| -    expect(() => Packages.parse("x`x=x", base), throws);
 | 
| -    expect(() => Packages.parse("x{x=x", base), throws);
 | 
| -    expect(() => Packages.parse("x/x=x", base), throws);
 | 
| -    expect(() => Packages.parse("x:x=x", base), throws);
 | 
| -  });
 | 
| -
 | 
| -  test("same name twice", () {
 | 
| -    expect(() => Packages.parse(singleRelativeSample * 2, base), throws);
 | 
| -  });
 | 
| -
 | 
| -  for (String invalidSample in invalid) {
 | 
| -    test("invalid '$invalidSample'", () {
 | 
| -      var result;
 | 
| -      try {
 | 
| -        result = Packages.parse(invalidSample, base);
 | 
| -      } on FormatException {
 | 
| -        // expected
 | 
| -        return;
 | 
| -      }
 | 
| -      fail("Resolved to $result");
 | 
| -    });
 | 
| -  }
 | 
| -}
 | 
| -
 | 
| -// Valid samples.
 | 
| -var emptySample = "";
 | 
| -var commentOnlySample = "# comment only\n";
 | 
| -var emptyLinesSample = "\n\n\r\n";
 | 
| -var singleRelativeSample = "foo=../test/\n";
 | 
| -var singleRelativeSampleNoSlash = "foo=../test\n";
 | 
| -var singleRelativeSampleNoNewline = "foo=../test/";
 | 
| -var singleAbsoluteSample = "foo=http://example.com/some/where/\n";
 | 
| -var multiRelativeSample = "foo=../test/\nbar=../test2/\n";
 | 
| -// All valid path segment characters in an URI.
 | 
| -var allValidChars =
 | 
| -    r"$0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz";
 | 
| -var allValidCharsSample = "${allValidChars.replaceAll('=', '%3D')}=../test/\n";
 | 
| -var allUnreservedChars =
 | 
| -    "-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~";
 | 
| -
 | 
| -// Invalid samples.
 | 
| -var invalid = [
 | 
| -  "foobar:baz.dart", // no equals
 | 
| -  ".=../test/", // dot segment
 | 
| -  "..=../test/", // dot-dot segment
 | 
| -  "foo/bar=../test/", //
 | 
| -  "/foo=../test/", // var multiSegmentSample
 | 
| -  "?=../test/", // invalid characters in path segment.
 | 
| -  "[=../test/", // invalid characters in path segment.
 | 
| -  "x#=../test/", // invalid characters in path segment.
 | 
| -];
 | 
| 
 |