/* * $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 java.awt.Color; import java.util.regex.Pattern; import javax.swing.RowFilter; import javax.swing.table.TableModel; import org.jdesktop.swingx.InteractiveTestCase; import org.jdesktop.swingx.JXFrame; import org.jdesktop.swingx.JXTable; import org.jdesktop.swingx.renderer.DefaultTableRenderer; import org.jdesktop.swingx.renderer.StringValue; import org.jdesktop.swingx.renderer.StringValues; import org.jdesktop.test.AncientSwingTeam; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; /** * Unit and visual tests for RowFilters. * * @author Jeanette Winzenburg */ @RunWith(JUnit4.class) public class RowFiltersTest extends InteractiveTestCase { private AncientSwingTeam teamModel; private int colorColumn; private StringValue sv; private FilterEntry entry; public static void main(String[] args) { RowFiltersTest test = new RowFiltersTest(); try { test.runInteractiveTests(); } catch (Exception e) { e.printStackTrace(); } } @Test(expected = IllegalArgumentException.class) public void testIllegalArgumentOnNegative() { RowFilters.regexFilter(0, "some", -1); } @Test(expected = NullPointerException.class) public void testNPEOnNullRegex() { RowFilters.regexFilter(0, null); } @Test(expected = NullPointerException.class) public void testNPEOnNullPattern() { RowFilters.regexFilter((Pattern) null); } @Test public void testCaseFlagAndColumn() { RowFilter<TableModel, Integer> filter = RowFilters.regexFilter(Pattern.CASE_INSENSITIVE, "jeff", 0); entry.modelIndex = 3; assertTrue(filter.include(entry)); } @Test public void testCaseFlagAndColumnNoMatch() { RowFilter<TableModel, Integer> filter = RowFilters.regexFilter(Pattern.CASE_INSENSITIVE, "jeff", 1); entry.modelIndex = 3; assertFalse(filter.include(entry)); } @Test public void testCaseFlag() { RowFilter<TableModel, Integer> filter = RowFilters.regexFilter(Pattern.CASE_INSENSITIVE, "jeff"); entry.modelIndex = 3; assertTrue(filter.include(entry)); } @Test public void testDefaultCaseNoMatch() { RowFilter<TableModel, Integer> filter = RowFilters.regexFilter(0, "jeff"); entry.modelIndex = 3; assertFalse(filter.include(entry)); } @Test public void testDefaultCaseMatch() { RowFilter<TableModel, Integer> filter = RowFilters.regexFilter("Jeff"); entry.modelIndex = 3; assertTrue(filter.include(entry)); } @Test public void testExist() { RowFilters.regexFilter("sometext"); RowFilters.regexFilter("some", 0, 1, 3); RowFilters.regexFilter(Pattern.compile("text"), 0, 5); RowFilters.regexFilter(Pattern.compile("soem")); RowFilters.regexFilter(0, "some"); RowFilters.regexFilter(0, "some", 1); } public void interactiveDebug() { JXTable table = new JXTable(teamModel); table.getColumn(colorColumn).setCellRenderer(new DefaultTableRenderer(sv)); JXFrame frame = showWithScrollingInFrame(table, "row filters"); show(frame); } private class FilterEntry extends RowFilter.Entry<TableModel, Integer> { /** * The index into the model, set in getFilterEntry */ int modelIndex; @Override public TableModel getModel() { return teamModel; } @Override public int getValueCount() { return getModel().getColumnCount(); } @Override public Object getValue(int index) { return getModel().getValueAt(modelIndex, index); } @Override public String getStringValue(int index) { Object value = getValue(index); if (index == colorColumn) { return sv.getString(value); } return value != null ? value.toString() : ""; } @Override public Integer getIdentifier() { return modelIndex; } } /** * Creates and returns a StringValue which maps a Color to it's R/G/B rep, * prepending "R/G/B: " * * @return the StringValue for color. */ private StringValue createColorStringValue() { StringValue sv = new StringValue() { public String getString(Object value) { if (value instanceof Color) { Color color = (Color) value; return "R/G/B: " + color.getRGB(); } return StringValues.TO_STRING.getString(value); } }; return sv; } @Before @Override public void setUp() throws Exception { teamModel = new AncientSwingTeam(); colorColumn = 2; sv = createColorStringValue(); entry = new FilterEntry(); } }