diff options
Diffstat (limited to 'library/test/robotest/src/com/android/setupwizardlib/items/ItemGroupTest.java')
-rw-r--r-- | library/test/robotest/src/com/android/setupwizardlib/items/ItemGroupTest.java | 545 |
1 files changed, 282 insertions, 263 deletions
diff --git a/library/test/robotest/src/com/android/setupwizardlib/items/ItemGroupTest.java b/library/test/robotest/src/com/android/setupwizardlib/items/ItemGroupTest.java index ecaec71..3cbc576 100644 --- a/library/test/robotest/src/com/android/setupwizardlib/items/ItemGroupTest.java +++ b/library/test/robotest/src/com/android/setupwizardlib/items/ItemGroupTest.java @@ -16,289 +16,308 @@ package com.android.setupwizardlib.items; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertSame; +import static com.google.common.truth.Truth.assertWithMessage; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; -import com.android.setupwizardlib.robolectric.SuwLibRobolectricTestRunner; - import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InOrder; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; -@RunWith(SuwLibRobolectricTestRunner.class) -@Config(sdk = { Config.OLDEST_SDK, Config.NEWEST_SDK }) +@RunWith(RobolectricTestRunner.class) +@Config(sdk = {Config.OLDEST_SDK, Config.NEWEST_SDK}) public class ItemGroupTest { - private static final Item CHILD_1 = new EqualsItem("Child 1"); - private static final Item CHILD_2 = new EqualsItem("Child 2"); - private static final Item CHILD_3 = new EqualsItem("Child 3"); - private static final Item CHILD_4 = new EqualsItem("Child 4"); - - private ItemGroup mItemGroup; - - @Mock - private ItemHierarchy.Observer mObserver; - - @Before - public void setUp() { - MockitoAnnotations.initMocks(this); - mItemGroup = new ItemGroup(); - mItemGroup.registerObserver(mObserver); - } - - @Test - public void testGroup() { - mItemGroup.addChild(CHILD_1); - mItemGroup.addChild(CHILD_2); - - assertSame("Item at position 0 should be child1", CHILD_1, mItemGroup.getItemAt(0)); - assertSame("Item at position 1 should be child2", CHILD_2, mItemGroup.getItemAt(1)); - assertEquals("Should have 2 children", 2, mItemGroup.getCount()); - - final InOrder inOrder = inOrder(mObserver); - inOrder.verify(mObserver).onItemRangeInserted(eq(mItemGroup), eq(0), eq(1)); - inOrder.verify(mObserver).onItemRangeInserted(eq(mItemGroup), eq(1), eq(1)); - } - - @Test - public void testRemoveChild() { - mItemGroup.addChild(CHILD_1); - mItemGroup.addChild(CHILD_2); - mItemGroup.addChild(CHILD_3); - - mItemGroup.removeChild(CHILD_2); - - assertSame("Item at position 0 should be child1", CHILD_1, mItemGroup.getItemAt(0)); - assertSame("Item at position 1 should be child3", CHILD_3, mItemGroup.getItemAt(1)); - assertEquals("Should have 2 children", 2, mItemGroup.getCount()); - - verify(mObserver).onItemRangeRemoved(eq(mItemGroup), eq(1), eq(1)); - } - - @Test - public void testClear() { - mItemGroup.addChild(CHILD_1); - mItemGroup.addChild(CHILD_2); - - mItemGroup.clear(); - - assertEquals("Should have 0 child", 0, mItemGroup.getCount()); - - verify(mObserver).onItemRangeRemoved(eq(mItemGroup), eq(0), eq(2)); - } - - @Test - public void testNestedGroup() { - ItemGroup parentGroup = new ItemGroup(); - ItemGroup childGroup = new ItemGroup(); - parentGroup.registerObserver(mObserver); - - parentGroup.addChild(CHILD_1); - childGroup.addChild(CHILD_2); - childGroup.addChild(CHILD_3); - parentGroup.addChild(childGroup); - parentGroup.addChild(CHILD_4); - - assertSame("Position 0 should be child 1", CHILD_1, parentGroup.getItemAt(0)); - assertSame("Position 1 should be child 2", CHILD_2, parentGroup.getItemAt(1)); - assertSame("Position 2 should be child 3", CHILD_3, parentGroup.getItemAt(2)); - assertSame("Position 3 should be child 4", CHILD_4, parentGroup.getItemAt(3)); - - final InOrder inOrder = inOrder(mObserver); - inOrder.verify(mObserver).onItemRangeInserted(eq(parentGroup), eq(0), eq(1)); - inOrder.verify(mObserver).onItemRangeInserted(eq(parentGroup), eq(1), eq(2)); - inOrder.verify(mObserver).onItemRangeInserted(eq(parentGroup), eq(3), eq(1)); - verifyNoMoreInteractions(mObserver); - } - - @Test - public void testNestedGroupClearNotification() { - ItemGroup parentGroup = new ItemGroup(); - ItemGroup childGroup = new ItemGroup(); - parentGroup.registerObserver(mObserver); - - parentGroup.addChild(CHILD_1); - childGroup.addChild(CHILD_2); - childGroup.addChild(CHILD_3); - parentGroup.addChild(childGroup); - parentGroup.addChild(CHILD_4); - - childGroup.clear(); - - final InOrder inOrder = inOrder(mObserver); - inOrder.verify(mObserver).onItemRangeInserted(eq(parentGroup), eq(0), eq(1)); - inOrder.verify(mObserver).onItemRangeInserted(eq(parentGroup), eq(1), eq(2)); - inOrder.verify(mObserver).onItemRangeInserted(eq(parentGroup), eq(3), eq(1)); - verify(mObserver).onItemRangeRemoved(eq(parentGroup), eq(1), eq(2)); - verifyNoMoreInteractions(mObserver); - } - - @Test - public void testNestedGroupRemoveNotification() { - ItemGroup parentGroup = new ItemGroup(); - ItemGroup childGroup = new ItemGroup(); - parentGroup.registerObserver(mObserver); - - parentGroup.addChild(CHILD_1); - childGroup.addChild(CHILD_2); - childGroup.addChild(CHILD_3); - parentGroup.addChild(childGroup); - parentGroup.addChild(CHILD_4); - - childGroup.removeChild(CHILD_3); - childGroup.removeChild(CHILD_2); - - final InOrder inOrder = inOrder(mObserver); - inOrder.verify(mObserver).onItemRangeInserted(eq(parentGroup), eq(0), eq(1)); - inOrder.verify(mObserver).onItemRangeInserted(eq(parentGroup), eq(1), eq(2)); - inOrder.verify(mObserver).onItemRangeInserted(eq(parentGroup), eq(3), eq(1)); - inOrder.verify(mObserver).onItemRangeRemoved(eq(parentGroup), eq(2), eq(1)); - inOrder.verify(mObserver).onItemRangeRemoved(eq(parentGroup), eq(1), eq(1)); - verifyNoMoreInteractions(mObserver); + private static final Item CHILD_1 = new EqualsItem("Child 1"); + private static final Item CHILD_2 = new EqualsItem("Child 2"); + private static final Item CHILD_3 = new EqualsItem("Child 3"); + private static final Item CHILD_4 = new EqualsItem("Child 4"); + + private ItemGroup itemGroup; + + @Mock private ItemHierarchy.Observer observer; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + itemGroup = new ItemGroup(); + itemGroup.registerObserver(observer); + } + + @Test + public void testGroup() { + itemGroup.addChild(CHILD_1); + itemGroup.addChild(CHILD_2); + + assertWithMessage("Item at position 0 should be child1") + .that(itemGroup.getItemAt(0)) + .isSameAs(CHILD_1); + assertWithMessage("Item at position 1 should be child2") + .that(itemGroup.getItemAt(1)) + .isSameAs(CHILD_2); + assertWithMessage("Should have 2 children").that(itemGroup.getCount()).isEqualTo(2); + + final InOrder inOrder = inOrder(observer); + inOrder.verify(observer).onItemRangeInserted(eq(itemGroup), eq(0), eq(1)); + inOrder.verify(observer).onItemRangeInserted(eq(itemGroup), eq(1), eq(1)); + } + + @Test + public void testRemoveChild() { + itemGroup.addChild(CHILD_1); + itemGroup.addChild(CHILD_2); + itemGroup.addChild(CHILD_3); + + itemGroup.removeChild(CHILD_2); + + assertWithMessage("Item at position 0 should be child1") + .that(itemGroup.getItemAt(0)) + .isSameAs(CHILD_1); + assertWithMessage("Item at position 1 should be child3") + .that(itemGroup.getItemAt(1)) + .isSameAs(CHILD_3); + assertWithMessage("Should have 2 children").that(itemGroup.getCount()).isEqualTo(2); + + verify(observer).onItemRangeRemoved(eq(itemGroup), eq(1), eq(1)); + } + + @Test + public void testClear() { + itemGroup.addChild(CHILD_1); + itemGroup.addChild(CHILD_2); + + itemGroup.clear(); + + assertWithMessage("Should have 0 child").that(itemGroup.getCount()).isEqualTo(0); + + verify(observer).onItemRangeRemoved(eq(itemGroup), eq(0), eq(2)); + } + + @Test + public void testNestedGroup() { + ItemGroup parentGroup = new ItemGroup(); + ItemGroup childGroup = new ItemGroup(); + parentGroup.registerObserver(observer); + + parentGroup.addChild(CHILD_1); + childGroup.addChild(CHILD_2); + childGroup.addChild(CHILD_3); + parentGroup.addChild(childGroup); + parentGroup.addChild(CHILD_4); + + assertWithMessage("Position 0 should be child 1") + .that(parentGroup.getItemAt(0)) + .isSameAs(CHILD_1); + assertWithMessage("Position 1 should be child 2") + .that(parentGroup.getItemAt(1)) + .isSameAs(CHILD_2); + assertWithMessage("Position 2 should be child 3") + .that(parentGroup.getItemAt(2)) + .isSameAs(CHILD_3); + assertWithMessage("Position 3 should be child 4") + .that(parentGroup.getItemAt(3)) + .isSameAs(CHILD_4); + + final InOrder inOrder = inOrder(observer); + inOrder.verify(observer).onItemRangeInserted(eq(parentGroup), eq(0), eq(1)); + inOrder.verify(observer).onItemRangeInserted(eq(parentGroup), eq(1), eq(2)); + inOrder.verify(observer).onItemRangeInserted(eq(parentGroup), eq(3), eq(1)); + verifyNoMoreInteractions(observer); + } + + @Test + public void testNestedGroupClearNotification() { + ItemGroup parentGroup = new ItemGroup(); + ItemGroup childGroup = new ItemGroup(); + parentGroup.registerObserver(observer); + + parentGroup.addChild(CHILD_1); + childGroup.addChild(CHILD_2); + childGroup.addChild(CHILD_3); + parentGroup.addChild(childGroup); + parentGroup.addChild(CHILD_4); + + childGroup.clear(); + + final InOrder inOrder = inOrder(observer); + inOrder.verify(observer).onItemRangeInserted(eq(parentGroup), eq(0), eq(1)); + inOrder.verify(observer).onItemRangeInserted(eq(parentGroup), eq(1), eq(2)); + inOrder.verify(observer).onItemRangeInserted(eq(parentGroup), eq(3), eq(1)); + verify(observer).onItemRangeRemoved(eq(parentGroup), eq(1), eq(2)); + verifyNoMoreInteractions(observer); + } + + @Test + public void testNestedGroupRemoveNotification() { + ItemGroup parentGroup = new ItemGroup(); + ItemGroup childGroup = new ItemGroup(); + parentGroup.registerObserver(observer); + + parentGroup.addChild(CHILD_1); + childGroup.addChild(CHILD_2); + childGroup.addChild(CHILD_3); + parentGroup.addChild(childGroup); + parentGroup.addChild(CHILD_4); + + childGroup.removeChild(CHILD_3); + childGroup.removeChild(CHILD_2); + + final InOrder inOrder = inOrder(observer); + inOrder.verify(observer).onItemRangeInserted(eq(parentGroup), eq(0), eq(1)); + inOrder.verify(observer).onItemRangeInserted(eq(parentGroup), eq(1), eq(2)); + inOrder.verify(observer).onItemRangeInserted(eq(parentGroup), eq(3), eq(1)); + inOrder.verify(observer).onItemRangeRemoved(eq(parentGroup), eq(2), eq(1)); + inOrder.verify(observer).onItemRangeRemoved(eq(parentGroup), eq(1), eq(1)); + verifyNoMoreInteractions(observer); + } + + @Test + public void testNestedGroupClear() { + ItemGroup parentGroup = new ItemGroup(); + ItemGroup childGroup = new ItemGroup(); + parentGroup.registerObserver(observer); + + parentGroup.addChild(CHILD_1); + childGroup.addChild(CHILD_2); + childGroup.addChild(CHILD_3); + parentGroup.addChild(childGroup); + + childGroup.clear(); + + final InOrder inOrder = inOrder(observer); + inOrder.verify(observer).onItemRangeInserted(eq(parentGroup), eq(0), eq(1)); + inOrder.verify(observer).onItemRangeInserted(eq(parentGroup), eq(1), eq(2)); + inOrder.verify(observer).onItemRangeRemoved(eq(parentGroup), eq(1), eq(2)); + verifyNoMoreInteractions(observer); + } + + @Test + public void testNestedGroupRemoveLastChild() { + ItemGroup parentGroup = new ItemGroup(); + ItemGroup childGroup1 = new ItemGroup(); + ItemGroup childGroup2 = new ItemGroup(); + parentGroup.registerObserver(observer); + + childGroup1.addChild(CHILD_1); + childGroup1.addChild(CHILD_2); + parentGroup.addChild(childGroup1); + childGroup2.addChild(CHILD_3); + childGroup2.addChild(CHILD_4); + parentGroup.addChild(childGroup2); + + childGroup2.removeChild(CHILD_4); + childGroup2.removeChild(CHILD_3); + + final InOrder inOrder = inOrder(observer); + inOrder.verify(observer).onItemRangeInserted(eq(parentGroup), eq(0), eq(2)); + inOrder.verify(observer).onItemRangeInserted(eq(parentGroup), eq(2), eq(2)); + inOrder.verify(observer).onItemRangeRemoved(eq(parentGroup), eq(3), eq(1)); + inOrder.verify(observer).onItemRangeRemoved(eq(parentGroup), eq(2), eq(1)); + verifyNoMoreInteractions(observer); + } + + @Test + public void testNestedGroupClearOnlyChild() { + ItemGroup parentGroup = new ItemGroup(); + ItemGroup childGroup = new ItemGroup(); + parentGroup.registerObserver(observer); + + childGroup.addChild(CHILD_1); + childGroup.addChild(CHILD_2); + parentGroup.addChild(childGroup); + + childGroup.clear(); + + final InOrder inOrder = inOrder(observer); + inOrder.verify(observer).onItemRangeInserted(eq(parentGroup), eq(0), eq(2)); + inOrder.verify(observer).onItemRangeRemoved(eq(parentGroup), eq(0), eq(2)); + verifyNoMoreInteractions(observer); + } + + @Test + public void testNotifyChange() { + itemGroup.addChild(CHILD_1); + itemGroup.addChild(CHILD_2); + + CHILD_2.setTitle("Child 2 modified"); + + verify(observer).onItemRangeChanged(eq(itemGroup), eq(1), eq(1)); + } + + @Test + public void testEmptyChildGroup() { + ItemGroup parentGroup = new ItemGroup(); + ItemGroup childGroup = new ItemGroup(); + + parentGroup.addChild(CHILD_1); + parentGroup.addChild(childGroup); + parentGroup.addChild(CHILD_2); + + assertWithMessage("Position 0 should be child 1") + .that(parentGroup.getItemAt(0)) + .isSameAs(CHILD_1); + assertWithMessage("Position 1 should be child 2") + .that(parentGroup.getItemAt(1)) + .isSameAs(CHILD_2); + } + + @Test + public void testFindItemById() { + CHILD_1.setId(12345); + CHILD_2.setId(23456); + + itemGroup.addChild(CHILD_1); + itemGroup.addChild(CHILD_2); + + assertWithMessage("Find item 23456 should return child 2") + .that(itemGroup.findItemById(23456)) + .isSameAs(CHILD_2); + } + + @Test + public void testFindItemByIdNotFound() { + CHILD_1.setId(12345); + CHILD_2.setId(23456); + + itemGroup.addChild(CHILD_1); + itemGroup.addChild(CHILD_2); + + assertWithMessage("ID not found should return null") + .that(itemGroup.findItemById(56789)) + .isNull(); + } + + /** + * This class will always return true on {@link #equals(Object)}. Used to ensure that ItemGroup is + * using identity rather than equals(). Be sure to use assertSame rather than assertEquals when + * comparing items of this class. + */ + private static class EqualsItem extends Item { + + EqualsItem(String name) { + setTitle(name); } - @Test - public void testNestedGroupClear() { - ItemGroup parentGroup = new ItemGroup(); - ItemGroup childGroup = new ItemGroup(); - parentGroup.registerObserver(mObserver); - - parentGroup.addChild(CHILD_1); - childGroup.addChild(CHILD_2); - childGroup.addChild(CHILD_3); - parentGroup.addChild(childGroup); - - childGroup.clear(); - - final InOrder inOrder = inOrder(mObserver); - inOrder.verify(mObserver).onItemRangeInserted(eq(parentGroup), eq(0), eq(1)); - inOrder.verify(mObserver).onItemRangeInserted(eq(parentGroup), eq(1), eq(2)); - inOrder.verify(mObserver).onItemRangeRemoved(eq(parentGroup), eq(1), eq(2)); - verifyNoMoreInteractions(mObserver); - } - - @Test - public void testNestedGroupRemoveLastChild() { - ItemGroup parentGroup = new ItemGroup(); - ItemGroup childGroup1 = new ItemGroup(); - ItemGroup childGroup2 = new ItemGroup(); - parentGroup.registerObserver(mObserver); - - childGroup1.addChild(CHILD_1); - childGroup1.addChild(CHILD_2); - parentGroup.addChild(childGroup1); - childGroup2.addChild(CHILD_3); - childGroup2.addChild(CHILD_4); - parentGroup.addChild(childGroup2); - - childGroup2.removeChild(CHILD_4); - childGroup2.removeChild(CHILD_3); - - final InOrder inOrder = inOrder(mObserver); - inOrder.verify(mObserver).onItemRangeInserted(eq(parentGroup), eq(0), eq(2)); - inOrder.verify(mObserver).onItemRangeInserted(eq(parentGroup), eq(2), eq(2)); - inOrder.verify(mObserver).onItemRangeRemoved(eq(parentGroup), eq(3), eq(1)); - inOrder.verify(mObserver).onItemRangeRemoved(eq(parentGroup), eq(2), eq(1)); - verifyNoMoreInteractions(mObserver); - } - - @Test - public void testNestedGroupClearOnlyChild() { - ItemGroup parentGroup = new ItemGroup(); - ItemGroup childGroup = new ItemGroup(); - parentGroup.registerObserver(mObserver); - - childGroup.addChild(CHILD_1); - childGroup.addChild(CHILD_2); - parentGroup.addChild(childGroup); - - childGroup.clear(); - - final InOrder inOrder = inOrder(mObserver); - inOrder.verify(mObserver).onItemRangeInserted(eq(parentGroup), eq(0), eq(2)); - inOrder.verify(mObserver).onItemRangeRemoved(eq(parentGroup), eq(0), eq(2)); - verifyNoMoreInteractions(mObserver); - } - - @Test - public void testNotifyChange() { - mItemGroup.addChild(CHILD_1); - mItemGroup.addChild(CHILD_2); - - CHILD_2.setTitle("Child 2 modified"); - - verify(mObserver).onItemRangeChanged(eq(mItemGroup), eq(1), eq(1)); - } - - @Test - public void testEmptyChildGroup() { - ItemGroup parentGroup = new ItemGroup(); - ItemGroup childGroup = new ItemGroup(); - - parentGroup.addChild(CHILD_1); - parentGroup.addChild(childGroup); - parentGroup.addChild(CHILD_2); - - assertSame("Position 0 should be child 1", CHILD_1, parentGroup.getItemAt(0)); - assertSame("Position 1 should be child 2", CHILD_2, parentGroup.getItemAt(1)); + @Override + public int hashCode() { + return 1; } - @Test - public void testFindItemById() { - CHILD_1.setId(12345); - CHILD_2.setId(23456); - - mItemGroup.addChild(CHILD_1); - mItemGroup.addChild(CHILD_2); - - assertSame("Find item 23456 should return child 2", - CHILD_2, mItemGroup.findItemById(23456)); - } - - @Test - public void testFindItemByIdNotFound() { - CHILD_1.setId(12345); - CHILD_2.setId(23456); - - mItemGroup.addChild(CHILD_1); - mItemGroup.addChild(CHILD_2); - - assertNull("ID not found should return null", mItemGroup.findItemById(56789)); + @Override + public boolean equals(Object obj) { + return obj instanceof Item; } - /** - * This class will always return true on {@link #equals(Object)}. Used to ensure that ItemGroup - * is using identity rather than equals(). Be sure to use assertSame rather than assertEquals - * when comparing items of this class. - */ - private static class EqualsItem extends Item { - - EqualsItem(String name) { - setTitle(name); - } - - @Override - public int hashCode() { - return 1; - } - - @Override - public boolean equals(Object obj) { - return obj instanceof Item; - } - - @Override - public String toString() { - return "EqualsItem{title=" + getTitle() + "}"; - } + @Override + public String toString() { + return "EqualsItem{title=" + getTitle() + "}"; } + } } |