package net.glowstone.constants;
import org.bukkit.potion.PotionEffectType;
import org.bukkit.potion.PotionEffectTypeWrapper;
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 GlowPotionEffect}.
*/
@RunWith(Parameterized.class)
public class PotionEffectTest {
private static final int STATIC_FINAL = Modifier.STATIC | Modifier.FINAL;
private final Field field;
public PotionEffectTest(Field field) {
this.field = field;
}
@BeforeClass
public static void staticSetup() {
GlowPotionEffect.register();
}
@Parameterized.Parameters
public static Collection<Object[]> data() {
Field[] fields = PotionEffectType.class.getFields();
List<Object[]> result = new ArrayList<>(fields.length);
for (Field field : PotionEffectType.class.getFields()) {
if (field.getType() == PotionEffectType.class && (field.getModifiers() & STATIC_FINAL) == STATIC_FINAL) {
result.add(new Object[]{field});
}
}
return result;
}
@Test
public void effect() throws ReflectiveOperationException {
PotionEffectTypeWrapper wrapper = (PotionEffectTypeWrapper) field.get(null);
GlowPotionEffect effect = (GlowPotionEffect) wrapper.getType();
assertNotNull("missing potion effect for " + field.getName(), effect);
assertEquals("wrong name on wrapped effect", field.getName(), effect.getName());
assertEquals("missing from byName", effect, PotionEffectType.getByName(effect.getName()));
assertEquals("missing from byId", effect, PotionEffectType.getById(effect.getId()));
assertTrue("non-positive duration amplifier for " + effect, effect.getDurationModifier() > 0);
}
}