diff options
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/syntax/MethodLibrary.java | 24 | ||||
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/syntax/MethodLibraryTest.java | 11 |
2 files changed, 34 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/MethodLibrary.java b/src/main/java/com/google/devtools/build/lib/syntax/MethodLibrary.java index ef958d356f..996ae41bbe 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/MethodLibrary.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/MethodLibrary.java @@ -541,6 +541,28 @@ public class MethodLibrary { } }; + @SkylarkSignature(name = "isalpha", objectType = StringModule.class, returnType = Boolean.class, + doc = "Returns True if all characters in the string are alphabetic ([a-zA-Z]) and it " + + "contains at least one character.", + mandatoryPositionals = { + @Param(name = "self", type = String.class, doc = "This string.")}) + private static BuiltinFunction isalpha = new BuiltinFunction("isalpha") { + public Boolean invoke(String self) throws EvalException { + int length = self.length(); + if (length < 1) { + return false; + } + for (int index = 0; index < length; index++) { + char character = self.charAt(index); + if (!((character >= 'A' && character <= 'Z') + || (character >= 'a' && character <= 'z'))) { + return false; + } + } + return true; + } + }; + @SkylarkSignature(name = "count", objectType = StringModule.class, returnType = Integer.class, doc = "Returns the number of (non-overlapping) occurrences of substring <code>sub</code> in " + "string, optionally restricting to [<code>start</code>:<code>end</code>], " @@ -1091,7 +1113,7 @@ public class MethodLibrary { } } }; - + @SkylarkSignature(name = "dict", returnType = Map.class, doc = "Creates a <a href=\"#modules.dict\">dictionary</a> from an optional positional " diff --git a/src/test/java/com/google/devtools/build/lib/syntax/MethodLibraryTest.java b/src/test/java/com/google/devtools/build/lib/syntax/MethodLibraryTest.java index 309b97b9fb..60536e36f5 100644 --- a/src/test/java/com/google/devtools/build/lib/syntax/MethodLibraryTest.java +++ b/src/test/java/com/google/devtools/build/lib/syntax/MethodLibraryTest.java @@ -1035,4 +1035,15 @@ public class MethodLibraryTest extends EvaluationTestCase { new SkylarkTest() // because of set .testStatement("str(zip([1], set([2])))", "[(1, 2)]"); } + + @Test + public void testIsAlphaFunction() throws Exception { + new BothModesTest() + .testStatement("''.isalpha()", false) + .testStatement("'abz'.isalpha()", true) + .testStatement("'a1'.isalpha()", false) + .testStatement("'a '.isalpha()", false) + .testStatement("'A'.isalpha()", true) + .testStatement("'AbZ'.isalpha()", true); + } } |