1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 package net.sf.statcvs.util;
24
25 import junit.framework.TestCase;
26
27 /**
28 * Test cases for {@link FilePatternMatcher}
29 *
30 * @author Richard Cyganiak
31 * @version $Id: FilePatternMatcherTest.java,v 1.2 2008/04/02 11:22:15 benoitx Exp $
32 */
33 public class FilePatternMatcherTest extends TestCase {
34
35 /**
36 * Constructor for OutputUtilsTest.
37 * @param arg0 input
38 */
39 public FilePatternMatcherTest(final String arg0) {
40 super(arg0);
41 }
42
43 /**
44 * Test a pattern without wildcards
45 */
46 public void testSimplePattern() {
47 final FilePatternMatcher fpm = new FilePatternMatcher("test");
48 assertTrue(fpm.matches("test"));
49 assertTrue(!fpm.matches("foo"));
50 assertTrue(!fpm.matches("atest"));
51 assertTrue(!fpm.matches("testa"));
52 assertTrue(!fpm.matches("test/test"));
53 assertTrue(!fpm.matches("/test"));
54 assertTrue(!fpm.matches("test/"));
55 }
56
57 /**
58 * Test a pattern with a ? wildcard, matching exactly one char
59 */
60 public void testQuestionMarkPattern1() {
61 final FilePatternMatcher fpm = new FilePatternMatcher("test?");
62 assertTrue(fpm.matches("test1"));
63 assertTrue(fpm.matches("test2"));
64 assertTrue(fpm.matches("test "));
65 assertTrue(fpm.matches("test?"));
66 assertTrue(fpm.matches("test*"));
67 assertTrue(!fpm.matches("foo"));
68 assertTrue(!fpm.matches("atest"));
69 assertTrue(!fpm.matches("test11"));
70 assertTrue(!fpm.matches("test/test"));
71 assertTrue(!fpm.matches("/test"));
72 assertTrue(!fpm.matches("test/"));
73 }
74
75 /**
76 * Test a pattern with a ??? wildcard, matching exactly three chars
77 */
78 public void testQuestionMarkPattern2() {
79 final FilePatternMatcher fpm = new FilePatternMatcher("???");
80 assertTrue(fpm.matches("abc"));
81 assertTrue(fpm.matches("123"));
82 assertTrue(fpm.matches(" "));
83 assertTrue(!fpm.matches("1234"));
84 assertTrue(!fpm.matches("///"));
85 assertTrue(!fpm.matches("/123"));
86 assertTrue(!fpm.matches("123/"));
87 }
88
89 /**
90 * Test a pattern with a * wildcard, matching any character sequence
91 * not containing /
92 */
93 public void testAsteriskPattern1() {
94 final FilePatternMatcher fpm = new FilePatternMatcher("*.java");
95 assertTrue(fpm.matches(".java"));
96 assertTrue(fpm.matches("AllTests.java"));
97 assertTrue(fpm.matches("FilePatternMatcher.java"));
98 assertTrue(!fpm.matches("foo"));
99 assertTrue(!fpm.matches("java"));
100 assertTrue(!fpm.matches("dir/AllTests.java"));
101 assertTrue(!fpm.matches("AllTests.java/foo"));
102 }
103
104 /**
105 * Test a pattern with a * wildcard, matching any character sequence
106 * not containing /
107 */
108 public void testAsteriskPattern2() {
109 final FilePatternMatcher fpm = new FilePatternMatcher("*");
110 assertTrue(fpm.matches("AllTests.java"));
111 assertTrue(!fpm.matches("foo/bar"));
112 }
113
114 /**
115 * Test a pattern with a * wildcard, matching any character sequence
116 * not containing /
117 */
118 public void testAsteriskPattern3() {
119 final FilePatternMatcher fpm = new FilePatternMatcher("A*T**.java");
120 assertTrue(fpm.matches("AT.java"));
121 assertTrue(fpm.matches("AllTests.java"));
122 assertTrue(!fpm.matches("All.java"));
123 assertTrue(!fpm.matches("java"));
124 assertTrue(!fpm.matches("A"));
125 assertTrue(!fpm.matches("AllTests/.java"));
126 }
127
128 /**
129 * Test a pattern ending with /**, matching nothing or any file within
130 * any subdirectory
131 */
132 public void testDirWildcardEnd() {
133 final FilePatternMatcher fpm = new FilePatternMatcher("src/**");
134 assertTrue(fpm.matches("src"));
135 assertTrue(fpm.matches("src/foo"));
136 assertTrue(fpm.matches("src/foo/bar"));
137 assertTrue(fpm.matches("src/src"));
138 assertTrue(!fpm.matches("foo"));
139 assertTrue(!fpm.matches("foo/src"));
140 assertTrue(!fpm.matches("src1"));
141 assertTrue(!fpm.matches("src1/foo"));
142 }
143
144 /**
145 * Test a pattern ending with /, which is shorthand for /** and matches
146 * the same files.
147 */
148 public void testImplicitDirWildcardEnd() {
149 final FilePatternMatcher fpm = new FilePatternMatcher("src/");
150 assertTrue(fpm.matches("src"));
151 assertTrue(fpm.matches("src/foo"));
152 assertTrue(fpm.matches("src/foo/bar"));
153 assertTrue(fpm.matches("src/src"));
154 assertTrue(!fpm.matches("foo"));
155 assertTrue(!fpm.matches("foo/src"));
156 assertTrue(!fpm.matches("src1"));
157 assertTrue(!fpm.matches("src1/foo"));
158 }
159
160 /**
161 * Test a pattern beginning with asterisk asterisk slash, matching
162 * nothing or any directory
163 */
164 public void testDirWildcardBegin() {
165 final FilePatternMatcher fpm = new FilePatternMatcher("**/AllTests.java");
166 assertTrue(fpm.matches("AllTests.java"));
167 assertTrue(fpm.matches("src/AllTests.java"));
168 assertTrue(fpm.matches("src/foo/AllTests.java"));
169 assertTrue(fpm.matches("AllTests.java/AllTests.java"));
170 assertTrue(!fpm.matches("foo"));
171 assertTrue(!fpm.matches("ReallyAllTests.java"));
172 assertTrue(!fpm.matches("foo/bar"));
173 assertTrue(!fpm.matches("foo/AllTests.java/bar"));
174 }
175
176 /**
177 * directory wildcards ** are not allowed in combination with filenames,
178 * so they are interpreted as two normal asterisk wildcards
179 */
180 public void testBogus1() {
181 final FilePatternMatcher fpm = new FilePatternMatcher("**AllTests.java");
182 assertTrue(fpm.matches("ReallyAllTests.java"));
183 assertTrue(!fpm.matches("src/AllTests.java"));
184 }
185
186 /**
187 * Test a pattern with a ** wildcard, matching zero or more directories
188 */
189 public void testDirWildcard() {
190 final FilePatternMatcher fpm = new FilePatternMatcher("src/**/AllTests.java");
191 assertTrue(fpm.matches("src/AllTests.java"));
192 assertTrue(fpm.matches("src/foo/AllTests.java"));
193 assertTrue(fpm.matches("src/foo/bar/AllTests.java"));
194 assertTrue(!fpm.matches("srcAllTests.java"));
195 assertTrue(!fpm.matches("1src/AllTests.java"));
196 assertTrue(!fpm.matches("foo/src/AllTests.java"));
197 assertTrue(!fpm.matches("src/AllTests.java1"));
198 }
199
200 /**
201 * Test a really complex pattern
202 */
203 public void testComplexPattern() {
204 final FilePatternMatcher fpm = new FilePatternMatcher("**/*o*/**/*a*/**/");
205 assertTrue(fpm.matches("o/a"));
206 assertTrue(fpm.matches("1o1/1a1"));
207 assertTrue(fpm.matches("1/2/3/1o1/4/5/6/1a1/7/8/9"));
208 assertTrue(!fpm.matches("1/2/3/a/4/5/6/o/7/8/9"));
209 }
210
211 /**
212 * Test a pattern list with : as delimiter
213 */
214 public void testMultiplePatterns1() {
215 final FilePatternMatcher fpm = new FilePatternMatcher("a:b:c");
216 assertTrue(!fpm.matches("a:b:c"));
217 assertTrue(fpm.matches("a"));
218 assertTrue(fpm.matches("b"));
219 assertTrue(fpm.matches("c"));
220 assertTrue(!fpm.matches("d"));
221 }
222
223 /**
224 * Test a pattern list with ; as delimiter
225 */
226 public void testMultiplePatterns2() {
227 final FilePatternMatcher fpm = new FilePatternMatcher("a;b;c");
228 assertTrue(!fpm.matches("a;b;c"));
229 assertTrue(fpm.matches("a"));
230 assertTrue(fpm.matches("b"));
231 assertTrue(fpm.matches("c"));
232 assertTrue(!fpm.matches("d"));
233 }
234 }