/** * Powerunit - A JDK1.8 test framework * Copyright (C) 2014 Mathieu Boretti. * * This file is part of Powerunit * * Powerunit is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Powerunit is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Powerunit. If not, see <http://www.gnu.org/licenses/>. */ package ch.powerunit; import java.io.File; import java.nio.file.Path; import org.hamcrest.CoreMatchers; import org.hamcrest.Matcher; import ch.powerunit.matchers.file.FileCanExecuteMatcher; import ch.powerunit.matchers.file.FileCanReadMatcher; import ch.powerunit.matchers.file.FileCanWriteMatcher; import ch.powerunit.matchers.file.FileExistsMatcher; import ch.powerunit.matchers.file.FileIsAbsoluteMatcher; import ch.powerunit.matchers.file.FileIsDirectoryMatcher; import ch.powerunit.matchers.file.FileListMatcher; import ch.powerunit.matchers.file.FileNameMatcher; import ch.powerunit.matchers.file.Path2FileMatcher; /** * @author borettim * */ interface FileMatchers { /** * Validate that a file can execute. * <p> * For example : * * <pre> * assertThat(myFile).is(fileCanExecute(is(true))); * </pre> * * @param matcher * the matcher on the can execute flag. * @return the matcher on the file. */ default Matcher<File> fileCanExecute(Matcher<? super Boolean> matcher) { return new FileCanExecuteMatcher(matcher); } /** * Validate that a file can execute. * <p> * For example : * * <pre> * assertThat(myFile).is(fileCanExecute(true); * </pre> * * @param canExecute * the expected value for the can execute flag. * @return the matcher on the file. */ default Matcher<File> fileCanExecute(boolean canExecute) { return fileCanExecute(CoreMatchers.is(canExecute)); } /** * Validate that a file can read. * <p> * For example : * * <pre> * assertThat(myFile).is(fileCanRead(is(true))); * </pre> * * @param matcher * the matcher on the can read flag. * @return the matcher on the file. */ default Matcher<File> fileCanRead(Matcher<? super Boolean> matcher) { return new FileCanReadMatcher(matcher); } /** * Validate that a file can read. * <p> * For example : * * <pre> * assertThat(myFile).is(fileCanRead(true); * </pre> * * @param canRead * the expected value for the can read flag. * @return the matcher on the file. */ default Matcher<File> fileCanRead(boolean canRead) { return fileCanRead(CoreMatchers.is(canRead)); } /** * Validate that a file can write. * <p> * For example : * * <pre> * assertThat(myFile).is(fileCanWrite(is(true))); * </pre> * * @param matcher * the matcher on the can write flag. * @return the matcher on the file. */ default Matcher<File> fileCanWrite(Matcher<? super Boolean> matcher) { return new FileCanWriteMatcher(matcher); } /** * Validate that a file can write. * <p> * For example : * * <pre> * assertThat(myFile).is(fileCanWrite(true); * </pre> * * @param canWrite * the expected value for the can write flag. * @return the matcher on the file. */ default Matcher<File> fileCanWrite(boolean canWrite) { return fileCanWrite(CoreMatchers.is(canWrite)); } /** * Validate that a file is a directory. * <p> * For example : * * <pre> * assertThat(myFile).is(fileIsDirectory(is(true))); * </pre> * * @param matcher * the matcher on the is directory flag. * @return the matcher on the file. */ default Matcher<File> fileIsDirectory(Matcher<? super Boolean> matcher) { return new FileIsDirectoryMatcher(matcher); } /** * Validate that a file is a directory. * <p> * For example : * * <pre> * assertThat(myFile).is(fileIsDirectory(true); * </pre> * * @param isDirectory * the expected value for the is directory flag. * @return the matcher on the file. */ default Matcher<File> fileIsDirectory(boolean isDirectory) { return fileIsDirectory(CoreMatchers.is(isDirectory)); } /** * Validate that a file exists. * <p> * For example : * * <pre> * assertThat(myFile).is(fileExists(is(true))); * </pre> * * @param matcher * the matcher on the exists flag. * @return the matcher on the file. */ default Matcher<File> fileExists(Matcher<? super Boolean> matcher) { return new FileExistsMatcher(matcher); } /** * Validate that a file exists. * <p> * For example : * * <pre> * assertThat(myFile).is(fileExists(true); * </pre> * * @param exists * the expected value for the exists flag. * @return the matcher on the file. */ default Matcher<File> fileExists(boolean exists) { return fileExists(CoreMatchers.is(exists)); } /** * Validate that a file is absolute. * <p> * For example : * * <pre> * assertThat(myFile).is(fileIsAbsolute(is(true))); * </pre> * * @param matcher * the matcher on the absolute flag. * @return the matcher on the file. */ default Matcher<File> fileIsAbsolute(Matcher<? super Boolean> matcher) { return new FileIsAbsoluteMatcher(matcher); } /** * Validate that a file is absolute. * <p> * For example : * * <pre> * assertThat(myFile).is(fileIsAbsolute(true); * </pre> * * @param absolute * the expected value for the absolute flag. * @return the matcher on the file. */ default Matcher<File> fileIsAbsolute(boolean absolute) { return fileIsAbsolute(CoreMatchers.is(absolute)); } /** * Validate that a file contains something. * <p> * The returned String[] is the one produced by list(). * * @param matcher * the matcher on the list() result. * @return the matcher on the file. */ default Matcher<File> fileContains(Matcher<String[]> matcher) { return new FileListMatcher(matcher); } /** * Validate that a file contains some other file name. * * @param atLeastThisName * the file name. * @return the matcher on the file. */ default Matcher<File> fileContains(String atLeastThisName) { return fileContains(org.hamcrest.Matchers .hasItemInArray(atLeastThisName)); } /** * Validate that a file has some name. * <p> * For example : * * <pre> * assertThat(myFile).is(fileNamed(is("x"))); * </pre> * * @param matcher * the matcher on the name. * @return the matcher on the file. */ default Matcher<File> fileNamed(Matcher<? super String> matcher) { return new FileNameMatcher(matcher); } /** * Validate that a file has some name. * <p> * For example : * * <pre> * assertThat(myFile).is(fileNamed("x")); * </pre> * * @param name * the expected value for the name. * @return the matcher on the file. */ default Matcher<File> fileNamed(String name) { return fileNamed(CoreMatchers.is(name)); } /** * This is a special matcher that apply the toFile() method to the in * matching path, and then apply the specified matcher. * * @param matcher * the matcher on File. * @return the matcher on Path. */ default Matcher<Path> pathMatchedAsFile(Matcher<? super File> matcher) { return new Path2FileMatcher(matcher); } }