package org.smoothbuild.builtin.file.match; import static org.hamcrest.Matchers.contains; import static org.junit.Assert.fail; import static org.smoothbuild.builtin.file.match.PathPattern.pathPattern; import static org.testory.Testory.given; import static org.testory.Testory.thenReturned; import static org.testory.Testory.when; import java.util.ArrayList; import java.util.List; import org.junit.Test; public class PathPatternTest { private PathPattern pattern; @Test public void single_star_pattern_has_one_part() throws Exception { given(pattern = pathPattern("**")); when(pattern.parts()); thenReturned(contains("**")); } @Test public void double_star_pattern_has_one_part() throws Exception { given(pattern = pathPattern("**")); when(pattern.parts()); thenReturned(contains("**")); } @Test public void multi_part_patern_has_many_parts() throws Exception { given(pattern = pathPattern("a/b/c")); when(pattern.parts()); thenReturned(contains("a", "b", "c")); } @Test public void validationErrorReturnsMessageForInvalidPattern() { for (String pattern : listOfInvalidPatterns()) { try { PathPattern.pathPattern(pattern); fail("exception should be thrown"); } catch (IllegalPathPatternException e) { // expected } } } private static List<String> listOfInvalidPatterns() { List<String> result = new ArrayList<>(); result.add(""); result.add("."); result.add("./"); result.add("/."); result.add("./."); result.add("././"); result.add("abc/"); result.add("abc/def/"); result.add("abc/def/ghi/"); result.add("./abc"); result.add("./abc/def"); result.add("./abc/def/ghi"); result.add("./abc/def/ghi/ijk"); result.add("abc/."); result.add("abc/def/."); result.add("abc/def/ghi/."); result.add("abc/def/ghi/ijk/."); result.add(".."); result.add("../"); result.add("./../"); result.add("../abc"); result.add("abc/.."); result.add("abc/../def"); result.add("../.."); result.add("/"); result.add("//"); result.add("///"); result.add("/abc"); result.add("//abc"); result.add("///abc"); result.add("abc//"); result.add("abc///"); result.add("abc//def"); result.add("abc///def"); result.add("*/"); result.add("/*"); result.add("**/"); result.add("/**"); result.add("a**"); result.add("**a"); result.add("a/b**/c"); result.add("a/**b/c"); result.add("**/**"); result.add("a/**/**"); result.add("**/**/b"); result.add("a/**/**/b"); result.add("***"); return result; } }