"src/main/java/model/Elements/Extinguisher/Extinguisher.java" did not exist on "2da50ff2b337e6dfe26f6785c08edcec166cade9"
Select Git revision
FirefighterBoardTest.java
Forked from
COUETOUX Basile / FirefighterStarter
Source project has a limited visibility.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
BlackBox.java 3.67 KiB
import java.io.IOException;
import java.nio.file.DirectoryIteratorException;
import java.nio.file.DirectoryStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class BlackBox {
private static final String EXECUTABLES_DIRECTORY = "executables";
private static final String EXECUTABLE_NAME_PREFIX = "check";
private static final String EXECUTABLE_NAME_SUFFIX = "exe";
private static final String IMAGES_DIRECTORY = "images";
public static final String IMAGES_FILE_SUFFIXES = "ppm,pgm,pbm";
public static final String IMAGES_FILE_PREFIX = "test";
private final String executablesDirectoryPath;
private final String imagesDirectoryPath;
public static final String ANSI_RED = "\u001B[31m";
public static final String ANSI_GREEN = "\u001B[32m";
public static final String ANSI_RESET = "\u001B[0m";
public BlackBox(String executablesDirectoryPath, String imagesDirectoryPath){
this.executablesDirectoryPath = executablesDirectoryPath;
this.imagesDirectoryPath = imagesDirectoryPath;
}
private List<Path> getImagePaths() throws IOException {
return getDirectoryFiles(imagesDirectoryPath, IMAGES_FILE_PREFIX + "*.{" + IMAGES_FILE_SUFFIXES + "}");
}
private List<Path> getExecutablePaths() throws IOException {
return getDirectoryFiles(executablesDirectoryPath, EXECUTABLE_NAME_PREFIX + "*" + EXECUTABLE_NAME_SUFFIX);
}
private List<Path> getDirectoryFiles(String directoryPath, String glob) throws IOException {
List<Path> result = new ArrayList<>();
try (DirectoryStream<Path> stream = Files.newDirectoryStream(Path.of(directoryPath), glob)) {
for (Path entry: stream) {
result.add(entry);
}
} catch (DirectoryIteratorException ex) {
throw ex.getCause();
}
Collections.sort(result);
return result;
}
private boolean runTest(String executablePath, String... args) {
List<String> command = new ArrayList<>();
command.add(executablePath);
command.addAll(List.of(args));
ProcessBuilder processBuilder = new ProcessBuilder(command);
try {
Process process = processBuilder.start();
return process.waitFor() == 0;
}
catch (Exception exception){
exception.printStackTrace();
}
return false;
}
public void runTestSuites() throws IOException{
for(Path executablePath : getExecutablePaths()) {
runTestSuite(executablePath);
}
}
private void printTestResult(String text, boolean isSuccessful){
String color = isSuccessful ? ANSI_GREEN : ANSI_RED;
System.out.println(color + text + ANSI_RESET);
}
private void runTestSuite(Path executablePath) throws IOException {
String executableName = executablePath.getFileName().toString();
System.out.println("-".repeat(70));
System.out.println("Test suite for " + executableName);
boolean testSuiteIsSuccessful = true;
for (Path imagePath : getImagePaths()) {
String imageName = imagePath.getFileName().toString();
boolean expected_result = imageName.contains("_Y");
boolean actual_result = runTest(executablePath.toString(), imagePath.toString());
printTestResult(executableName + " " + imageName + ", expected: "
+ expected_result + ",\tactual: " + actual_result, actual_result==expected_result);
if (actual_result != expected_result) {
testSuiteIsSuccessful = false;
}
}
printTestResult("Test suite for " + executableName + " successful: " + testSuiteIsSuccessful,
testSuiteIsSuccessful);
}
public static void main(String[] args) throws IOException{
new BlackBox(EXECUTABLES_DIRECTORY, IMAGES_DIRECTORY).runTestSuites();
}
}