| package org.codehaus.jackson.io; |
| |
| import java.io.StringWriter; |
| import java.util.Random; |
| |
| import static org.junit.Assert.*; |
| |
| import org.codehaus.jackson.*; |
| |
| public class TestJsonStringEncoder |
| extends main.BaseTest |
| { |
| public void testQuoteAsString() throws Exception |
| { |
| JsonStringEncoder encoder = new JsonStringEncoder(); |
| char[] result = encoder.quoteAsString("foobar"); |
| assertArrayEquals("foobar".toCharArray(), result); |
| result = encoder.quoteAsString("\"x\""); |
| assertArrayEquals("\\\"x\\\"".toCharArray(), result); |
| } |
| |
| // For [JACKSON-853] |
| public void testQuoteLongAsString() throws Exception |
| { |
| JsonStringEncoder encoder = new JsonStringEncoder(); |
| StringBuilder sb = new StringBuilder(); |
| StringBuilder sb2 = new StringBuilder(); |
| for (int i = 0; i < 1111; ++i) { |
| sb.append('"'); |
| sb2.append("\\\""); |
| } |
| String input = sb.toString(); |
| String exp = sb2.toString(); |
| char[] result = encoder.quoteAsString(input); |
| assertEquals(2*input.length(), result.length); |
| assertEquals(exp, new String(result)); |
| |
| } |
| |
| public void testQuoteAsUTF8() throws Exception |
| { |
| // In this case, let's actually use existing JsonGenerator to produce expected values |
| JsonFactory f = new JsonFactory(); |
| JsonStringEncoder encoder = new JsonStringEncoder(); |
| int[] lengths = new int[] { |
| 5, 19, 200, 7000, 21000, 37000 |
| }; |
| for (int length : lengths) { |
| String str = generateRandom(length); |
| StringWriter sw = new StringWriter(length*2); |
| JsonGenerator jgen = f.createJsonGenerator(sw); |
| jgen.writeString(str); |
| jgen.close(); |
| String encoded = sw.toString(); |
| // ok, except need to remove surrounding quotes |
| encoded = encoded.substring(1, encoded.length() - 1); |
| byte[] expected = encoded.getBytes("UTF-8"); |
| byte[] actual = encoder.quoteAsUTF8(str); |
| assertArrayEquals(expected, actual); |
| } |
| } |
| |
| public void testEncodeAsUTF8() throws Exception |
| { |
| JsonStringEncoder encoder = new JsonStringEncoder(); |
| String[] strings = new String[] { |
| "a", "foobar", "p\u00f6ll\u00f6", "\"foo\"", |
| generateRandom(200), |
| generateRandom(5000), |
| generateRandom(39000) |
| }; |
| for (String str : strings) { |
| assertArrayEquals(str.getBytes("UTF-8"), encoder.encodeAsUTF8(str)); |
| } |
| } |
| |
| /* |
| /********************************************************** |
| /* Helper methods |
| /********************************************************** |
| */ |
| |
| |
| private String generateRandom(int length) |
| { |
| StringBuilder sb = new StringBuilder(length); |
| Random rnd = new Random(length); |
| for (int i = 0; i < length; ++i) { |
| // let's limit it not to include surrogate pairs: |
| char ch = (char) rnd.nextInt(0xCFFF); |
| sb.append(ch); |
| } |
| return sb.toString(); |
| } |
| } |
| |