/*
* Copyright 2012-2016 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.boot.json;
import java.util.List;
import java.util.Map;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Base for {@link JsonParser} tests.
*
* @author Dave Syer
* @author Jean de Klerk
*/
public abstract class AbstractJsonParserTests {
@Rule
public ExpectedException thrown = ExpectedException.none();
private final JsonParser parser = getParser();
protected abstract JsonParser getParser();
@Test
public void simpleMap() {
Map<String, Object> map = this.parser.parseMap("{\"foo\":\"bar\",\"spam\":1}");
assertThat(map).hasSize(2);
assertThat(map.get("foo")).isEqualTo("bar");
assertThat(((Number) map.get("spam")).longValue()).isEqualTo(1L);
}
@Test
public void doubleValue() {
Map<String, Object> map = this.parser.parseMap("{\"foo\":\"bar\",\"spam\":1.23}");
assertThat(map).hasSize(2);
assertThat(map.get("foo")).isEqualTo("bar");
assertThat(map.get("spam")).isEqualTo(1.23d);
}
@Test
public void emptyMap() {
Map<String, Object> map = this.parser.parseMap("{}");
assertThat(map).isEmpty();
}
@Test
public void simpleList() {
List<Object> list = this.parser.parseList("[\"foo\",\"bar\",1]");
assertThat(list).hasSize(3);
assertThat(list.get(1)).isEqualTo("bar");
}
@Test
public void emptyList() {
List<Object> list = this.parser.parseList("[]");
assertThat(list).isEmpty();
}
@SuppressWarnings("unchecked")
@Test
public void listOfMaps() {
List<Object> list = this.parser
.parseList("[{\"foo\":\"bar\",\"spam\":1},{\"foo\":\"baz\",\"spam\":2}]");
assertThat(list).hasSize(2);
assertThat(((Map<String, Object>) list.get(1))).hasSize(2);
}
@SuppressWarnings("unchecked")
@Test
public void mapOfLists() {
Map<String, Object> map = this.parser.parseMap(
"{\"foo\":[{\"foo\":\"bar\",\"spam\":1},{\"foo\":\"baz\",\"spam\":2}]}");
assertThat(map).hasSize(1);
assertThat(((List<Object>) map.get("foo"))).hasSize(2);
}
@Test
public void mapWithNullThrowsARuntimeException() {
this.thrown.expect(RuntimeException.class);
this.parser.parseMap(null);
}
@Test
public void listWithNullThrowsARuntimeException() {
this.thrown.expect(RuntimeException.class);
this.parser.parseList(null);
}
@Test
public void mapWithEmptyStringThrowsARuntimeException() {
this.thrown.expect(RuntimeException.class);
this.parser.parseMap("");
}
@Test
public void listWithEmptyStringThrowsARuntimeException() {
this.thrown.expect(RuntimeException.class);
this.parser.parseList("");
}
@Test
public void mapWithListThrowsARuntimeException() {
this.thrown.expect(RuntimeException.class);
this.parser.parseMap("[]");
}
@Test
public void listWithMapThrowsARuntimeException() {
this.thrown.expect(RuntimeException.class);
this.parser.parseList("{}");
}
@Test
public void listWithLeadingWhitespace() {
List<Object> list = this.parser.parseList("\n\t[\"foo\"]");
assertThat(list).hasSize(1);
assertThat(list.get(0)).isEqualTo("foo");
}
@Test
public void mapWithLeadingWhitespace() {
Map<String, Object> map = this.parser.parseMap("\n\t{\"foo\":\"bar\"}");
assertThat(map).hasSize(1);
assertThat(map.get("foo")).isEqualTo("bar");
}
@Test
public void mapWithLeadingWhitespaceListThrowsARuntimeException() {
this.thrown.expect(RuntimeException.class);
this.parser.parseMap("\n\t[]");
}
@Test
public void listWithLeadingWhitespaceMapThrowsARuntimeException() {
this.thrown.expect(RuntimeException.class);
this.parser.parseList("\n\t{}");
}
}