package com.ishchuk.antlr; import com.ishchuk.antlr.json.JsonListener; import com.ishchuk.antlr4.JSONgramLexer; import com.ishchuk.antlr4.JSONgramParser; import org.antlr.v4.runtime.CharStreams; import org.antlr.v4.runtime.CommonTokenStream; import org.antlr.v4.runtime.tree.ParseTreeWalker; import org.junit.Test; import static junit.framework.TestCase.assertTrue; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; public class JsonParserUnitTest { @Test public void whenJsonPrimitive_thenStringIsPrimitive() throws Exception { String line = "{\"key\":\"value\"}"; JSONgramLexer serverJSONgramLexer = new JSONgramLexer(CharStreams.fromString(line)); CommonTokenStream tokens = new CommonTokenStream( serverJSONgramLexer ); JSONgramParser JSONgramParser = new JSONgramParser(tokens); ParseTreeWalker walker = new ParseTreeWalker(); JsonListener jsonWalker = new JsonListener(); walker.walk(jsonWalker, JSONgramParser.json()); System.out.println(jsonWalker.getJsonFile().toString()); assertThat(jsonWalker.getJsonFile().toString(), is(line)); } @Test public void whenPrimitiveBoolean_thenStringIsBoolean() throws Exception { String line = "{\"key\":true}"; JSONgramLexer serverJSONgramLexer = new JSONgramLexer(CharStreams.fromString(line)); CommonTokenStream tokens = new CommonTokenStream( serverJSONgramLexer ); JSONgramParser JSONgramParser = new JSONgramParser(tokens); ParseTreeWalker walker = new ParseTreeWalker(); JsonListener jsonWalker = new JsonListener(); walker.walk(jsonWalker, JSONgramParser.json()); System.out.println(jsonWalker.getJsonFile().toString()); assertThat(jsonWalker.getJsonFile().toString(), is(line)); } @Test public void testJsonFileAndValidate() throws Exception { String line = "{\n" + " \"_id\": \"5cec1abe96b0733b10248f9b\",\n" + " \"index\": 1,\n" + " \"guid\": \"cfd9fab4-d291-4974-ac2e-e5abd97a732b\",\n" + " \"isActive\": false,\n" + " \"balance\": \"$2,208.96\",\n" + " \"picture\": \"http://placehold.it/32x32\",\n" + " \"age\": 38,\n" + " \"eyeColor\": \"blue\",\n" + " \"name\": \"Monroe Hines\",\n" + " \"gender\": \"male\",\n" + " \"company\": \"ZIPAK\",\n" + " \"email\": \"monroehines@zipak.com\",\n" + " \"phone\": \"+1 (893) 496-3736\",\n" + " \"address\": \"930 Broome Street, Alafaya, Nevada, 3963\",\n" + " \"about\": \"Voluptate aliquip est aute irure cupidatat tempor pariatur occaecat sint est anim. Cupidatat minim fugiat sit fugiat dolore ad adipisicing voluptate. Amet occaecat eiusmod tempor proident minim id. Minim nulla consequat sunt sit voluptate incididunt mollit reprehenderit proident velit sunt. Id voluptate nisi non irure reprehenderit anim. Ad est excepteur minim est fugiat cillum do commodo nisi. In pariatur duis commodo ipsum consequat consectetur est sunt.\",\n" + " \"registered\": \"2015-03-12T09:28:25 -01:00\",\n" + " \"latitude\": -16.118259,\n" + " \"longitude\": 85.157901,\n" + " \"tags\": [\n" + " \"irure\",\n" + " \"ut\",\n" + " \"elit\",\n" + " \"eiusmod\",\n" + " \"tempor\",\n" + " \"aliqua\",\n" + " \"dolore\"\n" + " ],\n" + " \"friends\": [\n" + " {\n" + " \"id\": 0,\n" + " \"name\": \"Tammie West\"\n" + " },\n" + " {\n" + " \"id\": 1,\n" + " \"name\": \"Pacheco Holt\"\n" + " },\n" + " {\n" + " \"id\": 2,\n" + " \"name\": \"Houston Travis\"\n" + " }\n" + " ],\n" + " \"greeting\": \"Hello, Monroe Hines! You have 3 unread messages.\",\n" + " \"favoriteFruit\": \"apple\"\n" + " }"; JSONgramLexer serverJSONgramLexer = new JSONgramLexer(CharStreams.fromString(line)); CommonTokenStream tokens = new CommonTokenStream( serverJSONgramLexer ); JSONgramParser JSONgramParser = new JSONgramParser(tokens); ParseTreeWalker walker = new ParseTreeWalker(); JsonListener jsonWalker = new JsonListener(); walker.walk(jsonWalker, JSONgramParser.json()); System.out.println(jsonWalker.getJsonFile().toString()); assertTrue(!jsonWalker.getJsonFile().toString().isEmpty()); } @Test public void whenJsonObject_thenStringIsObject() throws Exception { String line = "{\"key\":{\"key\":\"value\"}}"; JSONgramLexer serverJSONgramLexer = new JSONgramLexer(CharStreams.fromString(line)); CommonTokenStream tokens = new CommonTokenStream( serverJSONgramLexer ); JSONgramParser JSONgramParser = new JSONgramParser(tokens); ParseTreeWalker walker = new ParseTreeWalker(); JsonListener jsonWalker = new JsonListener(); walker.walk(jsonWalker, JSONgramParser.json()); System.out.println(jsonWalker.getJsonFile().toString()); assertThat(jsonWalker.getJsonFile().toString(), is(line)); } @Test public void whenJsonTable_thenStringIsTable() throws Exception { String line = "{\"key\":[{\"key\":\"value\"},{\"key2\":\"value2\"}]}"; JSONgramLexer serverJSONgramLexer = new JSONgramLexer(CharStreams.fromString(line)); CommonTokenStream tokens = new CommonTokenStream( serverJSONgramLexer ); JSONgramParser JSONgramParser = new JSONgramParser(tokens); ParseTreeWalker walker = new ParseTreeWalker(); JsonListener jsonWalker = new JsonListener(); walker.walk(jsonWalker, JSONgramParser.json()); System.out.println(jsonWalker.getJsonFile().toString()); assertThat(jsonWalker.getJsonFile().toString(), is(line)); } @Test public void whenTableWithJsonObjects() throws Exception { String line = "[{\"key\":456},{\"key1\":false},{\"key3\":\"tretret\"}]"; JSONgramLexer serverJSONgramLexer = new JSONgramLexer(CharStreams.fromString(line)); CommonTokenStream tokens = new CommonTokenStream( serverJSONgramLexer ); JSONgramParser JSONgramParser = new JSONgramParser(tokens); ParseTreeWalker walker = new ParseTreeWalker(); JsonListener jsonWalker = new JsonListener(); walker.walk(jsonWalker, JSONgramParser.json()); System.out.println(jsonWalker.getJsonFile().toString()); assertThat(jsonWalker.getJsonFile().toString(), is(line)); } @Test public void whenPrimitiveNumber() throws Exception { String line = "{\"key\":456}"; JSONgramLexer serverJSONgramLexer = new JSONgramLexer(CharStreams.fromString(line)); CommonTokenStream tokens = new CommonTokenStream( serverJSONgramLexer ); JSONgramParser JSONgramParser = new JSONgramParser(tokens); ParseTreeWalker walker = new ParseTreeWalker(); JsonListener jsonWalker = new JsonListener(); walker.walk(jsonWalker, JSONgramParser.json()); System.out.println(jsonWalker.getJsonFile().toString()); assertThat(jsonWalker.getJsonFile().toString(), is(line)); } @Test public void whenPrimitiveNull() throws Exception { String line = "{\"key\":null}"; JSONgramLexer serverJSONgramLexer = new JSONgramLexer(CharStreams.fromString(line)); CommonTokenStream tokens = new CommonTokenStream( serverJSONgramLexer ); JSONgramParser JSONgramParser = new JSONgramParser(tokens); ParseTreeWalker walker = new ParseTreeWalker(); JsonListener jsonWalker = new JsonListener(); walker.walk(jsonWalker, JSONgramParser.json()); System.out.println(jsonWalker.getJsonFile().toString()); assertThat(jsonWalker.getJsonFile().toString(), is(line)); } @Test public void whenObjectEmpty() throws Exception { String line = "{}"; JSONgramLexer serverJSONgramLexer = new JSONgramLexer(CharStreams.fromString(line)); CommonTokenStream tokens = new CommonTokenStream( serverJSONgramLexer ); JSONgramParser JSONgramParser = new JSONgramParser(tokens); ParseTreeWalker walker = new ParseTreeWalker(); JsonListener jsonWalker = new JsonListener(); walker.walk(jsonWalker, JSONgramParser.json()); System.out.println(jsonWalker.getJsonFile().toString()); assertThat(jsonWalker.getJsonFile().toString(), is(line)); } @Test public void whenTableEmpty() throws Exception { String line = "[]"; JSONgramLexer serverJSONgramLexer = new JSONgramLexer(CharStreams.fromString(line)); CommonTokenStream tokens = new CommonTokenStream( serverJSONgramLexer ); JSONgramParser JSONgramParser = new JSONgramParser(tokens); ParseTreeWalker walker = new ParseTreeWalker(); JsonListener jsonWalker = new JsonListener(); walker.walk(jsonWalker, JSONgramParser.json()); System.out.println(jsonWalker.getJsonFile().toString()); assertThat(jsonWalker.getJsonFile().toString(), is(line)); } @Test public void jsonToYml() throws Exception { String line = "{\n" + " \"json\": [\n" + " \"rigid\",\n" + " \"better for data interchange\"\n" + " ],\n" + " \"yaml\": [\n" + " \"slim and flexible\",\n" + " \"better for configuration\"\n" + " ],\n" + " \"object\": {\n" + " \"key\": \"value\",\n" + " \"array\": [\n" + " {\n" + " \"null_value\": null\n" + " },\n" + " {\n" + " \"boolean\": true\n" + " },\n" + " {\n" + " \"integer\": 1\n" + " }\n" + " ]\n" + " },\n" + " \"paragraph\": \"Blank lines denote paragraph breaks\",\n" + " \"content\": \"Or we can auto convert line breaks to save space\"\n" + "}"; JSONgramLexer serverJSONgramLexer = new JSONgramLexer(CharStreams.fromString(line)); CommonTokenStream tokens = new CommonTokenStream( serverJSONgramLexer ); JSONgramParser JSONgramParser = new JSONgramParser(tokens); ParseTreeWalker walker = new ParseTreeWalker(); JsonListener jsonWalker = new JsonListener(); walker.walk(jsonWalker, JSONgramParser.json()); System.out.println(jsonWalker.getJsonFile().toString()); System.out.println(jsonWalker.convertToYml()); String finalYml = "---\n" + "\"yaml\": \n" + " - \"slim and flexible\"\n" + " - \"better for configuration\"\n" + "\"json\": \n" + " - \"rigid\"\n" + " - \"better for data interchange\"\n" + "\"object\": \n" + " \"key\": \"value\"\n" + " \"array\": \n" + " - \"null_value\": null\n" + " - \"boolean\": true\n" + " - \"integer\": 1\n" + "\"content\": \"Or we can auto convert line breaks to save space\"\n" + "\"paragraph\": \"Blank lines denote paragraph breaks\"\n"; assertThat(jsonWalker.convertToYml(), is(finalYml)); } }