| package org.codehaus.jackson.smile; | |
| import java.io.*; | |
| import java.util.Random; | |
| import org.codehaus.jackson.*; | |
| public class TestSmileParserNames extends SmileTestBase | |
| { | |
| public void testLongNames() throws IOException | |
| { | |
| _testWithName(generateName(5000)); | |
| } | |
| public void testJsonBinForLargeObjects() throws Exception | |
| { | |
| StringBuilder nameBuf = new StringBuilder("longString"); | |
| int minLength = 9000; | |
| for (int i = 1; nameBuf.length() < minLength; ++i) { | |
| nameBuf.append("." + i); | |
| } | |
| String name = nameBuf.toString(); | |
| _testWithName(name); | |
| } | |
| /* | |
| /********************************************************** | |
| /* Helper methods | |
| /********************************************************** | |
| */ | |
| private void _testWithName(String name) throws IOException | |
| { | |
| byte[] data = _smileDoc("{"+quote(name)+":13}"); | |
| // important: MUST use InputStream to enforce buffer boundaries! | |
| SmileParser p = _smileParser(new ByteArrayInputStream(data)); | |
| assertNull(p.getCurrentToken()); | |
| assertToken(JsonToken.START_OBJECT, p.nextToken()); | |
| assertToken(JsonToken.FIELD_NAME, p.nextToken()); | |
| assertEquals(name, p.getCurrentName()); | |
| assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken()); | |
| assertEquals(13, p.getIntValue()); | |
| assertEquals(name, p.getCurrentName()); | |
| assertToken(JsonToken.END_OBJECT, p.nextToken()); | |
| assertNull(p.nextToken()); | |
| p.close(); | |
| } | |
| private String generateName(int minLen) | |
| { | |
| StringBuilder sb = new StringBuilder(); | |
| Random rnd = new Random(123); | |
| while (sb.length() < minLen) { | |
| int ch = rnd.nextInt(96); | |
| if (ch < 32) { // ascii (single byte) | |
| sb.append((char) (48 + ch)); | |
| } else if (ch < 64) { // 2 byte | |
| sb.append((char) (128 + ch)); | |
| } else { // 3 byte | |
| sb.append((char) (4000 + ch)); | |
| } | |
| } | |
| return sb.toString(); | |
| } | |
| } |