Build language: Support 'not in' operator.

--
MOS_MIGRATED_REVID=93129861
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/EvaluationTest.java b/src/test/java/com/google/devtools/build/lib/syntax/EvaluationTest.java
index 8ca1e9e..5c7715f 100644
--- a/src/test/java/com/google/devtools/build/lib/syntax/EvaluationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/syntax/EvaluationTest.java
@@ -511,6 +511,19 @@
   }
 
   @Test
+  public void testNotInOperator() throws Exception {
+    assertEquals(Boolean.FALSE, eval("'b' not in ['a', 'b']"));
+    assertEquals(Boolean.TRUE, eval("'c' not in ['a', 'b']"));
+    assertEquals(Boolean.FALSE, eval("'b' not in ('a', 'b')"));
+    assertEquals(Boolean.TRUE, eval("'c' not in ('a', 'b')"));
+    assertEquals(Boolean.FALSE, eval("'b' not in {'a' : 1, 'b' : 2}"));
+    assertEquals(Boolean.TRUE, eval("'c' not in {'a' : 1, 'b' : 2}"));
+    assertEquals(Boolean.TRUE, eval("1 not in {'a' : 1, 'b' : 2}"));
+    assertEquals(Boolean.FALSE, eval("'b' not in 'abc'"));
+    assertEquals(Boolean.TRUE, eval("'d' not in 'abc'"));
+  }
+
+  @Test
   public void testInFail() throws Exception {
     checkEvalError("in operator only works on strings if the left operand is also a string",
         "1 in '123'");