src.test.main.TestParserClosing Maven / Gradle / Ivy
The newest version!
package main;
import org.codehaus.jackson.*;
import java.io.*;
/**
* Set of basic unit tests that verify that the closing (or not) of
* the underlying source occurs as expected and specified
* by documentation.
*/
public class TestParserClosing
extends BaseTest
{
/**
* This unit test checks the default behaviour; with no auto-close, no
* automatic closing should occur, nor explicit one unless specific
* forcing method is used.
*/
public void testNoAutoCloseReader()
throws Exception
{
final String DOC = "[ 1 ]";
JsonFactory f = new JsonFactory();
// Check the default settings
assertTrue(f.isParserFeatureEnabled(JsonParser.Feature.AUTO_CLOSE_SOURCE));
// then change
f.disableParserFeature(JsonParser.Feature.AUTO_CLOSE_SOURCE);
assertFalse(f.isParserFeatureEnabled(JsonParser.Feature.AUTO_CLOSE_SOURCE));
MyReader input = new MyReader(DOC);
JsonParser jp = f.createJsonParser(input);
// shouldn't be closed to begin with...
assertFalse(input.isClosed());
assertToken(JsonToken.START_ARRAY, jp.nextToken());
assertToken(JsonToken.VALUE_NUMBER_INT, jp.nextToken());
assertToken(JsonToken.END_ARRAY, jp.nextToken());
assertNull(jp.nextToken());
// normally would be closed now
assertFalse(input.isClosed());
// regular close won't close it either:
jp.close();
assertFalse(input.isClosed());
}
public void testAutoCloseReader() throws Exception
{
final String DOC = "[ 1 ]";
JsonFactory f = new JsonFactory();
f.enableParserFeature(JsonParser.Feature.AUTO_CLOSE_SOURCE);
assertTrue(f.isParserFeatureEnabled(JsonParser.Feature.AUTO_CLOSE_SOURCE));
MyReader input = new MyReader(DOC);
JsonParser jp = f.createJsonParser(input);
assertFalse(input.isClosed());
assertToken(JsonToken.START_ARRAY, jp.nextToken());
// but can close half-way through
jp.close();
assertTrue(input.isClosed());
// And then let's test implicit close at the end too:
input = new MyReader(DOC);
jp = f.createJsonParser(input);
assertFalse(input.isClosed());
assertToken(JsonToken.START_ARRAY, jp.nextToken());
assertToken(JsonToken.VALUE_NUMBER_INT, jp.nextToken());
assertToken(JsonToken.END_ARRAY, jp.nextToken());
assertNull(jp.nextToken());
assertTrue(input.isClosed());
}
public void testNoAutoCloseInputStream()
throws Exception
{
final String DOC = "[ 1 ]";
JsonFactory f = new JsonFactory();
f.disableParserFeature(JsonParser.Feature.AUTO_CLOSE_SOURCE);
MyStream input = new MyStream(DOC.getBytes("UTF-8"));
JsonParser jp = f.createJsonParser(input);
// shouldn't be closed to begin with...
assertFalse(input.isClosed());
assertToken(JsonToken.START_ARRAY, jp.nextToken());
assertToken(JsonToken.VALUE_NUMBER_INT, jp.nextToken());
assertToken(JsonToken.END_ARRAY, jp.nextToken());
assertNull(jp.nextToken());
// normally would be closed now
assertFalse(input.isClosed());
// regular close won't close it either:
jp.close();
assertFalse(input.isClosed());
}
/*
///////////////////////////////////////////////
// Helper classes
///////////////////////////////////////////////
*/
final static class MyReader extends StringReader
{
boolean mIsClosed = false;
public MyReader(String contents) {
super(contents);
}
public void close() {
mIsClosed = true;
super.close();
}
public boolean isClosed() { return mIsClosed; }
}
final static class MyStream extends ByteArrayInputStream
{
boolean mIsClosed = false;
public MyStream(byte[] data) {
super(data);
}
public void close() throws IOException {
mIsClosed = true;
super.close();
}
public boolean isClosed() { return mIsClosed; }
}
}