| package org.codehaus.jackson.smile; |
| |
| import java.io.IOException; |
| |
| import org.codehaus.jackson.JsonLocation; |
| import org.codehaus.jackson.JsonParser; |
| import org.codehaus.jackson.JsonToken; |
| |
| public class TestSmileParserLocation |
| extends SmileTestBase |
| { |
| /** |
| * Basic unit test to verify that [JACKSON-] has been resolved. |
| */ |
| public void testSimpleOffsets() throws IOException |
| { |
| byte[] data = _smileDoc("[ true, null, false, 511 ]", true); // true -> write header |
| |
| JsonParser p = _smileParser(data); |
| assertNull(p.getCurrentToken()); |
| JsonLocation loc = p.getCurrentLocation(); |
| assertNotNull(loc); |
| // first: -1 for "not known", for character-based stuff |
| assertEquals(-1, loc.getCharOffset()); |
| // except that with 1.9.7 and above, we also consider column to be same as offset, for convenience |
| assertEquals(4, loc.getColumnNr()); |
| assertEquals(-1, loc.getLineNr()); |
| // but first 4 bytes are for header |
| assertEquals(4, loc.getByteOffset()); |
| |
| // array marker is a single byte, so: |
| assertToken(JsonToken.START_ARRAY, p.nextToken()); |
| assertEquals(5, p.getCurrentLocation().getByteOffset()); |
| assertEquals(4, p.getTokenLocation().getByteOffset()); |
| |
| // same for true and others except for last int |
| assertToken(JsonToken.VALUE_TRUE, p.nextToken()); |
| assertEquals(6, p.getCurrentLocation().getByteOffset()); |
| assertEquals(5, p.getTokenLocation().getByteOffset()); |
| |
| assertToken(JsonToken.VALUE_NULL, p.nextToken()); |
| assertEquals(7, p.getCurrentLocation().getByteOffset()); |
| assertEquals(6, p.getTokenLocation().getByteOffset()); |
| |
| assertToken(JsonToken.VALUE_FALSE, p.nextToken()); |
| assertEquals(8, p.getCurrentLocation().getByteOffset()); |
| assertEquals(7, p.getTokenLocation().getByteOffset()); |
| |
| // 0x1FF takes 3 bytes (type byte, 7/6 bit segments) |
| assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken()); |
| assertEquals(511, p.getIntValue()); |
| assertEquals(11, p.getCurrentLocation().getByteOffset()); |
| assertEquals(8, p.getTokenLocation().getByteOffset()); |
| |
| assertToken(JsonToken.END_ARRAY, p.nextToken()); |
| assertEquals(12, p.getCurrentLocation().getByteOffset()); |
| assertEquals(11, p.getTokenLocation().getByteOffset()); |
| |
| assertNull(p.nextToken()); |
| p.close(); |
| } |
| } |