// test getting non-existing property (#10445) @Test public void testNonExistingProperty() { IndexedContainer ic = new IndexedContainer(); String object1 = new String("Obj1"); ic.addItem(object1); assertNull(ic.getContainerProperty(object1, "xyz")); }
// test getting null property id (#10445) @Test public void testNullPropertyId() { IndexedContainer ic = new IndexedContainer(); String object1 = new String("Obj1"); ic.addItem(object1); assertNull(ic.getContainerProperty(object1, null)); }
/* * Overridden to provide filtering for root & children items. * * (non-Javadoc) * * @see com.vaadin.data.util.IndexedContainer#updateContainerFiltering() */ @Override protected boolean doFilterContainer(boolean hasFilters) { if (!hasFilters) { // All filters removed filteredRoots = null; filteredChildren = null; filteredParent = null; return super.doFilterContainer(hasFilters); } // Reset data structures filteredRoots = new LinkedList<>(); filteredChildren = new HashMap<>(); filteredParent = new HashMap<>(); if (includeParentsWhenFiltering) { // Filter so that parents for items that match the filter are also // included HashSet<Object> includedItems = new HashSet<>(); for (Object rootId : roots) { if (filterIncludingParents(rootId, includedItems)) { filteredRoots.add(rootId); addFilteredChildrenRecursively(rootId, includedItems); } } // includedItemIds now contains all the item ids that should be // included. Filter IndexedContainer based on this filterOverride = includedItems; super.doFilterContainer(hasFilters); filterOverride = null; return true; } else { // Filter by including all items that pass the filter and make items // with no parent new root items // Filter IndexedContainer first so getItemIds return the items that // match super.doFilterContainer(hasFilters); LinkedHashSet<Object> filteredItemIds = new LinkedHashSet<>(getItemIds()); for (Object itemId : filteredItemIds) { Object itemParent = parent.get(itemId); if (itemParent == null || !filteredItemIds.contains(itemParent)) { // Parent is not included or this was a root, in both cases // this should be a filtered root filteredRoots.add(itemId); } else { // Parent is included. Add this to the children list (create // it first if necessary) addFilteredChild(itemParent, itemId); } } return true; } }
// Ticket 8028 @Test public void testGetItemIdsRangeZeroRange() { IndexedContainer ic = new IndexedContainer(); ic.addItem(new Object()); List<Object> itemIds = ic.getItemIds(1, 0); assertTrue("Container returned actual values when asking for 0 items...", itemIds.isEmpty()); }
// Ticket 8028 @Test(expected = IllegalArgumentException.class) public void testGetItemIdsRangeNegativeRange() { IndexedContainer ic = new IndexedContainer(); ic.addItem(new Object()); List<Object> itemIds = ic.getItemIds(1, -1); assertTrue("Container returned actual values when asking for -1 items...", itemIds.isEmpty()); }
// Ticket 8028 @Test public void testGetItemIdsRangeIndexOutOfBoundsDueToSizeChange() { IndexedContainer ic = new IndexedContainer(); ic.addItem(new Object()); Assert.assertEquals( "Container returned too many items when the range was >> container size", 1, ic.getItemIds(0, 10).size()); }
@Test public void testItemAddedEvent() { IndexedContainer container = new IndexedContainer(); ItemSetChangeListener addListener = createListenerMockFor(container); addListener.containerItemSetChange(EasyMock.isA(ItemAddEvent.class)); EasyMock.replay(addListener); container.addItem(); EasyMock.verify(addListener); }
@Test public void testItemAddedEvent_AddedItem() { IndexedContainer container = new IndexedContainer(); ItemSetChangeListener addListener = createListenerMockFor(container); Capture<ItemAddEvent> capturedEvent = captureAddEvent(addListener); EasyMock.replay(addListener); Object itemId = container.addItem(); assertEquals(itemId, capturedEvent.getValue().getFirstItemId()); }
@Test public void testItemRemovedEvent() { IndexedContainer container = new IndexedContainer(); Object itemId = container.addItem(); ItemSetChangeListener removeListener = createListenerMockFor(container); removeListener.containerItemSetChange(EasyMock.isA(ItemRemoveEvent.class)); EasyMock.replay(removeListener); container.removeItem(itemId); EasyMock.verify(removeListener); }
@Test public void testAddItemAtPerformance() { Collection<Long> times = new ArrayList<Long>(); for (int j = 0; j < REPEATS; ++j) { IndexedContainer c = new IndexedContainer(); long start = System.currentTimeMillis(); for (int i = 0; i < ITEMS; i++) { c.addItemAt(0); } times.add(System.currentTimeMillis() - start); } checkMedian(ITEMS, times, "IndexedContainer.addItemAt()", ADD_ITEM_AT_FAIL_THRESHOLD); }
@Test public void testItemRemovedEvent_indexOfRemovedItem() { IndexedContainer container = new IndexedContainer(); container.addItem(); Object secondItemId = container.addItem(); ItemSetChangeListener removeListener = createListenerMockFor(container); Capture<ItemRemoveEvent> capturedEvent = captureRemoveEvent(removeListener); EasyMock.replay(removeListener); container.removeItem(secondItemId); assertEquals(1, capturedEvent.getValue().getFirstIndex()); }
@Test public void testItemRemovedEvent_amountOfRemovedItems() { IndexedContainer container = new IndexedContainer(); container.addItem(); container.addItem(); ItemSetChangeListener removeListener = createListenerMockFor(container); Capture<ItemRemoveEvent> capturedEvent = captureRemoveEvent(removeListener); EasyMock.replay(removeListener); container.removeAllItems(); assertEquals(2, capturedEvent.getValue().getRemovedItemsCount()); }
@Test public void testItemAddRemove_idSequence() { IndexedContainer container = new IndexedContainer(); Object itemId; itemId = container.addItem(); assertEquals(Integer.valueOf(1), itemId); container.removeItem(itemId); itemId = container.addItem(); assertEquals( "Id sequence should continue from the previous value even if an item is removed", Integer.valueOf(2), itemId); }
@Override protected void fireItemSetChange(com.vaadin.v7.data.Container.ItemSetChangeEvent event) { if (contentsChangeEventsOn()) { super.fireItemSetChange(event); } else { contentsChangedEventPending = true; } }
@Test public void testItemAdd_idSequence() { IndexedContainer container = new IndexedContainer(); Object itemId; itemId = container.addItem(); assertEquals(Integer.valueOf(1), itemId); itemId = container.addItem(); assertEquals(Integer.valueOf(2), itemId); itemId = container.addItemAfter(null); assertEquals(Integer.valueOf(3), itemId); itemId = container.addItemAt(2); assertEquals(Integer.valueOf(4), itemId); }
/* * (non-Javadoc) * * @see com.vaadin.data.util.IndexedContainer#doSort() */ @Override protected void doSort() { super.doSort(); Collections.sort(roots, getItemSorter()); for (LinkedList<Object> childList : children.values()) { Collections.sort(childList, getItemSorter()); } }
@Test public void testAddItemAfterLastPerformance() { // TODO running with less items because slow otherwise Collection<Long> times = new ArrayList<Long>(); for (int j = 0; j < REPEATS; ++j) { IndexedContainer c = new IndexedContainer(); c.addItem(); long start = System.currentTimeMillis(); for (int i = 0; i < ITEMS / 3; i++) { c.addItemAfter(c.lastItemId()); } times.add(System.currentTimeMillis() - start); } checkMedian( ITEMS / 3, times, "IndexedContainer.addItemAfter(lastId)", ADD_ITEM_AFTER_LAST_FAIL_THRESHOLD); }
// Ticket 8028 @Test public void testGetItemIdsRangeBaseCase() { IndexedContainer ic = new IndexedContainer(); String object1 = new String("Obj1"); String object2 = new String("Obj2"); String object3 = new String("Obj3"); String object4 = new String("Obj4"); String object5 = new String("Obj5"); ic.addItem(object1); ic.addItem(object2); ic.addItem(object3); ic.addItem(object4); ic.addItem(object5); List<Object> itemIds = ic.getItemIds(1, 2); assertTrue(itemIds.contains(object2)); assertTrue(itemIds.contains(object3)); assertEquals(2, itemIds.size()); }
@Test public void testAddRemoveContainerFilter() { IndexedContainer container = new IndexedContainer(); ItemSetChangeCounter counter = new ItemSetChangeCounter(); container.addListener(counter); // simply adding or removing container filters should cause events // (content changes) initializeContainer(container); counter.reset(); container.addContainerFilter(SIMPLE_NAME, "a", true, false); counter.assertOnce(); container.removeContainerFilters(SIMPLE_NAME); counter.assertOnce(); container.addContainerFilter(SIMPLE_NAME, "a", true, false); counter.assertOnce(); container.removeAllContainerFilters(); counter.assertOnce(); }
@Test public void testItemSetChangeListeners() { IndexedContainer container = new IndexedContainer(); ItemSetChangeCounter counter = new ItemSetChangeCounter(); container.addListener(counter); String id1 = "id1"; String id2 = "id2"; String id3 = "id3"; initializeContainer(container); counter.reset(); container.addItem(); counter.assertOnce(); container.addItem(id1); counter.assertOnce(); initializeContainer(container); counter.reset(); container.addItemAt(0); counter.assertOnce(); container.addItemAt(0, id1); counter.assertOnce(); container.addItemAt(0, id2); counter.assertOnce(); container.addItemAt(container.size(), id3); counter.assertOnce(); // no notification if already in container container.addItemAt(0, id1); counter.assertNone(); initializeContainer(container); counter.reset(); container.addItemAfter(null); counter.assertOnce(); container.addItemAfter(null, id1); counter.assertOnce(); container.addItemAfter(id1); counter.assertOnce(); container.addItemAfter(id1, id2); counter.assertOnce(); container.addItemAfter(container.firstItemId()); counter.assertOnce(); container.addItemAfter(container.lastItemId()); counter.assertOnce(); container.addItemAfter(container.lastItemId(), id3); counter.assertOnce(); // no notification if already in container container.addItemAfter(0, id1); counter.assertNone(); initializeContainer(container); counter.reset(); container.removeItem(sampleData[0]); counter.assertOnce(); initializeContainer(container); counter.reset(); // no notification for removing a non-existing item container.removeItem(id1); counter.assertNone(); initializeContainer(container); counter.reset(); container.removeAllItems(); counter.assertOnce(); // already empty container.removeAllItems(); counter.assertNone(); }
// TODO other tests should check positions after removing filter etc, // here concentrating on listeners @Test public void testItemSetChangeListenersFiltering() { IndexedContainer container = new IndexedContainer(); ItemSetChangeCounter counter = new ItemSetChangeCounter(); container.addListener(counter); counter.reset(); container.addContainerFilter(FULLY_QUALIFIED_NAME, "Test", true, false); // no real change, so no notification required counter.assertNone(); String id1 = "com.example.Test1"; String id2 = "com.example.Test2"; String id3 = "com.example.Other"; // perform operations while filtering container Item item; initializeContainer(container); counter.reset(); // passes filter item = container.addItem(id1); // no event if filtered out counter.assertNone(); item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id1); counter.assertOnce(); // passes filter but already in the container item = container.addItem(id1); counter.assertNone(); initializeContainer(container); counter.reset(); // passes filter after change item = container.addItemAt(0, id1); counter.assertNone(); item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id1); counter.assertOnce(); item = container.addItemAt(container.size(), id2); counter.assertNone(); item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id2); counter.assertOnce(); // passes filter but already in the container item = container.addItemAt(0, id1); counter.assertNone(); item = container.addItemAt(container.size(), id2); counter.assertNone(); initializeContainer(container); counter.reset(); // passes filter item = container.addItemAfter(null, id1); counter.assertNone(); item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id1); counter.assertOnce(); item = container.addItemAfter(container.lastItemId(), id2); counter.assertNone(); item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id2); counter.assertOnce(); // passes filter but already in the container item = container.addItemAfter(null, id1); counter.assertNone(); item = container.addItemAfter(container.lastItemId(), id2); counter.assertNone(); // does not pass filter // TODO implement rest initializeContainer(container); counter.reset(); item = container.addItemAfter(null, id3); counter.assertNone(); item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id3); counter.assertNone(); initializeContainer(container); counter.reset(); item = container.addItemAfter(container.firstItemId(), id3); counter.assertNone(); item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id3); counter.assertNone(); initializeContainer(container); counter.reset(); item = container.addItemAfter(container.lastItemId(), id3); counter.assertNone(); item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id3); counter.assertNone(); initializeContainer(container); counter.reset(); item = container.addItemAt(0, id3); counter.assertNone(); item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id3); counter.assertNone(); initializeContainer(container); counter.reset(); item = container.addItemAt(1, id3); counter.assertNone(); item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id3); counter.assertNone(); initializeContainer(container); counter.reset(); item = container.addItemAt(container.size(), id3); counter.assertNone(); item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id3); counter.assertNone(); // passes filter initializeContainer(container); counter.reset(); item = container.addItem(id1); counter.assertNone(); item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id1); counter.assertOnce(); container.removeItem(id1); counter.assertOnce(); // already removed container.removeItem(id1); counter.assertNone(); item = container.addItem(id3); counter.assertNone(); item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id3); counter.assertNone(); // not visible container.removeItem(id3); counter.assertNone(); // remove all initializeContainer(container); item = container.addItem(id1); item.getItemProperty(FULLY_QUALIFIED_NAME).setValue(id1); counter.reset(); container.removeAllItems(); counter.assertOnce(); // no visible items container.removeAllItems(); counter.assertNone(); }
// Ticket 8028 @Test(expected = IndexOutOfBoundsException.class) public void testGetItemIdsRangeIndexOutOfBounds2() { IndexedContainer ic = new IndexedContainer(); ic.addItem(new Object()); ic.getItemIds(2, 1); }
// Ticket 8028 @Test(expected = IndexOutOfBoundsException.class) public void testGetItemIdsRangeIndexOutOfBounds() { IndexedContainer ic = new IndexedContainer(); ic.getItemIds(-1, 10); }
private ItemSetChangeListener createListenerMockFor(IndexedContainer container) { ItemSetChangeListener listener = EasyMock.createNiceMock(ItemSetChangeListener.class); container.addItemSetChangeListener(listener); return listener; }