blob: c7cfd4a41ff76e31ba2e29b0630990e3ad78c2e5 [file] [log] [blame]
package org.codehaus.jackson.format;
import java.io.*;
import org.codehaus.jackson.*;
public class TestJsonFormatDetection extends main.BaseTest
{
public void testSimpleValidArray() throws Exception
{
JsonFactory jsonF = new JsonFactory();
DataFormatDetector detector = new DataFormatDetector(jsonF);
final String ARRAY_JSON = "[ 1, 2 ]";
DataFormatMatcher matcher = detector.findFormat(new ByteArrayInputStream(ARRAY_JSON.getBytes("UTF-8")));
// should have match
assertTrue(matcher.hasMatch());
assertEquals("JSON", matcher.getMatchedFormatName());
assertSame(jsonF, matcher.getMatch());
// no "certain" match with JSON, but solid:
assertEquals(MatchStrength.SOLID_MATCH, matcher.getMatchStrength());
// and thus:
JsonParser jp = matcher.createParserWithMatch();
assertToken(JsonToken.START_ARRAY, jp.nextToken());
assertToken(JsonToken.VALUE_NUMBER_INT, jp.nextToken());
assertToken(JsonToken.VALUE_NUMBER_INT, jp.nextToken());
assertToken(JsonToken.END_ARRAY, jp.nextToken());
assertNull(jp.nextToken());
jp.close();
}
public void testSimpleValidObject() throws Exception
{
JsonFactory jsonF = new JsonFactory();
DataFormatDetector detector = new DataFormatDetector(jsonF);
final String JSON = "{ \"field\" : true }";
DataFormatMatcher matcher = detector.findFormat(new ByteArrayInputStream(JSON.getBytes("UTF-8")));
// should have match
assertTrue(matcher.hasMatch());
assertEquals("JSON", matcher.getMatchedFormatName());
assertSame(jsonF, matcher.getMatch());
// no "certain" match with JSON, but solid:
assertEquals(MatchStrength.SOLID_MATCH, matcher.getMatchStrength());
// and thus:
JsonParser jp = matcher.createParserWithMatch();
assertToken(JsonToken.START_OBJECT, jp.nextToken());
assertToken(JsonToken.FIELD_NAME, jp.nextToken());
assertEquals("field", jp.getCurrentName());
assertToken(JsonToken.VALUE_TRUE, jp.nextToken());
assertToken(JsonToken.END_OBJECT, jp.nextToken());
assertNull(jp.nextToken());
jp.close();
}
/**
* While JSON String is not a strong match alone, it should
* be detected unless some better match is available
*/
public void testSimpleValidString() throws Exception
{
JsonFactory jsonF = new JsonFactory();
DataFormatDetector detector = new DataFormatDetector(jsonF);
final String JSON = "\"JSON!\"";
DataFormatMatcher matcher = detector.findFormat(new ByteArrayInputStream(JSON.getBytes("UTF-8")));
// should have match
assertTrue(matcher.hasMatch());
assertEquals("JSON", matcher.getMatchedFormatName());
assertSame(jsonF, matcher.getMatch());
assertEquals(MatchStrength.WEAK_MATCH, matcher.getMatchStrength());
JsonParser jp = matcher.createParserWithMatch();
assertToken(JsonToken.VALUE_STRING, jp.nextToken());
assertEquals("JSON!", jp.getText());
assertNull(jp.nextToken());
jp.close();
}
public void testSimpleInvalid() throws Exception
{
DataFormatDetector detector = new DataFormatDetector(new JsonFactory());
final String NON_JSON = "<root />";
DataFormatMatcher matcher = detector.findFormat(new ByteArrayInputStream(NON_JSON.getBytes("UTF-8")));
// should not have match
assertFalse(matcher.hasMatch());
// and thus:
assertEquals(MatchStrength.INCONCLUSIVE, matcher.getMatchStrength());
// also:
assertNull(matcher.createParserWithMatch());
}
}