package net.glowstone.constants;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.enchantments.EnchantmentWrapper;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import static org.junit.Assert.*;
/**
* Tests for {@link GlowEnchantment}.
*/
@RunWith(Parameterized.class)
public class EnchantmentTest {
private static final int STATIC_FINAL = Modifier.STATIC | Modifier.FINAL;
private final Field field;
public EnchantmentTest(Field field) {
this.field = field;
}
@BeforeClass
public static void staticSetup() {
GlowEnchantment.register();
}
@Parameterized.Parameters
public static Collection<Object[]> data() {
Field[] fields = Enchantment.class.getFields();
List<Object[]> result = new ArrayList<>(fields.length);
for (Field field : Enchantment.class.getFields()) {
if (field.getType() == Enchantment.class && (field.getModifiers() & STATIC_FINAL) == STATIC_FINAL) {
result.add(new Object[]{field});
}
}
return result;
}
@Test
public void effect() throws ReflectiveOperationException {
EnchantmentWrapper wrapper = (EnchantmentWrapper) field.get(null);
GlowEnchantment enchant = (GlowEnchantment) wrapper.getEnchantment();
assertNotNull("missing enchantment for " + field.getName(), enchant);
assertEquals("wrong name on wrapped effect", field.getName(), enchant.getName());
assertEquals("missing from byName", enchant, Enchantment.getByName(enchant.getName()));
assertEquals("missing from byId", enchant, Enchantment.getById(enchant.getId()));
assertEquals("wrong start level", 1, enchant.getStartLevel());
assertTrue("weird max level: " + enchant.getMaxLevel(), enchant.getMaxLevel() >= 1 && enchant.getMaxLevel() <= 5);
assertNotNull("missing item target", enchant.getItemTarget());
}
}