diff options
Diffstat (limited to 'src/test/java/com')
3 files changed, 27 insertions, 5 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java index 7bc8bcbc75..690d9dee5d 100644 --- a/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java +++ b/src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java @@ -812,6 +812,14 @@ public class SkylarkRuleClassFunctionsTest extends SkylarkTestCase { } @Test + public void testStructIncomparability() throws Exception { + checkErrorContains("Cannot compare structs", "struct(a = 1) < struct(a = 2)"); + checkErrorContains("Cannot compare structs", "struct(a = 1) > struct(a = 2)"); + checkErrorContains("Cannot compare structs", "struct(a = 1) <= struct(a = 2)"); + checkErrorContains("Cannot compare structs", "struct(a = 1) >= struct(a = 2)"); + } + + @Test public void testStructAccessingFieldsFromSkylark() throws Exception { eval("x = struct(a = 1, b = 2)", "x1 = x.a", "x2 = x.b"); assertThat(lookup("x1")).isEqualTo(1); @@ -936,6 +944,17 @@ public class SkylarkRuleClassFunctionsTest extends SkylarkTestCase { } @Test + public void testStructsInDicts() throws Exception { + eval("d = {struct(a = 1): 'aa', struct(b = 2): 'bb'}"); + assertThat(eval("d[struct(a = 1)]")).isEqualTo("aa"); + assertThat(eval("d[struct(b = 2)]")).isEqualTo("bb"); + + checkErrorContains( + "unhashable type: 'struct'", + "{struct(a = []): 'foo'}"); + } + + @Test public void testStructMembersAreImmutable() throws Exception { checkErrorContains( "cannot assign to 's.x'", 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 fa72014247..75e42eb312 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 @@ -272,7 +272,10 @@ public class EvaluationTest extends EvaluationTestCase { .update(kwargs.getName(), kwargs) .testEval( "kwargs(foo=1, bar='bar', wiz=[1,2,3]).items()", - "[('bar', 'bar'), ('foo', 1), ('wiz', [1, 2, 3])]"); + "[('foo', 1), ('bar', 'bar'), ('wiz', [1, 2, 3])]") + .testEval( + "kwargs(wiz=[1,2,3], bar='bar', foo=1).items()", + "[('wiz', [1, 2, 3]), ('bar', 'bar'), ('foo', 1)]"); } @Test 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 ea81adb35d..d416c304d0 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 @@ -1311,8 +1311,8 @@ public class MethodLibraryTest extends EvaluationTestCase { new BothModesTest() .testEval("{1: 'foo'}.values()", "['foo']") .testEval("{}.values()", "[]") - .testEval("{True: 3, False: 5}.values()", "[5, 3]") - .testEval("{'a': 5, 'c': 2, 'b': 4, 'd': 3}.values()", "[5, 4, 2, 3]"); + .testEval("{True: 3, False: 5}.values()", "[3, 5]") + .testEval("{'a': 5, 'c': 2, 'b': 4, 'd': 3}.values()", "[5, 2, 4, 3]"); // sorted by keys } @@ -1342,7 +1342,7 @@ public class MethodLibraryTest extends EvaluationTestCase { .testEval("{'a': 'foo'}.items()", "[('a', 'foo')]") .testEval("{}.items()", "[]") .testEval("{1: 3, 2: 5}.items()", "[(1, 3), (2, 5)]") - .testEval("{'a': 5, 'c': 2, 'b': 4}.items()", "[('a', 5), ('b', 4), ('c', 2)]"); + .testEval("{'a': 5, 'c': 2, 'b': 4}.items()", "[('a', 5), ('c', 2), ('b', 4)]"); } @Test @@ -1378,9 +1378,9 @@ public class MethodLibraryTest extends EvaluationTestCase { "popitem(): dictionary is empty", "d = {2: 'bar', 3: 'baz', 1: 'foo'}\n" + "if len(d) != 3: fail('popitem 0')\n" - + "if d.popitem() != (1, 'foo'): fail('popitem 1')\n" + "if d.popitem() != (2, 'bar'): fail('popitem 2')\n" + "if d.popitem() != (3, 'baz'): fail('popitem 3')\n" + + "if d.popitem() != (1, 'foo'): fail('popitem 1')\n" + "if d != {}: fail('popitem 4')\n" + "d.popitem()"); } |