From c0a8c58b9230a1f5d76269eb7dc6b11e18f19686 Mon Sep 17 00:00:00 2001 From: Francois-Rene Rideau Date: Thu, 28 Jan 2016 18:36:22 +0000 Subject: Make Skylark dicts mutable Represent Skylark dict using a new subclass SkylarkDict of Map. Back it with a TreeMap to provide a deterministic iteration order. Also make SkylarkList generic in its element type . Have Artifact implement Comparable so it can be used as TreeMap key. -- MOS_MIGRATED_REVID=113277489 --- .../devtools/build/lib/syntax/ValidationTest.java | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) (limited to 'src/test/java/com/google/devtools/build/lib/syntax/ValidationTest.java') diff --git a/src/test/java/com/google/devtools/build/lib/syntax/ValidationTest.java b/src/test/java/com/google/devtools/build/lib/syntax/ValidationTest.java index 4c6eb6ac63..c44e5c918b 100644 --- a/src/test/java/com/google/devtools/build/lib/syntax/ValidationTest.java +++ b/src/test/java/com/google/devtools/build/lib/syntax/ValidationTest.java @@ -284,7 +284,7 @@ public class ValidationTest extends EvaluationTestCase { @Test public void testParentWithSkylarkModule() throws Exception { - Class emptyTupleClass = Tuple.EMPTY.getClass(); + Class emptyTupleClass = Tuple.empty().getClass(); Class tupleClass = Tuple.of(1, "a", "b").getClass(); Class mutableListClass = new MutableList(Tuple.of(1, 2, 3), env).getClass(); @@ -311,7 +311,7 @@ public class ValidationTest extends EvaluationTestCase { @Test public void testSkylarkTypeEquivalence() throws Exception { // All subclasses of SkylarkList are made equivalent - Class emptyTupleClass = Tuple.EMPTY.getClass(); + Class emptyTupleClass = Tuple.empty().getClass(); Class tupleClass = Tuple.of(1, "a", "b").getClass(); Class mutableListClass = new MutableList(Tuple.of(1, 2, 3), env).getClass(); @@ -322,8 +322,14 @@ public class ValidationTest extends EvaluationTestCase { // Also for ClassObject assertThat(SkylarkType.of(ClassObject.SkylarkClassObject.class)).isEqualTo(SkylarkType.STRUCT); - // TODO(bazel-team): fix that? - assertThat(SkylarkType.of(ClassObject.class)).isNotEqualTo(SkylarkType.STRUCT); + try { + SkylarkType.of(ClassObject.class); + throw new Exception("foo"); + } catch (Exception e) { + assertThat(e.getMessage()).contains( + "interface com.google.devtools.build.lib.syntax.ClassObject " + + "is not allowed as a Skylark value"); + } // Also test for these bazel classes, to avoid some regression. // TODO(bazel-team): move to some other place to remove dependency of syntax tests on Artifact? @@ -342,17 +348,17 @@ public class ValidationTest extends EvaluationTestCase { assertThat(SkylarkType.LIST.includes(combo1)).isTrue(); SkylarkType union1 = - SkylarkType.Union.of(SkylarkType.MAP, SkylarkType.LIST, SkylarkType.STRUCT); - assertThat(union1.includes(SkylarkType.MAP)).isTrue(); + SkylarkType.Union.of(SkylarkType.DICT, SkylarkType.LIST, SkylarkType.STRUCT); + assertThat(union1.includes(SkylarkType.DICT)).isTrue(); assertThat(union1.includes(SkylarkType.STRUCT)).isTrue(); assertThat(union1.includes(combo1)).isTrue(); assertThat(union1.includes(SkylarkType.STRING)).isFalse(); SkylarkType union2 = SkylarkType.Union.of( - SkylarkType.LIST, SkylarkType.MAP, SkylarkType.STRING, SkylarkType.INT); + SkylarkType.LIST, SkylarkType.DICT, SkylarkType.STRING, SkylarkType.INT); SkylarkType inter1 = SkylarkType.intersection(union1, union2); - assertThat(inter1.includes(SkylarkType.MAP)).isTrue(); + assertThat(inter1.includes(SkylarkType.DICT)).isTrue(); assertThat(inter1.includes(SkylarkType.LIST)).isTrue(); assertThat(inter1.includes(combo1)).isTrue(); assertThat(inter1.includes(SkylarkType.INT)).isFalse(); -- cgit v1.2.3