package net.wotonomy.foundation; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNotSame; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.util.ArrayList; import java.util.Enumeration; import java.util.Iterator; import java.util.List; import java.util.ListIterator; import org.junit.After; import org.junit.Before; import org.junit.Test; public class NSArrayTest { Object o1, o2, o3, o4, o5; @Before public void setUp() throws Exception { o1 = "o1"; o2 = Integer.valueOf(2); o3 = null; o4 = "o4"; } @After public void tearDown() throws Exception { o1 = null; o2 = null; o3 = null; o4 = null; } /* * Test method for 'net.wotonomy.foundation.NSArray.hashCode()' */ @Test 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)' */ @Test 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)' */ @Test public void testEmptyList() { assertNotNull(NSArray.EmptyArray); assertEquals(0, NSArray.EmptyArray.count()); } /* * Test method for 'net.wotonomy.foundation.NSArray.NSArray(List, Object)' */ @Test 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)' */ @Test 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()' */ @Test public void testNSArray() { NSArray array = new NSArray(); assertNotNull(array); } /* * Test method for 'net.wotonomy.foundation.NSArray.NSArray(Object)' */ @Test 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)' */ @Test 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[])' */ @Test 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)' */ @Test 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)' */ @Test 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)' */ @Test 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)' */ @Test 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)' */ @Test 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)' */ @Test 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)' */ @Test 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()' */ @Test 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. */ @Test 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()' */ @Test 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()' */ @Test 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[])' */ @Test 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); } @Test 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); } @Test 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. */ @Test 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); } @Test 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)' */ @Test 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)' */ @Test 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")); } @Test public void testIndexOfIdenticalObjectObject() { Integer i1 = Integer.valueOf(3 - 1); Integer i2 = Integer.valueOf(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)); } @Test public void testIndexOfIdenticalObjectObjectNSRange() { Integer i1 = Integer.valueOf(3 - 1); Integer i2 = Integer.valueOf(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)); } @Test 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) { } } @Test 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"); * * } */ @Test public void testToString() { NSArray array = new NSArray(new Object[] { "o1", Integer.valueOf(1), "o3" }); assertEquals("(o1, 1, o3)", array.toString()); } @Test 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)); } @Test 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)); } @Test 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) { } } @Test 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)); } @Test public void testIsEmpty() { assertFalse(new NSArray(new Object[] { o1, o2, o4 }).isEmpty()); assertTrue(new NSArray(new Object[] {}).isEmpty()); } @Test 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)); } @Test 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()); } @Test 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); } @Test 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); } @Test 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)); } @Test 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)); } @Test 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)); } @Test 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)); } @Test public void testClear() { NSArray array = new NSArray(new Object[] { o1, o2 }); array.clear(); assertEquals(0, array.size()); } @Test 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()); } @Test 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()); } @Test 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()); } @Test 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)); } @Test 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)); } @Test 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"); * * } */ }