diff options
author | Kristina Chodorow <kchodorow@google.com> | 2016-01-28 14:38:31 +0000 |
---|---|---|
committer | Kristina Chodorow <kchodorow@google.com> | 2016-01-28 15:30:43 +0000 |
commit | b6fbab7115c1567705e7bddc7b79bdee6313fce3 (patch) | |
tree | 174281e412f825660fe186c95e67b7af863cfaf8 /src/test/java/com/google/devtools/build/lib/cmdline | |
parent | 6d44cab8167cfae55cd5a26940018efcbaa43154 (diff) |
Resolve repository-relative labels within the current repository
Using $(location //foo) from an external repository was resolving to @//foo, not
@repo//foo, which generally wouldn't be in the main repository. This may also
fix other cases where getRelative was resolving incorrectly.
Fixes #819.
--
MOS_MIGRATED_REVID=113256854
Diffstat (limited to 'src/test/java/com/google/devtools/build/lib/cmdline')
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/cmdline/LabelTest.java | 92 |
1 files changed, 79 insertions, 13 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/cmdline/LabelTest.java b/src/test/java/com/google/devtools/build/lib/cmdline/LabelTest.java index 1f3ce8b212..9837861a56 100644 --- a/src/test/java/com/google/devtools/build/lib/cmdline/LabelTest.java +++ b/src/test/java/com/google/devtools/build/lib/cmdline/LabelTest.java @@ -93,19 +93,24 @@ public class LabelTest { } @Test - public void testGetRelative() throws Exception { - Label base = Label - .parseAbsolute("//foo/bar:baz"); - { - Label l = base.getRelative("//p1/p2:target"); - assertEquals("p1/p2", l.getPackageName()); - assertEquals("target", l.getName()); - } - { - Label l = base.getRelative(":quux"); - assertEquals("foo/bar", l.getPackageName()); - assertEquals("quux", l.getName()); - } + public void testGetRelativeWithAbsoluteLabel() throws Exception { + Label base = Label.parseAbsolute("//foo/bar:baz"); + Label l = base.getRelative("//p1/p2:target"); + assertEquals("p1/p2", l.getPackageName()); + assertEquals("target", l.getName()); + } + + @Test + public void testGetRelativeWithRelativeLabel() throws Exception { + Label base = Label.parseAbsolute("//foo/bar:baz"); + Label l = base.getRelative(":quux"); + assertEquals("foo/bar", l.getPackageName()); + assertEquals("quux", l.getName()); + } + + @Test + public void testGetRelativeWithIllegalLabel() throws Exception { + Label base = Label.parseAbsolute("//foo/bar:baz"); try { base.getRelative("/p1/p2:target"); fail(); @@ -133,6 +138,67 @@ public class LabelTest { } @Test + public void testGetRelativeWithDifferentRepo() throws Exception { + PackageIdentifier packageId = PackageIdentifier.create("@repo", new PathFragment("foo")); + Label base = Label.create(packageId, "bar"); + + Label relative = base.getRelative("@remote//x:y"); + + assertEquals(RepositoryName.create("@remote"), relative.getPackageIdentifier().getRepository()); + assertEquals(new PathFragment("x"), relative.getPackageFragment()); + assertEquals("y", relative.getName()); + } + + @Test + public void testGetRelativeWithRepoLocalAbsoluteLabel() throws Exception { + PackageIdentifier packageId = PackageIdentifier.create("@repo", new PathFragment("foo")); + Label base = Label.create(packageId, "bar"); + + Label relative = base.getRelative("//x:y"); + + assertEquals(packageId.getRepository(), relative.getPackageIdentifier().getRepository()); + assertEquals(new PathFragment("x"), relative.getPackageFragment()); + assertEquals("y", relative.getName()); + } + + @Test + public void testGetRelativeWithLocalRepoRelativeLabel() throws Exception { + PackageIdentifier packageId = PackageIdentifier.create("@repo", new PathFragment("foo")); + Label base = Label.create(packageId, "bar"); + + Label relative = base.getRelative(":y"); + + assertEquals(packageId.getRepository(), relative.getPackageIdentifier().getRepository()); + assertEquals(new PathFragment("foo"), relative.getPackageFragment()); + assertEquals("y", relative.getName()); + } + + @Test + public void testGetRelativeWithRepoAndReservedPackage() throws Exception { + PackageIdentifier packageId = PackageIdentifier.create("@repo", new PathFragment("foo")); + Label base = Label.create(packageId, "bar"); + + Label relative = base.getRelative("//conditions:default"); + + PackageIdentifier expected = PackageIdentifier.createInDefaultRepo("conditions"); + assertEquals(expected.getRepository(), relative.getPackageIdentifier().getRepository()); + assertEquals(expected.getPackageFragment(), relative.getPackageFragment()); + assertEquals("default", relative.getName()); + } + + @Test + public void testGetRelativeWithRemoteRepoToDefaultRepo() throws Exception { + PackageIdentifier packageId = PackageIdentifier.create("@repo", new PathFragment("foo")); + Label base = Label.create(packageId, "bar"); + + Label relative = base.getRelative("@//x:y"); + + assertEquals(RepositoryName.create("@"), relative.getPackageIdentifier().getRepository()); + assertEquals(new PathFragment("x"), relative.getPackageFragment()); + assertEquals("y", relative.getName()); + } + + @Test public void testFactory() throws Exception { Label l = Label.create("foo/bar", "quux"); assertEquals("foo/bar", l.getPackageName()); |