/* * $Id$ * * Copyright 2009 Sun Microsystems, Inc., 4150 Network Circle, * Santa Clara, California 95054, U.S.A. All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * */ package org.jdesktop.swingx.sort; import static org.junit.Assert.*; import java.awt.Color; import java.util.HashMap; import java.util.Map; import java.util.logging.Logger; import javax.swing.RowFilter; import javax.swing.SortOrder; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableModel; import org.jdesktop.test.AncientSwingTeam; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; /** * Unit test of TableSortController. * * @author Jeanette Winzenburg */ @RunWith(JUnit4.class) public class TableSortControllerTest extends AbstractTestSortController<TableSortController<TableModel>, TableModel> { @SuppressWarnings("unused") private static final Logger LOG = Logger .getLogger(TableSortControllerTest.class.getName()); public static void main(String[] args) { TableSortControllerTest test = new TableSortControllerTest(); try { test.runInteractiveTests(); } catch (Exception e) { e.printStackTrace(); } } /** * Sanity: cachedModelRowCount updated if null model set */ @Test public void testSetModelCleanup() { controller.setModel(null); assertEquals(0, controller.getModelRowCount()); assertEquals(0, controller.getViewRowCount()); } // --------------- start of #1291-swingx related tests /** * Core Issue http://forums.sun.com/thread.jspa?messageID=10939199#10939199 * * Table looses selection of last row if deleted before last. * * Here: DefaultRowSorter conversion throws too much if not sorted. */ @Test public void testViewRowCountAfterRemoveNotSorted() { int rows = controller.getModelRowCount(); ((AncientSwingTeam) controller.getModel()).removeRows(0, 1); assertEquals(rows, controller.getViewRowCount()); } /** * Core Issue http://forums.sun.com/thread.jspa?messageID=10939199#10939199 * * Table looses selection of last row if deleted before last. * * Here: DefaultRowSorter conversion throws too much if not sorted. */ @Test public void testViewRowCountAfterInsertNotSorted() { int rows = controller.getModelRowCount(); ((AncientSwingTeam) controller.getModel()).insertRows(0, 1); assertEquals(rows, controller.getViewRowCount()); } /** * Core Issue http://forums.sun.com/thread.jspa?messageID=10939199#10939199 * * Table looses selection of last row if deleted before last. * * Here: DefaultRowSorter conversion throws too much if not sorted. */ @Test public void testModelRowCountAfterRemoveNotSorted() { int rows = controller.getModelRowCount(); ((AncientSwingTeam) controller.getModel()).removeRows(0, 1); assertEquals(rows, controller.getModelRowCount()); } /** * Core Issue http://forums.sun.com/thread.jspa?messageID=10939199#10939199 * * Table looses selection of last row if deleted before last. * * Here: DefaultRowSorter conversion throws too much if not sorted. */ @Test public void testModelRowCountAfterInsertNotSorted() { int rows = controller.getModelRowCount(); ((AncientSwingTeam) controller.getModel()).insertRows(0, 1); assertEquals(rows, controller.getModelRowCount()); } // --------------- end of #1291 related tests /** * Issue #1156-swingx: sorter must use comparable if available * TableSortController */ @Test public void testComparableComparatorTable() { TableModel model = new DefaultTableModel(2, 1) { @Override public Class<?> getColumnClass(int columnIndex) { return Integer.class; } }; model.setValueAt(10, 0, 0); model.setValueAt(2, 1, 0); TableSortController<TableModel> sorter = new TableSortController<TableModel>( model); sorter.setSortOrder(0, SortOrder.ASCENDING); assertEquals(0, sorter.convertRowIndexToModel(1)); } /** * Issue #1156-swingx: sorter must use comparable if available fix for that * (comparator update falls back to collator) introduced a * ClassCastException - useString must be implemented the same way */ @Test public void testUseString() { controller.setSortOrder(2, SortOrder.ASCENDING); } /** * */ @Test public void testUseStringValueProvider() { registry.setStringValue(sv, Color.class); controller.setStringValueProvider(registry); RowFilter<Object, Object> filter = RowFilter .regexFilter("R/G/B: -2", 2); controller.setRowFilter(filter); assertTrue("view row count: " + controller.getViewRowCount(), controller.getViewRowCount() > 0); } @Override protected int getColumnCount() { return ((TableModel) controller.getModel()).getColumnCount(); } // -------------------- utility methods and setup /** * @param registry2 * @param teamModel2 */ private void initColumnClasses(StringValueRegistry registry, TableModel model) { Map<Integer, Class<?>> classPerColumn = new HashMap<Integer, Class<?>>(); for (int i = 0; i < model.getColumnCount(); i++) { if (!Object.class.equals(model.getColumnClass(i))) { classPerColumn.put(i, model.getColumnClass(i)); } } registry.setColumnClasses(classPerColumn); } /** * @param registry2 * @param class1 */ @SuppressWarnings("unused") private void installPerClass(StringValueRegistry registry, Class<?>... clazz) { Map<Integer, Class<?>> classPerColumn = new HashMap<Integer, Class<?>>(); for (int i = 0; i < clazz.length; i++) { classPerColumn.put(i, clazz[i]); } registry.setColumnClasses(classPerColumn); } @Override protected TableSortController<TableModel> createDefaultSortController( TableModel model) { return new TableSortController<TableModel>(model); } @Override protected TableModel createModel() { return new AncientSwingTeam(); } @Override protected void setupModelDependentState(TableModel model) { initColumnClasses(registry, model); } }