blob: f4a353fd422a0ae19f629f207896761eae359010 [file] [log] [blame]
package com.fasterxml.jackson.failing.async;
import java.io.IOException;
import com.fasterxml.jackson.core.*;
import com.fasterxml.jackson.core.async.AsyncTestBase;
import com.fasterxml.jackson.core.testsupport.AsyncReaderWrapper;
public class AsyncTokenErrorTest extends AsyncTestBase
{
private final JsonFactory JSON_F = new JsonFactory();
public void testInvalidKeywordsStartOk() throws Exception
{
_doTestInvalidKeyword("nul");
_doTestInvalidKeyword("nulla");
_doTestInvalidKeyword("fal");
_doTestInvalidKeyword("fals0");
_doTestInvalidKeyword("falsett0");
_doTestInvalidKeyword("tr");
_doTestInvalidKeyword("truE");
_doTestInvalidKeyword("treu");
_doTestInvalidKeyword("trueenough");
}
public void testInvalidKeywordsStartFail() throws Exception
{
_doTestInvalidKeyword("Null");
_doTestInvalidKeyword("False");
_doTestInvalidKeyword("C");
}
private void _doTestInvalidKeyword(String value) throws IOException
{
String doc = "{ \"key1\" : "+value+" }";
AsyncReaderWrapper p = _createParser(doc);
assertToken(JsonToken.START_OBJECT, p.nextToken());
// Note that depending on parser impl, we may
// get the exception early or late...
try {
assertToken(JsonToken.FIELD_NAME, p.nextToken());
p.nextToken();
fail("Expected an exception for malformed value keyword");
} catch (JsonParseException jex) {
verifyException(jex, "Unrecognized token");
verifyException(jex, value);
} finally {
p.close();
}
// Try as root-level value as well:
doc = value + " "; // may need space after for DataInput
p = _createParser(doc);
try {
p.nextToken();
fail("Expected an exception for malformed value keyword");
} catch (JsonParseException jex) {
verifyException(jex, "Unrecognized token");
verifyException(jex, value);
} finally {
p.close();
}
}
public void testMangledRootInts() throws Exception
{
AsyncReaderWrapper p = _createParser("123true");
try {
JsonToken t = p.nextToken();
fail("Should have gotten an exception; instead got token: "+t+"; number: "+p.getNumberValue());
} catch (JsonParseException e) {
verifyException(e, "expected space");
}
p.close();
}
public void testMangledRootFloats() throws Exception
{
// Also test with floats
AsyncReaderWrapper p = _createParser("1.5false");
try {
JsonToken t = p.nextToken();
fail("Should have gotten an exception; instead got token: "+t+"; number: "+p.getNumberValue());
} catch (JsonParseException e) {
verifyException(e, "expected space");
}
p.close();
}
public void testMangledNonRootInts() throws Exception
{
AsyncReaderWrapper p = _createParser("[ 123true ]");
assertToken(JsonToken.START_ARRAY, p.nextToken());
try {
JsonToken t = p.nextToken();
fail("Should have gotten an exception; instead got token: "+t);
} catch (JsonParseException e) {
verifyException(e, "expected space");
}
p.close();
}
public void testMangledNonRootFloats() throws Exception
{
AsyncReaderWrapper p = _createParser("[ 1.5false ]");
assertToken(JsonToken.START_ARRAY, p.nextToken());
try {
JsonToken t = p.nextToken();
fail("Should have gotten an exception; instead got token: "+t);
} catch (JsonParseException e) {
verifyException(e, "expected space");
}
p.close();
}
private AsyncReaderWrapper _createParser(String doc) throws IOException
{
return asyncForBytes(JSON_F, 1, _jsonDoc(doc), 1);
}
}