Author: ecki Date: Sun Feb 18 19:32:43 2018 New Revision: 1824691 URL: http://svn.apache.org/viewvc?rev=1824691&view=rev Log: [VFS-652] Adjust documentation of PatternFileSelector and add tests.
Modified: commons/proper/vfs/trunk/commons-vfs2/src/main/java/org/apache/commons/vfs2/PatternFileSelector.java commons/proper/vfs/trunk/commons-vfs2/src/test/java/org/apache/commons/vfs2/PatternFileSelectorTest.java commons/proper/vfs/trunk/src/changes/changes.xml Modified: commons/proper/vfs/trunk/commons-vfs2/src/main/java/org/apache/commons/vfs2/PatternFileSelector.java URL: http://svn.apache.org/viewvc/commons/proper/vfs/trunk/commons-vfs2/src/main/java/org/apache/commons/vfs2/PatternFileSelector.java?rev=1824691&r1=1824690&r2=1824691&view=diff ============================================================================== --- commons/proper/vfs/trunk/commons-vfs2/src/main/java/org/apache/commons/vfs2/PatternFileSelector.java (original) +++ commons/proper/vfs/trunk/commons-vfs2/src/main/java/org/apache/commons/vfs2/PatternFileSelector.java Sun Feb 18 19:32:43 2018 @@ -16,10 +16,16 @@ */ package org.apache.commons.vfs2; +import java.util.regex.Matcher; import java.util.regex.Pattern; /** - * A {@link FileSelector} that selects based on regular expressions matched against base filename. + * A {@link FileSelector} that selects based on regular expressions. + * <p> + * The regular expression specified in one of the constructors is + * {@linkplain Matcher#matches() matched} against {@link FileName#getPath()} + * of all candidate files. If you want to match only against the base filename, + * make sure to prefix the pattern with {@code ".*\\/"}. * * @since 2.1 */ @@ -32,6 +38,8 @@ public class PatternFileSelector impleme /** * Creates a new selector for the given pattern. + * <p> + * See {@link PatternFileSelector} for a specification how the pattern is matched. * * @param pattern The regular expressed used by this selector. */ @@ -41,8 +49,12 @@ public class PatternFileSelector impleme /** * Creates a new selector for the given pattern. + * <p> + * See {@link PatternFileSelector} for a specification how the pattern is matched. * * @param regex The regular expressed used by this selector. + * + * @see Pattern#compile(String, int) */ public PatternFileSelector(final String regex) { this(Pattern.compile(regex)); @@ -50,9 +62,10 @@ public class PatternFileSelector impleme /** * Creates a new selector for the given Pattern and flags. + * <p> + * See {@link PatternFileSelector} for a specification how the pattern is matched. * * @param regex The expression to be compiled - * * @param flags Match flags, a bit mask. * * @see Pattern#compile(String, int) @@ -63,6 +76,8 @@ public class PatternFileSelector impleme /** * Determines if a file or folder should be selected. + * <p> + * See {@link PatternFileSelector} for a specification how the pattern is matched. * * @param fileInfo The file selection information. * @return true if the file should be selected, false otherwise. @@ -79,6 +94,9 @@ public class PatternFileSelector impleme /** * Determines whether a folder should be traversed. + * <p> + * This implementation always returns true to make sure all + * leafs are inspected. * * @param fileInfo The file selection information. * @return true if descendants should be traversed, false otherwise. Modified: commons/proper/vfs/trunk/commons-vfs2/src/test/java/org/apache/commons/vfs2/PatternFileSelectorTest.java URL: http://svn.apache.org/viewvc/commons/proper/vfs/trunk/commons-vfs2/src/test/java/org/apache/commons/vfs2/PatternFileSelectorTest.java?rev=1824691&r1=1824690&r2=1824691&view=diff ============================================================================== --- commons/proper/vfs/trunk/commons-vfs2/src/test/java/org/apache/commons/vfs2/PatternFileSelectorTest.java (original) +++ commons/proper/vfs/trunk/commons-vfs2/src/test/java/org/apache/commons/vfs2/PatternFileSelectorTest.java Sun Feb 18 19:32:43 2018 @@ -16,6 +16,8 @@ */ package org.apache.commons.vfs2; +import static org.junit.Assert.assertEquals; + import java.util.Arrays; import java.util.HashSet; import java.util.Set; @@ -52,9 +54,9 @@ public class PatternFileSelectorTest { BaseFolder = VFS.getManager().resolveFile("ram://" + PatternFileSelectorTest.class.getName()); BaseFolder.deleteAll(); BaseFolder.createFolder(); - BaseFolder.resolveFile("a.htm").createFile(); - BaseFolder.resolveFile("a.html").createFile(); - BaseFolder.resolveFile("a.xhtml").createFile(); + BaseFolder.resolveFile("aa.htm").createFile(); + BaseFolder.resolveFile("aa.html").createFile(); + BaseFolder.resolveFile("aa.xhtml").createFile(); BaseFolder.resolveFile("b.htm").createFile(); BaseFolder.resolveFile("b.html").createFile(); BaseFolder.resolveFile("b.xhtml").createFile(); @@ -129,6 +131,30 @@ public class PatternFileSelectorTest { } } + /** + * Tests matching partial file names + * + * @throws Exception + */ + @Test + public void testMatchPartial() throws Exception { + final FileObject[] list = BaseFolder.findFiles(new PatternFileSelector(".*a.htm")); + Assert.assertEquals(1, list.length); + assertEquals(list[0].getName().getBaseName(), "aa.htm"); + } + + /** + * Tests matching partial file names with delimiter + * + * @throws Exception + */ + @Test + public void testMatchPartialDelimited() throws Exception { + final FileObject[] list = BaseFolder.findFiles(new PatternFileSelector("^.*\\/b.htm$")); + Assert.assertEquals(1, list.length); + assertEquals(list[0].getName().getBaseName(), "b.htm"); + } + static FileObject getBaseFolder() { return BaseFolder; } Modified: commons/proper/vfs/trunk/src/changes/changes.xml URL: http://svn.apache.org/viewvc/commons/proper/vfs/trunk/src/changes/changes.xml?rev=1824691&r1=1824690&r2=1824691&view=diff ============================================================================== --- commons/proper/vfs/trunk/src/changes/changes.xml (original) +++ commons/proper/vfs/trunk/src/changes/changes.xml Sun Feb 18 19:32:43 2018 @@ -50,6 +50,9 @@ The <action> type attribute can be add,u <!-- [Local] Need an easy way to convert from a FileObject to a File. --> <!-- </action> --> <!-- START Might need to be moved to the next version --> + <action issue="VFS-652" dev="ecki" type="fix"> + PatternFileSelector documentation to describe actual matching against getPath(). + </action> <action issue="VFS-650" dev="ggregory" type="update"> Update Apache Commons Compress from 1.15 to 1.16.1. </action> @@ -103,7 +106,7 @@ The <action> type attribute can be add,u <action issue="VFS-644" dev="ggregory" type="fix"> AbstractFileSystem.streamClosed() always sets openStream count to zero. </action> - </release> + </release> <release version="2.1" date="2016-05-19" description="New features and bug fix release.