/*
* codjo.net
*
* Common Apache License 2.0
*/
package net.codjo.utils;
import static net.codjo.utils.TableFilterCombo.NO_FILTER;
import javax.swing.table.DefaultTableModel;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
* Classe Test pour <code>TableFilter</code> .
*
* @author $Author: spinae $
* @version $Revision: 1.2 $
*/
public class TableFilterComboTest extends TestCase {
TableFilterCombo filterCombo;
TableFilter filterModel;
TableFilterTest.BasicModel model;
public TableFilterComboTest(String name) {
super(name);
}
public static Test suite() {
return new TestSuite(TableFilterComboTest.class);
}
/**
* Test le cas ou la table contient des Booleans.
*/
public void testBooleanValue() {
Object[] colNames = {"col_name"};
Object[][] data = {
{Boolean.FALSE},
{Boolean.TRUE}
};
DefaultTableModel booleanModel = new DefaultTableModel(data, colNames);
filterModel = new TableFilter(booleanModel);
filterCombo.setTableFilter(filterModel, 0);
assertEquals(3, filterCombo.getModel().getSize());
assertEquals(NO_FILTER, filterCombo.getModel().getElementAt(0));
assertEquals(Boolean.FALSE, filterCombo.getModel().getElementAt(1));
assertEquals(Boolean.TRUE, filterCombo.getModel().getElementAt(2));
}
public void testFilterAlreadyExist() {
filterModel.setFilter(0, 1);
filterCombo.setTableFilter(filterModel, 0);
assertEquals(filterCombo.getSelectedItem(), filterModel.getFilterValue(0));
}
public void testFilterSetProgramaticaly() {
filterCombo.setTableFilter(filterModel, 0);
assertNull("NoFilter", filterModel.getFilterValue(0));
assertEquals(filterCombo.getSelectedItem(), NO_FILTER);
filterModel.setFilter(0, 1);
assertEquals("setFilter", filterCombo.getSelectedItem(), 1);
}
public void testNoDuplicateItem() {
filterCombo.setTableFilter(filterModel, 0);
assertEquals(filterCombo.getModel().getSize(), 3);
assertEquals(filterCombo.getModel().getElementAt(0), NO_FILTER);
assertEquals(0, filterCombo.getModel().getElementAt(1));
assertEquals(filterCombo.getModel().getElementAt(2), 1);
}
public void testSortOrder() {
filterCombo.setComparator(new InvertComparator());
filterCombo.setTableFilter(filterModel, 0);
assertEquals(filterCombo.getModel().getSize(), 3);
assertEquals(filterCombo.getModel().getElementAt(0), TableFilterCombo.NO_FILTER);
assertEquals(filterCombo.getModel().getElementAt(1), 1);
assertEquals(filterCombo.getModel().getElementAt(2), 0);
}
public void testSortOrderLateUpdate() {
filterCombo.setTableFilter(filterModel, 0);
filterCombo.setComparator(new InvertComparator());
assertEquals(filterCombo.getModel().getSize(), 3);
assertEquals(filterCombo.getModel().getElementAt(0), TableFilterCombo.NO_FILTER);
assertEquals(filterCombo.getModel().getElementAt(1), 1);
assertEquals(0, filterCombo.getModel().getElementAt(2));
}
public void testSortOrderNullValue() {
// Creation du modele
Object[] colNames = {"col_name"};
Object[][] data = {
{1},
{2},
{null}
};
DefaultTableModel nullModel = new DefaultTableModel(data, colNames);
filterModel = new TableFilter(nullModel);
// Init du Combo
filterCombo.setComparator(new InvertComparator());
filterCombo.setTableFilter(filterModel, 0);
// Verification du resultat
assertEquals(4, filterCombo.getModel().getSize());
assertEquals(TableFilterCombo.NO_FILTER, filterCombo.getModel().getElementAt(0));
assertEquals(filterCombo.getModel().getElementAt(1), TableFilterCombo.NULL_FILTER);
assertEquals(filterCombo.getModel().getElementAt(2), 2);
assertEquals(filterCombo.getModel().getElementAt(3), 1);
}
public void testNoDuplicateItemModelUpdate() {
filterCombo.setTableFilter(filterModel, 0);
model.simulateDataChange(5);
assertEquals(filterCombo.getModel().getSize(), 3);
assertEquals(filterCombo.getModel().getElementAt(0), TableFilterCombo.NO_FILTER);
assertEquals(filterCombo.getModel().getElementAt(1), 5);
assertEquals(filterCombo.getModel().getElementAt(2), 6);
}
/**
* Test le cas ou le model contient des valeurs nulle.
*/
public void testNullValue() {
Object[] colNames = {"col_name"};
Object[][] data = {
{"valA"},
{null}
};
DefaultTableModel nullModel = new DefaultTableModel(data, colNames);
filterModel = new TableFilter(nullModel);
filterCombo.setTableFilter(filterModel, 0);
assertEquals(3, filterCombo.getModel().getSize());
assertEquals(TableFilterCombo.NO_FILTER, filterCombo.getModel().getElementAt(0));
assertEquals(TableFilterCombo.NULL_FILTER, filterCombo.getModel().getElementAt(1));
assertEquals("valA", filterCombo.getModel().getElementAt(2));
}
public void testScenario() {
filterCombo.setTableFilter(filterModel, 0);
assertEquals(filterCombo.getModel().getSize(), 3);
filterModel.setFilter(0, 1);
assertEquals(filterCombo.getModel().getSize(), 3);
}
public void testUserSelectFilter() {
filterCombo.setTableFilter(filterModel, 0);
assertEquals("Par defaut NO_FILTER", filterCombo.getSelectedItem(),
TableFilterCombo.NO_FILTER);
assertEquals("NoFilter", filterModel.getFilterValue(0), null);
filterCombo.setSelectedItem(0);
assertEquals("Combo setFilter", filterModel.getFilterValue(0), 0);
}
@Override
protected void setUp() throws java.lang.Exception {
model = new TableFilterTest.BasicModel();
filterModel = new TableFilter(model);
filterCombo = new TableFilterCombo();
}
private static class InvertComparator implements java.util.Comparator {
public int compare(Object o1, Object o2) {
return -1 * ((Integer)o1).compareTo((Integer)o2);
}
}
}