/* * Beanfabrics Framework Copyright (C) by Michael Karneim, beanfabrics.org * Use is subject to license terms. See license.txt. */ package org.beanfabrics.swing.list; import static org.junit.Assert.assertEquals; import javax.swing.DefaultListModel; import javax.swing.ListSelectionModel; import org.beanfabrics.ModelProvider; import org.beanfabrics.Path; import org.beanfabrics.model.AbstractPM; import org.beanfabrics.model.ListPM; import org.beanfabrics.model.PMManager; import org.beanfabrics.model.TextPM; import org.beanfabrics.support.Property; import org.junit.Before; import org.junit.Test; /** * @author Max Gensthaler */ public class BnListTest { private ModelProvider provider; private BnList list; private GroupModel model; @Before public void setUp() throws Exception { this.list = new BnList(); this.model = new GroupModel(); this.provider = new ModelProvider(); } @Test public void testSetDataSource() { this.provider.setPresentationModel(this.model); this.list.setPath(new Path("this.things")); assertEquals("listCell.getVisibleRowCount()", 0, list.getModel().getSize()); this.list.setModelProvider(provider); this.list.setCellConfig(new CellConfig(new Path("this"))); assertEquals("listCell.getVisibleRowCount()", this.model.things.size(), list.getModel().getSize()); } @Test public void testGetDataSource() { this.list.setModelProvider(provider); assertEquals("listCell.getLocalProvider()", provider, this.list.getModelProvider()); } @Test public void testSetPath() { this.provider.setPresentationModel(this.model); this.list.setModelProvider(provider); assertEquals("listCell.getVisibleRowCount()", 0, list.getModel().getSize()); this.list.setPath(new Path("this.things")); this.list.setCellConfig(new CellConfig(new Path("this"))); assertEquals("listCell.getVisibleRowCount()", this.model.things.size(), list.getModel().getSize()); } @Test public void testGetPath() { Path path = new Path("this.things"); this.list.setPath(path); assertEquals("listCell.getPath()", path, this.list.getPath()); } @Test public void testAddEntry() { setup(); int listModelSize = list.getModel().getSize(); // this.groupEd.things.add(new ThingModel()); this.model.things.add(new TextPM()); assertEquals("addEntry ModelSize", listModelSize + 1, list.getModel().getSize()); } @Test public void testRemoveEntry() { setup(); int listModelSize = list.getModel().getSize(); this.model.things.removeAt(this.model.things.size() - 1); assertEquals("removeEntry ModelSize", listModelSize - 1, list.getModel().getSize()); } @Test public void testDeleteModel() { setup(); assertEquals("listCell.getVisibleRowCount()", this.model.things.size(), list.getModel().getSize()); this.list.setModel(new DefaultListModel()); assertEquals("listCell.getVisibleRowCount()", 0, list.getModel().getSize()); } @Test public void testSetSelectionOnList() { setup(); this.list.setSelectedIndices(new int[] {}); assertEquals("setSelectionOnList to none", 0, this.model.things.getSelection().size()); this.list.setSelectionInterval(0, this.list.getModel().getSize() - 1); assertEquals("setSelectionOnList to all", this.model.things.size(), this.model.things.getSelection().size()); this.list.setSelectedIndices(new int[] {}); assertEquals("setSelectionOnList to none", 0, this.model.things.getSelection().size()); } @Test public void testSetSelectionOnModel() { setup(); this.model.things.getSelection().clear(); assertEquals("setSelectionOnModel to none", 0, this.list.getSelectedIndices().length); this.model.things.getSelection().setInterval(0, this.model.things.size() - 1); assertEquals("setSelectionOnModel to all", this.model.things.size(), this.list.getSelectedIndices().length); this.model.things.getSelection().clear(); assertEquals("setSelectionOnModel to none", 0, this.list.getSelectedIndices().length); } @Test public void testSetSelectionOnListWithSingleSel() { setup(); this.list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); this.list.setSelectedIndices(new int[] {}); assertEquals("setSelectionOnList to none", 0, this.model.things.getSelection().size()); this.list.setSelectionInterval(0, this.list.getModel().getSize() - 1); assertEquals("setSelectionOnList to all selCount", 1, this.model.things.getSelection().size()); assertEquals("setSelectionOnList to all selElem", this.model.things.getAt(this.model.things.size() - 1), this.model.things.getSelection().getFirst()); this.list.setSelectedIndices(new int[] {}); assertEquals("setSelectionOnList to none", 0, this.model.things.getSelection().size()); } @Test public void testSetSelectionOnModelWithSingleSel() { setup(); this.list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); this.model.things.getSelection().clear(); assertEquals("setSelectionOnModel to none", 0, this.list.getSelectedIndices().length); this.model.things.getSelection().setInterval(0, this.model.things.size() - 1); // More then one entries were selected in model -> more then one have to // be displayed as selected in the listCell => override single selection on // listCell assertEquals("setSelectionOnModel to all selCount", 10, this.list.getSelectedIndices().length); this.model.things.getSelection().clear(); assertEquals("setSelectionOnModel to none", 0, this.list.getSelectedIndices().length); } @Test public void testAddSelectionOnList() { setup(); this.list.setSelectedIndices(new int[] {}); assertEquals("setSelectionOnList to none", 0, this.model.things.getSelection().size()); assertEquals("listSize", 10, this.list.getModel().getSize()); this.list.addSelectionInterval(2, 4); assertEquals("addSelectionOnList from 2 to 4", 3, this.model.things.getSelection().size()); this.list.addSelectionInterval(3, 7); assertEquals("addSelectionOnList from 3 to 7", 6, this.model.things.getSelection().size()); this.list.addSelectionInterval(1, 3); assertEquals("addSelectionOnList from 1 to 3", 7, this.model.things.getSelection().size()); } @Test public void testAddSelectionOnModel() { setup(); this.model.things.getSelection().clear(); assertEquals("setSelectionOnModel to none", 0, this.list.getSelectedIndices().length); assertEquals("modelSize", 10, this.model.things.size()); this.model.things.getSelection().addInterval(2, 4); assertEquals("setSelectionOnModel from 2 to 4", 3, this.list.getSelectedIndices().length); this.model.things.getSelection().addInterval(3, 7); assertEquals("setSelectionOnModel from 3 to 7", 6, this.list.getSelectedIndices().length); this.model.things.getSelection().addInterval(1, 3); assertEquals("setSelectionOnModel from 1 to 3", 7, this.list.getSelectedIndices().length); } @Test public void testAddSelectionOnListWithSingleInterval() { setup(); this.list.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION); this.list.setSelectedIndices(new int[] {}); assertEquals("setSelectionOnList to none", 0, this.model.things.getSelection().size()); assertEquals("listSize", 10, this.list.getModel().getSize()); this.list.addSelectionInterval(4, 7); assertEquals("addSelectionOnList from 4 to 7", 4, this.model.things.getSelection().size()); this.list.addSelectionInterval(1, 3); assertEquals("addSelectionOnList from 1 to 3", 3, this.model.things.getSelection().size()); } @Test public void testAddSelectionOnModelWithSingleInterval() { setup(); this.list.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION); this.model.things.getSelection().clear(); assertEquals("setSelectionOnModel to none", 0, this.list.getSelectedIndices().length); assertEquals("modelSize", 10, this.model.things.size()); this.model.things.getSelection().addInterval(4, 7); assertEquals("setSelectionOnModel from 4 to 7", 4, this.list.getSelectedIndices().length); this.model.things.getSelection().addInterval(1, 3); // More then one entries were selected in model -> more then one have to // be displayed as selected in the listCell => override single selection on // listCell assertEquals("setSelectionOnModel from 1 to 3", 7, this.list.getSelectedIndices().length); } @Test public void testRemoveSelectionOnList() { setup(); assertEquals("listSize", 10, this.list.getModel().getSize()); this.list.setSelectionInterval(0, this.list.getModel().getSize() - 1); assertEquals("setSelectionOnList to all", this.model.things.size(), this.model.things.getSelection().size()); this.list.removeSelectionInterval(2, 5); assertEquals("removeSelectionOnList from 2 to 5", 6, this.model.things.getSelection().size()); } @Test public void testRemoveSelectionOnModel() { setup(); assertEquals("modelSize", 10, this.model.things.size()); this.model.things.getSelection().setInterval(0, this.model.things.size() - 1); assertEquals("setSelectionOnModel to all", this.model.things.size(), this.list.getSelectedIndices().length); this.model.things.getSelection().removeInterval(2, 5); assertEquals("removeSelectionOnModel from 2 to 5", 6, this.list.getSelectedIndices().length); } @Test public void testClearSelectionOnList() { setup(); this.list.setSelectionInterval(0, this.list.getModel().getSize() - 1); assertEquals("setSelectionOnList to all", this.model.things.size(), this.model.things.getSelection().size()); this.list.clearSelection(); assertEquals("clearSelectionOnList", 0, this.model.things.getSelection().size()); } @Test public void testClearSelectionOnModel() { setup(); this.model.things.getSelection().setInterval(0, this.model.things.size() - 1); assertEquals("setSelectionOnModel to all", this.model.things.size(), this.list.getSelectedIndices().length); this.model.things.getSelection().clear(); assertEquals("clearSelectionOnModel", 0, this.list.getSelectedIndices().length); } @Test public void testSelectionOnReconnect() { setup(); assertEquals("modelSize", 10, this.model.things.size()); this.model.things.getSelection().setInterval(2, 4); assertEquals("model.things.getSelection().size()", 3, this.model.things.getSelection().size()); assertEquals("listCell.getSelectedIndices().length", 3, this.list.getSelectedIndices().length); this.provider.setPresentationModel(null); assertEquals("model.things.getSelection().size()", 3, this.model.things.getSelection().size()); assertEquals("listCell.getSelectedIndices().length", 0, this.list.getSelectedIndices().length); this.provider.setPresentationModel(this.model); assertEquals("model.things.getSelection().size()", 3, this.model.things.getSelection().size()); assertEquals("listCell.getSelectedIndices().length", 3, this.list.getSelectedIndices().length); } @Test public void testIsSelectedIndex() { setup(); assertEquals("modelSize", 10, this.model.things.size()); this.model.things.getSelection().setInterval(2, 4); assertEquals("listCell.isSelectedIndex(int)", false, this.list.isSelectedIndex(0)); assertEquals("listCell.isSelectedIndex(int)", false, this.list.isSelectedIndex(1)); assertEquals("listCell.isSelectedIndex(int)", true, this.list.isSelectedIndex(2)); assertEquals("listCell.isSelectedIndex(int)", true, this.list.isSelectedIndex(3)); assertEquals("listCell.isSelectedIndex(int)", true, this.list.isSelectedIndex(4)); assertEquals("listCell.isSelectedIndex(int)", false, this.list.isSelectedIndex(5)); assertEquals("listCell.isSelectedIndex(int)", false, this.list.isSelectedIndex(6)); assertEquals("listCell.isSelectedIndex(int)", false, this.list.isSelectedIndex(7)); assertEquals("listCell.isSelectedIndex(int)", false, this.list.isSelectedIndex(8)); assertEquals("listCell.isSelectedIndex(int)", false, this.list.isSelectedIndex(9)); } @Test public void testIsSelectionEmpty() { setup(); assertEquals("modelSize", 10, this.model.things.size()); assertEquals("listCell.isSelectionEmpty()", true, this.list.isSelectionEmpty()); this.model.things.getSelection().setInterval(2, 4); assertEquals("listCell.isSelectionEmpty()", false, this.list.isSelectionEmpty()); } private void setup() { this.list.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); this.provider.setPresentationModel(this.model); this.list.setModelProvider(provider); this.list.setPath(new Path("this.things")); this.list.setCellConfig(new CellConfig(new Path("this"))); } private static class GroupModel extends AbstractPM { @Property private final ListPM<TextPM> things = new ListPM<TextPM>(); public GroupModel() { PMManager.setup(this); this.initThings(); } private void initThings() { for (int i = 0; i < 10; i++) { TextPM thing = new TextPM(); thing.setText("Thing " + i); this.things.add(thing); } } } }