/** * Copyright (C) 2014 SignalFuse, Inc. */ package com.github.dockerjava.core; import java.io.IOException; import org.apache.commons.io.FilenameUtils; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import com.github.dockerjava.core.exception.GoLangFileMatchException; import junit.framework.Assert; public class GoLangFileMatchTest { @Test(dataProvider = "getTestData") public void testMatch(MatchTestCase testCase) throws IOException { String pattern = testCase.pattern; String s = testCase.s; if (GoLangFileMatch.IS_WINDOWS) { if (pattern.indexOf('\\') >= 0) { // no escape allowed on windows. return; } pattern = FilenameUtils.normalize(pattern); s = FilenameUtils.normalize(s); } try { Boolean matched = GoLangFileMatch.match(pattern, s); if (testCase.expectException) { Assert.fail("Expected GoFileMatchException"); } Assert.assertEquals(testCase.toString(), testCase.matches, matched); } catch (GoLangFileMatchException e) { if (!testCase.expectException) { throw e; } } } @DataProvider public Object[][] getTestData() { return new Object[][] {new Object[] {new MatchTestCase("", "abc", false, false)}, new Object[] {new MatchTestCase("abc", "abc", true, false)}, new Object[] {new MatchTestCase("*", "abc", true, false)}, new Object[] {new MatchTestCase("*c", "abc", true, false)}, new Object[] {new MatchTestCase("a*", "a", true, false)}, new Object[] {new MatchTestCase("a*", "abc", true, false)}, new Object[] {new MatchTestCase("a*", "ab/c", true, false)}, new Object[] {new MatchTestCase("a*/b", "abc/b", true, false)}, new Object[] {new MatchTestCase("a*/b", "a/c/b", false, false)}, new Object[] {new MatchTestCase("a*b*c*d*e*/f", "axbxcxdxe/f", true, false)}, new Object[] {new MatchTestCase("a*b*c*d*e*/f", "axbxcxdxexxx/f", true, false)}, new Object[] {new MatchTestCase("a*b*c*d*e*/f", "axbxcxdxe/xxx/f", false, false)}, new Object[] {new MatchTestCase("a*b*c*d*e*/f", "axbxcxdxexxx/fff", false, false)}, new Object[] {new MatchTestCase("a*b?c*x", "abxbbxdbxebxczzx", true, false)}, new Object[] {new MatchTestCase("a*b?c*x", "abxbbxdbxebxczzy", false, false)}, new Object[] {new MatchTestCase("ab[c]", "abc", true, false)}, new Object[] {new MatchTestCase("ab[b-d]", "abc", true, false)}, new Object[] {new MatchTestCase("ab[e-g]", "abc", false, false)}, new Object[] {new MatchTestCase("ab[^c]", "abc", false, false)}, new Object[] {new MatchTestCase("ab[^b-d]", "abc", false, false)}, new Object[] {new MatchTestCase("ab[^e-g]", "abc", true, false)}, new Object[] {new MatchTestCase("a\\*b", "a*b", true, false)}, new Object[] {new MatchTestCase("a\\*b", "ab", false, false)}, new Object[] {new MatchTestCase("a?b", "a☺b", true, false)}, new Object[] {new MatchTestCase("a[^a]b", "a☺b", true, false)}, new Object[] {new MatchTestCase("a???b", "a☺b", false, false)}, new Object[] {new MatchTestCase("a[^a][^a][^a]b", "a☺b", false, false)}, new Object[] {new MatchTestCase("[a-ζ]*", "α", true, false)}, new Object[] {new MatchTestCase("*[a-ζ]", "A", false, false)}, new Object[] {new MatchTestCase("a?b", "a/b", false, false)}, new Object[] {new MatchTestCase("a*b", "a/b", false, false)}, new Object[] {new MatchTestCase("[\\]a]", "]", true, false)}, new Object[] {new MatchTestCase("[\\-]", "-", true, false)}, new Object[] {new MatchTestCase("[x\\-]", "x", true, false)}, new Object[] {new MatchTestCase("[x\\-]", "-", true, false)}, new Object[] {new MatchTestCase("[x\\-]", "z", false, false)}, new Object[] {new MatchTestCase("[\\-x]", "x", true, false)}, new Object[] {new MatchTestCase("[\\-x]", "-", true, false)}, new Object[] {new MatchTestCase("[\\-x]", "a", false, false)}, new Object[] {new MatchTestCase("[]a]", "]", false, true)}, new Object[] {new MatchTestCase("[-]", "-", false, true)}, new Object[] {new MatchTestCase("[x-]", "x", false, true)}, new Object[] {new MatchTestCase("[x-]", "-", false, true)}, new Object[] {new MatchTestCase("[x-]", "z", false, true)}, new Object[] {new MatchTestCase("[-x]", "x", false, true)}, new Object[] {new MatchTestCase("[-x]", "-", false, true)}, new Object[] {new MatchTestCase("[-x]", "a", false, true)}, new Object[] {new MatchTestCase("\\", "a", false, true)}, new Object[] {new MatchTestCase("[a-b-c]", "a", false, true)}, new Object[] {new MatchTestCase("[", "a", false, true)}, new Object[] {new MatchTestCase("[^", "a", false, true)}, new Object[] {new MatchTestCase("[^bc", "a", false, true)}, new Object[] {new MatchTestCase("a[", "a", false, true)}, new Object[] {new MatchTestCase("a[", "ab", false, true)}, new Object[] {new MatchTestCase("*x", "xxx", true, false)}, new Object[] {new MatchTestCase("a", "a/b/c", true, false)}, new Object[] {new MatchTestCase("*/b", "a/b/c", true, false)}, new Object[] {new MatchTestCase("**/b/*/d", "a/b/c/d", true, false)}, new Object[] {new MatchTestCase("**/c", "a/b/c", true, false)}}; } private final class MatchTestCase { private final String pattern; private final String s; private final Boolean matches; private final Boolean expectException; public MatchTestCase(String pattern, String s, Boolean matches, Boolean expectException) { super(); this.pattern = pattern; this.s = s; this.matches = matches; this.expectException = expectException; } @Override public String toString() { return "MatchTestCase [pattern=" + pattern + ", s=" + s + ", matches=" + matches + ", expectException=" + expectException + "]"; } } }