JsonParserUnitTest.java 11.9 KB
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));

    }




}