/*
* Created on 25.02.2011
*
*/
package org.jdesktop.swingx.table;
import static org.jdesktop.swingx.table.TableUtilities.isDataChanged;
import static org.jdesktop.swingx.table.TableUtilities.isInsert;
import static org.jdesktop.swingx.table.TableUtilities.isDelete;
import static org.jdesktop.swingx.table.TableUtilities.isStructureChanged;
import static org.jdesktop.swingx.table.TableUtilities.isUpdate;
import static org.jdesktop.swingx.table.TableUtilities.ordinalsOf;
import javax.swing.JTable;
import javax.swing.event.TableModelEvent;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumnModel;
import javax.swing.table.TableModel;
import org.jdesktop.swingx.InteractiveTestCase;
import org.jdesktop.swingx.JXTable;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
@RunWith(JUnit4.class)
public class TableUtilitiesTest extends InteractiveTestCase {
@Test
public void testRemoveAllColumns() {
TableColumnModel model = createTableColumnModel();
TableUtilities.clear(model, true);
assertEquals(0, model.getColumnCount());
}
@Test
public void testRemoveAllColumnsExt() {
TableColumnModelExt model = createTableColumnModelExt();
TableUtilities.clear(model, true);
assertEquals(0, model.getColumnCount());
}
@Test
public void testRemoveAllColumnsExtHiddenIncluded() {
TableColumnModelExt model = createTableColumnModelExt();
model.getColumnExt(0).setVisible(false);
TableUtilities.clear(model, true);
assertEquals(0, model.getColumnCount(true));
}
@Test
public void testRemoveAllColumnsExtHiddenExcluded() {
TableColumnModelExt model = createTableColumnModelExt();
model.getColumnExt(0).setVisible(false);
TableUtilities.clear(model, false);
assertEquals(1, model.getColumnCount(true));
}
private TableColumnModelExt createTableColumnModelExt() {
JXTable table = new JXTable(0, 4);
return (TableColumnModelExt) table.getColumnModel();
}
private TableColumnModel createTableColumnModel() {
JTable table = new JTable(0, 4);
return table.getColumnModel();
}
@Test
public void testOrdinals() {
int[] ordinals = ordinalsOf(Dummy.THIRD, Dummy.SECOND, Dummy.FIRST);
for (int i = 0; i < ordinals.length; i++) {
assertEquals(Dummy.values().length - 1 - i, ordinals[i]);
}
}
@Test
public void testOrdinalsEmpty() {
int[] ordinals = ordinalsOf();
assertNotNull(ordinals);
assertEquals(0, ordinals.length);
}
enum Dummy {
FIRST,
SECOND,
THIRD
}
@Test(expected = IndexOutOfBoundsException.class)
public void testPrefRowHeightInvalidRow() {
JTable table = new JTable(10, 3);
assertEquals(table.getRowHeight(), TableUtilities.getPreferredRowHeight(table, -1));
}
@Test
public void testZeroHeight() {
JTable table = new JTable();
assertEquals(table.getRowHeight(), TableUtilities.getPreferredRowHeight(table, -1));
}
@Test (expected = NullPointerException.class)
public void testPrefRowHeightMustBarkOnNull() {
TableUtilities.getPreferredRowHeight(null, -1);
}
/**
* Issue ??-swingx: NPE if tableChanged is messaged with a null event.
*
*/
@Test
public void testNullTableEventNPE() {
// don't throw on null events
assertFalse(isInsert(null));
assertFalse(isDelete(null));
assertFalse(isUpdate(null));
assertFalse(isDataChanged(null));
assertTrue(isStructureChanged(null));
}
@Test
public void testDataChanged() {
// correct detection of dataChanged
TableModelEvent dataChanged = new TableModelEvent(getModel());
assertFalse(isUpdate(dataChanged));
assertTrue(isDataChanged(dataChanged));
assertFalse(isStructureChanged(dataChanged));
assertFalse(isInsert(dataChanged));
assertFalse(isDelete(dataChanged));
}
@Test
public void testUpdate() {
// correct detection of update
TableModelEvent update = new TableModelEvent(getModel(), 0, 10);
assertTrue(isUpdate(update));
assertFalse(isDataChanged(update));
assertFalse(isStructureChanged(update));
assertFalse(isDelete(update));
assertFalse(isInsert(update));
}
@Test
public void testInsert() {
// correct detection of insert/remove
TableModelEvent insert = new TableModelEvent(
getModel(), 0, 10, -1, TableModelEvent.INSERT);
assertFalse(isUpdate(insert));
assertFalse(isDelete(insert));
assertFalse(isDataChanged(insert));
assertFalse(isStructureChanged(insert));
assertTrue(isInsert(insert));
}
@Test
public void testRemove() {
// correct detection of insert/remove
TableModelEvent remove = new TableModelEvent(
getModel(), 0, 10, -1, TableModelEvent.DELETE);
assertFalse(isUpdate(remove));
assertFalse(isInsert(remove));
assertFalse(isDataChanged(remove));
assertFalse(isStructureChanged(remove));
assertTrue(isDelete(remove));
}
@Test
public void testStructureChanged() {
// correct detection of structureChanged
TableModelEvent structureChanged = new TableModelEvent(getModel(), -1, -1);
assertFalse(isInsert(structureChanged));
assertFalse(isDelete(structureChanged));
assertFalse(isUpdate(structureChanged));
assertFalse(isDataChanged(structureChanged));
assertTrue(isStructureChanged(structureChanged));
}
private TableModel getModel() {
return new DefaultTableModel();
}
@Override
@Before
public void setUp() throws Exception {
}
}