package com.jsoniter.output; import com.jsoniter.annotation.JsonIgnore; import com.jsoniter.annotation.JsonProperty; import com.jsoniter.annotation.JsoniterAnnotationSupport; import com.jsoniter.spi.TypeLiteral; import junit.framework.TestCase; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.*; public class TestObject extends TestCase { static { JsoniterAnnotationSupport.enable(); // JsonStream.setMode(EncodingMode.DYNAMIC_MODE); } private ByteArrayOutputStream baos; private JsonStream stream; public void setUp() { baos = new ByteArrayOutputStream(); stream = new JsonStream(baos, 4096); } public static class TestObject1 { public String field1; } public void test_field() throws IOException { TestObject1 obj = new TestObject1(); obj.field1 = "hello"; stream.writeVal(obj); stream.close(); assertEquals("{'field1':'hello'}".replace('\'', '"'), baos.toString()); } public static class TestObject2 { @JsonIgnore private String field1; public String getField1() { return field1; } } public void test_getter() throws IOException { TestObject2 obj = new TestObject2(); obj.field1 = "hello"; stream.writeVal(obj); stream.close(); assertEquals("{'field1':'hello'}".replace('\'', '"'), baos.toString()); } public void test_null() throws IOException { stream.writeVal(new TypeLiteral<TestObject2>() { }, null); stream.close(); assertEquals("null".replace('\'', '"'), baos.toString()); } public static class TestObject3 { } public void test_empty_object() throws IOException { stream.writeVal(new TestObject3()); stream.close(); assertEquals("{}".replace('\'', '"'), baos.toString()); } public static class TestObject4 { public String field1; } public void test_null_field() throws IOException { TestObject4 obj = new TestObject4(); stream.writeVal(obj); stream.close(); assertEquals("{}".replace('\'', '"'), baos.toString()); } public static enum MyEnum { HELLO } public static class TestObject5 { public MyEnum field1; } public void test_enum() throws IOException { TestObject5 obj = new TestObject5(); obj.field1 = MyEnum.HELLO; stream.writeVal(obj); stream.close(); assertEquals("{'field1':'HELLO'}".replace('\'', '"'), baos.toString()); } public static class TestObject6 { public int[] field1; } public void test_array_field() throws IOException { TestObject6 obj = new TestObject6(); obj.field1 = new int[]{1, 2, 3}; stream.writeVal(obj); stream.close(); assertEquals("{\"field1\":[1,2,3]}", baos.toString()); } public void test_array_field_is_null() throws IOException { TestObject6 obj = new TestObject6(); stream.writeVal(obj); stream.close(); assertEquals("{}", baos.toString()); } public static class TestObject7 { private int[] field1; @JsonProperty(omitNull = false) public int[] getField1() { return field1; } } public void test_array_field_is_null_via_getter() throws IOException { JsoniterAnnotationSupport.enable(); TestObject7 obj = new TestObject7(); stream.writeVal(obj); stream.close(); assertEquals("{\"field1\":null}", baos.toString()); } public static class TestObject8 { @JsonProperty(nullable = false) public String[] field1; } public void test_not_nullable() { JsoniterAnnotationSupport.enable(); TestObject8 obj = new TestObject8(); obj.field1 = new String[]{"hello"}; assertEquals("{\"field1\":[\"hello\"]}", JsonStream.serialize(obj)); if (Codegen.mode == EncodingMode.DYNAMIC_MODE) { try { JsonStream.serialize(new TestObject8()); fail(); } catch (NullPointerException e) { } } } public static class TestObject9 { @JsonProperty(collectionValueNullable = false) public String[] field1; @JsonProperty(collectionValueNullable = false) public List<String> field2; @JsonProperty(collectionValueNullable = false) public Set<String> field3; @JsonProperty(collectionValueNullable = false) public Map<String, String> field4; } public void test_collection_value_not_nullable() { JsoniterAnnotationSupport.enable(); TestObject9 obj = new TestObject9(); obj.field1 = new String[]{"hello"}; assertEquals("{\"field1\":[\"hello\"]}", JsonStream.serialize(obj)); if (Codegen.mode == EncodingMode.DYNAMIC_MODE) { obj = new TestObject9(); obj.field1 = new String[]{null}; try { JsonStream.serialize(obj); fail(); } catch (NullPointerException e) { } obj = new TestObject9(); obj.field2 = new ArrayList(); obj.field2.add(null); try { JsonStream.serialize(obj); fail(); } catch (NullPointerException e) { } obj = new TestObject9(); obj.field3 = new HashSet<String>(); obj.field3.add(null); try { JsonStream.serialize(obj); fail(); } catch (NullPointerException e) { } obj = new TestObject9(); obj.field4 = new HashMap<String, String>(); obj.field4.put("hello", null); try { JsonStream.serialize(obj); fail(); } catch (NullPointerException e) { } } } public static class TestObject10 { @JsonProperty(omitNull = false) public String field1; } public void test_not_omit_null() { assertEquals("{\"field1\":null}", JsonStream.serialize(new TestObject10())); } public static class TestObject11 { public String field1; public String field2; public String field3; } public void test_omit_null() { // JsonStream.setMode(EncodingMode.DYNAMIC_MODE); assertEquals("{}", JsonStream.serialize(new TestObject11())); TestObject11 obj = new TestObject11(); obj.field1 = "hello"; assertEquals("{\"field1\":\"hello\"}", JsonStream.serialize(obj)); obj = new TestObject11(); obj.field2 = "hello"; assertEquals("{\"field2\":\"hello\"}", JsonStream.serialize(obj)); obj = new TestObject11(); obj.field3 = "hello"; assertEquals("{\"field3\":\"hello\"}", JsonStream.serialize(obj)); } }