aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/java/com/google/devtools/build/lib/skylark
diff options
context:
space:
mode:
authorGravatar Erik Abair <abaire@google.com>2016-02-29 18:57:22 +0000
committerGravatar Kristina Chodorow <kchodorow@google.com>2016-03-01 19:13:06 +0000
commit927f459ae2f630deed237677102d7cd56bcf0abf (patch)
treefbffb22d48693072b54c3082fcdae4de806d282a /src/test/java/com/google/devtools/build/lib/skylark
parent9f7a2a6ae7b5e1a1e1bc11daab019599b67c9c3b (diff)
Add JSON conversion for Skylark structs.
This change adds a to_json method on Skylark structs, paralleling the existing to_proto built-in. RELNOTES[NEW]: Adds a to_json method to Skylark structs, providing conversion to JSON format. -- MOS_MIGRATED_REVID=115873229
Diffstat (limited to 'src/test/java/com/google/devtools/build/lib/skylark')
-rw-r--r--src/test/java/com/google/devtools/build/lib/skylark/SkylarkRuleClassFunctionsTest.java44
1 files changed, 44 insertions, 0 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 20c9a4c356..dd2bcdcf1a 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
@@ -571,6 +571,50 @@ public class SkylarkRuleClassFunctionsTest extends SkylarkTestCase {
"struct(a=DATA_CFG).to_proto()");
}
+ private void checkJson(String from, String expected) throws Exception {
+ Object result = evalRuleClassCode(from);
+ assertEquals(expected, result);
+ }
+
+ @Test
+ public void testJsonBooleanFields() throws Exception {
+ checkJson("struct(name=True).to_json()", "{\"name\":true}");
+ checkJson("struct(name=False).to_json()", "{\"name\":false}");
+ }
+
+ @Test
+ public void testJsonEncoding() throws Exception {
+ checkJson("struct(name='value').to_json()", "{\"name\":\"value\"}");
+ checkJson("struct(name=['a', 'b']).to_json()", "{\"name\":[\"a\",\"b\"]}");
+ checkJson("struct(name=123).to_json()", "{\"name\":123}");
+ checkJson("struct(name=[1, 2, 3]).to_json()", "{\"name\":[1,2,3]}");
+ checkJson("struct(a=struct(b='b')).to_json()", "{\"a\":{\"b\":\"b\"}}");
+ checkJson("struct(a=[struct(b='x'), struct(b='y')]).to_json()",
+ "{\"a\":[{\"b\":\"x\"},{\"b\":\"y\"}]}");
+ checkJson("struct(a=struct(b=struct(c='c'))).to_json()",
+ "{\"a\":{\"b\":{\"c\":\"c\"}}}");
+ }
+
+ @Test
+ public void testJsonEscapes() throws Exception {
+ checkJson("struct(name='a\"b').to_json()", "{\"name\":\"a\\\"b\"}");
+ checkJson("struct(name='a\\'b').to_json()", "{\"name\":\"a'b\"}");
+ checkJson("struct(name='a\\nb').to_json()", "{\"name\":\"a\\nb\"}");
+ }
+
+ @Test
+ public void testJsonNestedListStructure() throws Exception {
+ checkJson("struct(a=[['b']]).to_json()", "{\"a\":[[\"b\"]]}");
+ }
+
+ @Test
+ public void testJsonInvalidStructure() throws Exception {
+ checkErrorContains(
+ "Invalid text format, expected a struct, a string, a bool, or an int but got a "
+ + "ConfigurationTransition for struct field 'a'",
+ "struct(a=DATA_CFG).to_json()");
+ }
+
@Test
public void testLabelAttrWrongDefault() throws Exception {
checkErrorContains(