package org.araqne.logdb.query.parser;
import org.araqne.logdb.QueryParseException;
import org.araqne.logdb.query.command.Json;
import org.junit.Test;
import static org.junit.Assert.*;
public class JsonParserTest {
@Test
public void testJson() {
String JSON_QUERY = "json \"[{'id': 1}, {'id':2}]\"";
JsonParser parser = new JsonParser();
Json json = (Json) parser.parse(null, JSON_QUERY);
assertEquals(2, json.getLogs().size());
assertEquals(1, json.getLogs().get(0).get("id"));
assertEquals(2, json.getLogs().get(1).get("id"));
// test query string re-generation
assertEquals(JSON_QUERY, json.toString());
}
@Test
public void testEscape() {
JsonParser parser = new JsonParser();
// \\""\"\ <- original string
// \\\\\"\"\\\"\\ <- json escape
// "\\\\\\\\\\"\\"\\\\\\"\\\\" <- quote escape
// json "{"test": "\\\\\\\\\\"\\"\\\\\\"\\\\"}" <- query string
// "json \"{\"test\": \"\\\\\\\\\\\\\\\\\\\\\"\\\\\"\\\\\\\\\\\\\"\\\\\\\\\"}\""
Json json = (Json) parser.parse(null, "json \"{\"test\": \"\\\\\\\\\\\\\\\\\\\\\"\\\\\"\\\\\\\\\\\\\"\\\\\\\\\"}\"");
assertEquals(1, json.getLogs().size());
assertEquals("\\\\\"\"\\\"\\", json.getLogs().get(0).get("test"));
}
@Test
public void testJsonErr10200() {
String query = "json";
JsonParser parser = new JsonParser();
try {
parser.parse(null, query);
fail();
} catch (QueryParseException e) {
if (e.isDebugMode()) {
System.out.println("query " + query);
System.out.println(e.getMessage());
}
assertEquals("10200", e.getType());
assertEquals(5, e.getStartOffset());
assertEquals(3, e.getEndOffset());
}
query = "json \"{}";
try {
parser.parse(null, query);
fail();
} catch (QueryParseException e) {
if (e.isDebugMode()) {
System.out.println("query " + query);
System.out.println(e.getMessage());
}
assertEquals("10200", e.getType());
assertEquals(5, e.getStartOffset());
assertEquals(7, e.getEndOffset());
}
query = "json {}";
try {
parser.parse(null, query);
fail();
} catch (QueryParseException e) {
if (e.isDebugMode()) {
System.out.println("query " + query);
System.out.println(e.getMessage());
}
assertEquals("10200", e.getType());
assertEquals(5, e.getStartOffset());
assertEquals(9, e.getEndOffset());
}
query = "json \"{}";
try {
parser.parse(null, query);
fail();
} catch (QueryParseException e) {
if (e.isDebugMode()) {
System.out.println("query " + query);
System.out.println(e.getMessage());
}
assertEquals("10200", e.getType());
assertEquals(5, e.getStartOffset());
assertEquals(10, e.getEndOffset());
}
}
@Test
public void testJsonErr10201() {
String query = "json \"test\"\"\"";
JsonParser parser = new JsonParser();
try {
parser.parse(null, query);
fail();
} catch (QueryParseException e) {
if (e.isDebugMode()) {
System.out.println("query " + query);
System.out.println(e.getMessage());
}
assertEquals("10201", e.getType());
assertEquals(6, e.getStartOffset());
assertEquals(12, e.getEndOffset());
}
}
@Test
public void testJsonErr10202() {
String query = "json \"{test}\"";
JsonParser parser = new JsonParser();
try {
parser.parse(null, query);
fail();
} catch (QueryParseException e) {
if (e.isDebugMode()) {
System.out.println("query " + query);
System.out.println(e.getMessage());
}
assertEquals("10202", e.getType());
assertEquals(6, e.getStartOffset());
assertEquals(12, e.getEndOffset());
}
}
}