package com.fasterxml.jackson.core.util; import java.io.*; import java.nio.ByteBuffer; import java.util.Arrays; import com.fasterxml.jackson.core.SerializableString; import com.fasterxml.jackson.core.io.SerializedString; /** * Simple unit tests to try to verify that the default * {@link SerializableString} implementation works as expected. */ public class TestSerializedString extends com.fasterxml.jackson.test.BaseTest { public void testAppending() throws IOException { final String INPUT = "\"quo\\ted\""; final String QUOTED = "\\\"quo\\\\ted\\\""; SerializableString sstr = new SerializedString(INPUT); // sanity checks first: assertEquals(sstr.getValue(), INPUT); assertEquals(QUOTED, new String(sstr.asQuotedChars())); ByteArrayOutputStream bytes = new ByteArrayOutputStream(); assertEquals(QUOTED.length(), sstr.writeQuotedUTF8(bytes)); assertEquals(QUOTED, bytes.toString("UTF-8")); bytes.reset(); assertEquals(INPUT.length(), sstr.writeUnquotedUTF8(bytes)); assertEquals(INPUT, bytes.toString("UTF-8")); byte[] buffer = new byte[100]; assertEquals(QUOTED.length(), sstr.appendQuotedUTF8(buffer, 3)); assertEquals(QUOTED, new String(buffer, 3, QUOTED.length())); Arrays.fill(buffer, (byte) 0); assertEquals(INPUT.length(), sstr.appendUnquotedUTF8(buffer, 5)); assertEquals(INPUT, new String(buffer, 5, INPUT.length())); } public void testFailedAccess() throws IOException { final String INPUT = "Bit longer text"; SerializableString sstr = new SerializedString(INPUT); final byte[] buffer = new byte[INPUT.length() - 2]; final char[] ch = new char[INPUT.length() - 2]; final ByteBuffer bbuf = ByteBuffer.allocate(INPUT.length() - 2); assertEquals(-1, sstr.appendQuotedUTF8(buffer, 0)); assertEquals(-1, sstr.appendQuoted(ch, 0)); assertEquals(-1, sstr.putQuotedUTF8(bbuf)); bbuf.rewind(); assertEquals(-1, sstr.appendUnquotedUTF8(buffer, 0)); assertEquals(-1, sstr.appendUnquoted(ch, 0)); assertEquals(-1, sstr.putUnquotedUTF8(bbuf)); } }