blob: 14670d3c821f9fab4012c9e1b98d42b2c7b41a33 [file] [log] [blame]
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();
}
}