diff options
author | 2016-02-29 18:57:22 +0000 | |
---|---|---|
committer | 2016-03-01 19:13:06 +0000 | |
commit | 927f459ae2f630deed237677102d7cd56bcf0abf (patch) | |
tree | fbffb22d48693072b54c3082fcdae4de806d282a /src/test/java/com/google/devtools/build/lib/skylark | |
parent | 9f7a2a6ae7b5e1a1e1bc11daab019599b67c9c3b (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.java | 44 |
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( |