/** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ package net.sourceforge.pmd.util.filter; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import org.junit.Test; public class RegexStringFilterTest { @Test public void testFilterAbsoluteWithExtension() { String pattern = "C:/workspace/project/X.java"; verifyFilterFalse("same relative path w/ extension", pattern, "X.java"); verifyFilterFalse("same relative path w/o extension", pattern, "X"); verifyFilterFalse("different relative path w/ extension", pattern, "Y.java"); verifyFilterFalse("different relative path w/o extension", pattern, "Y"); verifyFilterTrue("same absolute path w/ extension", pattern, "C:/workspace/project/X.java"); verifyFilterFalse("same absolute path w/o extension", pattern, "C:/workspace/project/X"); verifyFilterFalse("different absolute path w/ extension", pattern, "C:/workspace/project/Y.java"); verifyFilterFalse("different absolute path w/o extension", pattern, "C:/workspace/project/Y"); } @Test public void testFilterAbsoluteWithoutExtension() { String pattern = "C:/workspace/project/X"; verifyFilterFalse("same relative path w/ extension", pattern, "X.java"); verifyFilterFalse("same relative path w/o extension", pattern, "X"); verifyFilterFalse("different relative path w/ extension", pattern, "Y.java"); verifyFilterFalse("different relative path w/o extension", pattern, "Y"); verifyFilterFalse("same absolute path w/ extension", pattern, "C:/workspace/project/X.java"); verifyFilterTrue("same absolute path w/o extension", pattern, "C:/workspace/project/X"); verifyFilterFalse("different absolute path w/ extension", pattern, "C:/workspace/project/Y.java"); verifyFilterFalse("different absolute path w/o extension", pattern, "C:/workspace/project/Y"); } @Test public void testFilterRelativeWithExtension() { String pattern = ".*X.java"; verifyFilterTrue("same relative path w/ extension", pattern, "X.java"); verifyFilterFalse("same relative path w/o extension", pattern, "X"); verifyFilterFalse("different relative path w/ extension", pattern, "Y.java"); verifyFilterFalse("different relative path w/o extension", pattern, "Y"); verifyFilterTrue("same absolute path w/ extension", pattern, "C:/workspace/project/X.java"); verifyFilterFalse("same absolute path w/o extension", pattern, "C:/workspace/project/X"); verifyFilterFalse("different absolute path w/ extension", pattern, "C:/workspace/project/Y.java"); verifyFilterFalse("different absolute path w/o extension", pattern, "C:/workspace/project/Y"); } @Test public void testFilterRelativeWithoutExtension() { String pattern = ".*X"; verifyFilterFalse("same relative path w/ extension", pattern, "X.java"); verifyFilterTrue("same relative path w/o extension", pattern, "X"); verifyFilterFalse("different relative path w/ extension", pattern, "Y.java"); verifyFilterFalse("different relative path w/o extension", pattern, "Y"); verifyFilterFalse("same absolute path w/ extension", pattern, "C:/workspace/project/X.java"); verifyFilterTrue("same absolute path w/o extension", pattern, "C:/workspace/project/X"); verifyFilterFalse("different absolute path w/ extension", pattern, "C:/workspace/project/Y.java"); verifyFilterFalse("different absolute path w/o extension", pattern, "C:/workspace/project/Y"); } @Test public void testEndsWith() { // These patterns cannot be optimized to use String.endsWith verifyEndsWith("no literal path", ".*", null); verifyEndsWith("not ends with", "x", null); verifyEndsWith("glob on end", ".*XXX.*", null); verifyEndsWith("special character \\", ".*X\\Y", null); verifyEndsWith("special character [", ".*X[Y", null); verifyEndsWith("special character (", ".*X(Y", null); verifyEndsWith("special character *", ".*X*Y", null); verifyEndsWith("special character ?", ".*X?Y", null); verifyEndsWith("special character +", ".*X+Y", null); verifyEndsWith("special character |", ".*X|Y", null); verifyEndsWith("special character {", ".*X{Y", null); verifyEndsWith("special character $", ".*X$Y", null); verifyEndsWith("too many .", ".*X.Y.java", null); // These patterns can be optimized to use String.endsWith verifyEndsWith("unescaped .", ".*X.java", "X.java"); verifyEndsWith("escaped .", ".*X\\.java", "X.java"); verifyEndsWith("no extension", ".*X", "X"); verifyEndsWith("begin anchor, unescaped .", "^.*X.java", "X.java"); verifyEndsWith("begin anchor, escaped .", "^.*X\\.java", "X.java"); verifyEndsWith("begin anchor, no extension", "^.*X", "X"); verifyEndsWith("end anchor, unescaped .", ".*X.java$", "X.java"); verifyEndsWith("end anchor, escaped .", ".*X\\.java$", "X.java"); verifyEndsWith("end anchor, no extension", ".*X$", "X"); verifyEndsWith("begin and end anchors, unescaped .", "^.*X.java$", "X.java"); verifyEndsWith("begin and end anchors, escaped .", "^.*X\\.java$", "X.java"); verifyEndsWith("begin and end anchors, no extension", "^.*X$", "X"); } private static void verifyFilterTrue(final String message, final String pattern, final String file) { assertTrue("filter: " + message, new RegexStringFilter(pattern).filter(file)); } private static void verifyFilterFalse(final String message, final String pattern, final String file) { assertFalse("filter: " + message, new RegexStringFilter(pattern).filter(file)); } private static void verifyEndsWith(final String message, final String pattern, final String endsWith) { assertEquals("endsWith: " + message, endsWith, new RegexStringFilter(pattern).getEndsWith()); } public static junit.framework.Test suite() { return new junit.framework.JUnit4TestAdapter(RegexStringFilterTest.class); } }