craftbukkit/src/test/java/org/bukkit/PerMaterialTest.java

277 lines
9.6 KiB
Java
Raw Normal View History

2012-12-09 15:13:38 -06:00
package org.bukkit;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;
import com.google.common.collect.Lists;
2012-12-09 15:13:38 -06:00
import java.util.List;
import java.util.Map;
2021-03-16 09:00:00 +11:00
import net.minecraft.core.BlockPosition;
import net.minecraft.world.EnumHand;
import net.minecraft.world.entity.EntityInsentient;
2021-03-16 09:00:00 +11:00
import net.minecraft.world.entity.player.EntityHuman;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemRecord;
import net.minecraft.world.level.BlockAccessAir;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.BlockFalling;
import net.minecraft.world.level.block.BlockFire;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.entity.TileEntityFurnace;
import net.minecraft.world.level.block.state.BlockBase;
import net.minecraft.world.level.block.state.IBlockData;
import net.minecraft.world.phys.MovingObjectPositionBlock;
import org.bukkit.craftbukkit.CraftEquipmentSlot;
import org.bukkit.craftbukkit.inventory.CraftItemStack;
import org.bukkit.craftbukkit.util.CraftMagicNumbers;
import org.bukkit.enchantments.EnchantmentTarget;
import org.bukkit.inventory.EquipmentSlot;
import org.bukkit.inventory.ItemStack;
import org.bukkit.support.AbstractTestingBase;
import org.junit.BeforeClass;
2012-12-09 15:13:38 -06:00
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameter;
import org.junit.runners.Parameterized.Parameters;
@RunWith(Parameterized.class)
public class PerMaterialTest extends AbstractTestingBase {
private static Map<Block, Integer> fireValues;
@BeforeClass
public static void getFireValues() {
2021-06-11 15:00:00 +10:00
fireValues = ((BlockFire) Blocks.FIRE).flameOdds;
2012-12-09 15:13:38 -06:00
}
2020-04-14 12:34:43 +10:00
@Parameters(name = "{index}: {0}")
2012-12-09 15:13:38 -06:00
public static List<Object[]> data() {
List<Object[]> list = Lists.newArrayList();
2012-12-09 15:13:38 -06:00
for (Material material : Material.values()) {
2018-07-15 10:00:00 +10:00
if (!material.isLegacy()) {
list.add(new Object[] {material});
}
2012-12-09 15:13:38 -06:00
}
return list;
}
@Parameter public Material material;
2018-07-15 10:00:00 +10:00
@Test
public void isBlock() {
if (material != Material.AIR && material != Material.CAVE_AIR && material != Material.VOID_AIR) {
2018-08-26 12:00:00 +10:00
assertThat(material.isBlock(), is(not(CraftMagicNumbers.getBlock(material) == null)));
2018-07-15 10:00:00 +10:00
}
}
2012-12-09 15:13:38 -06:00
@Test
public void isSolid() {
if (material == Material.AIR) {
assertFalse(material.isSolid());
} else if (material.isBlock()) {
2016-03-01 08:32:46 +11:00
assertThat(material.isSolid(), is(CraftMagicNumbers.getBlock(material).getBlockData().getMaterial().isSolid()));
2012-12-09 15:13:38 -06:00
} else {
assertFalse(material.isSolid());
}
}
@Test
public void isEdible() {
2019-04-23 12:00:00 +10:00
if (material.isBlock()) {
assertFalse(material.isEdible());
} else {
assertThat(material.isEdible(), is(CraftMagicNumbers.getItem(material).isFood()));
}
}
@Test
public void isRecord() {
2013-11-04 07:07:38 -06:00
assertThat(material.isRecord(), is(CraftMagicNumbers.getItem(material) instanceof ItemRecord));
}
@Test
public void maxDurability() {
if (INVALIDATED_MATERIALS.contains(material)) return;
if (material == Material.AIR) {
assertThat((int) material.getMaxDurability(), is(0));
2020-04-14 12:34:43 +10:00
} else if (material.isBlock()) {
2013-11-04 07:07:38 -06:00
Item item = CraftMagicNumbers.getItem(material);
assertThat((int) material.getMaxDurability(), is(item.getMaxDurability()));
}
}
@Test
public void maxStackSize() {
if (INVALIDATED_MATERIALS.contains(material)) return;
final ItemStack bukkit = new ItemStack(material);
final CraftItemStack craft = CraftItemStack.asCraftCopy(bukkit);
if (material == Material.AIR) {
final int MAX_AIR_STACK = 0 /* Why can't I hold all of these AIR? */;
assertThat(material.getMaxStackSize(), is(MAX_AIR_STACK));
assertThat(bukkit.getMaxStackSize(), is(MAX_AIR_STACK));
assertThat(craft.getMaxStackSize(), is(MAX_AIR_STACK));
} else {
2013-11-04 07:07:38 -06:00
assertThat(material.getMaxStackSize(), is(CraftMagicNumbers.getItem(material).getMaxStackSize()));
assertThat(bukkit.getMaxStackSize(), is(material.getMaxStackSize()));
assertThat(craft.getMaxStackSize(), is(material.getMaxStackSize()));
}
}
@Test
public void isTransparent() {
if (material == Material.AIR) {
assertTrue(material.isTransparent());
} else if (material.isBlock()) {
2018-07-15 10:00:00 +10:00
// assertThat(material.isTransparent(), is(not(CraftMagicNumbers.getBlock(material).getBlockData().getMaterial().blocksLight()))); // PAIL: not unit testable anymore (17w50a)
} else {
assertFalse(material.isTransparent());
}
}
@Test
public void isFlammable() {
if (material != Material.AIR && material.isBlock()) {
2016-03-01 08:32:46 +11:00
assertThat(material.isFlammable(), is(CraftMagicNumbers.getBlock(material).getBlockData().getMaterial().isBurnable()));
} else {
assertFalse(material.isFlammable());
}
}
@Test
public void isBurnable() {
if (material.isBlock()) {
Block block = CraftMagicNumbers.getBlock(material);
assertThat(material.isBurnable(), is(fireValues.containsKey(block) && fireValues.get(block) > 0));
} else {
assertFalse(material.isBurnable());
}
}
@Test
public void isFuel() {
2021-03-16 09:00:00 +11:00
assertThat(material.isFuel(), is(TileEntityFurnace.isFuel(new net.minecraft.world.item.ItemStack(CraftMagicNumbers.getItem(material)))));
}
@Test
public void isOccluding() {
if (material.isBlock()) {
2020-06-25 10:00:00 +10:00
assertThat(material.isOccluding(), is(CraftMagicNumbers.getBlock(material).getBlockData().isOccluding(BlockAccessAir.INSTANCE, BlockPosition.ZERO)));
} else {
assertFalse(material.isOccluding());
}
}
@Test
public void hasGravity() {
if (material.isBlock()) {
2013-11-04 07:07:38 -06:00
assertThat(material.hasGravity(), is(CraftMagicNumbers.getBlock(material) instanceof BlockFalling));
} else {
assertFalse(material.hasGravity());
}
}
@Test
public void usesDurability() {
if (!material.isBlock()) {
assertThat(EnchantmentTarget.BREAKABLE.includes(material), is(CraftMagicNumbers.getItem(material).usesDurability()));
} else {
assertFalse(EnchantmentTarget.BREAKABLE.includes(material));
}
}
2018-01-16 09:57:47 +11:00
2018-07-15 10:00:00 +10:00
@Test
public void testDurability() {
if (!material.isBlock()) {
assertThat(material.getMaxDurability(), is((short) CraftMagicNumbers.getItem(material).getMaxDurability()));
} else {
assertThat(material.getMaxDurability(), is((short) 0));
}
}
2018-01-16 09:57:47 +11:00
@Test
public void testBlock() {
if (material == Material.AIR) {
assertTrue(material.isBlock());
} else {
2018-08-26 12:00:00 +10:00
assertThat(material.isBlock(), is(equalTo(CraftMagicNumbers.getBlock(material) != null)));
2018-01-16 09:57:47 +11:00
}
}
2019-10-06 18:41:56 +11:00
@Test
public void testAir() {
if (material.isBlock()) {
assertThat(material.isAir(), is(equalTo(CraftMagicNumbers.getBlock(material).getBlockData().isAir())));
} else {
assertThat(material.isAir(), is(equalTo(false)));
}
}
2018-01-16 09:57:47 +11:00
@Test
2018-02-16 10:33:36 +11:00
public void testItem() {
2018-01-16 09:57:47 +11:00
if (material == Material.AIR) {
assertTrue(material.isItem());
} else {
assertThat(material.isItem(), is(equalTo(CraftMagicNumbers.getItem(material) != null)));
}
}
@Test
public void testInteractable() throws ReflectiveOperationException {
if (material.isBlock()) {
assertThat(material.isInteractable(),
is(!CraftMagicNumbers.getBlock(material).getClass()
2021-03-16 09:00:00 +11:00
.getMethod("interact", IBlockData.class, net.minecraft.world.level.World.class, BlockPosition.class, EntityHuman.class, EnumHand.class, MovingObjectPositionBlock.class)
2020-06-25 10:00:00 +10:00
.getDeclaringClass().equals(BlockBase.class)));
} else {
assertFalse(material.isInteractable());
}
}
@Test
public void testBlockHardness() {
if (material.isBlock()) {
2021-06-11 15:00:00 +10:00
assertThat(material.getHardness(), is(CraftMagicNumbers.getBlock(material).getBlockData().destroySpeed));
}
}
@Test
public void testBlastResistance() {
if (material.isBlock()) {
2018-08-26 12:00:00 +10:00
assertThat(material.getBlastResistance(), is(CraftMagicNumbers.getBlock(material).getDurability()));
}
}
@Test
public void testSlipperiness() {
if (material.isBlock()) {
assertThat(material.getSlipperiness(), is(CraftMagicNumbers.getBlock(material).getFrictionFactor()));
}
}
@Test
public void testBlockDataCreation() {
if (material.isBlock()) {
assertNotNull(material.createBlockData());
}
}
@Test
public void testCraftingRemainingItem() {
if (material.isItem()) {
2020-06-25 10:00:00 +10:00
Item expectedItem = CraftMagicNumbers.getItem(material).getCraftingRemainingItem();
Material expected = expectedItem == null ? null : CraftMagicNumbers.getMaterial(expectedItem);
assertThat(material.getCraftingRemainingItem(), is(expected));
}
}
@Test
public void testEquipmentSlot() {
if (material.isItem()) {
2021-06-11 15:00:00 +10:00
EquipmentSlot expected = CraftEquipmentSlot.getSlot(EntityInsentient.getEquipmentSlotForItem(CraftItemStack.asNMSCopy(new ItemStack(material))));
assertThat(material.getEquipmentSlot(), is(expected));
}
}
2012-12-09 15:13:38 -06:00
}