Open source all the tests under lib/syntax/.

--
MOS_MIGRATED_REVID=87244284
diff --git a/src/test/java/com/google/devtools/build/lib/syntax/EnvironmentTest.java b/src/test/java/com/google/devtools/build/lib/syntax/EnvironmentTest.java
new file mode 100644
index 0000000..0452913
--- /dev/null
+++ b/src/test/java/com/google/devtools/build/lib/syntax/EnvironmentTest.java
@@ -0,0 +1,133 @@
+// Copyright 2006 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.devtools.build.lib.syntax;
+
+import com.google.common.collect.Sets;
+
+/**
+ * Tests of Environment.
+ */
+public class EnvironmentTest extends AbstractEvaluationTestCase {
+
+  // Test the API directly
+  public void testLookupAndUpdate() throws Exception {
+    Environment env = new Environment();
+
+    try {
+      env.lookup("foo");
+      fail();
+    } catch (Environment.NoSuchVariableException e) {
+       assertEquals("no such variable: foo", e.getMessage());
+    }
+
+    env.update("foo", "bar");
+
+    assertEquals("bar", env.lookup("foo"));
+  }
+
+  public void testLookupWithDefault() throws Exception {
+    Environment env = new Environment();
+    assertEquals(21, env.lookup("VERSION", 21));
+    env.update("VERSION", 42);
+    assertEquals(42, env.lookup("VERSION", 21));
+  }
+
+  public void testDoubleUpdateSucceeds() throws Exception {
+    Environment env = new Environment();
+    env.update("VERSION", 42);
+    assertEquals(42, env.lookup("VERSION"));
+    env.update("VERSION", 43);
+    assertEquals(43, env.lookup("VERSION"));
+  }
+
+  // Test assign through interpreter, lookup through API:
+  public void testAssign() throws Exception {
+    Environment env = new Environment();
+
+    try {
+      env.lookup("foo");
+      fail();
+    } catch (Environment.NoSuchVariableException e) {
+      assertEquals("no such variable: foo", e.getMessage());
+    }
+
+    exec(parseStmt("foo = 'bar'"), env);
+
+    assertEquals("bar", env.lookup("foo"));
+  }
+
+  // Test update through API, reference through interpreter:
+  public void testReference() throws Exception {
+    Environment env = new Environment();
+
+    try {
+      eval(parseExpr("foo"), env);
+      fail();
+    } catch (EvalException e) {
+      assertEquals("name 'foo' is not defined", e.getMessage());
+    }
+
+    env.update("foo", "bar");
+
+    assertEquals("bar", eval(parseExpr("foo"), env));
+  }
+
+  // Test assign and reference through interpreter:
+  public void testAssignAndReference() throws Exception {
+    Environment env = new Environment();
+
+    try {
+      eval(parseExpr("foo"), env);
+      fail();
+    } catch (EvalException e) {
+      assertEquals("name 'foo' is not defined", e.getMessage());
+    }
+
+    exec(parseStmt("foo = 'bar'"), env);
+
+    assertEquals("bar", eval(parseExpr("foo"), env));
+  }
+
+  public void testGetVariableNames() throws Exception {
+    Environment env = new Environment();
+    env.update("foo", "bar");
+    env.update("wiz", 3);
+
+    Environment nestedEnv = new Environment(env);
+    nestedEnv.update("foo", "bat");
+    nestedEnv.update("quux", 42);
+
+    assertEquals(Sets.newHashSet("True", "False", "None", "foo", "wiz"), env.getVariableNames());
+    assertEquals(Sets.newHashSet("True", "False", "None", "foo", "wiz", "quux"),
+        nestedEnv.getVariableNames());
+  }
+
+  public void testToString() throws Exception {
+    Environment env = new Environment();
+    env.update("subject", new StringLiteral("Hello, 'world'.", '\''));
+    env.update("from", new StringLiteral("Java", '"'));
+    assertEquals("Environment{False -> false, None -> None, True -> true, from -> \"Java\", "
+        + "subject -> 'Hello, \\'world\\'.', }", env.toString());
+  }
+
+  public void testBindToNullThrowsException() throws Exception {
+    try {
+      new Environment().update("some_name", null);
+      fail();
+    } catch (NullPointerException e) {
+      assertEquals("update(value == null)", e.getMessage());
+    }
+  }
+}