diff --git a/ion/src/main/java/com/fasterxml/jackson/dataformat/ion/IonParser.java b/ion/src/main/java/com/fasterxml/jackson/dataformat/ion/IonParser.java index ecde53318..e449a9e69 100644 --- a/ion/src/main/java/com/fasterxml/jackson/dataformat/ion/IonParser.java +++ b/ion/src/main/java/com/fasterxml/jackson/dataformat/ion/IonParser.java @@ -676,7 +676,6 @@ public JsonToken nextToken() throws IOException } if (type == null) { if (_parsingContext.inRoot()) { // EOF? - close(); _currToken = null; } else { _parsingContext = _parsingContext.getParent(); diff --git a/ion/src/test/java/com/fasterxml/jackson/dataformat/ion/sequence/MappingIteratorTest.java b/ion/src/test/java/com/fasterxml/jackson/dataformat/ion/sequence/MappingIteratorTest.java new file mode 100644 index 000000000..62f6d1239 --- /dev/null +++ b/ion/src/test/java/com/fasterxml/jackson/dataformat/ion/sequence/MappingIteratorTest.java @@ -0,0 +1,50 @@ +package com.fasterxml.jackson.dataformat.ion.sequence; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import com.fasterxml.jackson.databind.MappingIterator; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SequenceWriter; +import com.fasterxml.jackson.dataformat.ion.IonObjectMapper; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import org.junit.Test; + +public class MappingIteratorTest { + + private static final ObjectMapper MAPPER = new IonObjectMapper(); + + @Test + public void testReadFromWrite() throws Exception { + final Object[] values = new String[]{"1", "2", "3", "4"}; + + // write + final ByteArrayOutputStream out = new ByteArrayOutputStream(); + try (SequenceWriter seq = MAPPER.writer().writeValues(out)) { + for (Object value : values) { + seq.write(value); + } + } + + // read + final ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray()); + try (MappingIterator it = MAPPER.readerFor(Object.class).readValues(in)) { + for (Object value : values) { + assertTrue(it.hasNext()); + assertTrue(it.hasNext()); // should not alter the iterator state + assertEquals(value, it.next()); + } + assertFalse(it.hasNext()); + } + } + + @Test + public void testReadFromEmpty() throws Exception { + final ByteArrayInputStream in = new ByteArrayInputStream(new byte[0]); + try (MappingIterator it = MAPPER.readerFor(Object.class).readValues(in)) { + assertFalse(it.hasNext()); + } + } +}