/* * Copyright (C) 2013 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jboss.errai.ui.test.binding.client; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; import java.util.List; import java.util.ListIterator; import org.jboss.errai.databinding.client.BindableListWrapper; import org.jboss.errai.databinding.client.BindableProxy; import org.jboss.errai.enterprise.client.cdi.AbstractErraiCDITest; import org.jboss.errai.ioc.client.container.IOC; import org.jboss.errai.ui.client.local.spi.InvalidBeanScopeException; import org.jboss.errai.ui.client.widget.ListWidget; import org.jboss.errai.ui.test.binding.client.res.AppScopedBindingListWidget; import org.jboss.errai.ui.test.binding.client.res.BindingItem; import org.jboss.errai.ui.test.binding.client.res.BindingListWidget; import org.jboss.errai.ui.test.binding.client.res.BindingTemplate; import org.jboss.errai.ui.test.binding.client.res.BindingItemWidget; import org.jboss.errai.ui.test.binding.client.res.SingletonBindingListWidget; import org.jboss.errai.ui.test.common.client.TestModel; import org.junit.Test; import com.google.gwt.user.client.ui.HTMLPanel; import com.google.gwt.user.client.ui.Widget; /** * Tests data binding with {@link ListWidget}. * * @author Christian Sadilek <csadilek@redhat.com> */ public class ListWidgetBindingTest extends AbstractErraiCDITest { @Override public String getModuleName() { return getClass().getName().replaceAll("client.*$", "Test"); } @Test public void testAutomaticListBinding() { BindingTemplateTestApp app = IOC.getBeanManager().lookupBean(BindingTemplateTestApp.class).getInstance(); automaticListBindingAssertions(app.getCompositeTemplate()); automaticListBindingAssertions(app.getNonCompositeTemplate()); } private void automaticListBindingAssertions(BindingTemplate<?> template) { assertNotNull("Template instance was not injected!", template); assertEquals("Expected zero widgets", 0, template.getListWidget().getComponentCount()); TestModel model = template.getModel(); assertEquals("Expected zero widgets", 0, template.getListWidget().getComponentCount()); model.getChildren().add(new TestModel(3, "c3")); assertEquals("Expected one widget", 1, template.getListWidget().getComponentCount()); model.getChildren().remove(0); assertEquals("Expected zero widgets", 0, template.getListWidget().getComponentCount()); List<TestModel> children = new ArrayList<TestModel>(); children.add(new TestModel(1, "c1")); children.add(new TestModel(2, "c2")); model.setChildren(children); assertEquals("Expected two widgets", 2, template.getListWidget().getComponentCount()); model.getChildren().add(new TestModel(3, "c3")); assertEquals("Expected three widgets", 3, template.getListWidget().getComponentCount()); } @Test public void testManualListBinding() { BindingTemplateTestApp app = IOC.getBeanManager().lookupBean(BindingTemplateTestApp.class).getInstance(); manualListBindingAssertions(app.getCompositeTemplate().getListWidget()); manualListBindingAssertions(app.getNonCompositeTemplate().getListWidget()); } private void manualListBindingAssertions(BindingListWidget<?> listWidget) { final List<TestModel> modelList = new ArrayList<TestModel>(); final TestModel model0, model1; modelList.add(model0 = new TestModel()); modelList.add(model1 = new TestModel()); // binding a list of model objects listWidget.setItems(modelList); assertEquals("Expected two widgets", 2, listWidget.getComponentCount()); assertEquals("", listWidget.getComponent(0).getTextBox().getText()); assertEquals("", listWidget.getComponent(1).getTextBox().getText()); assertEquals("onItemsRendered should be called exactly one time", 1, listWidget.getItemsRenderedCalled()); BindingItem itemWidget0 = listWidget.getComponent(0); assertEquals(itemWidget0, listWidget.getComponent(model0)); BindingItem itemWidget1 = listWidget.getComponent(1); assertEquals(itemWidget1, listWidget.getComponent(model1)); itemWidget0.getModel().setName("0"); itemWidget1.getModel().setName("1"); assertEquals("First item widget was not updated!", "0", itemWidget0.getTextBox().getText()); assertEquals("Second item widget was not updated!", "1", itemWidget1.getTextBox().getText()); itemWidget0.getTextBox().setValue("0-updated", true); itemWidget1.getTextBox().setValue("1-updated", true); assertEquals("First model object was not updated!", "0-updated", itemWidget0.getModel().getName()); assertEquals("Second model object was not updated!", "1-updated", itemWidget1.getModel().getName()); } @Test public void testListBindingOfNullList() { BindingTemplateTestApp app = IOC.getBeanManager().lookupBean(BindingTemplateTestApp.class).getInstance(); bindingOfNullListAssertions(app.getCompositeTemplate().getListWidget()); bindingOfNullListAssertions(app.getNonCompositeTemplate().getListWidget()); } private void bindingOfNullListAssertions(BindingListWidget<?> listWidget) { listWidget.setValue(null); List<TestModel> proxiedList = listWidget.getValue(); assertNotNull(proxiedList); assertTrue(proxiedList instanceof BindableListWrapper); assertTrue(proxiedList.isEmpty()); } @Test public void testUnorderedListWidget() { List<TestModel> modelList = new ArrayList<TestModel>(); modelList.add(new TestModel()); BindingTemplateTestApp app = IOC.getBeanManager().lookupBean(BindingTemplateTestApp.class).getInstance(); ListWidget<TestModel, BindingItemWidget> listWidget = app.getUlListWidget(); assertNotNull(listWidget); listWidget.setItems(modelList); Widget item = listWidget.getComponent(0); assertNotNull(item); Widget panel = item.getParent(); assertTrue(panel instanceof HTMLPanel); assertEquals(panel.getElement().getNodeName(), "UL"); } @Test public void testTableListWidget() { List<TestModel> modelList = new ArrayList<TestModel>(); modelList.add(new TestModel()); BindingTemplateTestApp app = IOC.getBeanManager().lookupBean(BindingTemplateTestApp.class).getInstance(); ListWidget<TestModel, BindingItemWidget> listWidget = app.getTableListWidget(); assertNotNull(listWidget); listWidget.setItems(modelList); Widget item = listWidget.getComponent(0); assertNotNull(item); Widget panel = item.getParent(); assertTrue(panel instanceof HTMLPanel); assertEquals(panel.getElement().getNodeName(), "TABLE"); } @Test public void testAppScopedWidgetInListCausesError() { List<TestModel> list = new ArrayList<TestModel>(); AppScopedBindingListWidget listWidget = new AppScopedBindingListWidget(); try { listWidget.setItems(list); fail("Did not throw InvalidBeanScopeException"); } catch (InvalidBeanScopeException e) {} } @Test public void testSingletonWidgetInListCausesError() { List<TestModel> list = new ArrayList<TestModel>(); SingletonBindingListWidget listWidget = new SingletonBindingListWidget(); try { listWidget.setItems(list); fail("Did not throw InvalidBeanScopeException"); } catch (InvalidBeanScopeException e) {} } @Test public void testListBindingAndAddItem() { BindingTemplateTestApp app = IOC.getBeanManager().lookupBean(BindingTemplateTestApp.class).getInstance(); bindingAndAddItemAssertions(app.getCompositeTemplate().getListWidget()); bindingAndAddItemAssertions(app.getNonCompositeTemplate().getListWidget()); } private void bindingAndAddItemAssertions(BindingListWidget<?> listWidget) { List<TestModel> modelList = new ArrayList<TestModel>(); modelList.add(new TestModel(0, "0")); listWidget.setItems(modelList); assertEquals("Expected one widget", 1, listWidget.getComponentCount()); // Add a widget to the UI by adding a model instance to the model list listWidget.getItems().add(new TestModel(1, "1")); assertEquals("Expected two widgets", 2, listWidget.getComponentCount()); BindingItem itemWidget1 = listWidget.getComponent(1); assertEquals("Second item widget was not rendered correctly!", "1", itemWidget1.getTextBox().getText()); } @Test public void testListBindingAndAddManyItems() { BindingTemplateTestApp app = IOC.getBeanManager().lookupBean(BindingTemplateTestApp.class).getInstance(); bindingAndAddManyItemsAssertions(app.getCompositeTemplate().getListWidget()); bindingAndAddManyItemsAssertions(app.getNonCompositeTemplate().getListWidget()); } private void bindingAndAddManyItemsAssertions(BindingListWidget<?> listWidget) { List<TestModel> modelList = new ArrayList<TestModel>(); modelList.add(new TestModel(1, "0")); listWidget.setItems(modelList); assertEquals("Expected one widgets", 1, listWidget.getComponentCount()); List<TestModel> addModelList = new ArrayList<TestModel>(); for (int i = 1; i < 500; i++) { addModelList.add(new TestModel(i, ""+i)); } // Add widgets to the UI by adding model instances to the model list listWidget.getItems().addAll(addModelList); assertEquals("Expected exactly 100 widgets", 500, listWidget.getComponentCount()); } @Test public void testListBindingAndAddItemByIndex() { BindingTemplateTestApp app = IOC.getBeanManager().lookupBean(BindingTemplateTestApp.class).getInstance(); bindingAndAddItemByIndexAssertions(app.getCompositeTemplate().getListWidget()); bindingAndAddItemByIndexAssertions(app.getNonCompositeTemplate().getListWidget()); } private void bindingAndAddItemByIndexAssertions(BindingListWidget<?> listWidget) { List<TestModel> modelList = new ArrayList<TestModel>(); modelList.add(new TestModel(0, "0")); modelList.add(new TestModel(2, "2")); modelList.add(new TestModel(3, "3")); listWidget.setItems(modelList); assertEquals("Expected three widgets", 3, listWidget.getComponentCount()); // Add a widget to the UI by adding a model instance to the model list listWidget.getItems().add(1, new TestModel(1, "1")); assertItemsRendered(listWidget); } @Test public void testListBindingAndAddItemByIndexUsingHtmlPanel() { List<TestModel> modelList = new ArrayList<TestModel>(); modelList.add(new TestModel(0, "0")); modelList.add(new TestModel(2, "2")); modelList.add(new TestModel(3, "3")); BindingTemplateTestApp app = IOC.getBeanManager().lookupBean(BindingTemplateTestApp.class).getInstance(); ListWidget<TestModel, BindingItemWidget> listWidget = app.getTableListWidget(); listWidget.setItems(modelList); assertEquals("Expected three widgets", 3, listWidget.getComponentCount()); // Add a widget to the UI by adding a model instance to the model list listWidget.getValue().add(1, new TestModel(1, "1")); assertItemsRendered(listWidget); } @Test public void testListBindingAndAddItemByIndexAtHead() { BindingTemplateTestApp app = IOC.getBeanManager().lookupBean(BindingTemplateTestApp.class).getInstance(); bindingAndAddItemByIndexAtHeadAssertions(app.getCompositeTemplate().getListWidget()); bindingAndAddItemByIndexAtHeadAssertions(app.getNonCompositeTemplate().getListWidget()); } private void bindingAndAddItemByIndexAtHeadAssertions(BindingListWidget<?> listWidget) { List<TestModel> modelList = new ArrayList<TestModel>(); modelList.add(new TestModel(1, "1")); modelList.add(new TestModel(2, "2")); modelList.add(new TestModel(3, "3")); listWidget.setItems(modelList); assertEquals("Expected three widgets", 3, listWidget.getComponentCount()); // Add a widget to the UI by adding a model instance to the model list listWidget.getItems().add(0, new TestModel(0, "0")); assertItemsRendered(listWidget); } @Test public void testListBindingAndAddItemByIndexAtTail() { BindingTemplateTestApp app = IOC.getBeanManager().lookupBean(BindingTemplateTestApp.class).getInstance(); bindingAndAddItemByIndexAtTailAssertions(app.getCompositeTemplate().getListWidget()); bindingAndAddItemByIndexAtTailAssertions(app.getNonCompositeTemplate().getListWidget()); } private void bindingAndAddItemByIndexAtTailAssertions(BindingListWidget<?> listWidget) { List<TestModel> modelList = new ArrayList<TestModel>(); modelList.add(new TestModel(0, "0")); modelList.add(new TestModel(1, "1")); modelList.add(new TestModel(2, "2")); listWidget.setItems(modelList); assertEquals("Expected three widgets", 3, listWidget.getComponentCount()); // Add a widget to the UI by adding a model instance to the model list listWidget.getItems().add(3, new TestModel(3, "3")); assertItemsRendered(listWidget); } @Test public void testListBindingAndAddItems() { BindingTemplateTestApp app = IOC.getBeanManager().lookupBean(BindingTemplateTestApp.class).getInstance(); bindingAndAddItemsAssertions(app.getCompositeTemplate().getListWidget()); bindingAndAddItemsAssertions(app.getNonCompositeTemplate().getListWidget()); } private void bindingAndAddItemsAssertions(BindingListWidget<?> listWidget) { List<TestModel> modelList = new ArrayList<TestModel>(); modelList.add(new TestModel(0, "0")); modelList.add(new TestModel(1, "1")); listWidget.setItems(modelList); assertEquals("Expected two widgets", 2, listWidget.getComponentCount()); List<TestModel> addModelList = new ArrayList<TestModel>(); addModelList.add(new TestModel(2, "2")); addModelList.add(new TestModel(3, "3")); // Add widgets to the UI by adding model instances to the model list listWidget.getItems().addAll(addModelList); assertItemsRendered(listWidget); } @Test public void testListBindingAndAddItemsByIndex() { BindingTemplateTestApp app = IOC.getBeanManager().lookupBean(BindingTemplateTestApp.class).getInstance(); bindingAndAddItemsByIndexAssertions(app.getCompositeTemplate().getListWidget()); bindingAndAddItemsByIndexAssertions(app.getNonCompositeTemplate().getListWidget()); } private void bindingAndAddItemsByIndexAssertions(BindingListWidget<?> listWidget) { List<TestModel> modelList = new ArrayList<TestModel>(); modelList.add(new TestModel(0, "0")); modelList.add(new TestModel(3, "3")); listWidget.setItems(modelList); assertEquals("Expected two widgets", 2, listWidget.getComponentCount()); List<TestModel> addModelList = new ArrayList<TestModel>(); addModelList.add(new TestModel(1, "1")); addModelList.add(new TestModel(2, "2")); // Add widgets to the UI by adding model instances to the model list listWidget.getItems().addAll(1, addModelList); assertItemsRendered(listWidget); } @Test public void testListBindingAndAddItemsByIndexUsingHtmlPanel() { List<TestModel> modelList = new ArrayList<TestModel>(); modelList.add(new TestModel(0, "0")); modelList.add(new TestModel(3, "3")); BindingTemplateTestApp app = IOC.getBeanManager().lookupBean(BindingTemplateTestApp.class).getInstance(); ListWidget<TestModel, BindingItemWidget> listWidget = app.getUlListWidget(); listWidget.setItems(modelList); assertEquals("Expected two widgets", 2, listWidget.getComponentCount()); List<TestModel> addModelList = new ArrayList<TestModel>(); addModelList.add(new TestModel(1, "1")); addModelList.add(new TestModel(2, "2")); // Add widgets to the UI by adding model instances to the model list listWidget.getValue().addAll(1, addModelList); assertItemsRendered(listWidget); } @Test public void testListBindingAndAddItemsByIndexAtHead() { BindingTemplateTestApp app = IOC.getBeanManager().lookupBean(BindingTemplateTestApp.class).getInstance(); bindingAndAddItemsByIndexAtHeadAssertions(app.getCompositeTemplate().getListWidget()); bindingAndAddItemsByIndexAtHeadAssertions(app.getNonCompositeTemplate().getListWidget()); } private void bindingAndAddItemsByIndexAtHeadAssertions(BindingListWidget<?> listWidget) { List<TestModel> modelList = new ArrayList<TestModel>(); modelList.add(new TestModel(2, "2")); modelList.add(new TestModel(3, "3")); listWidget.setItems(modelList); assertEquals("Expected two widgets", 2, listWidget.getComponentCount()); List<TestModel> addModelList = new ArrayList<TestModel>(); addModelList.add(new TestModel(0, "0")); addModelList.add(new TestModel(1, "1")); // Add widgets to the UI by adding model instances to the model list listWidget.getItems().addAll(0, addModelList); assertItemsRendered(listWidget); } @Test public void testListBindingAndAddItemsByIndexAtTail() { BindingTemplateTestApp app = IOC.getBeanManager().lookupBean(BindingTemplateTestApp.class).getInstance(); bindingAndAddItemsByIndexAtTailAssertions(app.getCompositeTemplate().getListWidget()); bindingAndAddItemsByIndexAtTailAssertions(app.getNonCompositeTemplate().getListWidget()); } private void bindingAndAddItemsByIndexAtTailAssertions(BindingListWidget<?> listWidget) { List<TestModel> modelList = new ArrayList<TestModel>(); modelList.add(new TestModel(0, "0")); modelList.add(new TestModel(1, "1")); listWidget.setItems(modelList); assertEquals("Expected two widgets", 2, listWidget.getComponentCount()); List<TestModel> addModelList = new ArrayList<TestModel>(); addModelList.add(new TestModel(2, "2")); addModelList.add(new TestModel(3, "3")); // Add a widgets to the UI by adding model instances to the model list listWidget.getItems().addAll(2, addModelList); assertItemsRendered(listWidget); } @Test public void testListBindingAndClearItems() { BindingTemplateTestApp app = IOC.getBeanManager().lookupBean(BindingTemplateTestApp.class).getInstance(); bindingAndClearItemsAssertions(app.getCompositeTemplate().getListWidget()); bindingAndClearItemsAssertions(app.getNonCompositeTemplate().getListWidget()); } private void bindingAndClearItemsAssertions(BindingListWidget<?> listWidget) { List<TestModel> modelList = new ArrayList<TestModel>(); modelList.add(new TestModel(0, "0")); modelList.add(new TestModel(1, "1")); listWidget.setItems(modelList); assertEquals("Expected two widgets", 2, listWidget.getComponentCount()); List <BindingItem> testWidgetsCleared = new ArrayList<BindingItem>(); for (int i = 0; i < listWidget.getComponentCount(); i++) { testWidgetsCleared.add(listWidget.getComponent(i)); } listWidget.getItems().clear(); assertEquals("Expected zero widgets", 0, listWidget.getComponentCount()); Iterator<BindingItem> itr = testWidgetsCleared.iterator(); while(itr.hasNext()) { //BindingItemWidget.getNum() is incremented in a pre-destroy method assertEquals(1, itr.next().getNum()); } } @Test public void testListBindingAndSetItems() { BindingTemplateTestApp app = IOC.getBeanManager().lookupBean(BindingTemplateTestApp.class).getInstance(); bindingAndSetItemsAssertions(app.getCompositeTemplate().getListWidget()); bindingAndSetItemsAssertions(app.getNonCompositeTemplate().getListWidget()); } private void bindingAndSetItemsAssertions(BindingListWidget<?> listWidget) { List<TestModel> modelList = new ArrayList<TestModel>(); modelList.add(new TestModel(0, "0")); modelList.add(new TestModel(2, "2")); modelList.add(new TestModel(1, "1")); modelList.add(new TestModel(3, "3")); listWidget.setItems(modelList); assertEquals("Expected two widgets", 4, listWidget.getComponentCount()); listWidget.getItems().set(1, new TestModel(1, "1")); listWidget.getItems().set(2, new TestModel(2, "2")); assertItemsRendered(listWidget); } @Test public void testListBindingAndRemoveItem() { BindingTemplateTestApp app = IOC.getBeanManager().lookupBean(BindingTemplateTestApp.class).getInstance(); bindingAndRemoveItemAssertions(app.getCompositeTemplate().getListWidget()); bindingAndRemoveItemAssertions(app.getNonCompositeTemplate().getListWidget()); } private void bindingAndRemoveItemAssertions(BindingListWidget<?> listWidget) { TestModel itemToRemove = new TestModel(4, "4"); List<TestModel> modelList = new ArrayList<TestModel>(); modelList.add(new TestModel(0, "0")); modelList.add(new TestModel(1, "1")); modelList.add(itemToRemove); modelList.add(new TestModel(2, "2")); modelList.add(new TestModel(3, "3")); listWidget.setItems(modelList); assertEquals("Expected five widgets", 5, listWidget.getComponentCount()); BindingItem widget = listWidget.getComponent(2); listWidget.getItems().remove(itemToRemove); assertEquals(1, widget.getNum()); assertItemsRendered(listWidget); } @Test public void testListBindingAndRemoveItems() { BindingTemplateTestApp app = IOC.getBeanManager().lookupBean(BindingTemplateTestApp.class).getInstance(); BindingListWidget<?> listWidget = app.getCompositeTemplate().getListWidget(); bindingAndRemoveItemsAssertions(listWidget); } private void bindingAndRemoveItemsAssertions(BindingListWidget<?> listWidget) { List<TestModel> removeList = new ArrayList<TestModel>(); TestModel removeModel1 = (new TestModel(4, "4")); TestModel removeModel2 = (new TestModel(5, "5")); removeList.add(removeModel1); removeList.add(removeModel2); List<TestModel> modelList = new ArrayList<TestModel>(); modelList.add(new TestModel(0, "0")); modelList.add(removeModel1); modelList.add(new TestModel(1, "1")); modelList.add(new TestModel(2, "2")); modelList.add(removeModel2); modelList.add(new TestModel(3, "3")); listWidget.setItems(modelList); assertEquals("Expected six widgets", 6, listWidget.getComponentCount()); List<BindingItem> testWidgetsRemoved = new ArrayList<BindingItem>(); for(int i = 0; i < listWidget.getComponentCount(); i++) { testWidgetsRemoved.add(listWidget.getComponent(i)); } listWidget.getItems().removeAll(removeList); for(int i = 0; i < listWidget.getComponentCount(); i++) { if ((i == 1) || (i == 4)) assertEquals("Widget " + i + " failed", 1, testWidgetsRemoved.get(i).getNum()); else assertEquals("Widget " + i + " failed", 0, testWidgetsRemoved.get(i).getNum()); } assertItemsRendered(listWidget); } @Test public void testListBindingAndRemoveItemByIndex() { BindingTemplateTestApp app = IOC.getBeanManager().lookupBean(BindingTemplateTestApp.class).getInstance(); bindingAndRemoveItemByIndexAssertions(app.getCompositeTemplate().getListWidget()); bindingAndRemoveItemByIndexAssertions(app.getNonCompositeTemplate().getListWidget()); } private void bindingAndRemoveItemByIndexAssertions(BindingListWidget<?> listWidget) { List<TestModel> modelList = new ArrayList<TestModel>(); modelList.add(new TestModel(0, "0")); modelList.add(new TestModel(1, "1")); modelList.add(new TestModel(4, "4")); modelList.add(new TestModel(2, "2")); modelList.add(new TestModel(3, "3")); listWidget.setItems(modelList); assertEquals("Expected five widgets", 5, listWidget.getComponentCount()); BindingItem widget = listWidget.getComponent(2); listWidget.getItems().remove(2); assertEquals(1, widget.getNum()); assertItemsRendered(listWidget); } @Test public void testListBindingAndCollectionsSort() { BindingTemplateTestApp app = IOC.getBeanManager().lookupBean(BindingTemplateTestApp.class).getInstance(); bindingAndCollectionSoryAssertions(app.getCompositeTemplate().getListWidget()); bindingAndCollectionSoryAssertions(app.getNonCompositeTemplate().getListWidget()); } private void bindingAndCollectionSoryAssertions(BindingListWidget<?> listWidget) { List<TestModel> modelList = new ArrayList<TestModel>(); modelList.add(new TestModel(3, "3")); modelList.add(new TestModel(2, "2")); modelList.add(new TestModel(1, "1")); modelList.add(new TestModel(0, "0")); listWidget.setItems(modelList); assertEquals("Expected four widgets", 4, listWidget.getComponentCount()); Collections.sort(listWidget.getItems(), new Comparator<TestModel>() { @Override public int compare(TestModel o1, TestModel o2) { return o1.getId() - o2.getId(); } }); assertItemsRendered(listWidget); } @Test public void testBindableListIteratorAdd() { BindingTemplateTestApp app = IOC.getBeanManager().lookupBean(BindingTemplateTestApp.class).getInstance(); bindingAndListIteratorAddAssertions(app.getCompositeTemplate().getListWidget()); bindingAndListIteratorAddAssertions(app.getNonCompositeTemplate().getListWidget()); } private void bindingAndListIteratorAddAssertions(BindingListWidget<?> listWidget) { List<TestModel> modelList = new ArrayList<TestModel>(); modelList.add(new TestModel(0, "0")); modelList.add(new TestModel(1, "1")); modelList.add(new TestModel(3, "3")); listWidget.setItems(modelList); assertEquals("Expected three widgets", 3, listWidget.getComponentCount()); ListIterator<TestModel> iter = listWidget.getValue().listIterator(); iter.next(); iter.next(); iter.add(new TestModel(2, "2")); assertItemsRendered(listWidget); } @Test public void testBindableListIteratorRemove() { BindingTemplateTestApp app = IOC.getBeanManager().lookupBean(BindingTemplateTestApp.class).getInstance(); bindingListIteratorRemoveAssertions(app.getCompositeTemplate().getListWidget()); bindingListIteratorRemoveAssertions(app.getNonCompositeTemplate().getListWidget()); } private void bindingListIteratorRemoveAssertions(BindingListWidget<?> listWidget) { List<TestModel> modelList = new ArrayList<TestModel>(); modelList.add(new TestModel(0, "0")); modelList.add(new TestModel(1, "1")); modelList.add(new TestModel(5, "5")); modelList.add(new TestModel(2, "2")); modelList.add(new TestModel(3, "3")); listWidget.setItems(modelList); assertEquals("Expected three widgets", 5, listWidget.getComponentCount()); ListIterator<TestModel> iter = listWidget.getValue().listIterator(); for (int i = 0; i < 3; i++) { iter.next(); } iter.remove(); assertItemsRendered(listWidget); } private void assertItemsRendered(ListWidget<TestModel, ? extends BindingItem> listWidget) { assertEquals("Expected exactly four widgets", 4, listWidget.getComponentCount()); BindingItem itemWidget0 = listWidget.getComponent(0); BindingItem itemWidget1 = listWidget.getComponent(1); BindingItem itemWidget2 = listWidget.getComponent(2); BindingItem itemWidget3 = listWidget.getComponent(3); assertEquals("First item widget was not rendered correctly!", "0", itemWidget0.getTextBox().getText()); assertEquals("Second item widget was not rendered correctly!", "1", itemWidget1.getTextBox().getText()); assertEquals("Third item widget was not rendered correctly!", "2", itemWidget2.getTextBox().getText()); assertEquals("Fourth item widget was not rendered correctly!", "3", itemWidget3.getTextBox().getText()); TestModel model0 = listWidget.getValue().get(0); TestModel model1 = listWidget.getValue().get(1); TestModel model2 = listWidget.getValue().get(2); TestModel model3 = listWidget.getValue().get(3); assertTrue("First item was not proxied!", model0 instanceof BindableProxy); assertTrue("Second item was not proxied!", model1 instanceof BindableProxy); assertTrue("Third item was not proxied!", model2 instanceof BindableProxy); assertTrue("Fourth item was not proxied!", model3 instanceof BindableProxy); assertSame("First item and widget model are not same proxy object!", itemWidget0.getModel(), model0); assertSame("Second item and widget model are not same proxy object!", itemWidget1.getModel(), model1); assertSame("Third item and widget model are not same proxy object!", itemWidget2.getModel(), model2); assertSame("Fourth item and widget model are not same proxy object!", itemWidget3.getModel(), model3); } }