package net.wotonomy.foundation; import java.util.ArrayList; import java.util.Collection; import java.util.Enumeration; import java.util.Iterator; import java.util.List; import java.util.ListIterator; import junit.framework.TestCase; public class NSArrayTest extends TestCase { Object o1, o2, o3, o4, o5; public void setUp() throws Exception { o1 = "o1"; o2 = new Integer(2); o3 = null; o4 = "o4"; super.setUp(); } public void tearDown() throws Exception { o1 = null; o2 = null; o3 = null; o4 = null; super.tearDown(); } /* * Test method for 'net.wotonomy.foundation.NSArray.hashCode()' */ public void testHashCode() { NSArray array1 = new NSArray(o1); NSArray array2 = new NSArray(o1); //same content, same hashcode. NSArray array3 = new NSArray("Different"); assertNotSame(array1,array2); assertEquals(array1.hashCode(),array2.hashCode()); assertFalse("Should have different hashcodes",array1.hashCode() == array3.hashCode()); } /* * Test method for 'net.wotonomy.foundation.NSArray.arrayBackedByList(List)' */ public void testArrayBackedByList() { List list = new ArrayList(); NSArray array = NSArray.arrayBackedByList(list); assertNotNull(array); assertSame(list,array.list); } /* * Test method for 'net.wotonomy.foundation.NSArray.NSArray(List, Object)' */ public void testEmptyList() { assertNotNull(NSArray.EmptyArray); assertEquals(0,NSArray.EmptyArray.count()); } /* * Test method for 'net.wotonomy.foundation.NSArray.NSArray(List, Object)' */ public void testNSArrayListObject() { List list = new ArrayList(); NSArray array = new NSArray(list, null); assertNotNull(array); assertSame(list,array.list); } /* * Test method for 'net.wotonomy.foundation.NSArray.NSArray(int)' */ public void testNSArrayInt() { NSArray array = new NSArray(5); assertNotNull(array); array = new NSArray(0); assertNotNull(array); try { array = new NSArray(-1); fail("Failed to catch IllegalArgumentException."); } catch (IllegalArgumentException e) {} assertNotNull(array); array = new NSArray(1000); assertNotNull(array); } /* * Test method for 'net.wotonomy.foundation.NSArray.NSArray()' */ public void testNSArray() { NSArray array = new NSArray(); assertNotNull(array); } /* * Test method for 'net.wotonomy.foundation.NSArray.NSArray(Object)' */ public void testNSArrayObject() { NSArray array = new NSArray(o1); assertNotNull(array); assertEquals(1,array.count()); assertEquals(o1,array.get(0)); } /* * Test method for 'net.wotonomy.foundation.NSArray.NSArray(Object)' */ public void testNSArrayObjectWithNull() { NSArray array = new NSArray((Object)null); assertNotNull(array); assertEquals(1,array.count()); assertEquals(null,array.get(0)); } /* * Test method for 'net.wotonomy.foundation.NSArray.NSArray(Object[])' */ public void testNSArrayObjectArray() { Object[] objects = { o1, o2, o3 }; NSArray array = new NSArray(objects); assertEquals(3,array.count()); for (int i = 0; i < objects.length ; i++) { assertEquals(objects[i],array.get(i)); } } /* * Test method for 'net.wotonomy.foundation.NSArray.NSArray(Collection)' */ public void testNSArrayCollection() { ArrayList list = new ArrayList(); list.add(o1); list.add(o2); list.add(o3); NSArray array = new NSArray(list); assertNotNull(array); assertNotSame(list,array.list); assertEquals(3,array.count()); // the following only works because we used ArrayList. // A collection that doesn't guarrantee order may not // pass this test. for (int i = 0; i < list.size() ; i++) { assertEquals(list.get(i),array.get(i)); } } /* * Test method for 'net.wotonomy.foundation.NSArray.arrayByAddingObject(Object)' */ public void testArrayByAddingObject() { NSArray array = new NSArray(o1); NSArray array2 = array.arrayByAddingObject(o2); assertEquals(2,array2.count()); assertEquals(o1,array2.get(0)); assertEquals(o2,array2.get(1)); } /* * Test method for 'net.wotonomy.foundation.NSArray.arrayByAddingObjectsFromArray(Collection)' */ public void testArrayByAddingObjectsFromArray() { NSArray array = new NSArray(o1); List list = new ArrayList(); list.add(o2); list.add(o3); NSArray array2 = array.arrayByAddingObjectsFromArray(list); assertEquals(3,array2.count()); assertEquals(o1,array2.get(0)); assertEquals(o2,array2.get(1)); assertEquals(o3,array2.get(2)); } /* * Test method for 'net.wotonomy.foundation.NSArray.componentsJoinedByString(String)' */ public void testComponentsJoinedByString() { Object[] objects = { o1, o2, o3 }; NSArray array = new NSArray(objects); assertEquals("o1, 2, null", array.componentsJoinedByString(", ")); } /* * Test method for 'net.wotonomy.foundation.NSArray.containsObject(Object)' */ public void testContainsObject() { NSArray array = new NSArray(o1); assertTrue(array.contains(o1)); assertFalse(array.contains(o2)); } /* * Test method for 'net.wotonomy.foundation.NSArray.firstObjectCommonWithArray(Collection)' */ public void testFirstObjectCommonWithArray() { ArrayList list = new ArrayList(); list.add(o2); list.add(o3); list.add(o4); NSArray array = new NSArray(new Object[]{o1, o3, o4}); assertEquals(o3,array.firstObjectCommonWithArray(list)); } /* * Test method for 'net.wotonomy.foundation.NSArray.isEqualToArray(List)' */ public void testEqualsAndIsEqualToArray() { NSArray array1 = new NSArray(o1); NSArray array2 = new NSArray(o1); //same content, same hashcode. NSArray array3 = new NSArray(o2); assertNotSame(array1,array2); assertTrue("Should be equal",array1.equals(array2)); assertTrue("Should be equal",array1.isEqualToArray(array2)); assertFalse("Should be unequal",array1.equals(array3)); assertFalse("Should be unequal",array1.isEqualToArray(array3)); } /* * Test method for 'net.wotonomy.foundation.NSArray.lastObject()' */ public void testLastObject() { NSArray array = new NSArray(new Object[]{o1, o2}); assertEquals(o2,array.lastObject()); // test for empty array assertEquals(null,NSArray.EmptyArray.lastObject()); } /* * Test method for 'net.wotonomy.foundation.NSArray.subarrayWithRange(NSRange)' * TODO: Add ranges that exceed the size of the array. */ public void testSubarrayWithRange() { NSArray array = new NSArray(new Object[]{o1, o2, o3, o4}); NSArray subarray = array.subarrayWithRange(new NSRange(1,2)); assertEquals(2,subarray.count()); assertEquals(o2,subarray.get(0)); assertEquals(o3,subarray.get(1)); } /* * Test method for 'net.wotonomy.foundation.NSArray.objectEnumerator()' */ public void testObjectEnumerator() { NSArray array = new NSArray(new Object[]{o1, o2, o3, o4}); Enumeration e = array.objectEnumerator(); assertTrue(e.hasMoreElements()); assertEquals(o1,e.nextElement()); assertEquals(o2,e.nextElement()); assertEquals(o3,e.nextElement()); assertEquals(o4,e.nextElement()); } /* * Test method for 'net.wotonomy.foundation.NSArray.reverseObjectEnumerator()' */ public void testReverseObjectEnumerator() { NSArray array = new NSArray(new Object[]{o1, o2, o3, o4}); Enumeration e = array.reverseObjectEnumerator(); assertTrue(e.hasMoreElements()); assertEquals(o4,e.nextElement()); assertEquals(o3,e.nextElement()); assertEquals(o2,e.nextElement()); assertEquals(o1,e.nextElement()); } /* * Test method for 'net.wotonomy.foundation.NSArray.getObjects(Object[])' */ public void testGetObjectsObjectArray() { Object[] oa = new Object[4]; NSArray array = new NSArray(new Object[] { o1,o2,o3,o4 }); array.getObjects(oa); assertEquals(o1,oa[0]); assertEquals(o2,oa[1]); assertEquals(o3,oa[2]); assertEquals(o4,oa[3]); assertEquals(4,oa.length); } public void testGetObjectsObjectArrayWithSmallArray() { Object[] oa = new Object[2]; NSArray array = new NSArray(new Object[] { o1,o2,o3,o4 }); array.getObjects(oa); assertEquals(o1,oa[0]); assertEquals(o2,oa[1]); assertEquals(2,oa.length); } public void testGetObjectsObjectArrayWithLargeArray() { Object[] oa = new Object[5]; NSArray array = new NSArray(new Object[] { o1,o2,o3,o4 }); array.getObjects(oa); assertEquals(o1,oa[0]); assertEquals(o2,oa[1]); assertEquals(o3,oa[2]); assertEquals(o4,oa[3]); assertEquals(null,oa[4]); assertEquals(5,oa.length); } /* * Test method for 'net.wotonomy.foundation.NSArray.getObjects(Object[], NSRange)' * TODO: Try more ranges. */ public void testGetObjectsObjectArrayNSRange() { Object[] oa = new Object[2]; NSArray array = new NSArray(new Object[] { o1,o2,o3,o4 }); array.getObjects(oa, new NSRange(1,2)); assertEquals(o2,oa[0]); assertEquals(o3,oa[1]); assertEquals(2,oa.length); } public void testGetObjectsObjectArrayNSRangeWithLargeRange() { Object[] oa = new Object[4]; NSArray array = new NSArray(new Object[] { o1,o2,o3,o4 }); array.getObjects(oa, new NSRange(1,90)); assertEquals(o2,oa[0]); assertEquals(o3,oa[1]); assertEquals(o4,oa[2]); assertEquals(null,oa[3]); assertEquals(4,oa.length); } /* * Test method for 'net.wotonomy.foundation.NSArray.indexOfObject(Object)' */ public void testIndexOfObjectObject() { NSArray array = new NSArray(new Object[] { o1,o2,o3,o4 }); assertEquals(0,array.indexOfObject(o1)); assertEquals(1,array.indexOfObject(o2)); assertEquals(2,array.indexOfObject(o3)); assertEquals(3,array.indexOfObject(o4)); assertEquals(-1,array.indexOfObject("No Such Object")); } /* * Test method for 'net.wotonomy.foundation.NSArray.indexOfObject(Object, NSRange)' */ public void testIndexOfObjectObjectNSRange() { NSArray array = new NSArray(new Object[] { o1,o2,o3,o4 }); NSRange range = new NSRange(1,2); assertEquals(-1,array.indexOfObject(o1,range)); assertEquals(1,array.indexOfObject(o2,range)); // should be -1 because o3 == null; assertEquals(-1,array.indexOfObject(o3,range)); assertEquals(-1,array.indexOfObject(o4,range)); assertEquals(-1,array.indexOfObject("No Such Object")); } public void testIndexOfIdenticalObjectObject() { Integer i1 = new Integer(3-1); Integer i2 = new Integer(4/2); NSArray array = new NSArray(new Object[] { o1,i2,o3,o4 }); assertEquals(1,array.indexOfObject(i1)); assertFalse(1 == array.indexOfIdenticalObject(i1)); assertEquals(1, array.indexOfIdenticalObject(i2)); } public void testIndexOfIdenticalObjectObjectNSRange() { Integer i1 = new Integer(3-1); Integer i2 = new Integer(4/2); NSRange range = new NSRange(1,2); NSArray array = new NSArray(new Object[] { o1,i2,o3,o4 }); assertEquals(1,array.indexOfObject(i1,range)); assertFalse(1 == array.indexOfIdenticalObject(i1,range)); assertEquals(1, array.indexOfIdenticalObject(i2,range)); NSRange range2 = new NSRange(3,2); assertEquals(-1, array.indexOfObject(i1,range2)); assertEquals(-1, array.indexOfIdenticalObject(i1,range2)); assertEquals(-1, array.indexOfIdenticalObject(i2,range2)); } public void testObjectAtIndex() { NSArray array = new NSArray(new Object[] { o1,o2,o3,o4 }); assertEquals(o1,array.objectAtIndex(0)); assertEquals(o2,array.objectAtIndex(1)); assertEquals(o3,array.objectAtIndex(2)); assertEquals(o4,array.objectAtIndex(3)); try { assertEquals(null,array.objectAtIndex(4)); fail("Should have thrown index out of bounds."); } catch (IndexOutOfBoundsException e) {} } public void testComponentsSeparatedByString() { String arrayString = "word0 word1 word2 word3"; NSArray array = NSArray.componentsSeparatedByString(arrayString," "); assertEquals("word0",array.objectAtIndex(0)); assertEquals("word1",array.objectAtIndex(1)); assertEquals("word2",array.objectAtIndex(2)); assertEquals("word3",array.objectAtIndex(3)); } /* public void testClone() { fail("Not yet implemented"); } public void testImmutableClone() { fail("Not yet implemented"); } public void testMutableClone() { fail("Not yet implemented"); } */ public void testToString() { NSArray array = new NSArray(new Object[] { "o1",new Integer(1),"o3" }); assertEquals("(o1, 1, o3)",array.toString()); } public void testContains() { NSArray array = new NSArray(new Object[] { o1,o2,o4 }); assertTrue("Should contain object",array.contains(o1)); assertTrue("Should contain object",array.contains(o2)); assertFalse("Should not contain object",array.contains(o3)); assertTrue("Should contain object",array.contains(o4)); } public void testContainsAll() { NSArray array = new NSArray(new Object[] { o1,o2,o4 }); ArrayList list = new ArrayList(); list.add(o1); list.add(o2); assertTrue("Should have all elements of provided list.",array.containsAll(list)); ArrayList list2 = new ArrayList(); list2.add(o2); list2.add(o3); assertFalse("Should not have all elements of provided list.",array.containsAll(list2)); } public void testGet() { NSArray array = new NSArray(new Object[] { o1,o2,o4 }); assertEquals(o1,array.get(0)); assertEquals(o2,array.get(1)); assertEquals(o4,array.get(2)); try { array.get(3); } catch (IndexOutOfBoundsException e) {} } public void testIndexOf() { NSArray array = new NSArray(new Object[] { o1,o2,o4 }); assertEquals(0,array.indexOf(o1)); assertEquals(1,array.indexOf(o2)); assertEquals(-1,array.indexOf(o3)); assertEquals(2,array.indexOf(o4)); } public void testIsEmpty() { assertFalse(new NSArray(new Object[] { o1,o2,o4 } ).isEmpty()); assertTrue(new NSArray(new Object[] {} ).isEmpty()); } public void testLastIndexOf() { NSArray array = new NSArray(new Object[] { o1,o4,o2,o4 }); assertEquals(0,array.lastIndexOf(o1)); assertEquals(2,array.lastIndexOf(o2)); assertEquals(-1,array.lastIndexOf(o3)); assertEquals(3,array.lastIndexOf(o4)); } public void testSize() { assertEquals(3,new NSArray(new Object[] { o1,o2,o4 }).size()); assertEquals(1,new NSArray(new Object[] { o1 }).size()); assertEquals(0,new NSArray(new Object[] { }).size()); } public void testToArray() { NSArray array = new NSArray(new Object[] { o1,o2,o4 }); Object[] oarray = array.toArray(); assertEquals(oarray[0],o1); assertEquals(oarray[1],o2); assertEquals(oarray[2],o4); } public void testToArrayObjectArray() { NSArray array = new NSArray(new Object[] { o1,o2,o4 }); Object[] oa0 = new Object[3]; Object[] oa1 = array.toArray(oa0); assertSame(oa0,oa1); assertEquals(oa1[0],o1); assertEquals(oa1[1],o2); assertEquals(oa1[2],o4); } public void testAddIntObject() { NSArray array = new NSArray(new Object[] { o1,o3,o4 }); array.add(1,o2); assertEquals(0,array.indexOfObject(o1)); assertEquals(1,array.indexOfObject(o2)); assertEquals(2,array.indexOfObject(o3)); assertEquals(3,array.indexOfObject(o4)); } public void testAddObject() { NSArray array = new NSArray(new Object[] { o1,o2,o3 }); array.add(o4); assertEquals(0,array.indexOfObject(o1)); assertEquals(1,array.indexOfObject(o2)); assertEquals(2,array.indexOfObject(o3)); assertEquals(3,array.indexOfObject(o4)); } public void testAddAllCollection() { NSArray array = new NSArray(new Object[] { o1,o2 }); ArrayList list = new ArrayList(); list.add(o3); list.add(o4); array.addAll(list); assertEquals(0,array.indexOfObject(o1)); assertEquals(1,array.indexOfObject(o2)); assertEquals(2,array.indexOfObject(o3)); assertEquals(3,array.indexOfObject(o4)); } public void testAddAllIntCollection() { NSArray array = new NSArray(new Object[] { o1,o4 }); ArrayList list = new ArrayList(); list.add(o2); list.add(o3); array.addAll(1,list); assertEquals(0,array.indexOfObject(o1)); assertEquals(1,array.indexOfObject(o2)); assertEquals(2,array.indexOfObject(o3)); assertEquals(3,array.indexOfObject(o4)); } public void testClear() { NSArray array = new NSArray(new Object[] { o1,o2 }); array.clear(); assertEquals(0,array.size()); } public void testIterator() { NSArray array = new NSArray(new Object[] { o1,o4 }); Iterator i = array.iterator(); assertEquals(o1,i.next()); assertEquals(o4,i.next()); assertFalse(i.hasNext()); } public void testListIterator() { NSArray array = new NSArray(new Object[] { o1,o2,o3,o4 }); ListIterator i = array.listIterator(); assertEquals(o1,i.next()); assertEquals(o2,i.next()); assertEquals(o3,i.next()); assertEquals(o4,i.next()); assertEquals(o4,i.previous()); assertEquals(o3,i.previous()); assertEquals(o3,i.next()); assertEquals(o4,i.next()); assertFalse(i.hasNext()); } public void testListIteratorInt() { NSArray array = new NSArray(new Object[] { o1,o2,o3,o4 }); ListIterator i = array.listIterator(1); assertEquals(o2,i.next()); assertEquals(o3,i.next()); assertEquals(o4,i.next()); assertEquals(o4,i.previous()); assertEquals(o3,i.previous()); assertEquals(o3,i.next()); assertEquals(o4,i.next()); assertFalse(i.hasNext()); } public void testRemoveInt() { NSArray array = new NSArray(new Object[] { o1,o2,o3,o4 }); assertEquals(o2,array.remove(1)); assertEquals(o3,array.remove(1)); assertEquals(o1,array.objectAtIndex(0)); assertEquals(o4,array.objectAtIndex(1)); } public void testRemoveObject() { NSArray array = new NSArray(new Object[] { o1,o2,o3,o4 }); assertTrue(array.remove(o2)); assertTrue(array.remove(o3)); assertFalse(array.remove("blah")); assertEquals(o1,array.objectAtIndex(0)); assertEquals(o4,array.objectAtIndex(1)); } public void testRemoveAll() { NSArray array = new NSArray(new Object[] { o1,o2,o3,o4 }); ArrayList list = new ArrayList(); list.add(o1); list.add(o2); array.removeAll(list); assertEquals(2,array.size()); assertEquals(o3,array.objectAtIndex(0)); assertEquals(o4,array.objectAtIndex(1)); } /* public void testRetainAll() { fail("Not yet implemented"); } public void testSet() { fail("Not yet implemented"); } public void testSubList() { fail("Not yet implemented"); } public void testProtectedAdd() { fail("Not yet implemented"); } public void testProtectedAddAll() { fail("Not yet implemented"); } */ }