// ========================================================================
// 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.util;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Map;
import java.util.Set;
import org.junit.Before;
import org.junit.Test;
/**
*
*
*/
public class StringMapTest
{
StringMap m0;
StringMap m1;
StringMap m5;
StringMap m5i;
/*
* @see TestCase#setUp()
*/
@Before
public void setUp() throws Exception
{
m0=new StringMap();
m1=new StringMap(false);
m1.put("abc", "0");
m5=new StringMap(false);
m5.put("a", "0");
m5.put("ab", "1");
m5.put("abc", "2");
m5.put("abb", "3");
m5.put("bbb", "4");
m5i=new StringMap(true);
m5i.put(null, "0");
m5i.put("ab", "1");
m5i.put("abc", "2");
m5i.put("abb", "3");
m5i.put("bbb", null);
}
@Test
public void testSize()
{
assertEquals(0, m0.size());
assertEquals(1, m1.size());
assertEquals(5, m5.size());
assertEquals(5, m5i.size());
m1.remove("abc");
m5.remove("abc");
m5.put("bbb","x");
m5i.put("ABC", "x");
assertEquals(0, m0.size());
assertEquals(0, m1.size());
assertEquals(4, m5.size());
assertEquals(5, m5i.size());
}
@Test
public void testIsEmpty()
{
assertTrue(m0.isEmpty());
assertFalse(m1.isEmpty());
assertFalse(m5.isEmpty());
assertFalse(m5i.isEmpty());
}
@Test
public void testClear()
{
m0.clear();
m1.clear();
m5.clear();
m5i.clear();
assertTrue(m0.isEmpty());
assertTrue(m1.isEmpty());
assertTrue(m5.isEmpty());
assertTrue(m5i.isEmpty());
assertEquals(null,m1.get("abc"));
assertEquals(null,m5.get("abc"));
assertEquals(null,m5i.get("abc"));
}
/*
* Test for Object put(Object, Object)
*/
@Test
public void testPutGet()
{
assertEquals("2",m5.get("abc"));
assertEquals(null,m5.get("aBc"));
assertEquals("2",m5i.get("abc"));
assertEquals("2",m5i.get("aBc"));
m5.put(null,"x");
m5.put("aBc", "x");
m5i.put("AbC", "x");
StringBuilder buffer=new StringBuilder();
buffer.append("aBc");
assertEquals("2",m5.get("abc"));
assertEquals("x",m5.get(buffer));
assertEquals("x",m5i.get((Object)"abc"));
assertEquals("x",m5i.get("aBc"));
assertEquals("x",m5.get(null));
assertEquals("0",m5i.get(null));
}
/*
* Test for Map.Entry getEntry(String, int, int)
*/
@Test
public void testGetEntryStringintint()
{
Map.Entry entry;
entry=m5.getEntry("xabcyz",1,3);
assertTrue(entry!=null);
assertEquals("abc",entry.getKey());
assertEquals("2",entry.getValue());
entry=m5.getBestEntry("xabcyz".getBytes(),1,5);
assertTrue(entry!=null);
assertEquals("abc",entry.getKey());
assertEquals("2",entry.getValue());
entry=m5.getEntry("xaBcyz",1,3);
assertTrue(entry==null);
entry=m5i.getEntry("xaBcyz",1,3);
assertTrue(entry!=null);
assertEquals("abc",entry.getKey());
assertEquals("2",entry.getValue());
entry.setValue("x");
assertEquals("{[c:abc=x]}",entry.toString());
entry=m5i.getEntry((String)null,0,0);
assertTrue(entry!=null);
assertEquals(null,entry.getKey());
assertEquals("0",entry.getValue());
entry.setValue("x");
assertEquals("[:null=x]",entry.toString());
}
/*
* Test for Map.Entry getEntry(char[], int, int)
*/
@Test
public void testGetEntrycharArrayintint()
{
char[] xabcyz = {'x','a','b','c','y','z'};
char[] xaBcyz = {'x','a','B','c','y','z'};
Map.Entry entry;
entry=m5.getEntry(xabcyz,1,3);
assertTrue(entry!=null);
assertEquals("abc",entry.getKey());
assertEquals("2",entry.getValue());
entry=m5.getEntry(xaBcyz,1,3);
assertTrue(entry==null);
entry=m5i.getEntry(xaBcyz,1,3);
assertTrue(entry!=null);
assertEquals("abc",entry.getKey());
assertEquals("2",entry.getValue());
}
/*
* Test for Object remove(Object)
*/
@Test
public void testRemove()
{
m0.remove("abc");
m1.remove("abc");
m5.remove("aBc");
m5.remove("bbb");
m5i.remove("aBc");
m5i.remove(null);
assertEquals(0, m0.size());
assertEquals(0, m1.size());
assertEquals(4, m5.size());
assertEquals(3, m5i.size());
assertEquals("2",m5.get("abc"));
assertEquals(null,m5.get("bbb"));
assertEquals(null,m5i.get("AbC"));
assertEquals(null,m5i.get(null));
}
/*
* Test for Set entrySet()
*/
@Test
public void testEntrySet()
{
Set es0=m0.entrySet();
Set es1=m1.entrySet();
Set es5=m5.entrySet();
assertEquals(0, es0.size());
assertEquals(1, es1.size());
assertEquals(5, es5.size());
}
/*
* Test for boolean containsKey(Object)
*/
@Test
public void testContainsKey()
{
assertTrue(m5.containsKey("abc"));
assertTrue(!m5.containsKey("aBc"));
assertTrue(m5.containsKey("bbb"));
assertTrue(!m5.containsKey("xyz"));
assertTrue(m5i.containsKey(null));
assertTrue(m5i.containsKey("abc"));
assertTrue(m5i.containsKey("aBc"));
assertTrue(m5i.containsKey("ABC"));
}
@Test
public void testWriteExternal()
throws Exception
{
ByteArrayOutputStream bout= new ByteArrayOutputStream();
ObjectOutputStream oo=new ObjectOutputStream(bout);
ObjectInputStream oi;
oo.writeObject(m0);
oo.writeObject(m1);
oo.writeObject(m5);
oo.writeObject(m5i);
oi=new ObjectInputStream(new ByteArrayInputStream(bout.toByteArray()));
m0=(StringMap)oi.readObject();
m1=(StringMap)oi.readObject();
m5=(StringMap)oi.readObject();
m5i=(StringMap)oi.readObject();
testSize();
oi=new ObjectInputStream(new ByteArrayInputStream(bout.toByteArray()));
m0=(StringMap)oi.readObject();
m1=(StringMap)oi.readObject();
m5=(StringMap)oi.readObject();
m5i=(StringMap)oi.readObject();
testPutGet();
}
@Test
public void testToString()
{
assertEquals("{}",m0.toString());
assertEquals("{abc=0}",m1.toString());
assertTrue(m5.toString().indexOf("abc=2")>0);
}
@Test
public void testIgnoreCase()
{
StringMap map = new StringMap(true);
map.put("POST","1");
map.put("HEAD","2");
map.put("PUT","3");
map.put("OPTIONS","4");
map.put("DELETE","5");
map.put("TRACE","6");
map.put("CONNECT","7");
map.put("Upgrade","8");
assertEquals("1",map.get("POST"));
assertEquals("1",map.get("pOST"));
assertEquals("1",map.get("Post"));
assertEquals("8",map.get("UPGRADE"));
assertEquals("8",map.get("Upgrade"));
assertEquals("8",map.get("upgrade"));
}
}