You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by sc...@apache.org on 2006/07/02 21:42:19 UTC
svn commit: r418641 - in /jakarta/commons/proper/io/trunk/src:
java/org/apache/commons/io/ test/org/apache/commons/io/
test/org/apache/commons/io/filefilter/
Author: scolebourne
Date: Sun Jul 2 12:42:19 2006
New Revision: 418641
URL: http://svn.apache.org/viewvc?rev=418641&view=rev
Log:
Test and fix case sensitive wildcard filter
Modified:
jakarta/commons/proper/io/trunk/src/java/org/apache/commons/io/FilenameUtils.java
jakarta/commons/proper/io/trunk/src/java/org/apache/commons/io/IOCase.java
jakarta/commons/proper/io/trunk/src/test/org/apache/commons/io/FilenameUtilsWildcardTestCase.java
jakarta/commons/proper/io/trunk/src/test/org/apache/commons/io/filefilter/FileFilterTestCase.java
Modified: jakarta/commons/proper/io/trunk/src/java/org/apache/commons/io/FilenameUtils.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/io/trunk/src/java/org/apache/commons/io/FilenameUtils.java?rev=418641&r1=418640&r2=418641&view=diff
==============================================================================
--- jakarta/commons/proper/io/trunk/src/java/org/apache/commons/io/FilenameUtils.java (original)
+++ jakarta/commons/proper/io/trunk/src/java/org/apache/commons/io/FilenameUtils.java Sun Jul 2 12:42:19 2006
@@ -1134,6 +1134,8 @@
if (caseSensitivity == null) {
caseSensitivity = IOCase.SENSITIVE;
}
+ filename = caseSensitivity.convertCase(filename);
+ wildcardMatcher = caseSensitivity.convertCase(wildcardMatcher);
String[] wcs = splitOnTokens(wildcardMatcher);
boolean anyChars = false;
int textIdx = 0;
@@ -1179,7 +1181,7 @@
}
} else {
// matching from current position
- if (!caseSensitivity.checkRegionMatches(filename, textIdx, wcs[wcsIdx])) {
+ if (!filename.startsWith(wcs[wcsIdx], textIdx)) {
// couldnt match token
break;
}
Modified: jakarta/commons/proper/io/trunk/src/java/org/apache/commons/io/IOCase.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/io/trunk/src/java/org/apache/commons/io/IOCase.java?rev=418641&r1=418640&r2=418641&view=diff
==============================================================================
--- jakarta/commons/proper/io/trunk/src/java/org/apache/commons/io/IOCase.java (original)
+++ jakarta/commons/proper/io/trunk/src/java/org/apache/commons/io/IOCase.java Sun Jul 2 12:42:19 2006
@@ -31,7 +31,7 @@
* class to compare filenames.
*
* @author Stephen Colebourne
- * @version $Id$
+ * @version $Id: IOCase.java 417090 2006-06-25 23:18:33Z scolebourne $
* @since Commons IO 1.3
*/
public final class IOCase implements Serializable {
@@ -187,6 +187,20 @@
*/
public boolean checkRegionMatches(String str, int strStartIndex, String search) {
return str.regionMatches(!sensitive, strStartIndex, search, 0, search.length());
+ }
+
+ /**
+ * Converts the case of the input String to a standard format.
+ * Subsequent operations can then use standard String methods.
+ *
+ * @param str the string to convert, null returns null
+ * @return the lower-case version if case-insensitive
+ */
+ String convertCase(String str) {
+ if (str == null) {
+ return null;
+ }
+ return sensitive ? str : str.toLowerCase();
}
//-----------------------------------------------------------------------
Modified: jakarta/commons/proper/io/trunk/src/test/org/apache/commons/io/FilenameUtilsWildcardTestCase.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/io/trunk/src/test/org/apache/commons/io/FilenameUtilsWildcardTestCase.java?rev=418641&r1=418640&r2=418641&view=diff
==============================================================================
--- jakarta/commons/proper/io/trunk/src/test/org/apache/commons/io/FilenameUtilsWildcardTestCase.java (original)
+++ jakarta/commons/proper/io/trunk/src/test/org/apache/commons/io/FilenameUtilsWildcardTestCase.java Sun Jul 2 12:42:19 2006
@@ -45,8 +45,13 @@
assertEquals(true, FilenameUtils.wildcardMatch("Foo Bar Foo", "F*o Bar*"));
assertEquals(true, FilenameUtils.wildcardMatch("Adobe Acrobat Installer", "Ad*er"));
assertEquals(true, FilenameUtils.wildcardMatch("Foo", "*Foo"));
+ assertEquals(true, FilenameUtils.wildcardMatch("BarFoo", "*Foo"));
assertEquals(true, FilenameUtils.wildcardMatch("Foo", "Foo*"));
+ assertEquals(true, FilenameUtils.wildcardMatch("FooBar", "Foo*"));
+ assertEquals(false, FilenameUtils.wildcardMatch("FOO", "*Foo"));
+ assertEquals(false, FilenameUtils.wildcardMatch("BARFOO", "*Foo"));
assertEquals(false, FilenameUtils.wildcardMatch("FOO", "Foo*"));
+ assertEquals(false, FilenameUtils.wildcardMatch("FOOBAR", "Foo*"));
}
public void testMatchOnSystem() {
@@ -63,8 +68,13 @@
assertEquals(true, FilenameUtils.wildcardMatchOnSystem("Foo Bar Foo", "F*o Bar*"));
assertEquals(true, FilenameUtils.wildcardMatchOnSystem("Adobe Acrobat Installer", "Ad*er"));
assertEquals(true, FilenameUtils.wildcardMatchOnSystem("Foo", "*Foo"));
+ assertEquals(true, FilenameUtils.wildcardMatchOnSystem("BarFoo", "*Foo"));
assertEquals(true, FilenameUtils.wildcardMatchOnSystem("Foo", "Foo*"));
+ assertEquals(true, FilenameUtils.wildcardMatchOnSystem("FooBar", "Foo*"));
+ assertEquals(WINDOWS, FilenameUtils.wildcardMatchOnSystem("FOO", "*Foo"));
+ assertEquals(WINDOWS, FilenameUtils.wildcardMatchOnSystem("BARFOO", "*Foo"));
assertEquals(WINDOWS, FilenameUtils.wildcardMatchOnSystem("FOO", "Foo*"));
+ assertEquals(WINDOWS, FilenameUtils.wildcardMatchOnSystem("FOOBAR", "Foo*"));
}
public void testMatchCaseSpecified() {
@@ -82,9 +92,23 @@
assertEquals(true, FilenameUtils.wildcardMatch("Adobe Acrobat Installer", "Ad*er", IOCase.SENSITIVE));
assertEquals(true, FilenameUtils.wildcardMatch("Foo", "*Foo", IOCase.SENSITIVE));
assertEquals(true, FilenameUtils.wildcardMatch("Foo", "Foo*", IOCase.SENSITIVE));
+ assertEquals(true, FilenameUtils.wildcardMatch("Foo", "*Foo", IOCase.SENSITIVE));
+ assertEquals(true, FilenameUtils.wildcardMatch("BarFoo", "*Foo", IOCase.SENSITIVE));
+ assertEquals(true, FilenameUtils.wildcardMatch("Foo", "Foo*", IOCase.SENSITIVE));
+ assertEquals(true, FilenameUtils.wildcardMatch("FooBar", "Foo*", IOCase.SENSITIVE));
+
+ assertEquals(false, FilenameUtils.wildcardMatch("FOO", "*Foo", IOCase.SENSITIVE));
+ assertEquals(false, FilenameUtils.wildcardMatch("BARFOO", "*Foo", IOCase.SENSITIVE));
assertEquals(false, FilenameUtils.wildcardMatch("FOO", "Foo*", IOCase.SENSITIVE));
+ assertEquals(false, FilenameUtils.wildcardMatch("FOOBAR", "Foo*", IOCase.SENSITIVE));
+ assertEquals(true, FilenameUtils.wildcardMatch("FOO", "*Foo", IOCase.INSENSITIVE));
+ assertEquals(true, FilenameUtils.wildcardMatch("BARFOO", "*Foo", IOCase.INSENSITIVE));
assertEquals(true, FilenameUtils.wildcardMatch("FOO", "Foo*", IOCase.INSENSITIVE));
+ assertEquals(true, FilenameUtils.wildcardMatch("FOOBAR", "Foo*", IOCase.INSENSITIVE));
+ assertEquals(WINDOWS, FilenameUtils.wildcardMatch("FOO", "*Foo", IOCase.SYSTEM));
+ assertEquals(WINDOWS, FilenameUtils.wildcardMatch("BARFOO", "*Foo", IOCase.SYSTEM));
assertEquals(WINDOWS, FilenameUtils.wildcardMatch("FOO", "Foo*", IOCase.SYSTEM));
+ assertEquals(WINDOWS, FilenameUtils.wildcardMatch("FOOBAR", "Foo*", IOCase.SYSTEM));
}
public void testSplitOnTokens() {
Modified: jakarta/commons/proper/io/trunk/src/test/org/apache/commons/io/filefilter/FileFilterTestCase.java
URL: http://svn.apache.org/viewvc/jakarta/commons/proper/io/trunk/src/test/org/apache/commons/io/filefilter/FileFilterTestCase.java?rev=418641&r1=418640&r2=418641&view=diff
==============================================================================
--- jakarta/commons/proper/io/trunk/src/test/org/apache/commons/io/filefilter/FileFilterTestCase.java (original)
+++ jakarta/commons/proper/io/trunk/src/test/org/apache/commons/io/filefilter/FileFilterTestCase.java Sun Jul 2 12:42:19 2006
@@ -27,6 +27,7 @@
import junit.textui.TestRunner;
import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOCase;
import org.apache.commons.io.testtools.FileBasedTestCase;
/**
@@ -34,6 +35,8 @@
*/
public class FileFilterTestCase extends FileBasedTestCase {
+ private static final boolean WINDOWS = (File.separatorChar == '\\');
+
public FileFilterTestCase(String name) {
super(name);
}
@@ -320,7 +323,7 @@
assertEquals(true, f.getFileFilters().isEmpty());
}
- public void testWildcard() throws Exception {
+ public void testDeprecatedWildcard() throws Exception {
IOFileFilter filter = new WildcardFilter("*.txt");
List patternList = Arrays.asList( new String[] { "*.txt", "*.xml", "*.gif" } );
IOFileFilter listFilter = new WildcardFilter( patternList );
@@ -380,7 +383,81 @@
// expected
}
}
-
+
+ public void testWildcard() throws Exception {
+ IOFileFilter filter = new WildcardFileFilter("*.txt");
+ assertFiltering(filter, new File("log.txt"), true);
+ assertFiltering(filter, new File("log.TXT"), false);
+
+ filter = new WildcardFileFilter("*.txt", IOCase.SENSITIVE);
+ assertFiltering(filter, new File("log.txt"), true);
+ assertFiltering(filter, new File("log.TXT"), false);
+
+ filter = new WildcardFileFilter("*.txt", IOCase.INSENSITIVE);
+ assertFiltering(filter, new File("log.txt"), true);
+ assertFiltering(filter, new File("log.TXT"), true);
+
+ filter = new WildcardFileFilter("*.txt", IOCase.SYSTEM);
+ assertFiltering(filter, new File("log.txt"), true);
+ assertFiltering(filter, new File("log.TXT"), WINDOWS);
+
+ filter = new WildcardFileFilter("*.txt", (IOCase) null);
+ assertFiltering(filter, new File("log.txt"), true);
+ assertFiltering(filter, new File("log.TXT"), false);
+
+ filter = new WildcardFileFilter(new String[] {"*.java", "*.class"});
+ assertFiltering(filter, new File("Test.java"), true);
+ assertFiltering(filter, new File("Test.class"), true);
+ assertFiltering(filter, new File("Test.jsp"), false);
+
+ filter = new WildcardFileFilter(new String[] {"*.java", "*.class"}, IOCase.SENSITIVE);
+ assertFiltering(filter, new File("Test.java"), true);
+ assertFiltering(filter, new File("Test.JAVA"), false);
+
+ filter = new WildcardFileFilter(new String[] {"*.java", "*.class"}, IOCase.INSENSITIVE);
+ assertFiltering(filter, new File("Test.java"), true);
+ assertFiltering(filter, new File("Test.JAVA"), true);
+
+ filter = new WildcardFileFilter(new String[] {"*.java", "*.class"}, IOCase.SYSTEM);
+ assertFiltering(filter, new File("Test.java"), true);
+ assertFiltering(filter, new File("Test.JAVA"), WINDOWS);
+
+ filter = new WildcardFileFilter(new String[] {"*.java", "*.class"}, (IOCase) null);
+ assertFiltering(filter, new File("Test.java"), true);
+ assertFiltering(filter, new File("Test.JAVA"), false);
+
+ List patternList = Arrays.asList( new String[] { "*.txt", "*.xml", "*.gif" } );
+ IOFileFilter listFilter = new WildcardFileFilter( patternList );
+ assertFiltering(listFilter, new File("Test.txt"), true);
+ assertFiltering(listFilter, new File("Test.xml"), true);
+ assertFiltering(listFilter, new File("Test.gif"), true);
+ assertFiltering(listFilter, new File("Test.bmp"), false);
+
+ File txtFile = new File( "test.txt" );
+ File bmpFile = new File( "test.bmp" );
+ File dir = new File( "src/java" );
+ assertTrue( listFilter.accept( txtFile ) );
+ assertTrue( !listFilter.accept( bmpFile ) );
+ assertTrue( !listFilter.accept( dir ) );
+
+ assertTrue( listFilter.accept( txtFile.getParentFile(), txtFile.getName() ) );
+ assertTrue( !listFilter.accept( bmpFile.getParentFile(), bmpFile.getName() ) );
+ assertTrue( !listFilter.accept( dir.getParentFile(), dir.getName() ) );
+
+ try {
+ new WildcardFileFilter((String) null);
+ fail();
+ } catch (IllegalArgumentException ex) {}
+ try {
+ new WildcardFileFilter((String[]) null);
+ fail();
+ } catch (IllegalArgumentException ex) {}
+ try {
+ new WildcardFileFilter((List) null);
+ fail();
+ } catch (IllegalArgumentException ex) {}
+ }
+
public void testDelegateFileFilter() throws Exception {
OrFileFilter orFilter = new OrFileFilter();
File testFile = new File( "test.txt" );
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org