/*
* Copyright (c) 2015 Astron Informatikai Kft.
*
*/
package airportsimulation.utils;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.Arrays;
import java.util.List;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertThat;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import static org.junit.matchers.JUnitMatchers.hasItems;
import org.junit.rules.ExpectedException;
/**
*
* @author tothm
*/
public class JsonParserTest {
private String fileContent;
@Rule
public ExpectedException expectedException = ExpectedException.none();
@Before
public void setUp() {
fileContent = "{\n"
+ " \"name\": \"Alice\",\n"
+ " \"age\": 20,\n"
+ " \"address\": {\n"
+ " \"streetAddress\": \"100 Wall Street\",\n"
+ " \"city\": \"New York\"\n"
+ " },\n"
+ " \"roommates\": [\"Shara\", \"Charlotte\", \"George\"],"
+ " \"phoneNumber\": [\n"
+ " {\n"
+ " \"type\": \"home\",\n"
+ " \"number\": \"212-333-1111\"\n"
+ " },{\n"
+ " \"type\": \"fax\",\n"
+ " \"number\": \"646-444-2222\"\n"
+ " }\n"
+ " ]\n"
+ "}";
}
@Test
public void shouldParseSimpleObjects() throws JsonParser.JsonParserException {
InputStream inputStream = new ByteArrayInputStream(fileContent.getBytes());
JsonParser parser = new JsonParser(inputStream);
assertThat(parser.get("name"), is("Alice"));
assertThat(parser.get("age"), is("20"));
}
@Test
public void shouldParseInheritedObjects() throws JsonParser.JsonParserException {
InputStream inputStream = new ByteArrayInputStream(fileContent.getBytes());
JsonParser parser = new JsonParser(inputStream);
assertThat(parser.get("address", "streetAddress"), is("100 Wall Street"));
assertThat(parser.get("address", "city"), is("New York"));
}
@Test
public void shouldParseSimpleArrays() throws JsonParser.JsonParserException {
InputStream inputStream = new ByteArrayInputStream(fileContent.getBytes());
JsonParser parser = new JsonParser(inputStream);
assertArrayEquals(parser.getArray("roommates").toArray(),
Arrays.asList("Shara", "Charlotte", "George").toArray());
}
@Test
public void shouldParseObjectArrays() throws JsonParser.JsonParserException {
InputStream inputStream = new ByteArrayInputStream(fileContent.getBytes());
JsonParser parser = new JsonParser(inputStream);
assertArrayEquals(parser.getArray("phoneNumber", "type").toArray(),
Arrays.asList("home", "fax").toArray());
assertArrayEquals(parser.getArray("phoneNumber", "number").toArray(),
Arrays.asList("212-333-1111", "646-444-2222").toArray());
}
@Test
public void shouldGetKeys() throws JsonParser.JsonParserException {
InputStream inputStream = new ByteArrayInputStream(fileContent.getBytes());
JsonParser parser = new JsonParser(inputStream);
assertThat(parser.getKeys(), hasItems(
"name", "age", "address", "roommates", "phoneNumber"));
assertThat(parser.getKeys("address"), hasItems(
"streetAddress", "city"));
assertThat(parser.getKeys("address", "city").isEmpty(), is(true));
}
@Test
public void shouldThrowNoKeyExceptionOnGet() throws JsonParser.JsonParserException {
InputStream inputStream = new ByteArrayInputStream(fileContent.getBytes());
JsonParser parser = new JsonParser(inputStream);
expectedException.expect(JsonParser.JsonParserException.class);
expectedException.expectMessage("Key list: '[nOt_A_kEy]' is not persent.");
parser.get("nOt_A_kEy");
}
@Test
public void shouldThrowNoKeyExceptionOnGetArray() throws JsonParser.JsonParserException {
InputStream inputStream = new ByteArrayInputStream(fileContent.getBytes());
JsonParser parser = new JsonParser(inputStream);
expectedException.expect(JsonParser.JsonParserException.class);
expectedException.expectMessage("Key list: '[nOt_A_kEy]' is not persent.");
parser.getArray("nOt_A_kEy");
}
@Test
public void shouldThrowNotAnArrayExceptionOnObject() throws JsonParser.JsonParserException {
InputStream inputStream = new ByteArrayInputStream(fileContent.getBytes());
JsonParser parser = new JsonParser(inputStream);
expectedException.expect(JsonParser.JsonParserException.class);
expectedException.expectMessage("Value at key: '[phoneNumber, type]' is an array.");
parser.get("phoneNumber", "type");
}
@Test
public void shouldGetObjectAsArray() throws JsonParser.JsonParserException {
InputStream inputStream = new ByteArrayInputStream(fileContent.getBytes());
JsonParser parser = new JsonParser(inputStream);
List<String> oneElementArray = parser.getArray("age");
assertThat(oneElementArray.size(), is(1));
assertThat(oneElementArray.get(0), is("20"));
}
@Test
public void shouldGetOneElementArray() throws JsonParser.JsonParserException {
String fc = "{\"key\":[\"arrayval1\"]}";
InputStream inputStream = new ByteArrayInputStream(fc.getBytes());
JsonParser parser = new JsonParser(inputStream);
List<String> oneElementArray = parser.getArray("key");
assertThat(oneElementArray.size(), is(1));
assertThat(oneElementArray.get(0), is("arrayval1"));
}
}