Skylark: int() can now declare a base parameter.

--
MOS_MIGRATED_REVID=126434299
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 279db38..a9f82d5 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
@@ -1658,8 +1658,8 @@
     new BothModesTest()
         .testStatement("int('1')", 1)
         .testStatement("int('-1234')", -1234)
-        .testIfErrorContains("invalid literal for int(): \"1.5\"", "int('1.5')")
-        .testIfErrorContains("invalid literal for int(): \"ab\"", "int('ab')")
+        .testIfErrorContains("invalid literal for int() with base 10: \"1.5\"", "int('1.5')")
+        .testIfErrorContains("invalid literal for int() with base 10: \"ab\"", "int('ab')")
         .testStatement("int(42)", 42)
         .testStatement("int(-1)", -1)
         .testStatement("int(True)", 1)
@@ -1668,6 +1668,45 @@
   }
 
   @Test
+  public void testIntWithBase() throws Exception {
+    new BothModesTest()
+        .testStatement("int('11', 2)", 3)
+        .testStatement("int('11', 9)", 10)
+        .testStatement("int('AF', 16)", 175)
+        .testStatement("int('11', 36)", 37)
+        .testStatement("int('az', 36)", 395);
+  }
+
+  @Test
+  public void testIntWithBase_InvalidBase() throws Exception {
+    new BothModesTest()
+        .testIfExactError("invalid literal for int() with base 3: \"123\"", "int('123', 3)")
+        .testIfExactError("invalid literal for int() with base 15: \"FF\"", "int('FF', 15)")
+        .testIfExactError("int() base must be >= 2 and <= 36", "int('123', -1)")
+        .testIfExactError("int() base must be >= 2 and <= 36", "int('123', 1)")
+        .testIfExactError("int() base must be >= 2 and <= 36", "int('123', 37)");
+  }
+
+  @Test
+  public void testIntWithBase_Prefix() throws Exception {
+    new BothModesTest()
+        .testStatement("int('0b11', 0)", 3)
+        .testStatement("int('0B11', 2)", 3)
+        .testStatement("int('0o11', 0)", 9)
+        .testStatement("int('0O11', 8)", 9)
+        .testStatement("int('0XFF', 0)", 255)
+        .testStatement("int('0xFF', 16)", 255)
+        .testIfExactError("invalid literal for int() with base 8: \"0xFF\"", "int('0xFF', 8)");
+  }
+
+  @Test
+  public void testIntWithBase_NoString() throws Exception {
+    new BothModesTest()
+        .testIfExactError("int() can't convert non-string with explicit base", "int(True, 2)")
+        .testIfExactError("int() can't convert non-string with explicit base", "int(1, 2)");
+  }
+
+  @Test
   public void testStrFunction() throws Exception {
     new SkylarkTest().testStatement("def foo(x): return x\nstr(foo)", "<function foo>");
   }