package org.jabref;
import java.io.IOException;
import java.io.Reader;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.stream.Collectors;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
public class TestIconsProperties {
@Test
public void testExistenceOfIconImagesReferencedFromIconsProperties() throws IOException {
String folder = "src/main/resources/images/external";
String iconsProperties = "Icons.properties";
String iconsPropertiesPath = "src/main/resources/images/" + iconsProperties;
// load properties
Properties properties = new Properties();
try (Reader reader = Files.newBufferedReader(Paths.get(iconsPropertiesPath))) {
properties.load(reader);
}
assertFalse("There must be loaded properties after loading " + iconsPropertiesPath,
properties.entrySet().isEmpty());
// check that each key references an existing file
for(Map.Entry<Object, Object> entry : properties.entrySet()) {
String name = entry.getKey().toString();
String value = entry.getValue().toString();
assertTrue("Referenced image (" + name + " --> " + value + " does not exist in folder " + folder, Files.exists(Paths.get(folder, value)));
}
// check that each image in the folder is referenced by a key
List<String> imagesReferencedFromProperties = new ArrayList<>();
for(Map.Entry<Object, Object> entry : properties.entrySet()) {
imagesReferencedFromProperties.add(entry.getValue().toString());
}
List<String> fileNamesInFolder = Files.list(Paths.get(folder)).map(p -> p.getFileName().toString()).collect(Collectors.toList());
fileNamesInFolder.removeAll(imagesReferencedFromProperties);
assertEquals("Images are in the folder that are unused", "[red.png]", fileNamesInFolder.toString());
}
}