/*
* $Id$
*
* Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle,
* Santa Clara, California 95054, U.S.A. All rights reserved.
*/
package org.jdesktop.swingx.search;
import java.util.List;
import junit.framework.TestCase;
import org.jdesktop.test.PropertyChangeReport;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
/**
* Testing PatternModel.
*
* @author Jeanette Winzenburg
*/
@RunWith(JUnit4.class)
public class PatternModelTest extends TestCase {
final static String startAnchor = "^";
final static String endAnchor = "$";
final static String middleStartAnchor = "some" + startAnchor + "one";
final static String middleEndAnchor = "some" + endAnchor + "one";
private PropertyChangeReport propertyReport;
@Before
public void setUpJ4() throws Exception {
setUp();
}
@After
public void tearDownJ4() throws Exception {
tearDown();
}
/**
* test initial autoAdjust of foundIndex in backward search.
*
*/
@Test
public void testFoundIndexAutoAdjustBackward() {
PatternModel model = new PatternModel();
model.setBackwards(true);
assertTrue("is autoAdjust by default", model.isAutoAdjustFoundIndex());
model.addPropertyChangeListener(propertyReport);
int foundIndex = 10;
model.setFoundIndex(foundIndex);
// assert changed value
assertEquals("foundIndex must be set", foundIndex -1, model.getFoundIndex());
assertTrue("changing foundIndex must have fired foundIndex property",
propertyReport.hasEvents("foundIndex"));
}
/**
* test initial autoAdjust of foundIndex in forward search.
*
*/
@Test
public void testFoundIndexAutoAdjustNotFound() {
PatternModel model = new PatternModel();
assertTrue("is autoAdjust by default", model.isAutoAdjustFoundIndex());
model.addPropertyChangeListener(propertyReport);
int foundIndex = -1;
model.setFoundIndex(foundIndex);
// assert changed value
assertEquals("foundIndex must be set", foundIndex, model.getFoundIndex());
}
/**
* test initial autoAdjust of foundIndex in forward search.
*
*/
@Test
public void testFoundIndexAutoAdjustForward() {
PatternModel model = new PatternModel();
assertTrue("is autoAdjust by default", model.isAutoAdjustFoundIndex());
model.addPropertyChangeListener(propertyReport);
int foundIndex = 10;
model.setFoundIndex(foundIndex);
// assert changed value
assertEquals("foundIndex must be set", foundIndex + 1, model.getFoundIndex());
assertTrue("changing foundIndex must have fired foundIndex property",
propertyReport.hasEvents("foundIndex"));
}
/**
* test initial value and notification of "foundIndex" property.
*
*/
@Test
public void testFoundIndex() {
PatternModel model = new PatternModel();
model.setIncremental(true);
// assert initial value
assertEquals("not found on start", -1, model.getFoundIndex());
model.addPropertyChangeListener(propertyReport);
model.setFoundIndex(10);
// assert changed value
assertEquals("foundIndex must be set", 10, model.getFoundIndex());
assertTrue("changing foundIndex must have fired foundIndex property",
propertyReport.hasEvents("foundIndex"));
}
@Test
public void testCaseSensitive() {
PatternModel model = new PatternModel();
model.setRawText("tab");
assertTrue("must find not case sensitive by default",
model.getPattern().matcher("JTABLE").find());
model.addPropertyChangeListener(propertyReport);
model.setCaseSensitive(true);
assertTrue("changing case sensitive must fire casesensitive property",
propertyReport.hasEvents("caseSensitive"));
assertTrue("changing case sensitive must fire pattern property",
propertyReport.hasEvents("pattern"));
}
@Test
public void testAvailableMatchRules() {
PatternModel model = new PatternModel();
List<?> rules = model.getMatchRules();
assertNotNull("rules must not be null", rules);
}
@Test
public void testRegexCreator() {
PatternModel model = new PatternModel();
model.addPropertyChangeListener(propertyReport);
model.setRegexCreatorKey(PatternModel.REGEX_UNCHANGED);
assertEquals("search string mode must be", PatternModel.REGEX_UNCHANGED, model.getRegexCreatorKey());
assertTrue(propertyReport.hasEvents("regexCreatorKey"));
// model.setSearchStringMode(PatternModel.SEARCH_STRING_ANCHORED);
// model.setSearchStringMode(PatternModel.SEARCH_STRING_WILDCARD);
// model.setSearchStringMode(PatternModel.SEARCH_STRING_EXPLICIT);
}
@Test
public void testMatchRule() {
PatternModel model = new PatternModel();
model.addPropertyChangeListener(propertyReport);
// default searchStringMode
assertEquals("search string mode must be",
PatternModel.REGEX_MATCH_RULES, model.getRegexCreatorKey());
// default searchCategory
assertEquals("search category must be ",
PatternModel.MATCH_RULE_CONTAINS, model.getMatchRule());
// change category and test if property change is fired
model.setMatchRule(PatternModel.MATCH_RULE_EQUALS);
assertTrue("model must have fired " + "matchRule ", propertyReport.hasEvents("matchRule"));
}
@Test
public void testChangeMatchRule() {
PatternModel model = new PatternModel();
String contained = "t";
model.setRawText(contained);
String match = "x" + contained + "x";
assertTrue("pattern must find " + match, model.getPattern().matcher(match).find());
model.addPropertyChangeListener(propertyReport);
model.setMatchRule(PatternModel.MATCH_RULE_EQUALS);
assertTrue("model must have fire pattern change", propertyReport.hasEvents("pattern"));
assertFalse("pattern must reject " + match, model.getPattern().matcher(match).find());
model.setMatchRule(PatternModel.MATCH_RULE_STARTSWITH);
match = "txx";
assertTrue("pattern must find " + match, model.getPattern().matcher(match).find());
model.setMatchRule(PatternModel.MATCH_RULE_ENDSWITH);
match = "xxt";
assertTrue("pattern must find " + match, model.getPattern().matcher(match).find());
}
/**
* test if rawtext is treated as literal.
*
*/
@Test
public void testRawMiddleAnchorTokens() {
PatternModel patternModel = new PatternModel();
patternModel.setRawText(startAnchor);
String literalAnchor = "some" + startAnchor +"one";
assertTrue("must find literal containing startAnchor " + literalAnchor, patternModel.getPattern().matcher(literalAnchor).find());
String literal = "someone";
assertFalse("must reject literal not containing startAnchor " + literal,
patternModel.getPattern().matcher(literal).find());
}
/**
* test if rawtext is treated as literal.
*
*/
@Test
public void testRawStartAnchor() {
PatternModel patternModel = new PatternModel();
String anchored = startAnchor + "hap";
patternModel.setRawText(anchored);
String literalAnchor = startAnchor + "happy";
assertTrue("must find literal containing startAnchor " + literalAnchor, patternModel.getPattern().matcher(literalAnchor).find());
String literal = "happy";
assertFalse("must reject literal not containing startAnchor " + literal,
patternModel.getPattern().matcher(literal).find());
}
@Override
protected void setUp() {
propertyReport = new PropertyChangeReport();
}
}