package com.coding.basic.ut;
import static org.junit.Assert.*;
import java.lang.reflect.Field;
import org.junit.Before;
import org.junit.Test;
import com.coding.basic.ArrayList;
import com.coding.basic.Iterator;
public class ArrayListTest {
ArrayList target;
Object[] elementDataField;
@Before
public void setUp() throws Exception {
target = new ArrayList();
/*
* NOTE: getField only returns PUBLIC fields, getDeclaredField get all fields
Field[] allFields = target.getClass().getFields();
System.out.println("Get all fields");
for(Field tmpf : allFields){
System.out.println(tmpf.getName());
}
Field[] allDeclFields = target.getClass().getDeclaredFields();
System.out.println("Get all declared fields");
for(Field tmpf : allDeclFields){
System.out.println(tmpf.getName());
}
*
*/
try {
Field f = target.getClass().getDeclaredField("elementData");
f.setAccessible(true);
if(f.getType().isArray()){
elementDataField = (Object[]) f.get(target);
}
} catch (NoSuchFieldException e) {
fail(e.getMessage());
} catch (SecurityException e) {
fail(e.getMessage());
} catch (IllegalArgumentException e) {
fail(e.getMessage());
} catch (IllegalAccessException e) {
fail(e.getMessage());
}
}
@Test
public void testAddObject() {
Object item = new String("s1");
target.add(item);
assertEquals(item, elementDataField[0]);
}
@Test
public void testAddIndexObject() {
//fail("Not yet implemented");
Object item0 = new String("s0");
target.add(0, item0);
Object item1 = new String("s1");
target.add(0, item1);
assertEquals(item1, elementDataField[0]);
assertEquals(item0, elementDataField[1]);
}
@Test
public void testGet() {
target.add("0");
Object o = target.get(0);
assertEquals("0", o);
assertNotEquals("2", 0);
}
@Test
public void testRemove() {
String[] items = new String[]{"0","1","2"};
for(int i = 0; i<items.length; i++){
target.add(items[i]);
}
Object o = target.remove(1);
assertEquals(o,"1");
o = target.remove(1);
assertEquals(o, "2");
o = target.remove(0);
assertEquals(o, "0");
assertEquals(0, target.size());
}
@Test
public void testSize() {
for(int i = 0; i<10; i++){
Object item = String.valueOf(i);
target.add(item);
}
assertEquals(10, target.size());
}
@Test
public void testIterator() {
ArrayList al = new ArrayList();
String[] items = new String[]{"0","1","2","3","4"};
for(int i = 0 ; i< items.length; i++){
al.add(items[i] );
}
int count = 0;
Iterator itr = al.iterator();
while(itr.hasNext()){
Object o = itr.next();
assertEquals(items[count], o);
count++;
}
}
}