diff options
Diffstat (limited to 'src/test/java/com/google/devtools/build/lib/cmdline/LabelTest.java')
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/cmdline/LabelTest.java | 41 |
1 files changed, 27 insertions, 14 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 be61b9472a..6f6d444a52 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 @@ -30,8 +30,6 @@ import org.junit.runners.JUnit4; @RunWith(JUnit4.class) public class LabelTest { - private static final String BAD_PACKAGE_CHARS = - "package names may contain A-Z, a-z, 0-9, or any of"; private static final String INVALID_TARGET_NAME = "invalid target name"; private static final String INVALID_PACKAGE_NAME = "invalid package name"; @@ -58,6 +56,18 @@ public class LabelTest { assertThat(l.getPackageName()).isEmpty(); assertThat(l.getName()).isEqualTo("foo"); } + { + Label l = Label.parseAbsolute("//@foo"); + assertThat(l.getPackageIdentifier().getRepository().getName()).isEqualTo("@"); + assertThat(l.getPackageName()).isEqualTo("@foo"); + assertThat(l.getName()).isEqualTo("@foo"); + } + { + Label l = Label.parseAbsolute("//xyz/@foo:abc"); + assertThat(l.getPackageIdentifier().getRepository().getName()).isEqualTo("@"); + assertThat(l.getPackageName()).isEqualTo("xyz/@foo"); + assertThat(l.getName()).isEqualTo("abc"); + } } private static String parseCommandLine(String label, String prefix) throws LabelSyntaxException { @@ -363,16 +373,6 @@ public class LabelTest { Label.parseAbsolute("//$( ):$( )"); } - /** - * Regression test: we previously expanded the set of characters which are considered label chars - * to include "@" (see test above). An unexpected side-effect is that "@D" in genrule(cmd) was - * considered to be a valid relative label! The fix is to forbid "@x" in package names. - */ - @Test - public void testAtVersionIsIllegal() throws Exception { - assertSyntaxError(BAD_PACKAGE_CHARS, "//foo/bar@123:baz"); - } - @Test public void testDoubleSlashPathSeparator() throws Exception { assertSyntaxError("package names may not contain '//' path separators", @@ -442,8 +442,21 @@ public class LabelTest { Label.parseAbsolute("foo//bar/baz:bat/boo"); fail(); } catch (LabelSyntaxException e) { - assertThat(e).hasMessage( - "invalid repository name 'foo': workspace names must start with '@'"); + assertThat(e) + .hasMessageThat() + .isEqualTo("invalid repository name 'foo': workspace names must start with '@'"); + } + } + + @Test + public void testInvalidRepoWithColon() throws Exception { + try { + Label.parseAbsolute("@foo:xyz"); + fail(); + } catch (LabelSyntaxException e) { + assertThat(e) + .hasMessageThat() + .containsMatch("invalid repository name '@foo:xyz': workspace names may contain only"); } } |