package de.dal33t.powerfolder.skin;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map.Entry;
import java.util.Properties;
import java.util.ServiceLoader;
import java.util.Set;
import de.dal33t.powerfolder.ui.util.Icons;
import junit.framework.TestCase;
public class SkinTest extends TestCase {
private Set<String> availableIconKeys = new HashSet<String>();
@Override
protected void setUp() throws Exception {
super.setUp();
Field[] fields = Icons.class.getFields();
for (int i = 0; i < fields.length; i++) {
Field field = fields[i];
if (!field.getType().equals(String.class)) {
continue;
}
String v = (String) field.get(null);
availableIconKeys.add(v);
}
}
public void testLoadSkin() {
ServiceLoader<Skin> skinLoader = ServiceLoader.load(Skin.class);
List<Skin> skins = new ArrayList<Skin>();
for (Iterator<Skin> it = skinLoader.iterator(); it.hasNext();) {
skins.add(it.next());
}
assertEquals(1, skins.size());
}
public void testIcons() {
ServiceLoader<Skin> skinLoader = ServiceLoader.load(Skin.class);
for (Iterator<Skin> it = skinLoader.iterator(); it.hasNext();) {
Skin skin = it.next();
Properties p = skin.getIconsProperties();
if (p == null) {
// Uses default.
continue;
}
boolean skinNameShown = false;
for (Entry<Object, Object> entry : p.entrySet()) {
String key = (String) entry.getKey();
String value = (String) entry.getValue();
InputStream in = Thread.currentThread().getContextClassLoader()
.getResourceAsStream(value);
if (in == null) {
if (!skinNameShown) {
System.err.println("\nProblems in skin: "
+ skin.getName());
skinNameShown = true;
}
if (!availableIconKeys.contains(key)
&& !key.startsWith("action"))
{
fail("Skin: " + skin.getName() + ": Not longer used: "
+ key + "=" + value);
System.err.println("Not longer used: " + key + "="
+ value);
} else {
fail("Skin: " + skin.getName() + ": NOT FOUND: " + key
+ "=" + value);
System.err.println("NOT FOUND: " + key + "=" + value);
}
}
}
}
}
}