package tc.oc.commons.bukkit.util;
import java.util.List;
import com.google.common.collect.ImmutableList;
import org.bukkit.Bukkit;
import org.bukkit.CraftBukkitRuntime;
import org.bukkit.Material;
import org.bukkit.craftbukkit.potion.CraftPotionBrewer;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.PotionMeta;
import org.bukkit.potion.Potion;
import org.bukkit.potion.PotionData;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionType;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import static org.bukkit.potion.PotionEffectType.*;
import static org.junit.Assert.*;
import static tc.oc.commons.bukkit.util.PotionClassification.*;
/** Tests for {@link PotionUtils} and {@link PotionClassification} */
@RunWith(JUnit4.class)
public class PotionClassificationTest {
@Before
public void setUp() {
CraftBukkitRuntime.load();
if(Potion.getBrewer() == null) {
Potion.setPotionBrewer(new CraftPotionBrewer());
}
}
@Test
public void effectTypes() throws Exception {
assertEquals(BENEFICIAL, classify(HEAL));
assertEquals(HARMFUL, classify(HARM));
}
@Test
public void classifyByMostEffects() throws Exception {
assertEquals(BENEFICIAL, classify(ImmutableList.of(
new PotionEffect(SPEED, 1, 0),
new PotionEffect(HARM, 1, 0),
new PotionEffect(LUCK, 1, 0)
)));
assertEquals(HARMFUL, classify(ImmutableList.of(
new PotionEffect(SLOW, 1, 0),
new PotionEffect(HEAL, 1, 0),
new PotionEffect(UNLUCK, 1, 0)
)));
}
@Test
public void classifyByDuration() throws Exception {
assertEquals(BENEFICIAL, classify(ImmutableList.of(
new PotionEffect(HEAL, 2, 0),
new PotionEffect(HARM, 1, 0)
)));
assertEquals(HARMFUL, classify(ImmutableList.of(
new PotionEffect(HEAL, 1, 0),
new PotionEffect(HARM, 2, 0)
)));
}
@Test
public void classifyByAmplifier() throws Exception {
assertEquals(BENEFICIAL, classify(ImmutableList.of(
new PotionEffect(HEAL, 1, 1),
new PotionEffect(HARM, 1, 0)
)));
assertEquals(HARMFUL, classify(ImmutableList.of(
new PotionEffect(HEAL, 1, 0),
new PotionEffect(HARM, 1, 1)
)));
}
@Test
public void negativeAmplifier() throws Exception {
assertEquals(BENEFICIAL, classify(ImmutableList.of(
new PotionEffect(HARM, 1, -1)
)));
assertEquals(HARMFUL, classify(ImmutableList.of(
new PotionEffect(HEAL, 1, -1)
)));
}
@Test
public void vanillaBrews() throws Exception {
assertEquals(BENEFICIAL, classify(Bukkit.potionRegistry().get(Bukkit.key("healing"))));
assertEquals(BENEFICIAL, classify(new PotionData(PotionType.INSTANT_HEAL, false, false)));
assertEquals(HARMFUL, classify(Bukkit.potionRegistry().get(Bukkit.key("harming"))));
assertEquals(HARMFUL, classify(new PotionData(PotionType.INSTANT_DAMAGE, false, false)));
}
@Test
public void potionItem() throws Exception {
final ItemStack item = new ItemStack(Material.POTION);
final PotionMeta meta = (PotionMeta) item.getItemMeta();
meta.setPotionBrew(Bukkit.potionRegistry().get(Bukkit.key("healing")));
item.setItemMeta(meta);
}
@Test
public void riftCaseTest() {
List<PotionEffect> effects = ImmutableList.of(
new PotionEffect(FAST_DIGGING, 3600, 3),
new PotionEffect(REGENERATION, 3600, 2),
new PotionEffect(DAMAGE_RESISTANCE, 3600, 1),
new PotionEffect(FIRE_RESISTANCE, 3600, 1),
new PotionEffect(SPEED, 3600, 1),
new PotionEffect(INCREASE_DAMAGE, 3600, 1)
);
assertEquals("Rift Baron potion was not classified as <BENEFICIAL>",
PotionClassification.BENEFICIAL, classify(effects));
}
}