package org.mafagafogigante.dungeon.io;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import java.io.File;
import java.io.FileFilter;
import java.net.URL;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class ResourcesFolderTest {
private static final int FONT_FILES_NUMBER = 1;
private static final int JSON_FILES_NUMBER = 10;
private static final String RESOURCES_TARGET_PATH = "../classes/";
private static final String JSON_FILE_EXTENSION = ".json";
private static final String FONT_FILE_EXTENSION = ".ttf";
private static final String SPLASH_SCREEN_FILE_NAME = "splash.png";
private File resourcesDir;
/**
* Try to initialize the resources directory.
*/
@Before
public void initialize() {
URL resourcesUrl = this.getClass().getClassLoader().getResource(RESOURCES_TARGET_PATH);
if (resourcesUrl != null) {
resourcesDir = new File(resourcesUrl.getFile());
if (!resourcesDir.isDirectory()) {
Assert.fail("Resources file should be a directory");
}
} else {
Assert.fail("Unable to find resources folder");
}
}
@Test
public void testIsResourcesFolderContainsCorrectNumberOfJsonFiles() {
List<File> jsonFiles = findFilesByFileFilter(getEndWithFileFilter(JSON_FILE_EXTENSION));
Assert.assertEquals(JSON_FILES_NUMBER, jsonFiles.size());
}
@Test
public void testIsResourcesFolderContainsFontFile() {
List<File> fontFiles = findFilesByFileFilter(getEndWithFileFilter(FONT_FILE_EXTENSION));
Assert.assertEquals(FONT_FILES_NUMBER, fontFiles.size());
}
@Test
public void testIsResourcesFolderContainsSplashScreenFile() {
List<File> splashScreenFile = findFilesByFileFilter(getEndWithFileFilter(SPLASH_SCREEN_FILE_NAME));
Assert.assertEquals(1, splashScreenFile.size());
}
private FileFilter getEndWithFileFilter(final String endWithExpression) {
return new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.getName().endsWith(endWithExpression);
}
};
}
private List<File> findFilesByFileFilter(FileFilter fileFilter) {
final File[] files = resourcesDir.listFiles(fileFilter);
if (files == null) {
return Collections.emptyList();
} else {
return Arrays.asList(files);
}
}
}