blob: 425f8c293ad8fb1f8c30c499c3cf76c7e95b604e [file] [log] [blame]
package org.codehaus.jackson.main;
import java.io.*;
import org.codehaus.jackson.*;
/**
* Unit tests for verifying that support for (non-standard) comments
* works as expected.
*/
public class TestComments extends main.BaseTest
{
final static String DOC_WITH_SLASHSTAR_COMMENT =
"[ /* comment:\n ends here */ 1 /* one more ok to have \"unquoted\" */ ]"
;
final static String DOC_WITH_SLASHSLASH_COMMENT =
"[ // comment...\n 1 \r // one more, not array: [] \n ]"
;
/*
/**********************************************************
/* Test method wrappers
/**********************************************************
*/
/**
* Unit test for verifying that by default comments are not
* recognized.
*/
public void testDefaultSettings()
throws Exception
{
JsonFactory jf = new JsonFactory();
assertFalse(jf.isEnabled(JsonParser.Feature.ALLOW_COMMENTS));
JsonParser jp = jf.createJsonParser(new StringReader("[ 1 ]"));
assertFalse(jp.isEnabled(JsonParser.Feature.ALLOW_COMMENTS));
}
public void testCommentsDisabled()
throws Exception
{
_testDisabled(DOC_WITH_SLASHSTAR_COMMENT, false);
_testDisabled(DOC_WITH_SLASHSLASH_COMMENT, false);
_testDisabled(DOC_WITH_SLASHSTAR_COMMENT, true);
_testDisabled(DOC_WITH_SLASHSLASH_COMMENT, true);
}
public void testCommentsEnabled()
throws Exception
{
_testEnabled(DOC_WITH_SLASHSTAR_COMMENT, false);
_testEnabled(DOC_WITH_SLASHSLASH_COMMENT, false);
_testEnabled(DOC_WITH_SLASHSTAR_COMMENT, true);
_testEnabled(DOC_WITH_SLASHSLASH_COMMENT, true);
}
// for [JACKSON-779]
public void testCommentsWithUTF8() throws Exception
{
final String JSON = "/* \u00a9 2099 Yoyodyne Inc. */\n [ \"bar? \u00a9\" ]\n";
_testWithUTF8Chars(JSON, false);
_testWithUTF8Chars(JSON, true);
}
/*
/**********************************************************
/* Helper methods
/**********************************************************
*/
private void _testWithUTF8Chars(String doc, boolean useStream) throws IOException
{
// should basically just stream through
JsonParser jp = _createParser(doc, useStream, true);
assertToken(JsonToken.VALUE_STRING, jp.nextToken());
assertToken(JsonToken.END_ARRAY, jp.nextToken());
assertNull(jp.nextToken());
jp.close();
}
private void _testDisabled(String doc, boolean useStream) throws IOException
{
JsonParser jp = _createParser(doc, useStream, false);
try {
jp.nextToken();
fail("Expected exception for unrecognized comment");
} catch (JsonParseException je) {
// Should have something denoting that user may want to enable 'ALLOW_COMMENTS'
verifyException(je, "ALLOW_COMMENTS");
}
}
private void _testEnabled(String doc, boolean useStream)
throws IOException
{
JsonParser jp = _createParser(doc, useStream, true);
assertToken(JsonToken.VALUE_NUMBER_INT, jp.nextToken());
assertEquals(1, jp.getIntValue());
assertToken(JsonToken.END_ARRAY, jp.nextToken());
}
private JsonParser _createParser(String doc, boolean useStream, boolean enabled)
throws IOException
{
JsonFactory jf = new JsonFactory();
jf.configure(JsonParser.Feature.ALLOW_COMMENTS, enabled);
JsonParser jp = useStream ?
jf.createJsonParser(doc.getBytes("UTF-8"))
: jf.createJsonParser(doc);
assertToken(JsonToken.START_ARRAY, jp.nextToken());
return jp;
}
}