UTF32ParseTest.java
package tools.jackson.core.unittest.read;
import org.junit.jupiter.api.Test;
import tools.jackson.core.JacksonException;
import tools.jackson.core.JsonParser;
import tools.jackson.core.ObjectReadContext;
import tools.jackson.core.exc.StreamReadException;
import tools.jackson.core.json.JsonFactory;
import tools.jackson.core.unittest.*;
import static org.junit.jupiter.api.Assertions.fail;
// Tests from [jackson-core#382]
class UTF32ParseTest extends JacksonCoreTestBase
{
private final JsonFactory FACTORY = newStreamFactory();
@Test
void simpleEOFs() throws Exception
{
// 2 spaces
byte[] data = { 0x00, 0x00, 0x00, 0x20,
0x00, 0x00, 0x00, 0x20
};
for (int len = 5; len <= 7; ++len) {
JsonParser parser = FACTORY.createParser(ObjectReadContext.empty(), data, 0, len);
try {
parser.nextToken();
fail("Should not pass");
} catch (JacksonException e) {
verifyException(e, "Unexpected EOF");
verifyException(e, "of a 4-byte UTF-32 char");
}
parser.close();
}
}
@Test
void simpleInvalidUTF32() throws Exception
{
// 2 characters, space, then something beyond valid Unicode set
byte[] data = {
0x00,
0x00,
0x00,
0x20,
(byte) 0xFE,
(byte) 0xFF,
0x00,
0x01
};
JsonParser parser = FACTORY.createParser(ObjectReadContext.empty(), data);
try {
parser.nextToken();
fail("Should not pass");
} catch (JacksonException e) {
verifyException(e, "Invalid UTF-32 character 0xfefe0001");
}
parser.close();
}
@Test
void simpleSevenNullBytes() throws Exception {
byte[] data = new byte[7];
JsonParser parser = FACTORY.createParser(ObjectReadContext.empty(), data);
try {
parser.nextToken();
fail("Should not pass");
} catch (StreamReadException e) {
verifyException(e, "Illegal character ((CTRL-CHAR, code 0))");
}
parser.close();
}
}