001 /* 002 * Copyright 2002-2004 the original author or authors. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); you may not 005 * use this file except in compliance with the License. You may obtain a copy of 006 * the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 012 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 013 * License for the specific language governing permissions and limitations under 014 * the License. 015 */ 016 package org.springframework.richclient.table; 017 018 import java.util.ArrayList; 019 import java.util.List; 020 021 import javax.swing.event.TableModelEvent; 022 import javax.swing.event.TableModelListener; 023 024 import junit.framework.Assert; 025 026 import org.easymock.EasyMock; 027 028 029 /** 030 * TODO finish comment 031 * 032 * @author Kevin Stembridge 033 * @since 0.3 034 * 035 */ 036 public abstract class AbstractBaseTableModelTests extends AbstractMutableTableModelTests { 037 038 /** 039 * {@inheritDoc} 040 */ 041 protected MutableTableModel getTableModel() { 042 return getBaseTableModel(); 043 } 044 045 /** 046 * Subclasses must implement this method to return the implementation to be tested. 047 * 048 * @return The table model implementation to be tested. Never null. 049 */ 050 protected abstract BaseTableModel getBaseTableModel(); 051 052 /** 053 * Creates a new uninitialized {@code AbstractBaseTableModelTests}. 054 */ 055 public AbstractBaseTableModelTests() { 056 super(); 057 } 058 059 /** 060 * Test method for {@link BaseTableModel#setRows(java.util.List)}. 061 */ 062 public final void testSetRows() { 063 064 BaseTableModel model = getBaseTableModel(); 065 066 List rows = new ArrayList(); 067 rows.add(new Object()); 068 rows.add(new Object()); 069 070 //create the mock listeners and add them to the model 071 TableModelListener listener1 = (TableModelListener) EasyMock.createMock(TableModelListener.class); 072 TableModelListener listener2 = (TableModelListener) EasyMock.createMock(TableModelListener.class); 073 model.addTableModelListener(listener1); 074 model.addTableModelListener(listener2); 075 076 //set the expectations on the mock listeners 077 TableModelEvent expectedEvent = new TableModelEvent(model); 078 listener1.tableChanged(matchEvent(expectedEvent)); 079 listener2.tableChanged(matchEvent(expectedEvent)); 080 081 //switch the mocks to replay mode 082 EasyMock.replay(listener1); 083 EasyMock.replay(listener2); 084 085 //...and execute the test 086 model.setRows(rows); 087 088 Assert.assertEquals(2, model.getRowCount()); 089 EasyMock.verify(listener1); 090 EasyMock.verify(listener2); 091 092 //Create a new list of rows and confirm that it overwrites the existing rows 093 List rows2 = new ArrayList(3); 094 rows2.add(new Object()); 095 rows2.add(new Object()); 096 rows2.add(new Object()); 097 098 //reset the mocks 099 EasyMock.reset(listener1); 100 EasyMock.reset(listener2); 101 102 //set the expectations on the mock listeners 103 listener1.tableChanged(matchEvent(expectedEvent)); 104 listener2.tableChanged(matchEvent(expectedEvent)); 105 106 //switch the mocks to replay mode 107 EasyMock.replay(listener1); 108 EasyMock.replay(listener2); 109 110 //...and execute the test 111 model.setRows(rows2); 112 113 Assert.assertEquals(3, model.getRowCount()); 114 EasyMock.verify(listener1); 115 EasyMock.verify(listener2); 116 117 118 } 119 120 /** 121 * Test method for {@link org.springframework.richclient.table.BaseTableModel#hasRowNumbers()}. 122 */ 123 public final void testRowNumbersFlag() { 124 125 BaseTableModel model = getBaseTableModel(); 126 127 Assert.assertTrue("Assert default rowNumbers flag is true", model.hasRowNumbers()); 128 129 model.setRowNumbers(false); 130 131 Assert.assertFalse("Assert rowNumbers flag is false", model.hasRowNumbers()); 132 133 } 134 135 /** 136 * Test method for {@link org.springframework.richclient.table.BaseTableModel#getRow(int)}. 137 */ 138 public final void testGetRow() { 139 140 BaseTableModel model = getBaseTableModel(); 141 142 Object row1 = new Object(); 143 Object row2 = new Object(); 144 Object row3 = new Object(); 145 146 List rows = new ArrayList(3); 147 rows.add(row1); 148 rows.add(row2); 149 rows.add(row3); 150 151 model.setRows(rows); 152 153 Assert.assertEquals(row1, model.getRow(0)); 154 Assert.assertEquals(row2, model.getRow(1)); 155 Assert.assertEquals(row3, model.getRow(2)); 156 157 try { 158 model.getRow(-1); 159 Assert.fail("Should have thrown an IndexOutOfBoundsException"); 160 } 161 catch (IndexOutOfBoundsException e) { 162 //test passes 163 } 164 165 try { 166 model.getRow(3); 167 Assert.fail("Should have thrown an IndexOutOfBoundsException"); 168 } 169 catch (IndexOutOfBoundsException e) { 170 //test passes 171 } 172 173 } 174 175 /** 176 * Test method for {@link BaseTableModel#getRows()}. 177 */ 178 public final void testGetRows() { 179 180 BaseTableModel model = getBaseTableModel(); 181 182 Assert.assertNotNull("Assert model.getRows is not null", model.getRows()); 183 Assert.assertTrue("Assert model.getRows is an empty list", model.getRows().isEmpty()); 184 185 List rows = new ArrayList(3); 186 rows.add(new Object()); 187 rows.add(new Object()); 188 rows.add(new Object()); 189 model.setRows(rows); 190 191 Assert.assertEquals(rows, model.getRows()); 192 193 } 194 195 /** 196 * Test method for {@link BaseTableModel#rowOf(java.lang.Object)}. 197 */ 198 public final void testRowOf() { 199 200 BaseTableModel model = getBaseTableModel(); 201 Object expectedRow = new Object(); 202 203 //confirm that -1 is returned if the model does not contain the element 204 Assert.assertEquals(-1, model.rowOf(expectedRow)); 205 Assert.assertEquals(-1, model.rowOf(expectedRow)); 206 207 //create a list of rows with the expected row at the first and third positions, and add 208 //them to the model 209 List rows = new ArrayList(); 210 rows.add(expectedRow); 211 rows.add(new Object()); 212 rows.add(expectedRow); 213 model.setRows(rows); 214 215 //confirm that the expected row is at index 0 216 Assert.assertEquals(0, model.rowOf(expectedRow)); 217 218 } 219 220 }