package com.fasterxml.jackson.core.json; import java.io.IOException; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonToken; public class TestParserErrorHandling extends com.fasterxml.jackson.test.BaseTest { public void testInvalidKeywordsStream() throws Exception { _testInvalidKeywords(true); } public void testInvalidKeywordsReader() throws Exception { _testInvalidKeywords(false); } /* /********************************************************** /* Helper methods /********************************************************** */ private void _testInvalidKeywords(boolean useStream) throws Exception { doTestInvalidKeyword1(useStream, "nul"); doTestInvalidKeyword1(useStream, "Null"); doTestInvalidKeyword1(useStream, "nulla"); doTestInvalidKeyword1(useStream, "fal"); doTestInvalidKeyword1(useStream, "False"); doTestInvalidKeyword1(useStream, "fals0"); doTestInvalidKeyword1(useStream, "falsett0"); doTestInvalidKeyword1(useStream, "tr"); doTestInvalidKeyword1(useStream, "truE"); doTestInvalidKeyword1(useStream, "treu"); doTestInvalidKeyword1(useStream, "trueenough"); doTestInvalidKeyword1(useStream, "C"); } private void doTestInvalidKeyword1(boolean useStream, String value) throws IOException { final String doc = "{ \"key1\" : "+value+" }"; JsonParser jp = useStream ? createParserUsingStream(doc, "UTF-8") : createParserUsingReader(doc); assertToken(JsonToken.START_OBJECT, jp.nextToken()); /* 24-Nov-2008, tatu: Note that depending on parser impl, we may * get the exception early or late... */ try { assertToken(JsonToken.FIELD_NAME, jp.nextToken()); jp.nextToken(); fail("Expected an exception for malformed value keyword"); } catch (JsonParseException jex) { verifyException(jex, "Unrecognized token"); verifyException(jex, value); } finally { jp.close(); } // Try as root-level value as well: jp = useStream ? createParserUsingStream(value, "UTF-8") : createParserUsingReader(value); try { jp.nextToken(); fail("Expected an exception for malformed value keyword"); } catch (JsonParseException jex) { verifyException(jex, "Unrecognized token"); verifyException(jex, value); } finally { jp.close(); } } }