2
* Licensed to the Apache Software Foundation (ASF) under one or more
3
* contributor license agreements. See the NOTICE file distributed with
4
* this work for additional information regarding copyright ownership.
5
* The ASF licenses this file to You under the Apache License, Version 2.0
6
* (the "License"); you may not use this file except in compliance with
7
* the License. You may obtain a copy of the License at
9
* http://www.apache.org/licenses/LICENSE-2.0
11
* Unless required by applicable law or agreed to in writing, software
12
* distributed under the License is distributed on an "AS IS" BASIS,
13
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
* See the License for the specific language governing permissions and
15
* limitations under the License.
17
package org.apache.commons.io;
21
import junit.framework.TestCase;
23
public class FilenameUtilsWildcardTestCase extends TestCase {
25
private static final boolean WINDOWS = (File.separatorChar == '\\');
27
public FilenameUtilsWildcardTestCase(String name) {
31
//-----------------------------------------------------------------------
33
// FilenameUtils.wildcardMatch(String,String)
35
public void testMatch() {
36
assertEquals(false, FilenameUtils.wildcardMatch(null, "Foo"));
37
assertEquals(false, FilenameUtils.wildcardMatch("Foo", null));
38
assertEquals(true, FilenameUtils.wildcardMatch(null, null));
39
assertEquals(true, FilenameUtils.wildcardMatch("Foo", "Foo"));
40
assertEquals(true, FilenameUtils.wildcardMatch("", ""));
41
assertEquals(true, FilenameUtils.wildcardMatch("Foo", "Fo*"));
42
assertEquals(true, FilenameUtils.wildcardMatch("Foo", "Fo?"));
43
assertEquals(true, FilenameUtils.wildcardMatch("Foo Bar and Catflap", "Fo*"));
44
assertEquals(true, FilenameUtils.wildcardMatch("New Bookmarks", "N?w ?o?k??r?s"));
45
assertEquals(false, FilenameUtils.wildcardMatch("Foo", "Bar"));
46
assertEquals(true, FilenameUtils.wildcardMatch("Foo Bar Foo", "F*o Bar*"));
47
assertEquals(true, FilenameUtils.wildcardMatch("Adobe Acrobat Installer", "Ad*er"));
48
assertEquals(true, FilenameUtils.wildcardMatch("Foo", "*Foo"));
49
assertEquals(true, FilenameUtils.wildcardMatch("BarFoo", "*Foo"));
50
assertEquals(true, FilenameUtils.wildcardMatch("Foo", "Foo*"));
51
assertEquals(true, FilenameUtils.wildcardMatch("FooBar", "Foo*"));
52
assertEquals(false, FilenameUtils.wildcardMatch("FOO", "*Foo"));
53
assertEquals(false, FilenameUtils.wildcardMatch("BARFOO", "*Foo"));
54
assertEquals(false, FilenameUtils.wildcardMatch("FOO", "Foo*"));
55
assertEquals(false, FilenameUtils.wildcardMatch("FOOBAR", "Foo*"));
58
public void testMatchOnSystem() {
59
assertEquals(false, FilenameUtils.wildcardMatchOnSystem(null, "Foo"));
60
assertEquals(false, FilenameUtils.wildcardMatchOnSystem("Foo", null));
61
assertEquals(true, FilenameUtils.wildcardMatchOnSystem(null, null));
62
assertEquals(true, FilenameUtils.wildcardMatchOnSystem("Foo", "Foo"));
63
assertEquals(true, FilenameUtils.wildcardMatchOnSystem("", ""));
64
assertEquals(true, FilenameUtils.wildcardMatchOnSystem("Foo", "Fo*"));
65
assertEquals(true, FilenameUtils.wildcardMatchOnSystem("Foo", "Fo?"));
66
assertEquals(true, FilenameUtils.wildcardMatchOnSystem("Foo Bar and Catflap", "Fo*"));
67
assertEquals(true, FilenameUtils.wildcardMatchOnSystem("New Bookmarks", "N?w ?o?k??r?s"));
68
assertEquals(false, FilenameUtils.wildcardMatchOnSystem("Foo", "Bar"));
69
assertEquals(true, FilenameUtils.wildcardMatchOnSystem("Foo Bar Foo", "F*o Bar*"));
70
assertEquals(true, FilenameUtils.wildcardMatchOnSystem("Adobe Acrobat Installer", "Ad*er"));
71
assertEquals(true, FilenameUtils.wildcardMatchOnSystem("Foo", "*Foo"));
72
assertEquals(true, FilenameUtils.wildcardMatchOnSystem("BarFoo", "*Foo"));
73
assertEquals(true, FilenameUtils.wildcardMatchOnSystem("Foo", "Foo*"));
74
assertEquals(true, FilenameUtils.wildcardMatchOnSystem("FooBar", "Foo*"));
75
assertEquals(WINDOWS, FilenameUtils.wildcardMatchOnSystem("FOO", "*Foo"));
76
assertEquals(WINDOWS, FilenameUtils.wildcardMatchOnSystem("BARFOO", "*Foo"));
77
assertEquals(WINDOWS, FilenameUtils.wildcardMatchOnSystem("FOO", "Foo*"));
78
assertEquals(WINDOWS, FilenameUtils.wildcardMatchOnSystem("FOOBAR", "Foo*"));
81
public void testMatchCaseSpecified() {
82
assertEquals(false, FilenameUtils.wildcardMatch(null, "Foo", IOCase.SENSITIVE));
83
assertEquals(false, FilenameUtils.wildcardMatch("Foo", null, IOCase.SENSITIVE));
84
assertEquals(true, FilenameUtils.wildcardMatch(null, null, IOCase.SENSITIVE));
85
assertEquals(true, FilenameUtils.wildcardMatch("Foo", "Foo", IOCase.SENSITIVE));
86
assertEquals(true, FilenameUtils.wildcardMatch("", "", IOCase.SENSITIVE));
87
assertEquals(true, FilenameUtils.wildcardMatch("Foo", "Fo*", IOCase.SENSITIVE));
88
assertEquals(true, FilenameUtils.wildcardMatch("Foo", "Fo?", IOCase.SENSITIVE));
89
assertEquals(true, FilenameUtils.wildcardMatch("Foo Bar and Catflap", "Fo*", IOCase.SENSITIVE));
90
assertEquals(true, FilenameUtils.wildcardMatch("New Bookmarks", "N?w ?o?k??r?s", IOCase.SENSITIVE));
91
assertEquals(false, FilenameUtils.wildcardMatch("Foo", "Bar", IOCase.SENSITIVE));
92
assertEquals(true, FilenameUtils.wildcardMatch("Foo Bar Foo", "F*o Bar*", IOCase.SENSITIVE));
93
assertEquals(true, FilenameUtils.wildcardMatch("Adobe Acrobat Installer", "Ad*er", IOCase.SENSITIVE));
94
assertEquals(true, FilenameUtils.wildcardMatch("Foo", "*Foo", IOCase.SENSITIVE));
95
assertEquals(true, FilenameUtils.wildcardMatch("Foo", "Foo*", IOCase.SENSITIVE));
96
assertEquals(true, FilenameUtils.wildcardMatch("Foo", "*Foo", IOCase.SENSITIVE));
97
assertEquals(true, FilenameUtils.wildcardMatch("BarFoo", "*Foo", IOCase.SENSITIVE));
98
assertEquals(true, FilenameUtils.wildcardMatch("Foo", "Foo*", IOCase.SENSITIVE));
99
assertEquals(true, FilenameUtils.wildcardMatch("FooBar", "Foo*", IOCase.SENSITIVE));
101
assertEquals(false, FilenameUtils.wildcardMatch("FOO", "*Foo", IOCase.SENSITIVE));
102
assertEquals(false, FilenameUtils.wildcardMatch("BARFOO", "*Foo", IOCase.SENSITIVE));
103
assertEquals(false, FilenameUtils.wildcardMatch("FOO", "Foo*", IOCase.SENSITIVE));
104
assertEquals(false, FilenameUtils.wildcardMatch("FOOBAR", "Foo*", IOCase.SENSITIVE));
105
assertEquals(true, FilenameUtils.wildcardMatch("FOO", "*Foo", IOCase.INSENSITIVE));
106
assertEquals(true, FilenameUtils.wildcardMatch("BARFOO", "*Foo", IOCase.INSENSITIVE));
107
assertEquals(true, FilenameUtils.wildcardMatch("FOO", "Foo*", IOCase.INSENSITIVE));
108
assertEquals(true, FilenameUtils.wildcardMatch("FOOBAR", "Foo*", IOCase.INSENSITIVE));
109
assertEquals(WINDOWS, FilenameUtils.wildcardMatch("FOO", "*Foo", IOCase.SYSTEM));
110
assertEquals(WINDOWS, FilenameUtils.wildcardMatch("BARFOO", "*Foo", IOCase.SYSTEM));
111
assertEquals(WINDOWS, FilenameUtils.wildcardMatch("FOO", "Foo*", IOCase.SYSTEM));
112
assertEquals(WINDOWS, FilenameUtils.wildcardMatch("FOOBAR", "Foo*", IOCase.SYSTEM));
115
public void testSplitOnTokens() {
116
assertArrayEquals( new String[] { "Ad", "*", "er" }, FilenameUtils.splitOnTokens("Ad*er") );
117
assertArrayEquals( new String[] { "Ad", "?", "er" }, FilenameUtils.splitOnTokens("Ad?er") );
118
assertArrayEquals( new String[] { "Test", "*", "?", "One" }, FilenameUtils.splitOnTokens("Test*?One") );
119
assertArrayEquals( new String[] { "*" }, FilenameUtils.splitOnTokens("****") );
120
assertArrayEquals( new String[] { "*", "?", "?", "*" }, FilenameUtils.splitOnTokens("*??*") );
121
assertArrayEquals( new String[] { "*", "?", "?", "*" }, FilenameUtils.splitOnTokens("*??*") );
122
assertArrayEquals( new String[] { "h", "?", "?", "*" }, FilenameUtils.splitOnTokens("h??*") );
123
assertArrayEquals( new String[] { "" }, FilenameUtils.splitOnTokens("") );
126
private void assertArrayEquals(Object[] a1, Object[] a2) {
127
assertEquals(a1.length, a2.length);
128
for(int i=0; i<a1.length; i++) {
129
assertEquals(a1[i], a2[i]);
133
private void assertMatch(String text, String wildcard, boolean expected) {
134
assertEquals(text + " " + wildcard, expected, FilenameUtils.wildcardMatch(text, wildcard));
137
// A separate set of tests, added to this batch
138
public void testMatch2() {
139
assertMatch("log.txt", "log.txt", true);
140
assertMatch("log.txt1", "log.txt", false);
142
assertMatch("log.txt", "log.txt*", true);
143
assertMatch("log.txt", "log.txt*1", false);
144
assertMatch("log.txt", "*log.txt*", true);
146
assertMatch("log.txt", "*.txt", true);
147
assertMatch("txt.log", "*.txt", false);
148
assertMatch("config.ini", "*.ini", true);
150
assertMatch("config.txt.bak", "con*.txt", false);
152
assertMatch("log.txt9", "*.txt?", true);
153
assertMatch("log.txt", "*.txt?", false);
155
assertMatch("progtestcase.java~5~", "*test*.java~*~", true);
156
assertMatch("progtestcase.java;5~", "*test*.java~*~", false);
157
assertMatch("progtestcase.java~5", "*test*.java~*~", false);
159
assertMatch("log.txt", "log.*", true);
161
assertMatch("log.txt", "log?*", true);
163
assertMatch("log.txt12", "log.txt??", true);
165
assertMatch("log.log", "log**log", true);
166
assertMatch("log.log", "log**", true);
167
assertMatch("log.log", "log.**", true);
168
assertMatch("log.log", "**.log", true);
169
assertMatch("log.log", "**log", true);
171
assertMatch("log.log", "log*log", true);
172
assertMatch("log.log", "log*", true);
173
assertMatch("log.log", "log.*", true);
174
assertMatch("log.log", "*.log", true);
175
assertMatch("log.log", "*log", true);
177
assertMatch("log.log", "*log?", false);
178
assertMatch("log.log", "*log?*", true);
179
assertMatch("log.log.abc", "*log?abc", true);
180
assertMatch("log.log.abc.log.abc", "*log?abc", true);
181
assertMatch("log.log.abc.log.abc.d", "*log?abc?d", true);