blob: 7b464f6fd3e2066b0d48d0fa568aa45b3b907dc4 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2007 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.ui.tests.dialogs;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.regex.Pattern;
import junit.framework.TestCase;
import org.eclipse.ui.dialogs.SearchPattern;
/**
* Test case for tests SearchPattern match functionality
*
* @since 3.3
*
*/
public class SearchPatternAuto extends TestCase {
private static ArrayList resources = new ArrayList();
static {
generateRescourcesTestCases('A', 'C', 8, "");
generateRescourcesTestCases('A', 'C', 4, "");
}
/**
* @param name
*/
public SearchPatternAuto(String name) {
super(name);
}
/* (non-Javadoc)
* @see junit.framework.TestCase#setUp()
*/
protected void setUp() throws Exception {
super.setUp();
}
/**
* Generates strings data for match test cases.
*
* @param startChar
* @param endChar
* @param lenght
* @param resource
*/
private static void generateRescourcesTestCases(char startChar, char endChar, int lenght, String resource){
for (char ch = startChar; ch <= endChar; ch++) {
String res = resource + String.valueOf(ch);
if (lenght == res.length())
resources.add(res);
else if ((res.trim().length() % 2) == 0)
generateRescourcesTestCases(Character.toUpperCase((char)(startChar + 1)), Character.toUpperCase((char)(endChar + 1)), lenght, res);
else
generateRescourcesTestCases(Character.toLowerCase((char)(startChar + 1)), Character.toLowerCase((char)(endChar + 1)), lenght, res);
}
}
/* (non-Javadoc)
* @see junit.framework.TestCase#tearDown()
*/
protected void tearDown() throws Exception {
super.tearDown();
}
/**
* Tests exact match functionality. If we camelCase rule is enable, Pattern should starts with lowerCase character.
* Result for "abcd " pattern should be similar to regexp pattern "abcd" with case insensitive.
*/
public void testExactMatch1() {
String patternText = "abcd ";
Pattern pattern = Pattern.compile("abcd", Pattern.CASE_INSENSITIVE);
SearchPattern patternMatcher = new SearchPattern();
patternMatcher.setPattern(patternText);
assertEquals(patternMatcher.getMatchRule(), SearchPattern.RULE_EXACT_MATCH);
for (Iterator iter = resources.iterator(); iter.hasNext();) {
String res = (String) iter.next();
assertEquals(patternMatcher.matches(res), pattern.matcher(res).matches());
}
}
/**
* Tests exact match functionality. If we camelCase rule is enable, Pattern should starts with lowerCase character.
* Result for "abcdefgh " pattern should be similar to regexp pattern "abcdefgh" with case insensitive.
*/
public void testExactMatch2() {
String patternText = "abcdefgh<";
Pattern pattern = Pattern.compile("abcdefgh", Pattern.CASE_INSENSITIVE);
SearchPattern patternMatcher = new SearchPattern();
patternMatcher.setPattern(patternText);
assertEquals(patternMatcher.getMatchRule(), SearchPattern.RULE_EXACT_MATCH);
for (Iterator iter = resources.iterator(); iter.hasNext();) {
String res = (String) iter.next();
assertEquals(patternMatcher.matches(res), pattern.matcher(res).matches());
}
}
/**
* Tests prefix match functionality. If we camelCase rule is enable, Pattern should starts with lowerCase character.
* Result for "ab" pattern should be similar to regexp pattern "ab.*" with case insensitive.
*/
public void testPrefixMatch() {
String patternText = "ab";
Pattern pattern = Pattern.compile("ab.*", Pattern.CASE_INSENSITIVE);
SearchPattern patternMatcher = new SearchPattern();
patternMatcher.setPattern(patternText);
assertEquals(patternMatcher.getMatchRule(), SearchPattern.RULE_PREFIX_MATCH);
for (Iterator iter = resources.iterator(); iter.hasNext();) {
String res = (String) iter.next();
assertEquals(patternMatcher.matches(res), pattern.matcher(res).matches());
}
}
/**
* Tests pattern match functionality. It's similar to regexp patterns.
* Result for "**cDe" pattern should be similar to regexp pattern ".*cde.*" with case insensitive.
*/
public void testPatternMatch1() {
String patternText = "**cDe";
Pattern pattern = Pattern.compile(".*cde.*", Pattern.CASE_INSENSITIVE);
SearchPattern patternMatcher = new SearchPattern();
patternMatcher.setPattern(patternText);
assertEquals(patternMatcher.getMatchRule(), SearchPattern.RULE_PATTERN_MATCH);
for (Iterator iter = resources.iterator(); iter.hasNext();) {
String res = (String) iter.next();
assertEquals(patternMatcher.matches(res), pattern.matcher(res).matches());
}
}
/**
* Tests pattern match functionality. It's similar to regexp patterns.
* Result for "**c*e*i" pattern should be similar to regexp pattern ".*c.*e.*i.*" with case insensitive.
*/
public void testPatternMatch2() {
String patternText = "**c*e*i";
Pattern pattern = Pattern.compile(".*c.*e.*i.*", Pattern.CASE_INSENSITIVE);
SearchPattern patternMatcher = new SearchPattern();
patternMatcher.setPattern(patternText);
assertEquals(patternMatcher.getMatchRule(), SearchPattern.RULE_PATTERN_MATCH);
for (Iterator iter = resources.iterator(); iter.hasNext();) {
String res = (String) iter.next();
assertEquals(patternMatcher.matches(res), pattern.matcher(res).matches());
}
}
/**
* Tests camelCase match functionality.
* Every string starts with upperCase characters should be recognize as camelCase pattern match rule.
* Result for "CD" SearchPattern should be similar to regexp pattern "C[^A-Z]*D.*" or "CD.*"
* If pattern contains only upperCase characters result contains all prefix match elements.
*/
public void testCamelCaseMatch1() {
String patternText = "CD";
Pattern pattern = Pattern.compile("C[^A-Z]*D.*");
Pattern pattern2 = Pattern.compile("CD.*", Pattern.CASE_INSENSITIVE);
SearchPattern patternMatcher = new SearchPattern();
patternMatcher.setPattern(patternText);
assertEquals(patternMatcher.getMatchRule(), SearchPattern.RULE_CAMELCASE_MATCH);
for (Iterator iter = resources.iterator(); iter.hasNext();) {
String res = (String) iter.next();
if (patternMatcher.matches(res) != pattern.matcher(res).matches()) {
assertEquals(patternMatcher.matches(res), pattern2.matcher(res).matches());
}
}
}
/**
* Tests camelCase match functionality.
* Every string starts with upperCase characters should be recognize as camelCase pattern match rule.
* Result for "AbCd " SearchPattern should be similar to regexp pattern "C[^A-Z]*D.*" or "CD.*"
*/
public void testCamelCaseMatch2() {
String patternText = "AbCd ";
Pattern pattern = Pattern.compile("Ab[^A-Z]*Cd[^A-Z]*");
SearchPattern patternMatcher = new SearchPattern();
patternMatcher.setPattern(patternText);
assertEquals(patternMatcher.getMatchRule(), SearchPattern.RULE_CAMELCASE_MATCH);
for (Iterator iter = resources.iterator(); iter.hasNext();) {
String res = (String) iter.next();
assertEquals(patternMatcher.matches(res), pattern.matcher(res).matches());
}
}
/**
* Tests camelCase match functionality.
* Every string starts with upperCase characters should be recognize as camelCase pattern match rule.
* Result for "AbCdE<" SearchPattern should be similar to regexp pattern "Ab[^A-Z]*Cd[^A-Z]*E[^A-Z]*"
*/
public void testCamelCaseMatch3() {
String patternText = "AbCdE<";
Pattern pattern = Pattern.compile("Ab[^A-Z]*Cd[^A-Z]*E[^A-Z]*");
SearchPattern patternMatcher = new SearchPattern();
patternMatcher.setPattern(patternText);
assertEquals(patternMatcher.getMatchRule(), SearchPattern.RULE_CAMELCASE_MATCH);
for (Iterator iter = resources.iterator(); iter.hasNext();) {
String res = (String) iter.next();
assertEquals(patternMatcher.matches(res), pattern.matcher(res).matches());
}
}
/**
* Tests blank match functionality.
* Blank string should be recognize as blank pattern match rule.
* It should match with all resources.
* Result for SearchPattern should be similar to regexp pattern ".*"
*/
public void testBlankMatch() {
String patternText = "";
Pattern pattern = Pattern.compile(".*", Pattern.CASE_INSENSITIVE);
SearchPattern patternMatcher = new SearchPattern();
patternMatcher.setPattern(patternText);
assertEquals(patternMatcher.getMatchRule(), SearchPattern.RULE_BLANK_MATCH);
for (Iterator iter = resources.iterator(); iter.hasNext();) {
String res = (String) iter.next();
assertEquals(patternMatcher.matches(res), pattern.matcher(res).matches());
}
}
}