package com.jsoniter;
import com.jsoniter.any.Any;
import com.jsoniter.spi.JsonException;
import junit.framework.TestCase;
import org.junit.experimental.categories.Category;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
public class TestReadAny extends TestCase {
static {
// JsonIterator.enableStreamingSupport();
}
public void test_read_any() throws IOException {
JsonIterator iter = JsonIterator.parse("[0,1,2,3]");
assertEquals(3, iter.readAny().toInt(3));
}
public void test_bind_to_any() throws IOException {
JsonIterator iter = JsonIterator.parse("{'field3': 100}".replace('\'', '"'));
ComplexObject obj = iter.read(ComplexObject.class);
System.out.println(obj.field3);
}
public void test_read_any_from_string() throws IOException {
JsonIterator iter = JsonIterator.parse("{'numbers': ['1', '2', ['3', '4']]}".replace('\'', '"'));
assertEquals(3, iter.readAny().toInt("numbers", 2, 0));
}
public void test_read_int() throws IOException {
assertEquals(100, JsonIterator.deserialize("100").toInt());
assertEquals(0, JsonIterator.deserialize("null").toInt());
assertEquals(100, JsonIterator.deserialize("\"100\"").toInt());
assertEquals(1, JsonIterator.deserialize("true").toInt());
Any any = JsonIterator.deserialize("100");
assertEquals(Long.valueOf(100), any.object());
assertEquals(100, any.toInt());
assertEquals(100L, any.toLong());
assertEquals(100F, any.toFloat());
assertEquals(100D, any.toDouble());
assertEquals("100", any.toString());
}
public void test_read_boolean() throws IOException {
assertEquals(true, JsonIterator.deserialize("100").toBoolean());
assertEquals(false, JsonIterator.deserialize("{}").toBoolean());
assertEquals(true, JsonIterator.deserialize("{\"field1\":100}").toBoolean());
assertEquals(false, JsonIterator.deserialize("null").toBoolean());
assertEquals(true, JsonIterator.deserialize("\"100\"").toBoolean());
assertEquals(true, JsonIterator.deserialize("true").toBoolean());
assertEquals(1, JsonIterator.deserialize("true").toInt());
assertEquals(0, JsonIterator.deserialize("false").toInt());
assertEquals("false", JsonIterator.deserialize("false").toString());
assertEquals(Boolean.FALSE, JsonIterator.deserialize("false").object());
}
public void test_read_int_array() throws IOException {
JsonIterator iter = JsonIterator.parse("[100,101]");
Any any = iter.readAny();
assertEquals(100, any.toInt(0));
assertEquals(101, any.toInt(1));
}
public void test_read_int_object() throws IOException {
JsonIterator iter = JsonIterator.parse("{\"field1\":100}");
Any any = iter.readAny();
assertEquals(100, any.toInt("field1"));
}
public void test_read_float_as_int() throws IOException {
JsonIterator iter = JsonIterator.parse("[\"100.1\",\"101.1\"]");
Any any = iter.readAny();
assertEquals(100, any.toInt(0));
assertEquals(101, any.toInt(1));
}
public void test_read_string() throws IOException {
assertEquals("hello", JsonIterator.deserialize("\"hello\"").toString());
assertEquals("true", JsonIterator.deserialize("true").toString());
assertEquals("null", JsonIterator.deserialize("null").toString());
assertEquals("100", JsonIterator.deserialize("100").toString());
assertEquals(100, JsonIterator.deserialize("\"100\"").toInt());
assertEquals(true, JsonIterator.deserialize("\"hello\"").toBoolean());
}
public void test_read_int_as_string() throws IOException {
JsonIterator iter = JsonIterator.parse("100.5");
Any any = iter.readAny();
assertEquals("100.5", any.toString());
}
public void test_get() throws IOException {
assertEquals("100.5", JsonIterator.deserialize("100.5").get().toString());
assertEquals("100.5", JsonIterator.deserialize("[100.5]").get(0).toString());
assertEquals(ValueType.INVALID, JsonIterator.deserialize("null").get(0).valueType());
assertEquals(ValueType.INVALID, JsonIterator.deserialize("[]").get(0).valueType());
assertEquals(ValueType.INVALID, JsonIterator.deserialize("[]").get("hello").valueType());
assertEquals(ValueType.INVALID, JsonIterator.deserialize("{}").get(0).valueType());
}
public void test_read_long() throws IOException {
assertEquals(100L, JsonIterator.deserialize("100").toLong());
assertEquals(100L, JsonIterator.deserialize("100.1").toLong());
Any any = JsonIterator.deserialize("\"100.1\"");
assertEquals(100L, any.toLong());
assertEquals(100L, any.toLong());
}
public void test_read_float() throws IOException {
assertEquals(100.0F, JsonIterator.deserialize("100").toFloat());
assertEquals(100.1F, JsonIterator.deserialize("100.1").toFloat());
assertEquals(100.1F, JsonIterator.deserialize("\"100.1\"").toFloat());
}
public void test_size() throws IOException {
assertEquals(0, JsonIterator.deserialize("[]").size());
assertEquals(1, JsonIterator.deserialize("[1]").size());
assertEquals(2, JsonIterator.deserialize("[1,2]").size());
assertEquals(1, JsonIterator.deserialize("{\"field1\":1}").size());
}
public void test_keys() throws IOException {
assertEquals(new HashSet<Object>(Arrays.asList("field1")), JsonIterator.deserialize("{\"field1\":1}").keys());
assertEquals(new HashSet<Object>(Arrays.asList()), JsonIterator.deserialize("[3,5]").keys());
}
public void test_read_double() throws IOException {
assertEquals(100.0D, JsonIterator.deserialize("100").toDouble());
assertEquals(100.1D, JsonIterator.deserialize("100.1").toDouble());
assertEquals(100.1D, JsonIterator.deserialize("\"100.1\"").toDouble());
}
public static class TestObject1 {
public int field1;
}
public void test_read_class() throws IOException {
TestObject1 obj = JsonIterator.deserialize("{\"field1\": 100}").as(TestObject1.class);
assertEquals(100, obj.field1);
}
public void test_read_multiple_field() throws IOException {
Any any = JsonIterator.deserialize("{\"a\":1,\"b\":2,\"c\":3}");
assertEquals(2, any.toInt("b"));
assertEquals(1, any.toInt("a"));
assertEquals(3, any.toInt("c"));
any = JsonIterator.deserialize("{\"a\":1,\"b\":2,\"c\":3}");
assertEquals(3, any.toInt("c"));
assertEquals(2, any.toInt("b"));
assertEquals(1, any.toInt("a"));
}
public void test_require_path() throws IOException {
assertNotNull(JsonIterator.deserialize("null").get());
try {
JsonIterator.deserialize("[]").get(0).object();
} catch (JsonException e) {
System.out.println(e);
}
try {
Any.rewrap(new ArrayList<Any>()).get(0).object();
} catch (JsonException e) {
System.out.println(e);
}
try {
JsonIterator.deserialize("{}").get("hello").object();
} catch (JsonException e) {
System.out.println(e);
}
try {
Any.rewrap(new HashMap<String, Any>()).get("hello").object();
} catch (JsonException e) {
System.out.println(e);
}
}
@Category(StreamingCategory.class)
public void test_read_any_in_streaming() throws IOException {
assertEquals(2, JsonIterator.parse(new ByteArrayInputStream("[1,2,3,4,5]".getBytes()), 2).readAny().toInt(1));
assertEquals(1, JsonIterator.parse(new ByteArrayInputStream("{\"field1\": 1}".getBytes()), 2).readAny().size());
JsonIterator iter = JsonIterator.parse(new ByteArrayInputStream("[1,2,[3, 4],5]".getBytes()), 2);
ArrayList<Any> elements = new ArrayList<Any>();
while (iter.readArray()) {
elements.add(iter.readAny());
}
assertEquals("[3, 4]", elements.get(2).toString());
}
}