// Copyright (c) 2003-present, Jodd Team (http://jodd.org) // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, // this list of conditions and the following disclaimer. // // 2. Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE // POSSIBILITY OF SUCH DAMAGE. package jodd.util; import org.junit.Test; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; public class WildcardTest { @Test public void testMatch() { assertTrue(Wildcard.match("CfgOptions.class", "C*class")); assertFalse(Wildcard.match("CfgOptions.class", "C*clas")); assertFalse(Wildcard.match("C*r*class", "CfgOptions.class")); // wildcard on the start and end of the expression assertTrue(Wildcard.match("CfgOptions.class", "*g*class")); assertTrue(Wildcard.match("CfgOptions.class", "*C*g*class")); assertTrue(Wildcard.match("CfgOptions.class", "C*g*cl*")); assertTrue(Wildcard.match("CfgOptions.class", "*C*g*cl*")); // multiple wildcards assertTrue(Wildcard.match("CfgOptions.class", "*g*c**ss")); assertTrue(Wildcard.match("CfgOptions.class", "*g*c**s")); // THIS IS TRUE!!! assertTrue(Wildcard.match("CfgOptions.class", "*gOpti******ons.c**ss")); assertTrue(Wildcard.match("CfgOptions.class", "***gOpti*ons.c**ss")); assertTrue(Wildcard.match("CfgOptions.class", "***gOptions.c**")); // wildcard '?': assertTrue(Wildcard.match("CfgOptions.class", "*gOpti*c?ass")); assertFalse(Wildcard.match("CfgOptions.class", "*gOpti*c?ss")); // wildcard on the start and end of the expression: assertTrue(Wildcard.match("CfgOptions.class", "*gOpti*c?as?")); assertFalse(Wildcard.match("CfgOptions.class", "*gOpti*c?a?")); assertTrue(Wildcard.match("CfgOptions.class", "?fgOpti*c?ass")); assertFalse(Wildcard.match("CfgOptions.class", "?gOpti*c?as?")); assertTrue(Wildcard.match("CfgOptions.class", "??gOpti*c?ass")); // multiple wildcards assertTrue(Wildcard.match("CfgOptions.class", "C????ti*c?ass")); assertFalse(Wildcard.match("CfgOptions.class", "C???ti*c?ass")); // wildcards '*' and '?' mixed together: assertTrue(Wildcard.match("CfgOptions.class", "C??*ti*c?ass")); assertTrue(Wildcard.match("CfgOptions.class", "C*ti*c?as?*")); assertTrue(Wildcard.match("CfgOptions.class", "C*ti*c?a*?")); assertTrue(Wildcard.match("CfgOptions.class", "C*ti*?a*")); assertTrue(Wildcard.match("CfgOptions.class", "C*ti*c?a?*")); assertFalse(Wildcard.match("CfgOptions.class", "C*ti*c?*la?*")); } /** * Only match() has escaped wildcards; matchPath() does not have them * as escape character is equal to one of the path characters.. */ @Test public void testMatchEscapedWildcards() { assertFalse(Wildcard.match("CfgOptions.class", "*gOpti\\*c?ass")); assertTrue(Wildcard.match("CfgOpti*class", "*gOpti\\*class")); assertTrue(Wildcard.match("CfgOpti*class", "*gOpti\\*c?ass")); assertFalse(Wildcard.match("CfgOpti*class", "*gOpti\\\\*c?ass")); assertTrue(Wildcard.match("CfgOpti\\*class", "*gOpti\\\\*c?ass")); assertTrue(Wildcard.match("CfgOpti?class", "*gOpti\\?c*ass")); assertFalse(Wildcard.match("CfgOpti\\?class", "*gOpti\\?c*ass")); assertTrue(Wildcard.match("CfgOptions.class", "CfgOpti\\ons.class")); assertTrue(Wildcard.match("What's this?", "What*\\?")); } @Test public void testMatchPath1() { assertTrue(Wildcard.matchPath("CfgOptions.class", "C*class")); assertFalse(Wildcard.matchPath("CfgOptions.class", "C*clas")); assertFalse(Wildcard.matchPath("C*r*class", "CfgOptions.class")); // wildcard on the start and end of the expression assertTrue(Wildcard.matchPath("CfgOptions.class", "*g*class")); assertTrue(Wildcard.matchPath("CfgOptions.class", "*C*g*class")); assertTrue(Wildcard.matchPath("CfgOptions.class", "C*g*cl*")); assertTrue(Wildcard.matchPath("CfgOptions.class", "*C*g*cl*")); // multiple wildcards assertTrue(Wildcard.matchPath("CfgOptions.class", "*g*c**ss")); assertTrue(Wildcard.matchPath("CfgOptions.class", "*g*c**s")); // THIS IS TRUE!!! assertTrue(Wildcard.matchPath("CfgOptions.class", "*gOpti******ons.c**ss")); assertTrue(Wildcard.matchPath("CfgOptions.class", "***gOpti*ons.c**ss")); assertTrue(Wildcard.matchPath("CfgOptions.class", "***gOptions.c**")); // wildcard '?': assertTrue(Wildcard.matchPath("CfgOptions.class", "*gOpti*c?ass")); assertFalse(Wildcard.matchPath("CfgOptions.class", "*gOpti*c?ss")); // wildcard on the start and end of the expression: assertTrue(Wildcard.matchPath("CfgOptions.class", "*gOpti*c?as?")); assertFalse(Wildcard.matchPath("CfgOptions.class", "*gOpti*c?a?")); assertTrue(Wildcard.matchPath("CfgOptions.class", "?fgOpti*c?ass")); assertFalse(Wildcard.matchPath("CfgOptions.class", "?gOpti*c?as?")); assertTrue(Wildcard.matchPath("CfgOptions.class", "??gOpti*c?ass")); // multiple wildcards assertTrue(Wildcard.matchPath("CfgOptions.class", "C????ti*c?ass")); assertFalse(Wildcard.matchPath("CfgOptions.class", "C???ti*c?ass")); // wildcards '*' and '?' mixed together: assertTrue(Wildcard.matchPath("CfgOptions.class", "C??*ti*c?ass")); assertTrue(Wildcard.matchPath("CfgOptions.class", "C*ti*c?as?*")); assertTrue(Wildcard.matchPath("CfgOptions.class", "C*ti*c?a*?")); assertTrue(Wildcard.matchPath("CfgOptions.class", "C*ti*?a*")); assertTrue(Wildcard.matchPath("CfgOptions.class", "C*ti*c?a?*")); assertFalse(Wildcard.matchPath("CfgOptions.class", "C*ti*c?*la?*")); } @Test public void testMatchWildcard() { assertTrue(Wildcard.match("app.nfo", "app*")); assertFalse(Wildcard.match("\\app.nfo", "app*")); assertTrue(Wildcard.match("\\app.nfo", "\\\\app*")); } @Test public void testMatchPath2() { assertTrue(Wildcard.matchPath("/foo", "/fo*")); assertTrue(Wildcard.matchPath("/foo", "/**")); assertTrue(Wildcard.matchPath("/foo", "**")); assertFalse(Wildcard.matchPath("/foo", "**/")); assertFalse(Wildcard.matchPath("/foo", "/**/")); assertTrue(Wildcard.matchPath("/foo/", "/**/")); assertTrue(Wildcard.matchPath("/foo/boo", "/**/bo*")); assertTrue(Wildcard.matchPath("/foo/soo/doo/boo", "/**/bo*")); assertTrue(Wildcard.matchPath("/foo/boo", "/**/**/bo*")); assertTrue(Wildcard.matchPath("/foo/one/two/three/boo", "/**/**/bo*")); assertTrue(Wildcard.matchPath("/foo/one/two/three/boo", "/**/**/**/bo*")); assertTrue(Wildcard.matchPath("/foo/one/two/three/boo", "/**/one/**")); assertTrue(Wildcard.matchPath("/foo/one/two/three/boo", "/**/two/**")); assertTrue(Wildcard.matchPath("/foo/one/two/three/boo", "**/two/**")); assertTrue(Wildcard.matchPath("/foo/one/two/three/boo", "**/t?o/**")); assertTrue(Wildcard.matchPath("sys/java/bin", "sys/**/bin")); assertTrue(Wildcard.matchPath("sys/java/bin", "?ys/**/bin")); assertTrue(Wildcard.matchPath("c:\\Users\\najgor", "?:\\**\\najgor")); assertTrue(Wildcard.matchPath("c:\\najgor", "?:\\**\\naj**r")); } @Test public void testDifferences() { assertTrue(Wildcard.match("/uphea", "*/uphea*")); assertTrue(Wildcard.match("/prj/uphea-app.jar", "*/uphea*")); assertTrue(Wildcard.matchPath("/uphea", "*/uphea*")); assertTrue(Wildcard.matchPath("prj/uphea", "*/uphea*")); assertFalse(Wildcard.matchPath("/prj/uphea-app.jar", "*/uphea*")); assertTrue(Wildcard.matchPath("/prj/uphea-app.jar", "**/uphea*")); assertTrue(Wildcard.match("/some/path/lib-jodd-v1", "*jodd*")); assertTrue(Wildcard.matchPath("/some/path/lib-jodd-v1", "**/*jodd*")); assertTrue(Wildcard.match("/some/path/lib-jodd-v1", "*/path/lib-jodd*")); assertTrue(Wildcard.matchPath("/some/path/lib-jodd-v1", "**/path/lib-jodd*")); assertTrue(Wildcard.match("/some/path/lib-jodd-v1", "*/lib-jodd*")); assertTrue(Wildcard.matchPath("/some/path/lib-jodd-v1", "**/lib-jodd*")); } @Test public void testMore() { assertTrue(Wildcard.matchPath("/a/b/c/d", "**/b/**")); assertTrue(Wildcard.matchPath("/a/b/c", "**/b/**")); assertTrue(Wildcard.matchPath("/a/b/c/d", "**/c/**")); } }