/*
* (C) Copyright 2006-2011 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.common.utils;
import org.junit.Test;
import org.junit.Assert;
public class TestPattern {
@Test
public void testFileNamePattern() {
FileNamePattern pattern;
pattern = new FileNamePattern("");
Assert.assertTrue(pattern.match(""));
Assert.assertFalse(pattern.match("a"));
pattern = new FileNamePattern("abc.txt");
Assert.assertTrue(pattern.match("abc.txt"));
Assert.assertFalse(pattern.match("ac.txt"));
pattern = new FileNamePattern("?");
Assert.assertTrue(pattern.match("a"));
Assert.assertFalse(pattern.match("ab"));
pattern = new FileNamePattern("*");
Assert.assertTrue(pattern.match("abababa"));
Assert.assertTrue(pattern.match(""));
pattern = new FileNamePattern("*.txt");
Assert.assertTrue(pattern.match("a.txt"));
Assert.assertTrue(pattern.match("a.b.txt"));
Assert.assertFalse(pattern.match("a:txt"));
Assert.assertFalse(pattern.match("a.txtz"));
pattern = new FileNamePattern("*abc.txt");
Assert.assertTrue(pattern.match("abc.txt"));
Assert.assertTrue(pattern.match("xabc.txt"));
Assert.assertTrue(pattern.match("xyzabc.txt"));
Assert.assertFalse(pattern.match("ac.txt"));
pattern = new FileNamePattern("a*bc.txt");
Assert.assertTrue(pattern.match("abc.txt"));
Assert.assertTrue(pattern.match("axbc.txt"));
Assert.assertTrue(pattern.match("axyzbc.txt"));
Assert.assertFalse(pattern.match("ac.txt"));
pattern = new FileNamePattern("abc*txt");
Assert.assertTrue(pattern.match("abc.txt"));
Assert.assertTrue(pattern.match("abctxt"));
Assert.assertTrue(pattern.match("abcxyztxt"));
Assert.assertFalse(pattern.match("ac.txt"));
pattern = new FileNamePattern("abc.t*t");
Assert.assertTrue(pattern.match("abc.txt"));
Assert.assertTrue(pattern.match("abc.tt"));
Assert.assertTrue(pattern.match("abc.txyzt"));
Assert.assertFalse(pattern.match("abc.t"));
pattern = new FileNamePattern("abc.*");
Assert.assertTrue(pattern.match("abc.txt"));
Assert.assertTrue(pattern.match("abc."));
Assert.assertTrue(pattern.match("abc.t"));
Assert.assertFalse(pattern.match("ab.txt"));
pattern = new FileNamePattern("?bc.txt");
Assert.assertTrue(pattern.match("abc.txt"));
Assert.assertFalse(pattern.match("zabc.txt"));
Assert.assertFalse(pattern.match("abc.txy"));
Assert.assertFalse(pattern.match("abc.t"));
pattern = new FileNamePattern("abc.???");
Assert.assertTrue(pattern.match("abc.txt"));
Assert.assertFalse(pattern.match("zabc.txt"));
Assert.assertTrue(pattern.match("abc.txy"));
Assert.assertFalse(pattern.match("abc.t"));
pattern = new FileNamePattern("*?txt");
Assert.assertTrue(pattern.match("abc.txt"));
Assert.assertFalse(pattern.match("abc.tt"));
Assert.assertTrue(pattern.match("abctxt"));
Assert.assertTrue(pattern.match(".txt"));
pattern = new FileNamePattern("abc*?txt");
Assert.assertTrue(pattern.match("abc.txt"));
Assert.assertFalse(pattern.match("abc.tt"));
Assert.assertFalse(pattern.match("abctxt"));
Assert.assertTrue(pattern.match("abcdef.txt"));
pattern = new FileNamePattern("abc.t*?");
Assert.assertTrue(pattern.match("abc.txt"));
Assert.assertTrue(pattern.match("abc.tt"));
Assert.assertTrue(pattern.match("abc.txyzt"));
Assert.assertFalse(pattern.match("abc.t"));
pattern = new FileNamePattern("*.jar");
Assert.assertTrue(pattern.match("abc.jar"));
Assert.assertTrue(pattern.match("a.b.c.jar"));
Assert.assertFalse(pattern.match("jar.j.ja."));
Assert.assertFalse(pattern.match("jar.j.jar."));
Assert.assertTrue(pattern.match("jar.j.ja.jar"));
Assert.assertTrue(pattern.match(".jar"));
Assert.assertFalse(pattern.match("abc-jar"));
pattern = new FileNamePattern("nuxeo?*common*.jar");
Assert.assertTrue(pattern.match("nuxeo-common.jar"));
Assert.assertTrue(pattern.match("nuxeo--common.jar"));
Assert.assertTrue(pattern.match("nuxeo-common-SNAPSHOT-1.0.jar"));
Assert.assertFalse(pattern.match("nuxeocommon.jar"));
pattern = new FileNamePattern("???*");
Assert.assertTrue(pattern.match("abcdef"));
Assert.assertTrue(pattern.match("xyz"));
Assert.assertFalse(pattern.match("ab"));
Assert.assertFalse(pattern.match("x"));
pattern = new FileNamePattern("??*?**");
Assert.assertTrue(pattern.match("abcdef"));
Assert.assertTrue(pattern.match("xyz"));
Assert.assertFalse(pattern.match("ab"));
Assert.assertFalse(pattern.match("x"));
pattern = new FileNamePattern("*???");
Assert.assertTrue(pattern.match("abcdef"));
Assert.assertTrue(pattern.match("xyz"));
Assert.assertFalse(pattern.match("ab"));
Assert.assertFalse(pattern.match("x"));
}
@Test
public void testFilePathPattern() {
FilePathPattern pattern = new FilePathPattern("a/b/c/d");
Assert.assertTrue(pattern.match("a/b/c/d"));
Assert.assertTrue(pattern.match("a/b//c/d"));
Assert.assertFalse(pattern.match("a/b/c"));
pattern = new FilePathPattern("**/b/c");
Assert.assertTrue(pattern.match("b/c"));
Assert.assertTrue(pattern.match("a/b/c"));
Assert.assertTrue(pattern.match("x/a/b/c"));
Assert.assertFalse(pattern.match("b/c/d"));
pattern = new FilePathPattern("b/c/**");
Assert.assertTrue(pattern.match("b/c"));
Assert.assertTrue(pattern.match("b/c/d"));
Assert.assertTrue(pattern.match("b/c/d/e"));
Assert.assertFalse(pattern.match("a/b/c"));
pattern = new FilePathPattern("a/**/c");
Assert.assertTrue(pattern.match("a/c"));
Assert.assertTrue(pattern.match("a/b/c"));
Assert.assertTrue(pattern.match("a/b/x/c"));
Assert.assertFalse(pattern.match("b/c/d"));
Assert.assertFalse(pattern.match("a/b/c/d"));
}
@Test
public void testIndexOf() {
Assert.assertEquals(0, FileNamePattern.indexOf("abc".toCharArray(), "a".toCharArray(), 0));
Assert.assertEquals(1, FileNamePattern.indexOf("abc".toCharArray(), "b".toCharArray(), 0));
Assert.assertEquals(2, FileNamePattern.indexOf("abc".toCharArray(), "c".toCharArray(), 0));
Assert.assertEquals(0, FileNamePattern.indexOf("abc".toCharArray(), "ab".toCharArray(), 0));
Assert.assertEquals(1, FileNamePattern.indexOf("abc".toCharArray(), "bc".toCharArray(), 0));
Assert.assertEquals(0, FileNamePattern.indexOf("abc".toCharArray(), "abc".toCharArray(), 0));
Assert.assertEquals(-1, FileNamePattern.indexOf("abc".toCharArray(), "ac".toCharArray(), 0));
Assert.assertEquals(2, FileNamePattern.indexOf("abcdef".toCharArray(), "cde".toCharArray(), 0));
Assert.assertEquals(2, FileNamePattern.indexOf("abcdef".toCharArray(), "cdef".toCharArray(), 0));
Assert.assertEquals(-1, FileNamePattern.indexOf("abcdef".toCharArray(), "cdefg".toCharArray(), 0));
Assert.assertEquals(-1, FileNamePattern.indexOf("abcdef".toCharArray(), "cdf".toCharArray(), 0));
Assert.assertEquals(0, FileNamePattern.indexOf("abcdef".toCharArray(), "abc".toCharArray(), 0));
Assert.assertEquals(0, FileNamePattern.indexOf("abcdef".toCharArray(), "abcdef".toCharArray(), 0));
Assert.assertEquals(-1, FileNamePattern.indexOf("abcdef".toCharArray(), "abd".toCharArray(), 0));
Assert.assertEquals(2, FileNamePattern.indexOf("abcdef".toCharArray(), "c".toCharArray(), 0));
Assert.assertEquals(0, FileNamePattern.indexOf("abcdef".toCharArray(), "a".toCharArray(), 0));
Assert.assertEquals(5, FileNamePattern.indexOf("abcdef".toCharArray(), "f".toCharArray(), 0));
Assert.assertEquals(3, FileNamePattern.indexOf("abcdef".toCharArray(), "de".toCharArray(), 0));
Assert.assertEquals(0, FileNamePattern.indexOf("abcdef".toCharArray(), "".toCharArray(), 0));
Assert.assertEquals(0, FileNamePattern.indexOf("".toCharArray(), "".toCharArray(), 0));
Assert.assertEquals(-1, FileNamePattern.indexOf("".toCharArray(), "a".toCharArray(), 0));
Assert.assertEquals(-1, FileNamePattern.indexOf("a".toCharArray(), "ab".toCharArray(), 0));
Assert.assertEquals(2, FileNamePattern.indexOf("abc.txt".toCharArray(), "?.txt".toCharArray(), 0));
}
@Test
public void testContainsAt() {
Assert.assertTrue(FileNamePattern.containsAt("abc".toCharArray(), 0, "a".toCharArray()));
Assert.assertTrue(FileNamePattern.containsAt("abc".toCharArray(), 1, "b".toCharArray()));
Assert.assertTrue(FileNamePattern.containsAt("abc".toCharArray(), 2, "c".toCharArray()));
Assert.assertTrue(FileNamePattern.containsAt("abc".toCharArray(), 0, "ab".toCharArray()));
Assert.assertFalse(FileNamePattern.containsAt("abc".toCharArray(), 0, "ac".toCharArray()));
Assert.assertTrue(FileNamePattern.containsAt("abc".toCharArray(), 0, "abc".toCharArray()));
Assert.assertTrue(FileNamePattern.containsAt("abc".toCharArray(), 1, "bc".toCharArray()));
Assert.assertTrue(FileNamePattern.containsAt("abc".toCharArray(), 0, "".toCharArray()));
Assert.assertFalse(FileNamePattern.containsAt("abc".toCharArray(), 1, "c".toCharArray()));
Assert.assertTrue(FileNamePattern.containsAt("abc".toCharArray(), 1, "b".toCharArray()));
Assert.assertTrue(FileNamePattern.containsAt("abc".toCharArray(), 1, "bc".toCharArray()));
Assert.assertFalse(FileNamePattern.containsAt("abc".toCharArray(), 1, "c".toCharArray()));
Assert.assertTrue(FileNamePattern.containsAt("abc".toCharArray(), 2, "c".toCharArray()));
Assert.assertTrue(FileNamePattern.containsAt("abc".toCharArray(), 0, "a?c".toCharArray()));
Assert.assertTrue(FileNamePattern.containsAt("abc".toCharArray(), 0, "ab?".toCharArray()));
Assert.assertTrue(FileNamePattern.containsAt("abc".toCharArray(), 0, "?bc".toCharArray()));
Assert.assertTrue(FileNamePattern.containsAt("abc".toCharArray(), 1, "??".toCharArray()));
}
}