// ========================================================================
// Copyright (c) 2004-2009 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.io;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
import org.junit.Before;
import org.junit.Test;
/**
*
*/
public class BufferCacheTest
{
private final static String[] S = {"S0", "S1", "s2", "s3" };
private BufferCache cache;
@Before
public void init() throws Exception
{
cache=new BufferCache();
cache.add(S[1],1);
cache.add(S[2],2);
cache.add(S[3],3);
}
@Test
public void testLookupIndex()
{
for (int i=0; i<S.length; i++)
{
String s="S0S1s2s3";
ByteArrayBuffer buf=new ByteArrayBuffer(s.getBytes(),i*2,2);
BufferCache.CachedBuffer b=cache.get(buf);
int index=b==null?-1:b.getOrdinal();
if (i>0)
assertEquals(i,index);
else
assertEquals(-1,index);
}
}
@Test
public void testGetBuffer()
{
for (int i=0; i<S.length; i++)
{
String s="S0S1s2s3";
ByteArrayBuffer buf=new ByteArrayBuffer(s.getBytes(),i*2,2);
Buffer b=cache.get(buf);
if (i>0)
assertEquals(i,b.peek(1)-'0');
else
assertEquals(null,b);
}
}
@Test
public void testLookupBuffer()
{
for (int i=0; i<S.length; i++)
{
String s="S0S1s2s3";
ByteArrayBuffer buf=new ByteArrayBuffer(s.getBytes(),i*2,2);
Buffer b=cache.lookup(buf);
assertEquals(S[i],b.toString());
if (i>0)
assertSame(""+i, S[i], b.toString());
else
{
assertNotSame(""+i, S[i], b.toString());
assertEquals(""+i, S[i], b.toString());
}
}
}
@Test
public void testLookupPartialBuffer()
{
cache.add("44444",4);
ByteArrayBuffer buf=new ByteArrayBuffer("44444");
Buffer b=cache.lookup(buf);
assertEquals("44444",b.toString());
assertEquals(4,cache.getOrdinal(b));
buf=new ByteArrayBuffer("4444");
b=cache.lookup(buf);
assertEquals(-1,cache.getOrdinal(b));
buf=new ByteArrayBuffer("44444x");
b=cache.lookup(buf);
assertEquals(-1,cache.getOrdinal(b));
}
@Test
public void testInsensitiveLookupBuffer()
{
for (int i=0; i<S.length; i++)
{
String s="s0s1S2S3";
ByteArrayBuffer buf=new ByteArrayBuffer(s.getBytes(),i*2,2);
Buffer b=cache.lookup(buf);
assertTrue("test"+i,S[i].equalsIgnoreCase(b.toString()));
if (i>0)
assertSame("test"+i, S[i], b.toString());
else
assertNotSame("test"+i, S[i], b.toString());
}
}
@Test
public void testToString()
{
for (int i=0; i<S.length; i++)
{
String s="S0S1s2s3";
ByteArrayBuffer buf=new ByteArrayBuffer(s.getBytes(),i*2,2);
String b=cache.toString(buf);
assertEquals(S[i],b);
if (i>0)
assertSame(S[i], b);
else
assertNotSame(S[i], b);
}
}
}