diff options
Diffstat (limited to 'src/test/java/com/google/devtools')
4 files changed, 37 insertions, 18 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"); } } diff --git a/src/test/java/com/google/devtools/build/lib/cmdline/LabelValidatorTest.java b/src/test/java/com/google/devtools/build/lib/cmdline/LabelValidatorTest.java index fcb187f268..3ec7d0146a 100644 --- a/src/test/java/com/google/devtools/build/lib/cmdline/LabelValidatorTest.java +++ b/src/test/java/com/google/devtools/build/lib/cmdline/LabelValidatorTest.java @@ -74,6 +74,7 @@ public class LabelValidatorTest { assertThat(LabelValidator.validatePackageName("foo=bar")).isNull(); assertThat(LabelValidator.validatePackageName("foo>bar")).isNull(); assertThat(LabelValidator.validatePackageName("foo?bar")).isNull(); + assertThat(LabelValidator.validatePackageName("foo@bar")).isNull(); assertThat(LabelValidator.validatePackageName("foo[bar")).isNull(); assertThat(LabelValidator.validatePackageName("foo]bar")).isNull(); assertThat(LabelValidator.validatePackageName("foo^bar")).isNull(); @@ -91,8 +92,6 @@ public class LabelValidatorTest { .isEqualTo("package names may not end with '/'"); assertThat(LabelValidator.validatePackageName("foo:bar")) .isEqualTo(LabelValidator.PACKAGE_NAME_ERROR); - assertThat(LabelValidator.validatePackageName("baz@12345")) - .isEqualTo(LabelValidator.PACKAGE_NAME_ERROR); assertThat(LabelValidator.validatePackageName("bar/../baz")) .isEqualTo(LabelValidator.PACKAGE_NAME_DOT_ERROR); @@ -171,6 +170,12 @@ public class LabelValidatorTest { .isEqualTo(new PackageAndTarget("f$( )oo", "b$() ar")); assertThat(LabelValidator.validateAbsoluteLabel("@//f$( )oo:b$() ar")) .isEqualTo(new PackageAndTarget("f$( )oo", "b$() ar")); + assertThat(LabelValidator.validateAbsoluteLabel("//f@oo")) + .isEqualTo(new PackageAndTarget("f@oo", "f@oo")); + assertThat(LabelValidator.validateAbsoluteLabel("//@foo")) + .isEqualTo(new PackageAndTarget("@foo", "@foo")); + assertThat(LabelValidator.validateAbsoluteLabel("//@foo:@bar")) + .isEqualTo(new PackageAndTarget("@foo", "@bar")); } @Test diff --git a/src/test/java/com/google/devtools/build/lib/cmdline/TargetPatternTest.java b/src/test/java/com/google/devtools/build/lib/cmdline/TargetPatternTest.java index e33d1f37c3..1506dfd0f3 100644 --- a/src/test/java/com/google/devtools/build/lib/cmdline/TargetPatternTest.java +++ b/src/test/java/com/google/devtools/build/lib/cmdline/TargetPatternTest.java @@ -50,7 +50,7 @@ public class TargetPatternTest { @Test public void testInvalidPatterns() throws TargetParsingException { try { - parse("Bar@java"); + parse("Bar\\java"); fail(); } catch (TargetParsingException expected) { } diff --git a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainTest.java b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainTest.java index 8cb1ba8fa2..8f0e8ecad7 100644 --- a/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainTest.java +++ b/src/test/java/com/google/devtools/build/lib/rules/cpp/CcToolchainTest.java @@ -499,7 +499,8 @@ public class CcToolchainTest extends BuildViewTestCase { @Test public void testInvalidIncludeDirectory() throws Exception { assertInvalidIncludeDirectoryMessage("%package(//a", "has an unrecognized %prefix%"); - assertInvalidIncludeDirectoryMessage("%package(//a@@a)%", "The package '//a@@a' is not valid"); + assertInvalidIncludeDirectoryMessage( + "%package(//a:@@a)%", "The package '//a:@@a' is not valid"); assertInvalidIncludeDirectoryMessage( "%package(//a)%foo", "The path in the package.*is not valid"); assertInvalidIncludeDirectoryMessage( |