package org.smoothbuild.builtin.file;
import static org.junit.Assert.fail;
import static org.smoothbuild.builtin.file.PathArgValidator.validatedProjectPath;
import static org.smoothbuild.db.values.ValuesDb.memoryValuesDb;
import java.util.List;
import org.junit.Test;
import org.smoothbuild.db.values.ValuesDb;
import org.smoothbuild.lang.message.Message;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableList.Builder;
public class PathArgValidatorTest {
private final ValuesDb valuesDb = memoryValuesDb();
@Test
public void illegal_project_paths_are_reported() {
String name = "name";
for (String path : listOfInvalidProjectPaths()) {
try {
validatedProjectPath(name, valuesDb.string(path));
fail("exception should be thrown for path = " + path);
} catch (Message e) {
// expected
}
}
}
@Test
public void valid_project_paths_are_accepted() {
for (String path : listOfCorrectProjectPaths()) {
validatedProjectPath("name", valuesDb.string(path));
}
}
private static List<String> listOfCorrectProjectPaths() {
Builder<String> builder = ImmutableList.builder();
builder.add("//");
builder.add("//abc");
builder.add("//abc/def");
builder.add("//abc/def/ghi");
builder.add("//abc/def/ghi/ijk");
// These paths look really strange but Linux allows creating them.
// I cannot see any good reason for forbidding them.
builder.add("//...");
builder.add("//.../abc");
builder.add("//abc/...");
builder.add("//abc/.../def");
return builder.build();
}
private static ImmutableList<String> listOfInvalidProjectPaths() {
Builder<String> builder = ImmutableList.builder();
builder.add("");
builder.add(".");
builder.add("./");
builder.add("./.");
builder.add("././");
builder.add("abc/");
builder.add("abc/def/");
builder.add("abc/def/ghi/");
builder.add("./abc");
builder.add("./abc/def");
builder.add("./abc/def/ghi");
builder.add("..");
builder.add("../");
builder.add("./../");
builder.add("../abc");
builder.add("abc/..");
builder.add("abc/../def");
builder.add("../..");
builder.add("");
builder.add("/");
builder.add("///");
builder.add("abc");
builder.add("/abc");
builder.add("///abc");
builder.add("abc//");
builder.add("abc///");
builder.add("abc//def");
builder.add("abc///def");
return builder.build();
}
}