diff options
author | Cowtowncoder <tatu.saloranta@iki.fi> | 2015-10-28 16:32:31 -0700 |
---|---|---|
committer | Cowtowncoder <tatu.saloranta@iki.fi> | 2015-10-28 16:32:31 -0700 |
commit | fe25f7e14d92f5d4746549e7df22e9af35fdf54b (patch) | |
tree | 1009ffb1453383a17223aa6ddc22a3fe0f59b061 /src/test/java/com/fasterxml/jackson/databind/util | |
parent | 3bd5de685c1f1116b71e6c51d713528834773fdf (diff) | |
download | jackson-databind-fe25f7e14d92f5d4746549e7df22e9af35fdf54b.tar.gz |
Fix #984
Diffstat (limited to 'src/test/java/com/fasterxml/jackson/databind/util')
-rw-r--r-- | src/test/java/com/fasterxml/jackson/databind/util/TestTokenBuffer.java | 116 |
1 files changed, 106 insertions, 10 deletions
diff --git a/src/test/java/com/fasterxml/jackson/databind/util/TestTokenBuffer.java b/src/test/java/com/fasterxml/jackson/databind/util/TestTokenBuffer.java index 842d617eb..4e14bbf3e 100644 --- a/src/test/java/com/fasterxml/jackson/databind/util/TestTokenBuffer.java +++ b/src/test/java/com/fasterxml/jackson/databind/util/TestTokenBuffer.java @@ -10,6 +10,8 @@ import com.fasterxml.jackson.databind.ObjectMapper; public class TestTokenBuffer extends BaseMapTest { + private final ObjectMapper MAPPER = objectMapper(); + /* /********************************************************** /* Basic TokenBuffer tests @@ -219,8 +221,6 @@ public class TestTokenBuffer extends BaseMapTest // deal with public void testWithUUID() throws IOException { - ObjectMapper mapper = new ObjectMapper(); - for (String value : new String[] { "00000007-0000-0000-0000-000000000000", "76e6d183-5f68-4afa-b94a-922c1fdb83f8", @@ -229,16 +229,16 @@ public class TestTokenBuffer extends BaseMapTest "591b2869-146e-41d7-8048-e8131f1fdec5", "82994ac2-7b23-49f2-8cc5-e24cf6ed77be", }) { - TokenBuffer buf = new TokenBuffer(mapper, false); // no ObjectCodec + TokenBuffer buf = new TokenBuffer(MAPPER, false); // no ObjectCodec UUID uuid = UUID.fromString(value); - mapper.writeValue(buf, uuid); + MAPPER.writeValue(buf, uuid); buf.close(); // and bring it back - UUID out = mapper.readValue(buf.asParser(), UUID.class); + UUID out = MAPPER.readValue(buf.asParser(), UUID.class); assertEquals(uuid.toString(), out.toString()); - // second part: As per [#362], should NOT use binary with TokenBuffer + // second part: As per [databind#362], should NOT use binary with TokenBuffer JsonParser jp = buf.asParser(); assertEquals(JsonToken.VALUE_STRING, jp.nextToken()); String str = jp.getText(); @@ -246,7 +246,104 @@ public class TestTokenBuffer extends BaseMapTest jp.close(); } } - + + /* + /********************************************************** + /* Tests for read/output contexts + /********************************************************** + */ + + // for [databind#984]: ensure output context handling identical + public void testOutputContext() throws IOException + { + TokenBuffer buf = new TokenBuffer(null, false); // no ObjectCodec + StringWriter w = new StringWriter(); + JsonGenerator gen = MAPPER.getFactory().createGenerator(w); + + // test content: [{"a":1,"b":{"c":2}},{"a":2,"b":{"c":3}}] + + buf.writeStartArray(); + gen.writeStartArray(); + _verifyOutputContext(buf, gen); + + buf.writeStartObject(); + gen.writeStartObject(); + _verifyOutputContext(buf, gen); + + buf.writeFieldName("a"); + gen.writeFieldName("a"); + _verifyOutputContext(buf, gen); + + buf.writeNumber(1); + gen.writeNumber(1); + _verifyOutputContext(buf, gen); + + buf.writeFieldName("b"); + gen.writeFieldName("b"); + _verifyOutputContext(buf, gen); + + buf.writeStartObject(); + gen.writeStartObject(); + _verifyOutputContext(buf, gen); + + buf.writeFieldName("c"); + gen.writeFieldName("c"); + _verifyOutputContext(buf, gen); + + buf.writeNumber(2); + gen.writeNumber(2); + _verifyOutputContext(buf, gen); + + buf.writeEndObject(); + gen.writeEndObject(); + _verifyOutputContext(buf, gen); + + buf.writeEndObject(); + gen.writeEndObject(); + _verifyOutputContext(buf, gen); + + buf.writeEndArray(); + gen.writeEndArray(); + _verifyOutputContext(buf, gen); + + buf.close(); + gen.close(); + } + + private void _verifyOutputContext(JsonGenerator gen1, JsonGenerator gen2) + { + _verifyOutputContext(gen1.getOutputContext(), gen2.getOutputContext()); + } + + private void _verifyOutputContext(JsonStreamContext ctxt1, JsonStreamContext ctxt2) + { + if (ctxt1 == null) { + if (ctxt2 == null) { + return; + } + fail("Context 1 null, context 2 not null: "+ctxt2); + } else if (ctxt2 == null) { + fail("Context 2 null, context 1 not null: "+ctxt1); + } + if (!ctxt1.getTypeDesc().equals(ctxt2.getTypeDesc())) { + fail("Different output context: token-buffer's = "+ctxt1+", json-generator's: "+ctxt2); + } + + if (ctxt1.inObject()) { + assertTrue(ctxt2.inObject()); + String str1 = ctxt1.getCurrentName(); + String str2 = ctxt2.getCurrentName(); + + if ((str1 != str2) && !str1.equals(str2)) { + fail("Expected name '"+str2+"' (JsonParser), TokenBuffer had '"+str1+"'"); + } + } else if (ctxt1.inArray()) { + assertTrue(ctxt2.inArray()); + assertEquals(ctxt1.getCurrentIndex(), ctxt2.getCurrentIndex()); + } + _verifyOutputContext(ctxt1.getParent(), ctxt2.getParent()); + } + /* /********************************************************** /* Tests to verify interaction of TokenBuffer and JsonParserSequence @@ -335,7 +432,7 @@ public class TestTokenBuffer extends BaseMapTest buf4.close(); } - // [Issue#743] + // [databind#743] public void testRawValues() throws Exception { final String RAW = "{\"a\":1}"; @@ -350,7 +447,6 @@ public class TestTokenBuffer extends BaseMapTest buf.close(); // then verify it would be serialized just fine - ObjectMapper mapper = objectMapper(); - assertEquals(RAW, mapper.writeValueAsString(buf)); + assertEquals(RAW, MAPPER.writeValueAsString(buf)); } } |