From 934c1d5e1340bbae9bd7b61a9f3aa3029c7c2c1c Mon Sep 17 00:00:00 2001 From: Damien Martin-Guillerez Date: Fri, 3 Mar 2017 14:44:56 +0000 Subject: Allow ' ', '(', ')' and '$' in labels This just add the special characters in labels and fixes the associated tests, left is the hard part to test adding those characters everywhere. This is experimental and several characters will break at several location especial in the runfiles manifest file. Follow-ups: Resolve quoting then test, test more and add even more tests. Issue found during development: Parentheses are not accepted in exclude pattern in globs Building a binary includes build-runfiles that relies on the runfiles manifest format so the added test would fails with a java_binary instead of a library. -- Change-Id: I9c87273a90318b931c61bdb86f1066962819960a Reviewed-on: https://cr.bazel.build/9055 PiperOrigin-RevId: 149108027 MOS_MIGRATED_REVID=149108027 --- .../build/lib/cmdline/LabelValidatorTest.java | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) (limited to 'src/test/java/com/google/devtools/build/lib/cmdline/LabelValidatorTest.java') 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 fcf887a5e2..17e6ba5a12 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 @@ -53,17 +53,15 @@ public class LabelValidatorTest { assertNull(LabelValidator.validatePackageName("a/.b")); assertNull(LabelValidator.validatePackageName("a/b.")); assertNull(LabelValidator.validatePackageName("a/b..")); + assertNull(LabelValidator.validatePackageName("a$( )/b..")); // Bad: assertEquals( "package names may not start with '/'", LabelValidator.validatePackageName("/foo")); assertEquals("package names may not end with '/'", LabelValidator.validatePackageName("foo/")); - assertEquals(LabelValidator.PACKAGE_NAME_ERROR, LabelValidator.validatePackageName("bar baz")); assertEquals(LabelValidator.PACKAGE_NAME_ERROR, LabelValidator.validatePackageName("foo:bar")); assertEquals( LabelValidator.PACKAGE_NAME_ERROR, LabelValidator.validatePackageName("baz@12345")); - assertEquals(LabelValidator.PACKAGE_NAME_ERROR, LabelValidator.validatePackageName("baz(foo)")); - assertEquals(LabelValidator.PACKAGE_NAME_ERROR, LabelValidator.validatePackageName("bazfoo)")); assertEquals( LabelValidator.PACKAGE_NAME_DOT_ERROR, LabelValidator.validatePackageName("bar/../baz")); @@ -97,20 +95,12 @@ public class LabelValidatorTest { assertEquals("target names may not end with '/'", LabelValidator.validateTargetName("foo/")); - assertEquals("target names may not contain ' '", - LabelValidator.validateTargetName("bar baz")); assertEquals("target names may not contain ':'", LabelValidator.validateTargetName("bar:baz")); assertEquals("target names may not contain ':'", LabelValidator.validateTargetName("bar:")); assertEquals("target names may not contain '&'", LabelValidator.validateTargetName("bar&")); - assertEquals("target names may not contain '$'", - LabelValidator.validateTargetName("baz$a")); - assertEquals("target names may not contain '('", - LabelValidator.validateTargetName("baz(foo)")); - assertEquals("target names may not contain ')'", - LabelValidator.validateTargetName("bazfoo)")); } @Test @@ -122,6 +112,13 @@ public class LabelValidatorTest { LabelValidator.validateAbsoluteLabel("@repo//foo:bar")); assertEquals(new PackageAndTarget("foo", "bar"), LabelValidator.validateAbsoluteLabel("@//foo:bar")); + emptyPackage = new PackageAndTarget("", "b$() ar"); + assertEquals(emptyPackage, LabelValidator.validateAbsoluteLabel("//:b$() ar")); + assertEquals(emptyPackage, LabelValidator.validateAbsoluteLabel("@repo//:b$() ar")); + assertEquals(new PackageAndTarget("f$( )oo", "b$() ar"), + LabelValidator.validateAbsoluteLabel("@repo//f$( )oo:b$() ar")); + assertEquals(new PackageAndTarget("f$( )oo", "b$() ar"), + LabelValidator.validateAbsoluteLabel("@//f$( )oo:b$() ar")); } @Test -- cgit v1.2.3