1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.io;
18
19 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
20 import static org.junit.jupiter.api.Assertions.assertEquals;
21 import static org.junit.jupiter.api.Assertions.assertFalse;
22 import static org.junit.jupiter.api.Assertions.assertTrue;
23
24 import java.io.File;
25 import java.util.Locale;
26
27 import org.junit.jupiter.api.Test;
28
29
30
31
32 public class FilenameUtilsWildcardTest {
33
34 private static final boolean WINDOWS = File.separatorChar == '\\';
35
36
37
38
39 private void assertMatch(final String text, final String wildcard, final boolean expected) {
40 assertEquals(expected, FilenameUtils.wildcardMatch(text, wildcard), text + " " + wildcard);
41 }
42
43
44
45
46 @Test
47 public void test_IO_246() {
48
49
50 assertMatch("aaa", "aa*?", true);
51
52
53
54
55
56 assertMatch("", "?*", false);
57 assertMatch("a", "a?*", false);
58 assertMatch("aa", "aa?*", false);
59 assertMatch("a", "?*", true);
60 assertMatch("aa", "?*", true);
61 assertMatch("aaa", "?*", true);
62
63
64 assertMatch("", "?", false);
65 assertMatch("a", "a?", false);
66 assertMatch("aa", "aa?", false);
67 assertMatch("aab", "aa?", true);
68 assertMatch("aaa", "*a", true);
69 }
70
71 @Test
72 public void testLocaleIndependence() {
73 final Locale orig = Locale.getDefault();
74
75 final Locale[] locales = Locale.getAvailableLocales();
76
77 final String[][] data = {
78 { "I", "i"},
79 { "i", "I"},
80 { "i", "\u0130"},
81 { "i", "\u0131"},
82 { "\u03A3", "\u03C2"},
83 { "\u03A3", "\u03C3"},
84 { "\u03C2", "\u03C3"},
85 };
86
87 try {
88 for (int i = 0; i < data.length; i++) {
89 for (final Locale locale : locales) {
90 Locale.setDefault(locale);
91 assertTrue(data[i][0].equalsIgnoreCase(data[i][1]), "Test data corrupt: " + i);
92 final boolean match = FilenameUtils.wildcardMatch(data[i][0], data[i][1], IOCase.INSENSITIVE);
93 assertTrue(match, Locale.getDefault().toString() + ": " + i);
94 }
95 }
96 } finally {
97 Locale.setDefault(orig);
98 }
99 }
100
101 @Test
102 public void testMatch() {
103 assertFalse(FilenameUtils.wildcardMatch(null, "Foo"));
104 assertFalse(FilenameUtils.wildcardMatch("Foo", null));
105 assertTrue(FilenameUtils.wildcardMatch(null, null));
106 assertTrue(FilenameUtils.wildcardMatch("Foo", "Foo"));
107 assertTrue(FilenameUtils.wildcardMatch("", ""));
108 assertTrue(FilenameUtils.wildcardMatch("", "*"));
109 assertFalse(FilenameUtils.wildcardMatch("", "?"));
110 assertTrue(FilenameUtils.wildcardMatch("Foo", "Fo*"));
111 assertTrue(FilenameUtils.wildcardMatch("Foo", "Fo?"));
112 assertTrue(FilenameUtils.wildcardMatch("Foo Bar and Catflap", "Fo*"));
113 assertTrue(FilenameUtils.wildcardMatch("New Bookmarks", "N?w ?o?k??r?s"));
114 assertFalse(FilenameUtils.wildcardMatch("Foo", "Bar"));
115 assertTrue(FilenameUtils.wildcardMatch("Foo Bar Foo", "F*o Bar*"));
116 assertTrue(FilenameUtils.wildcardMatch("Adobe Acrobat Installer", "Ad*er"));
117 assertTrue(FilenameUtils.wildcardMatch("Foo", "*Foo"));
118 assertTrue(FilenameUtils.wildcardMatch("BarFoo", "*Foo"));
119 assertTrue(FilenameUtils.wildcardMatch("Foo", "Foo*"));
120 assertTrue(FilenameUtils.wildcardMatch("FooBar", "Foo*"));
121 assertFalse(FilenameUtils.wildcardMatch("FOO", "*Foo"));
122 assertFalse(FilenameUtils.wildcardMatch("BARFOO", "*Foo"));
123 assertFalse(FilenameUtils.wildcardMatch("FOO", "Foo*"));
124 assertFalse(FilenameUtils.wildcardMatch("FOOBAR", "Foo*"));
125 }
126
127
128 @Test
129 public void testMatch2() {
130 assertMatch("log.txt", "log.txt", true);
131 assertMatch("log.txt1", "log.txt", false);
132
133 assertMatch("log.txt", "log.txt*", true);
134 assertMatch("log.txt", "log.txt*1", false);
135 assertMatch("log.txt", "*log.txt*", true);
136
137 assertMatch("log.txt", "*.txt", true);
138 assertMatch("txt.log", "*.txt", false);
139 assertMatch("config.ini", "*.ini", true);
140
141 assertMatch("config.txt.bak", "con*.txt", false);
142
143 assertMatch("log.txt9", "*.txt?", true);
144 assertMatch("log.txt", "*.txt?", false);
145
146 assertMatch("progtestcase.java~5~", "*test*.java~*~", true);
147 assertMatch("progtestcase.java;5~", "*test*.java~*~", false);
148 assertMatch("progtestcase.java~5", "*test*.java~*~", false);
149
150 assertMatch("log.txt", "log.*", true);
151
152 assertMatch("log.txt", "log?*", true);
153
154 assertMatch("log.txt12", "log.txt??", true);
155
156 assertMatch("log.log", "log**log", true);
157 assertMatch("log.log", "log**", true);
158 assertMatch("log.log", "log.**", true);
159 assertMatch("log.log", "**.log", true);
160 assertMatch("log.log", "**log", true);
161
162 assertMatch("log.log", "log*log", true);
163 assertMatch("log.log", "log*", true);
164 assertMatch("log.log", "log.*", true);
165 assertMatch("log.log", "*.log", true);
166 assertMatch("log.log", "*log", true);
167
168 assertMatch("log.log", "*log?", false);
169 assertMatch("log.log", "*log?*", true);
170 assertMatch("log.log.abc", "*log?abc", true);
171 assertMatch("log.log.abc.log.abc", "*log?abc", true);
172 assertMatch("log.log.abc.log.abc.d", "*log?abc?d", true);
173 }
174
175 @Test
176 public void testMatchCaseSpecified() {
177 assertFalse(FilenameUtils.wildcardMatch(null, "Foo", IOCase.SENSITIVE));
178 assertFalse(FilenameUtils.wildcardMatch("Foo", null, IOCase.SENSITIVE));
179 assertTrue(FilenameUtils.wildcardMatch(null, null, IOCase.SENSITIVE));
180 assertTrue(FilenameUtils.wildcardMatch("Foo", "Foo", IOCase.SENSITIVE));
181 assertTrue(FilenameUtils.wildcardMatch("", "", IOCase.SENSITIVE));
182 assertTrue(FilenameUtils.wildcardMatch("Foo", "Fo*", IOCase.SENSITIVE));
183 assertTrue(FilenameUtils.wildcardMatch("Foo", "Fo?", IOCase.SENSITIVE));
184 assertTrue(FilenameUtils.wildcardMatch("Foo Bar and Catflap", "Fo*", IOCase.SENSITIVE));
185 assertTrue(FilenameUtils.wildcardMatch("New Bookmarks", "N?w ?o?k??r?s", IOCase.SENSITIVE));
186 assertFalse(FilenameUtils.wildcardMatch("Foo", "Bar", IOCase.SENSITIVE));
187 assertTrue(FilenameUtils.wildcardMatch("Foo Bar Foo", "F*o Bar*", IOCase.SENSITIVE));
188 assertTrue(FilenameUtils.wildcardMatch("Adobe Acrobat Installer", "Ad*er", IOCase.SENSITIVE));
189 assertTrue(FilenameUtils.wildcardMatch("Foo", "*Foo", IOCase.SENSITIVE));
190 assertTrue(FilenameUtils.wildcardMatch("Foo", "Foo*", IOCase.SENSITIVE));
191 assertTrue(FilenameUtils.wildcardMatch("Foo", "*Foo", IOCase.SENSITIVE));
192 assertTrue(FilenameUtils.wildcardMatch("BarFoo", "*Foo", IOCase.SENSITIVE));
193 assertTrue(FilenameUtils.wildcardMatch("Foo", "Foo*", IOCase.SENSITIVE));
194 assertTrue(FilenameUtils.wildcardMatch("FooBar", "Foo*", IOCase.SENSITIVE));
195
196 assertFalse(FilenameUtils.wildcardMatch("FOO", "*Foo", IOCase.SENSITIVE));
197 assertFalse(FilenameUtils.wildcardMatch("BARFOO", "*Foo", IOCase.SENSITIVE));
198 assertFalse(FilenameUtils.wildcardMatch("FOO", "Foo*", IOCase.SENSITIVE));
199 assertFalse(FilenameUtils.wildcardMatch("FOOBAR", "Foo*", IOCase.SENSITIVE));
200 assertTrue(FilenameUtils.wildcardMatch("FOO", "*Foo", IOCase.INSENSITIVE));
201 assertTrue(FilenameUtils.wildcardMatch("BARFOO", "*Foo", IOCase.INSENSITIVE));
202 assertTrue(FilenameUtils.wildcardMatch("FOO", "Foo*", IOCase.INSENSITIVE));
203 assertTrue(FilenameUtils.wildcardMatch("FOOBAR", "Foo*", IOCase.INSENSITIVE));
204 assertEquals(WINDOWS, FilenameUtils.wildcardMatch("FOO", "*Foo", IOCase.SYSTEM));
205 assertEquals(WINDOWS, FilenameUtils.wildcardMatch("BARFOO", "*Foo", IOCase.SYSTEM));
206 assertEquals(WINDOWS, FilenameUtils.wildcardMatch("FOO", "Foo*", IOCase.SYSTEM));
207 assertEquals(WINDOWS, FilenameUtils.wildcardMatch("FOOBAR", "Foo*", IOCase.SYSTEM));
208 }
209
210 @Test
211 public void testMatchOnSystem() {
212 assertFalse(FilenameUtils.wildcardMatchOnSystem(null, "Foo"));
213 assertFalse(FilenameUtils.wildcardMatchOnSystem("Foo", null));
214 assertTrue(FilenameUtils.wildcardMatchOnSystem(null, null));
215 assertTrue(FilenameUtils.wildcardMatchOnSystem("Foo", "Foo"));
216 assertTrue(FilenameUtils.wildcardMatchOnSystem("", ""));
217 assertTrue(FilenameUtils.wildcardMatchOnSystem("Foo", "Fo*"));
218 assertTrue(FilenameUtils.wildcardMatchOnSystem("Foo", "Fo?"));
219 assertTrue(FilenameUtils.wildcardMatchOnSystem("Foo Bar and Catflap", "Fo*"));
220 assertTrue(FilenameUtils.wildcardMatchOnSystem("New Bookmarks", "N?w ?o?k??r?s"));
221 assertFalse(FilenameUtils.wildcardMatchOnSystem("Foo", "Bar"));
222 assertTrue(FilenameUtils.wildcardMatchOnSystem("Foo Bar Foo", "F*o Bar*"));
223 assertTrue(FilenameUtils.wildcardMatchOnSystem("Adobe Acrobat Installer", "Ad*er"));
224 assertTrue(FilenameUtils.wildcardMatchOnSystem("Foo", "*Foo"));
225 assertTrue(FilenameUtils.wildcardMatchOnSystem("BarFoo", "*Foo"));
226 assertTrue(FilenameUtils.wildcardMatchOnSystem("Foo", "Foo*"));
227 assertTrue(FilenameUtils.wildcardMatchOnSystem("FooBar", "Foo*"));
228 assertEquals(WINDOWS, FilenameUtils.wildcardMatchOnSystem("FOO", "*Foo"));
229 assertEquals(WINDOWS, FilenameUtils.wildcardMatchOnSystem("BARFOO", "*Foo"));
230 assertEquals(WINDOWS, FilenameUtils.wildcardMatchOnSystem("FOO", "Foo*"));
231 assertEquals(WINDOWS, FilenameUtils.wildcardMatchOnSystem("FOOBAR", "Foo*"));
232 }
233
234 @Test
235 public void testSplitOnTokens() {
236 assertArrayEquals(new String[] { "Ad", "*", "er" }, FilenameUtils.splitOnTokens("Ad*er"));
237 assertArrayEquals(new String[] { "Ad", "?", "er" }, FilenameUtils.splitOnTokens("Ad?er"));
238 assertArrayEquals(new String[] { "Test", "*", "?", "One" }, FilenameUtils.splitOnTokens("Test*?One"));
239 assertArrayEquals(new String[] { "Test", "?", "*", "One" }, FilenameUtils.splitOnTokens("Test?*One"));
240 assertArrayEquals(new String[] { "*" }, FilenameUtils.splitOnTokens("****"));
241 assertArrayEquals(new String[] { "*", "?", "?", "*" }, FilenameUtils.splitOnTokens("*??*"));
242 assertArrayEquals(new String[] { "*", "?", "*", "?", "*" }, FilenameUtils.splitOnTokens("*?**?*"));
243 assertArrayEquals(new String[] { "*", "?", "*", "?", "*" }, FilenameUtils.splitOnTokens("*?***?*"));
244 assertArrayEquals(new String[] { "h", "?", "?", "*" }, FilenameUtils.splitOnTokens("h??*"));
245 assertArrayEquals(new String[] { "" }, FilenameUtils.splitOnTokens(""));
246 }
247
248 }