package ch.akuhn.hapax.index;
import static ch.akuhn.hapax.index.AssociativeList.NONE;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
import org.junit.runner.RunWith;
import ch.unibe.jexample.Given;
import ch.unibe.jexample.JExample;
@RunWith(JExample.class)
public class AssociativeListTest {
@Test
public AssociativeList<String> empty() {
AssociativeList<String> list = new AssociativeList<String>();
assertEquals(0, list.size());
return list;
}
@Test @Given("empty")
public AssociativeList<String> withElements(AssociativeList<String> list) {
list.add("A");
list.add("B");
list.add("C");
list.add("D");
list.add("E");
assertEquals(5, list.size());
assertEquals(0, list.get("A"));
assertEquals(1, list.get("B"));
assertEquals(2, list.get("C"));
assertEquals(3, list.get("D"));
assertEquals(4, list.get("E"));
assertEquals("A", list.get(0));
assertEquals("B", list.get(1));
assertEquals("C", list.get(2));
assertEquals("D", list.get(3));
assertEquals("E", list.get(4));
return list;
}
@Test @Given("withElements")
public void testRemoveElement(AssociativeList<String> list) {
int index = list.remove("C");
assertEquals(2, index);
assertEquals(4, list.size());
assertEquals(0, list.get("A"));
assertEquals(1, list.get("B"));
assertEquals(NONE, list.get("C"));
assertEquals(2, list.get("D"));
assertEquals(3, list.get("E"));
assertEquals("A", list.get(0));
assertEquals("B", list.get(1));
assertEquals("D", list.get(2));
assertEquals("E", list.get(3));
assertEquals(null, list.get(4));
}
@Test @Given("withElements")
public void testRemoveOnClone(AssociativeList<String> list) {
list.clone().remove("C");
assertEquals(5, list.size());
assertEquals(2, list.get("C"));
assertEquals("C", list.get(2));
}
@Test @Given("withElements")
public void testContains(AssociativeList<String> list) {
assertFalse(list.contains(null));
assertTrue(list.contains("A"));
assertTrue(list.contains("B"));
assertTrue(list.contains("C"));
assertTrue(list.contains("D"));
assertTrue(list.contains("E"));
assertFalse(list.contains("F"));
}
@Test(expected=IllegalArgumentException.class) @Given("empty")
public void cannotAddNull(AssociativeList<String> list) {
list.add(null);
}
}