package org.smoothbuild.builtin.file.match;
import static java.util.Arrays.asList;
import static org.smoothbuild.builtin.file.match.Constants.DOUBLE_STAR;
import static org.smoothbuild.builtin.file.match.NamePattern.namePattern;
import static org.testory.Testory.given;
import static org.testory.Testory.thenReturned;
import static org.testory.Testory.thenThrown;
import static org.testory.Testory.when;
import org.junit.Test;
public class NamePatternTest {
private NamePattern pattern;
@Test
public void null_pattern_is_forbidden() {
when(() -> namePattern(null));
thenThrown(NullPointerException.class);
}
@Test
public void slash_in_pattern_is_forbidden() {
when(() -> namePattern("abc/def"));
thenThrown(IllegalArgumentException.class);
}
@Test
public void empty_pattern_is_forbidden() throws Exception {
when(() -> namePattern(""));
thenThrown(IllegalArgumentException.class);
}
@Test
public void double_star_pattern_is_allowed() throws Exception {
when(namePattern(DOUBLE_STAR));
thenReturned();
}
@Test
public void double_star_with_suffix_is_not_allowed() throws Exception {
when(() -> namePattern(DOUBLE_STAR + "a"));
thenThrown(IllegalArgumentException.class);
}
@Test
public void double_star_with_prefix_is_not_allowed() throws Exception {
when(() -> namePattern("a" + DOUBLE_STAR));
thenThrown(IllegalArgumentException.class);
}
@Test
public void three_star_pattern_is_not_allowed() throws Exception {
when(() -> namePattern("***"));
thenThrown(IllegalArgumentException.class);
}
// hasStars()
@Test
public void hasStars_returns_false_for_pattern_that_contains_no_stars() throws Exception {
given(pattern = namePattern("abcdef"));
when(pattern.hasStars());
thenReturned(false);
}
@Test
public void hasStars_returns_true_for_one_star_pattern() throws Exception {
given(pattern = namePattern("*"));
when(pattern.hasStars());
thenReturned(true);
}
@Test
public void hasStars_returns_true_for_pattern_that_contains_one_star() throws Exception {
given(pattern = namePattern("abc*def"));
when(pattern.hasStars());
thenReturned(true);
}
@Test
public void hasStars_returns_true_for_pattern_that_contains_two_stars() throws Exception {
given(pattern = namePattern("abc*def*ghi"));
when(pattern.hasStars());
thenReturned(true);
}
// isSingleStar()
@Test
public void isSingleStar_returns_false_for_pattern_that_contains_one_star() throws Exception {
given(pattern = namePattern("*abc"));
when(pattern.isSingleStar());
thenReturned(false);
}
@Test
public void isSingleStar_returns_true_for_one_star_pattern() throws Exception {
given(pattern = namePattern("*"));
when(pattern.isSingleStar());
thenReturned(true);
}
// isDoubleStar()
@Test
public void isDoubleStar_returns_false_for_pattern_that_contains_no_star() throws Exception {
given(pattern = namePattern("abc"));
when(pattern.isDoubleStar());
thenReturned(false);
}
@Test
public void isDoubleStar_returns_false_for_pattern_that_contains_one_star() throws Exception {
given(pattern = namePattern("*abc"));
when(pattern.isDoubleStar());
thenReturned(false);
}
@Test
public void isDoubleStar_returns_false_for_pattern_that_contains_two_disjoint_stars()
throws Exception {
given(pattern = namePattern("*abc*def"));
when(pattern.isDoubleStar());
thenReturned(false);
}
@Test
public void isDoubleStar_returns_true_for_double_star_pattern() throws Exception {
given(pattern = namePattern("**"));
when(pattern.isDoubleStar());
thenReturned(true);
}
// parts()
@Test
public void parts_returns_pattern_parts() throws Exception {
given(pattern = namePattern("abc*def*ghi"));
when(pattern.parts());
thenReturned(asList("abc", "*", "def", "*", "ghi"));
}
@Test
public void single_star_pattern_has_one_part() throws Exception {
given(pattern = namePattern("*"));
when(pattern.parts());
thenReturned(asList("*"));
}
@Test
public void double_star_pattern_has_one_part() throws Exception {
given(pattern = namePattern("**"));
when(pattern.parts());
thenReturned(asList("**"));
}
}