package com.nicewuerfel.blockown;
import static org.junit.Assert.assertTrue;
import com.nicewuerfel.blockown.output.DebugOutput;
import org.apache.commons.io.FileUtils;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Nonnull;
public class TestMessages {
private static File testFolder;
@BeforeClass
public static void createTestFolder() throws IOException {
testFolder = new File("MessageTest");
if (testFolder.exists()) {
FileUtils.deleteDirectory(testFolder);
}
assertTrue(testFolder.mkdir());
Message.loadMessages(new DebugOutput(), new File(testFolder, "messages.yml"));
}
@Test
public void testMessages() throws IllegalAccessException {
Field[] declaredFields = Message.class.getDeclaredFields();
ArrayList<String> missing = new ArrayList<>(128);
for (Field field : declaredFields) {
if (Modifier.isStatic(field.getModifiers())) {
if (!field.getName().equals("messages") && !field.getName().startsWith("COLOR")
&& !field.getName().startsWith("$")) {
Message message = (Message) field.get(null);
assertTrue(message != null);
if (!verifyMessage(message)) {
missing.add(message.getPath());
}
}
}
}
assertTrue("There are missing messages: " + System.lineSeparator() + asString(missing),
missing.isEmpty());
}
private String asString(List<String> list) {
StringBuilder b = new StringBuilder(list.size() * 20);
for (String s : list) {
b.append(s).append(System.lineSeparator());
}
return b.toString();
}
private boolean verifyMessage(@Nonnull Message message) {
String messageString = message.toString();
return messageString != null && !messageString.isEmpty();
}
@AfterClass
public static void cleanUp() throws IOException {
FileUtils.deleteDirectory(testFolder);
}
}