aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools/build/lib/cmdline
diff options
context:
space:
mode:
authorGravatar Kristina Chodorow <kchodorow@google.com>2016-01-28 14:38:31 +0000
committerGravatar Kristina Chodorow <kchodorow@google.com>2016-01-28 15:30:43 +0000
commitb6fbab7115c1567705e7bddc7b79bdee6313fce3 (patch)
tree174281e412f825660fe186c95e67b7af863cfaf8 /src/test/java/com/google/devtools/build/lib/cmdline
parent6d44cab8167cfae55cd5a26940018efcbaa43154 (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.java92
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());