From 33a6a1e0e3653c9ee8c11b077e0cc49e60344491 Mon Sep 17 00:00:00 2001 From: eishchuk Date: Mon, 27 May 2019 21:29:10 +0200 Subject: [PATCH] Converter to Yml --- src/main/antlr4/com/ishchuk/antlr4/JSONgram.g4 | 2 +- src/main/antlr4/com/ishchuk/antlr4/Log.g4 | 16 ---------------- src/main/java/com/ishchuk/antlr/json/JsonListener.java | 150 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------------------------- src/main/java/com/ishchuk/antlr/json/model/JsonArray.java | 43 +++++++++++++++++++++++++++++++++++++------ src/main/java/com/ishchuk/antlr/json/model/JsonElement.java | 4 ++++ src/main/java/com/ishchuk/antlr/json/model/JsonModel.java | 22 ---------------------- src/main/java/com/ishchuk/antlr/json/model/JsonObject.java | 33 +++++++++++++++++++++++++++++++++ src/main/java/com/ishchuk/antlr/json/model/JsonPrimitive.java | 9 +++++++++ src/main/java/com/ishchuk/antlr/json/model/intermediate/Intermediate.java | 23 ----------------------- src/main/java/com/ishchuk/antlr/log/LogListener.java | 51 --------------------------------------------------- src/main/java/com/ishchuk/antlr/log/model/LogEntry.java | 35 ----------------------------------- src/main/java/com/ishchuk/antlr/log/model/LogLevel.java | 5 ----- src/test/java/com/ishchuk/antlr/JsonParserUnitTest.java | 248 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------- src/test/java/com/ishchuk/antlr/LogParserUnitTest.java | 38 -------------------------------------- 14 files changed, 381 insertions(+), 298 deletions(-) delete mode 100644 src/main/antlr4/com/ishchuk/antlr4/Log.g4 delete mode 100644 src/main/java/com/ishchuk/antlr/json/model/JsonModel.java delete mode 100644 src/main/java/com/ishchuk/antlr/json/model/intermediate/Intermediate.java delete mode 100644 src/main/java/com/ishchuk/antlr/log/LogListener.java delete mode 100644 src/main/java/com/ishchuk/antlr/log/model/LogEntry.java delete mode 100644 src/main/java/com/ishchuk/antlr/log/model/LogLevel.java delete mode 100644 src/test/java/com/ishchuk/antlr/LogParserUnitTest.java diff --git a/src/main/antlr4/com/ishchuk/antlr4/JSONgram.g4 b/src/main/antlr4/com/ishchuk/antlr4/JSONgram.g4 index 9b2c452..c367a3c 100644 --- a/src/main/antlr4/com/ishchuk/antlr4/JSONgram.g4 +++ b/src/main/antlr4/com/ishchuk/antlr4/JSONgram.g4 @@ -12,7 +12,7 @@ content: CHAINE | NUMBER | object | table | 'true' | 'false' | 'null'; fragment INT: '0' | [1-9] [0-9]*; fragment EXP: [Ee] [+\-]? INT; -CHAINE : '"' [a-zA-Z0-9_!@#$%^&*()\-+=/.,<>;':] [a-zA-Z0-9_!@#$%^&*()\-+=/.,<>;':]* '"' ; +CHAINE : '"' [a-zA-Z0-9_!@#$%^&*()\-+=/.,<>;': ] [a-zA-Z0-9_!@#$%^&*()\-+=/.,<>;': ]* '"' ; NUMBER : '-'? INT ('.' [0-9] +)? EXP?; WS : [ \t\n\r] + -> skip; diff --git a/src/main/antlr4/com/ishchuk/antlr4/Log.g4 b/src/main/antlr4/com/ishchuk/antlr4/Log.g4 deleted file mode 100644 index 3ecb966..0000000 --- a/src/main/antlr4/com/ishchuk/antlr4/Log.g4 +++ /dev/null @@ -1,16 +0,0 @@ -grammar Log; - -log : entry+; -entry : timestamp ' ' level ' ' message CRLF; -timestamp : DATE ' ' TIME; -level : 'ERROR' | 'INFO' | 'DEBUG'; -message : (TEXT | ' ')+; - -fragment DIGIT : [0-9]; -fragment TWODIGIT : DIGIT DIGIT; -fragment LETTER : [A-Za-z]; - -DATE : TWODIGIT TWODIGIT '-' LETTER LETTER LETTER '-' TWODIGIT; -TIME : TWODIGIT ':' TWODIGIT ':' TWODIGIT; -TEXT : LETTER+; -CRLF : '\r'? '\n' | '\r'; \ No newline at end of file diff --git a/src/main/java/com/ishchuk/antlr/json/JsonListener.java b/src/main/java/com/ishchuk/antlr/json/JsonListener.java index 84e85fb..1d07ef0 100644 --- a/src/main/java/com/ishchuk/antlr/json/JsonListener.java +++ b/src/main/java/com/ishchuk/antlr/json/JsonListener.java @@ -2,122 +2,108 @@ package com.ishchuk.antlr.json; import com.ishchuk.antlr.json.model.*; import com.ishchuk.antlr4.JSONgramBaseListener; +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 java.util.*; public class JsonListener extends JSONgramBaseListener { - private JsonModel jsonFile; - private Map json; - private List var; + private JsonElement json; private boolean read; @Override public void enterJson(JSONgramParser.JsonContext ctx) { - this.jsonFile = new JsonModel(); - this.json = new HashMap<>(); - this.var = new ArrayList<>(); this.read = true; } - public JsonModel getJsonFile() { - return this.jsonFile; + public JsonElement getJsonFile() { + return this.json; } - @Override - public void enterContent(JSONgramParser.ContentContext ctx) { + private JsonElement treatContext(JSONgramParser.ContentContext ctx) { - if (read && Objects.nonNull(ctx.object())) { - ctx.object().keyValue().forEach(kv -> { - JsonElement elem = new JsonElement(); - elem.setContent(kv.content()); - json.put(kv.CHAINE().getSymbol().getText(), elem); - }); - read = false; - } else { - System.out.println("content: " + ctx.getText()); - String parent = getParent(ctx); - System.out.println("parent: " + parent); - - - if (json.containsKey(parent)) { - System.out.println("parent in json"); - searchMap(json, parent); - - } else { - System.out.println("NOT in json"); - - json.values().forEach(kv -> { - if (kv instanceof JsonObject) { - searchMap(((JsonObject) kv).getMap(), parent); - } else if (kv instanceof JsonArray) { - ((JsonArray) kv).getArray().forEach(obj -> { - searchMap(obj.getMap(), parent); - }); - } - }); + JsonElement elem; + if (Objects.nonNull(ctx.object())) { + elem = new JsonObject(); + for (JSONgramParser.KeyValueContext kv : ctx.object().keyValue()) { + ((JsonObject)elem).getMap().put(kv.CHAINE().getSymbol().getText(), treatContext(kv.content())); } + + } else if (Objects.nonNull(ctx.table())) { + elem = new JsonArray(); + for (JSONgramParser.ContentContext ct : ctx.table().content()) { + ((JsonArray)elem).getArray().add(treatContext(ct)); + } + } else { + elem = new JsonPrimitive(); + ((JsonPrimitive)elem).setValue(ctx.getText()); } + + return elem; } - private void searchMap(Map json, final String parent) { - if (json.containsKey(parent)) { - System.out.println("parent in json"); - if (json.get(parent).getContent() instanceof JSONgramParser.ContentContext) { - JSONgramParser.ContentContext content = - (JSONgramParser.ContentContext) json.get(parent).getContent(); - if (Objects.nonNull(content.object())) { - json.replace(parent, prepareJsonObject(content)); - } else if (Objects.nonNull(content.table())) { - JsonArray arr = new JsonArray(); - content.table().content().forEach(cont -> { - JsonObject obj = prepareJsonObject(cont); - arr.getArray().add(obj); - }); - arr.getArray().forEach(temp -> { - searchMap(temp.getMap(), parent); - }); - json.replace(parent, arr); - } else { - JsonPrimitive prim = new JsonPrimitive(); - prim.setValue(content.getText()); - json.replace(parent, prim); - } + @Override + public void enterContent(JSONgramParser.ContentContext ctx) { + + if (read) { + if (Objects.nonNull(ctx.object())) { + this.json = new JsonObject(); + ctx.object().keyValue().forEach(kv -> { + ((JsonObject)this.json).getMap().put(kv.CHAINE().getSymbol().getText(), + treatContext(kv.content())); + }); + } else if (Objects.nonNull(ctx.table())) { + this.json = new JsonArray(); + ctx.table().content().forEach(ct -> { + ((JsonArray)this.json).getArray().add(treatContext(ct)); + }); } + + read = false; + } } - private JsonObject prepareJsonObject(JSONgramParser.ContentContext cont) { - JsonObject obj = new JsonObject(); - cont.object().keyValue().forEach(kv -> { - JsonElement elem = new JsonElement(); - elem.setContent(kv.content()); - obj.getMap().put(kv.CHAINE().getSymbol().getText(), elem); - }); - return obj; + public String convertToYml() { + StringBuilder builder = new StringBuilder(); + builder.append("---\n"); + if (Objects.nonNull(this.json)) { + builder.append(this.json.toYml("")); + } + return builder.toString(); } + public static void main(String[] args) { + System.out.println("Hello! With this application you can convert JSON file to YML file"); + System.out.println("------------------------------------------------------------------"); - private String getParent(JSONgramParser.ContentContext ctx) { - String parent; - if (Objects.nonNull(ctx.table()) || Objects.nonNull(ctx.object())) { - if (ctx.getParent().children.get(0).getText().equals("[")) { - parent = ctx.getParent().getParent().getParent().children.get(0).getText(); - } else { - parent = ctx.getParent().children.get(0).getText(); - } - } else { - parent = ctx.getParent().children.get(0).getText(); + Scanner in = new Scanner(System.in); + System.out.println("Please, copy your json file here"); + String jsonString = ""; + while(in.hasNextLine()){ + jsonString += in.nextLine(); } - return parent; - } + JSONgramLexer serverJSONgramLexer = new JSONgramLexer(CharStreams.fromString(jsonString)); + 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("\nYour file:\n"); + System.out.println(jsonWalker.getJsonFile().toString()); + System.out.println("\nYml file:\n"); + System.out.println(jsonWalker.convertToYml()); + } } diff --git a/src/main/java/com/ishchuk/antlr/json/model/JsonArray.java b/src/main/java/com/ishchuk/antlr/json/model/JsonArray.java index 640cda4..a06d334 100644 --- a/src/main/java/com/ishchuk/antlr/json/model/JsonArray.java +++ b/src/main/java/com/ishchuk/antlr/json/model/JsonArray.java @@ -5,17 +5,48 @@ import java.util.List; public class JsonArray extends JsonElement { - private List array; + private List array; - public List getArray() { + public List getArray() { return array; } - public void setArray(List array) { - this.array = array; - } - public JsonArray() { this.array = new ArrayList<>(); } + + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("["); + this.array.forEach(obj ->{ + builder.append(obj.toString()).append(","); + }); + int lastIndex = builder.lastIndexOf(","); + if (lastIndex > 0) { + builder.deleteCharAt(lastIndex); + } + builder.append("]"); + return builder.toString(); + } + + @Override + public String toYml(String delay) { + StringBuilder builder = new StringBuilder(); + this.array.forEach(obj ->{ + builder.append(delay).append("- "); + if (obj instanceof JsonPrimitive) { + builder.append(obj.toString()).append("\n"); + } else { + builder.append(obj.toYml("")); + } + }); + + return builder.toString(); + } + + public static void main() { + System.out.println("Hello! With this application you can parse a JSON file and convert it to YAML"); + System.out.println("-----------------------------------------------------------------------------"); + System.out.println("Put "); + } } diff --git a/src/main/java/com/ishchuk/antlr/json/model/JsonElement.java b/src/main/java/com/ishchuk/antlr/json/model/JsonElement.java index e89703e..b0fbe21 100644 --- a/src/main/java/com/ishchuk/antlr/json/model/JsonElement.java +++ b/src/main/java/com/ishchuk/antlr/json/model/JsonElement.java @@ -10,4 +10,8 @@ public class JsonElement { public void setContent(Object content) { this.content = content; } + + public String toYml(String delay) { + return ""; + } } diff --git a/src/main/java/com/ishchuk/antlr/json/model/JsonModel.java b/src/main/java/com/ishchuk/antlr/json/model/JsonModel.java deleted file mode 100644 index 73de968..0000000 --- a/src/main/java/com/ishchuk/antlr/json/model/JsonModel.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.ishchuk.antlr.json.model; - -import java.util.ArrayList; -import java.util.List; - -public class JsonModel { - - private List list; - - public List getList() { - return list; - } - - public void setList(List list) { - this.list = list; - } - - public JsonModel() { - this.list = new ArrayList<>(); - } - -} diff --git a/src/main/java/com/ishchuk/antlr/json/model/JsonObject.java b/src/main/java/com/ishchuk/antlr/json/model/JsonObject.java index d2f6821..a341dc7 100644 --- a/src/main/java/com/ishchuk/antlr/json/model/JsonObject.java +++ b/src/main/java/com/ishchuk/antlr/json/model/JsonObject.java @@ -2,6 +2,7 @@ package com.ishchuk.antlr.json.model; import java.util.HashMap; import java.util.Map; +import java.util.Set; public class JsonObject extends JsonElement { private Map map; @@ -17,4 +18,36 @@ public class JsonObject extends JsonElement { public JsonObject() { this.map = new HashMap<>(); } + + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("{"); + this.map.keySet().forEach(key -> { + builder.append(key) + .append(":") + .append(map.get(key).toString()) + .append(","); + }); + int lastInd = builder.lastIndexOf(","); + if (lastInd > 0) { + builder.deleteCharAt(lastInd); + } + builder.append("}"); + + return builder.toString(); + } + + @Override + public String toYml(String delay) { + StringBuilder builder = new StringBuilder(); + this.map.keySet().forEach(key -> { + builder.append(delay).append(key).append(": "); + if (this.map.get(key) instanceof JsonPrimitive) { + builder.append(this.map.get(key).toString()).append("\n"); + } else { + builder.append("\n").append(this.map.get(key).toYml(delay + " ")); + } + }); + return builder.toString(); + } } diff --git a/src/main/java/com/ishchuk/antlr/json/model/JsonPrimitive.java b/src/main/java/com/ishchuk/antlr/json/model/JsonPrimitive.java index 3be56c8..ef353a6 100644 --- a/src/main/java/com/ishchuk/antlr/json/model/JsonPrimitive.java +++ b/src/main/java/com/ishchuk/antlr/json/model/JsonPrimitive.java @@ -12,4 +12,13 @@ public class JsonPrimitive extends JsonElement { this.value = value; } + public String toString() { + return this.value; + } + + @Override + public String toYml(String delay) { + return delay + this.value; + } + } diff --git a/src/main/java/com/ishchuk/antlr/json/model/intermediate/Intermediate.java b/src/main/java/com/ishchuk/antlr/json/model/intermediate/Intermediate.java deleted file mode 100644 index 2373865..0000000 --- a/src/main/java/com/ishchuk/antlr/json/model/intermediate/Intermediate.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.ishchuk.antlr.json.model.intermediate; - -public class Intermediate { - private boolean wait; - private String name; - - public boolean isWait() { - return wait; - } - - public void setWait(boolean wait) { - this.wait = wait; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } -} - diff --git a/src/main/java/com/ishchuk/antlr/log/LogListener.java b/src/main/java/com/ishchuk/antlr/log/LogListener.java deleted file mode 100644 index f21ff5f..0000000 --- a/src/main/java/com/ishchuk/antlr/log/LogListener.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.ishchuk.antlr.log; - -import com.ishchuk.antlr4.LogBaseListener; -import com.ishchuk.antlr4.LogParser; -import com.ishchuk.antlr.log.model.LogLevel; -import com.ishchuk.antlr.log.model.LogEntry; - -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Locale; - -public class LogListener extends LogBaseListener { - - private static final DateTimeFormatter DEFAULT_DATETIME_FORMATTER - = DateTimeFormatter.ofPattern("yyyy-MMM-dd HH:mm:ss", Locale.ENGLISH); - - private List entries = new ArrayList<>(); - private LogEntry currentLogEntry; - - @Override - public void enterEntry(LogParser.EntryContext ctx) { - this.currentLogEntry = new LogEntry(); - } - - @Override - public void exitEntry(LogParser.EntryContext ctx) { - entries.add(currentLogEntry); - } - - @Override - public void enterTimestamp(LogParser.TimestampContext ctx) { - currentLogEntry.setTimestamp(LocalDateTime.parse(ctx.getText(), DEFAULT_DATETIME_FORMATTER)); - } - - @Override - public void enterMessage(LogParser.MessageContext ctx) { - currentLogEntry.setMessage(ctx.getText()); - } - - @Override - public void enterLevel(LogParser.LevelContext ctx) { - currentLogEntry.setLevel(LogLevel.valueOf(ctx.getText())); - } - - public List getEntries() { - return Collections.unmodifiableList(entries); - } -} \ No newline at end of file diff --git a/src/main/java/com/ishchuk/antlr/log/model/LogEntry.java b/src/main/java/com/ishchuk/antlr/log/model/LogEntry.java deleted file mode 100644 index 11fb6d0..0000000 --- a/src/main/java/com/ishchuk/antlr/log/model/LogEntry.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.ishchuk.antlr.log.model; - -import java.time.LocalDateTime; - - -public class LogEntry { - - private LogLevel level; - private String message; - private LocalDateTime timestamp; - - public LogLevel getLevel() { - return level; - } - - public void setLevel(LogLevel level) { - this.level = level; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public LocalDateTime getTimestamp() { - return timestamp; - } - - public void setTimestamp(LocalDateTime timestamp) { - this.timestamp = timestamp; - } -} diff --git a/src/main/java/com/ishchuk/antlr/log/model/LogLevel.java b/src/main/java/com/ishchuk/antlr/log/model/LogLevel.java deleted file mode 100644 index 50962f3..0000000 --- a/src/main/java/com/ishchuk/antlr/log/model/LogLevel.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.ishchuk.antlr.log.model; - -public enum LogLevel { - DEBUG, INFO, ERROR -} diff --git a/src/test/java/com/ishchuk/antlr/JsonParserUnitTest.java b/src/test/java/com/ishchuk/antlr/JsonParserUnitTest.java index 512402d..407e58a 100644 --- a/src/test/java/com/ishchuk/antlr/JsonParserUnitTest.java +++ b/src/test/java/com/ishchuk/antlr/JsonParserUnitTest.java @@ -11,28 +11,234 @@ 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 whenJsonObjectWithString_thenStringIsDetected() throws Exception { - // String line = "{\"menu\": \"light134-()%4praer---'$\"}"; - String line = "{\n" + "\"line\": \"contentLine\"," + - "\"table\":[{\"lineInTable\":\"contentLineIntTable\"},{}]," + - " \"menu\": {\n" + - " \"id\": \"file\",\n" + - " \"value\": \"File\",\n" + - " \"popup\": {\n" + - " \"menuitem\": [\n" + - " { \"value\": \"New\", \"onclick\": \"CreateNewDoc()\" },\n" + - " { \"value\": \"Open\", \"onclick\": \"OpenDoc()\" },\n" + - " { \"value\": \"Close\", \"onclick\": \"CloseDoc()\" }\n" + - " ]\n" + - " }\n" + - " }\n" + + 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 autoconvert line breaks to save space\"\n" + "}"; JSONgramLexer serverJSONgramLexer = new JSONgramLexer(CharStreams.fromString(line)); CommonTokenStream tokens = new CommonTokenStream( serverJSONgramLexer ); @@ -41,9 +247,13 @@ public class JsonParserUnitTest { JsonListener jsonWalker = new JsonListener(); walker.walk(jsonWalker, JSONgramParser.json()); - System.out.println(jsonWalker.getJsonFile().getList().size()); - jsonWalker.getJsonFile().getList().forEach(System.out::println); - assertThat(jsonWalker.getJsonFile(), is(line)); + System.out.println(jsonWalker.getJsonFile().toString()); + System.out.println(jsonWalker.convertToYml()); + assertTrue(!jsonWalker.convertToYml().isEmpty()); } + + + + } diff --git a/src/test/java/com/ishchuk/antlr/LogParserUnitTest.java b/src/test/java/com/ishchuk/antlr/LogParserUnitTest.java deleted file mode 100644 index aba16b8..0000000 --- a/src/test/java/com/ishchuk/antlr/LogParserUnitTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.ishchuk.antlr; - -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.MatcherAssert.assertThat; - -import com.ishchuk.antlr.log.LogListener; -import com.ishchuk.antlr.log.model.LogLevel; -import com.ishchuk.antlr.log.model.LogEntry; -import com.ishchuk.antlr4.LogLexer; -import com.ishchuk.antlr4.LogParser; -import org.antlr.v4.runtime.CharStreams; -import org.antlr.v4.runtime.CommonTokenStream; -import org.antlr.v4.runtime.tree.ParseTreeWalker; -import org.junit.Test; - -import java.time.LocalDateTime; - - -public class LogParserUnitTest { - - @Test - public void whenLogContainsOneErrorLogEntry_thenOneErrorIsReturned() throws Exception { - String logLines = "2018-May-05 14:20:21 DEBUG entering awesome method\r\n" + - "2018-May-05 14:20:24 ERROR Bad thing happened\r\n"; - LogLexer serverLogLexer = new LogLexer(CharStreams.fromString(logLines)); - CommonTokenStream tokens = new CommonTokenStream( serverLogLexer ); - LogParser logParser = new LogParser(tokens); - ParseTreeWalker walker = new ParseTreeWalker(); - LogListener logWalker = new LogListener(); - walker.walk(logWalker, logParser.log()); - - assertThat(logWalker.getEntries().size(), is(2)); - LogEntry error = logWalker.getEntries().get(1); - assertThat(error.getLevel(), is(LogLevel.ERROR)); - assertThat(error.getMessage(), is("Bad thing happened")); - assertThat(error.getTimestamp(), is(LocalDateTime.of(2018,5,5,14,20,24))); - } -} -- libgit2 0.21.2