/* * (C) Copyright 2006-2007 Nuxeo SA (http://nuxeo.com/) and others. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * Contributors: * Nuxeo - initial API and implementation * * $Id$ */ package org.nuxeo.runtime.deployment.preprocessor.install.filters; import org.junit.Test; import org.nuxeo.common.utils.Path; import org.nuxeo.common.utils.PathFilterSet; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; /** * @author <a href="mailto:bs@nuxeo.com">Bogdan Stefanescu</a> */ public class PathFilterTest { @Test public void testExclude() { PathFilterSet filters = new PathFilterSet(); filters.add(new ExcludeFilter("x")); filters.add(new ExcludeFilter("a/b/c")); filters.add(new ExcludeFilter("/c/d")); filters.add(new ExcludeFilter("e/f")); assertFalse(filters.accept(new Path("x"))); assertFalse(filters.accept(new Path("/x"))); assertTrue(filters.accept(new Path("y/x"))); assertTrue(filters.accept(new Path("x/y"))); assertTrue(filters.accept(new Path("y"))); assertFalse(filters.accept(new Path("a/b/c"))); assertFalse(filters.accept(new Path("/a/b/c"))); assertTrue(filters.accept(new Path("z/a/b/c"))); assertTrue(filters.accept(new Path("z/a/b/c/z"))); assertTrue(filters.accept(new Path("a/b/c/z"))); assertFalse(filters.accept(new Path("/c/d"))); assertFalse(filters.accept(new Path("c/d"))); assertTrue(filters.accept(new Path("z/c/d"))); // abs. patterns should match entire path assertFalse(filters.accept(new Path("e/f"))); assertFalse(filters.accept(new Path("/e/f/"))); assertTrue(filters.accept(new Path("z/e/f"))); assertTrue(filters.accept(new Path("e/f/z"))); assertTrue(filters.accept(new Path("w/e/f/z"))); } @Test public void testWildcard() { ExcludeFilter filter = new ExcludeFilter("/META-INF"); // assertTrue(filter.accept(new Path("a/b"))); // assertFalse(filter.accept(new Path("/META-INF"))); assertFalse(filter.accept(new Path("/META-INF"))); assertTrue(filter.accept(new Path("/META-INF/notexcluded"))); filter = new ExcludeFilter("/META-INF/**"); assertTrue(filter.accept(new Path("/META-INF"))); assertFalse(filter.accept(new Path("/META-INF/excluded"))); filter = new ExcludeFilter("/META-INF/*"); assertTrue(filter.accept(new Path("/META-INF"))); assertFalse(filter.accept(new Path("/META-INF/excluded"))); assertTrue(filter.accept(new Path("/META-INF/excluded/notexcluded"))); filter = new ExcludeFilter("/META-INF/**/test"); assertTrue(filter.accept(new Path("/META-INF"))); assertTrue(filter.accept(new Path("/META-INF/excluded"))); assertFalse(filter.accept(new Path("/META-INF/excluded1/excluded2/test"))); filter = new ExcludeFilter("/META-INF/*/test"); assertTrue(filter.accept(new Path("/META-INF"))); assertTrue(filter.accept(new Path("/META-INF/excluded"))); assertFalse(filter.accept(new Path("/META-INF/excluded/test"))); assertTrue(filter.accept(new Path("/META-INF/excluded/test/accepted"))); filter = new ExcludeFilter("/META-INF/*/test/**"); assertTrue(filter.accept(new Path("/META-INF"))); assertTrue(filter.accept(new Path("/META-INF/excluded"))); assertTrue(filter.accept(new Path("/META-INF/excluded/test"))); assertFalse(filter.accept(new Path("/META-INF/excluded/test/not/accepted"))); filter = new ExcludeFilter("**/META-INF"); assertFalse(filter.accept(new Path("/META-INF"))); assertTrue(filter.accept(new Path("/META-INF/accepted"))); assertFalse(filter.accept(new Path("excluded/META-INF/"))); assertTrue(filter.accept(new Path("accepted/META-INF/accepted"))); filter = new ExcludeFilter("**"); assertFalse(filter.accept(new Path("/META-INF"))); assertFalse(filter.accept(new Path("/META-INF/exclude"))); filter = new ExcludeFilter("*"); assertFalse(filter.accept(new Path("/META-INF"))); assertTrue(filter.accept(new Path("/META-INF/exclude"))); filter = new ExcludeFilter("*abc"); assertTrue(filter.accept(new Path("abcd"))); assertFalse(filter.accept(new Path("test_abc"))); filter = new ExcludeFilter("abc*"); assertTrue(filter.accept(new Path("test_abc_test"))); assertFalse(filter.accept(new Path("abc_test"))); filter = new ExcludeFilter("a*bc"); assertTrue(filter.accept(new Path("a_bc_"))); assertFalse(filter.accept(new Path("a_bc"))); filter = new ExcludeFilter("**/*.xml"); assertTrue(filter.accept(new Path("test.html"))); assertTrue(filter.accept(new Path("test/test.html"))); assertFalse(filter.accept(new Path("test.xml"))); assertFalse(filter.accept(new Path("test/test.xml"))); } // TODO: fix include -> multiple include should be evealuated using OR @Test public void testInclude() { PathFilterSet filters = new PathFilterSet(); filters.add(new IncludeFilter("x")); filters.add(new IncludeFilter("a/b/c")); filters.add(new IncludeFilter("/c/d")); filters.add(new IncludeFilter("e/f")); assertTrue(filters.accept(new Path("x"))); assertTrue(filters.accept(new Path("/x"))); assertFalse(filters.accept(new Path("y/x"))); assertFalse(filters.accept(new Path("x/y"))); assertFalse(filters.accept(new Path("y"))); assertTrue(filters.accept(new Path("a/b/c"))); assertTrue(filters.accept(new Path("/a/b/c"))); assertFalse(filters.accept(new Path("z/a/b/c"))); assertFalse(filters.accept(new Path("z/a/b/c/z"))); assertFalse(filters.accept(new Path("a/b/c/z"))); assertTrue(filters.accept(new Path("/c/d"))); assertTrue(filters.accept(new Path("c/d"))); assertFalse(filters.accept(new Path("z/c/d"))); // abs. pattterns should match entire path assertTrue(filters.accept(new Path("e/f"))); assertTrue(filters.accept(new Path("/e/f/"))); assertFalse(filters.accept(new Path("z/e/f"))); assertFalse(filters.accept(new Path("e/f/z"))); assertFalse(filters.accept(new Path("w/e/f/z"))); } @Test public void testMixIncludeExclude() { PathFilterSet filters = new PathFilterSet(); filters.add(new IncludeFilter("org/nuxeo/**")); filters.add(new IncludeFilter("com/**")); filters.add(new ExcludeFilter("**/*.xml")); assertFalse(filters.accept(new Path("net/nuxeo"))); assertTrue(filters.accept(new Path("org/nuxeo/ecm"))); assertFalse(filters.accept(new Path("test.xml"))); assertFalse(filters.accept(new Path("org/nuxeo/ecm/test.xml"))); assertTrue(filters.accept(new Path("org/nuxeo/ecm/test.java"))); assertTrue(filters.accept(new Path("com/test.java"))); assertFalse(filters.accept(new Path("com/test.xml"))); } }