blob: 28d0e6be5e81747b08cc06ad417c1e330d939aea [file] [log] [blame]
//
// ========================================================================
// Copyright (c) 1995-2015 Mort Bay Consulting Pty. Ltd.
// ------------------------------------------------------------------------
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// and Apache License v2.0 which accompanies this distribution.
//
// The Eclipse Public License is available at
// http://www.eclipse.org/legal/epl-v10.html
//
// The Apache License v2.0 is available at
// http://www.opensource.org/licenses/apache2.0.php
//
// You may elect to redistribute this code under either of these licenses.
// ========================================================================
//
package org.eclipse.jetty.websocket.common.message;
import static org.hamcrest.Matchers.is;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import org.eclipse.jetty.util.BufferUtil;
import org.junit.Assert;
import org.junit.Test;
public class Utf8CharBufferTest
{
private static String asString(ByteBuffer buffer)
{
return BufferUtil.toUTF8String(buffer);
}
private static byte[] asUTF(String str)
{
return str.getBytes(StandardCharsets.UTF_8);
}
@Test
public void testAppendGetAppendGet()
{
ByteBuffer buf = ByteBuffer.allocate(128);
Utf8CharBuffer utf = Utf8CharBuffer.wrap(buf);
byte hellobytes[] = asUTF("Hello ");
byte worldbytes[] = asUTF("World!");
utf.append(hellobytes, 0, hellobytes.length);
ByteBuffer hellobuf = utf.getByteBuffer();
utf.append(worldbytes, 0, worldbytes.length);
ByteBuffer worldbuf = utf.getByteBuffer();
Assert.assertThat("Hello buffer",asString(hellobuf),is("Hello "));
Assert.assertThat("World buffer",asString(worldbuf),is("Hello World!"));
}
@Test
public void testAppendGetClearAppendGet()
{
int bufsize = 128;
ByteBuffer buf = ByteBuffer.allocate(bufsize);
Utf8CharBuffer utf = Utf8CharBuffer.wrap(buf);
int expectedSize = bufsize / 2;
Assert.assertThat("Remaining (initial)",utf.remaining(),is(expectedSize));
byte hellobytes[] = asUTF("Hello World");
utf.append(hellobytes,0,hellobytes.length);
ByteBuffer hellobuf = utf.getByteBuffer();
Assert.assertThat("Remaining (after append)",utf.remaining(),is(expectedSize - hellobytes.length));
Assert.assertThat("Hello buffer",asString(hellobuf),is("Hello World"));
utf.clear();
Assert.assertThat("Remaining (after clear)",utf.remaining(),is(expectedSize));
byte whatnowbytes[] = asUTF("What Now?");
utf.append(whatnowbytes,0,whatnowbytes.length);
ByteBuffer whatnowbuf = utf.getByteBuffer();
Assert.assertThat("Remaining (after 2nd append)",utf.remaining(),is(expectedSize - whatnowbytes.length));
Assert.assertThat("What buffer",asString(whatnowbuf),is("What Now?"));
}
@Test
public void testAppendUnicodeGetBuffer()
{
ByteBuffer buf = ByteBuffer.allocate(64);
Utf8CharBuffer utf = Utf8CharBuffer.wrap(buf);
byte bb[] = asUTF("Hello A\u00ea\u00f1\u00fcC");
utf.append(bb,0,bb.length);
ByteBuffer actual = utf.getByteBuffer();
Assert.assertThat("Buffer length should be retained",actual.remaining(),is(bb.length));
Assert.assertThat("Message",asString(actual),is("Hello A\u00ea\u00f1\u00fcC"));
}
@Test
public void testSimpleGetBuffer()
{
int bufsize = 64;
ByteBuffer buf = ByteBuffer.allocate(bufsize);
Utf8CharBuffer utf = Utf8CharBuffer.wrap(buf);
int expectedSize = bufsize / 2;
Assert.assertThat("Remaining (initial)",utf.remaining(),is(expectedSize));
byte bb[] = asUTF("Hello World");
utf.append(bb,0,bb.length);
expectedSize -= bb.length;
Assert.assertThat("Remaining (after append)",utf.remaining(),is(expectedSize));
ByteBuffer actual = utf.getByteBuffer();
Assert.assertThat("Buffer length",actual.remaining(),is(bb.length));
Assert.assertThat("Message",asString(actual),is("Hello World"));
}
}