2012-12-09 22:13:38 +01:00
package org.bukkit ;
import static org.junit.Assert.* ;
import static org.hamcrest.Matchers.* ;
import java.util.List ;
2013-11-04 14:07:38 +01:00
import net.minecraft.server.BlockFalling ;
2012-12-14 09:02:02 +01:00
import net.minecraft.server.BlockFire ;
import net.minecraft.server.Item ;
import net.minecraft.server.ItemFood ;
import net.minecraft.server.ItemRecord ;
2017-03-23 23:18:32 +01:00
import net.minecraft.server.TileEntityFurnace ;
2012-12-09 22:13:38 +01:00
2012-12-17 08:31:41 +01:00
import org.bukkit.craftbukkit.inventory.CraftItemStack ;
import org.bukkit.inventory.ItemStack ;
2012-12-14 09:02:02 +01:00
import org.bukkit.support.AbstractTestingBase ;
import org.bukkit.support.Util ;
import org.junit.BeforeClass ;
2012-12-09 22:13:38 +01: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 ;
2012-12-14 09:02:02 +01:00
import com.google.common.collect.Lists ;
2014-11-25 22:32:16 +01:00
import java.util.Map ;
import net.minecraft.server.Block ;
2018-08-02 14:26:02 +02:00
import net.minecraft.server.BlockPosition ;
2013-11-04 14:07:38 +01:00
import net.minecraft.server.Blocks ;
2018-08-02 14:26:02 +02:00
import net.minecraft.server.EntityHuman ;
import net.minecraft.server.EnumDirection ;
import net.minecraft.server.EnumHand ;
import net.minecraft.server.IBlockData ;
2013-11-04 14:07:38 +01:00
import org.bukkit.craftbukkit.util.CraftMagicNumbers ;
2016-07-08 04:51:32 +02:00
import org.bukkit.enchantments.EnchantmentTarget ;
2012-12-14 09:02:02 +01:00
2012-12-09 22:13:38 +01:00
@RunWith ( Parameterized . class )
2012-12-14 09:02:02 +01:00
public class PerMaterialTest extends AbstractTestingBase {
2014-11-25 22:32:16 +01:00
private static Map < Block , Integer > fireValues ;
2012-12-14 09:02:02 +01:00
@BeforeClass
public static void getFireValues ( ) {
2015-05-05 22:43:47 +02:00
fireValues = Util . getInternalState ( BlockFire . class , Blocks . FIRE , " flameChances " ) ;
2012-12-09 22:13:38 +01:00
}
@Parameters ( name = " {index}: {0} " )
public static List < Object [ ] > data ( ) {
2012-12-14 09:02:02 +01:00
List < Object [ ] > list = Lists . newArrayList ( ) ;
2012-12-09 22:13:38 +01:00
for ( Material material : Material . values ( ) ) {
2018-07-15 02:00:00 +02:00
if ( ! material . isLegacy ( ) ) {
list . add ( new Object [ ] { material } ) ;
}
2012-12-09 22:13:38 +01:00
}
return list ;
}
@Parameter public Material material ;
2018-07-15 02:00:00 +02:00
@Test
public void isBlock ( ) {
if ( material ! = Material . AIR & & material ! = Material . CAVE_AIR & & material ! = Material . VOID_AIR ) {
2018-08-26 04:00:00 +02:00
assertThat ( material . isBlock ( ) , is ( not ( CraftMagicNumbers . getBlock ( material ) = = null ) ) ) ;
2018-07-15 02:00:00 +02:00
}
}
2012-12-09 22:13:38 +01:00
@Test
public void isSolid ( ) {
if ( material = = Material . AIR ) {
assertFalse ( material . isSolid ( ) ) ;
} else if ( material . isBlock ( ) ) {
2016-02-29 22:32:46 +01:00
assertThat ( material . isSolid ( ) , is ( CraftMagicNumbers . getBlock ( material ) . getBlockData ( ) . getMaterial ( ) . isSolid ( ) ) ) ;
2012-12-09 22:13:38 +01:00
} else {
assertFalse ( material . isSolid ( ) ) ;
}
}
2012-12-14 09:02:02 +01:00
@Test
public void isEdible ( ) {
2013-11-04 14:07:38 +01:00
assertThat ( material . isEdible ( ) , is ( CraftMagicNumbers . getItem ( material ) instanceof ItemFood ) ) ;
2012-12-14 09:02:02 +01:00
}
@Test
public void isRecord ( ) {
2013-11-04 14:07:38 +01:00
assertThat ( material . isRecord ( ) , is ( CraftMagicNumbers . getItem ( material ) instanceof ItemRecord ) ) ;
2012-12-14 09:02:02 +01:00
}
@Test
public void maxDurability ( ) {
2015-01-25 12:59:37 +01:00
if ( INVALIDATED_MATERIALS . contains ( material ) ) return ;
2012-12-14 09:02:02 +01:00
if ( material = = Material . AIR ) {
assertThat ( ( int ) material . getMaxDurability ( ) , is ( 0 ) ) ;
2013-11-04 14:07:38 +01:00
} else if ( material . isBlock ( ) ) {
Item item = CraftMagicNumbers . getItem ( material ) ;
assertThat ( ( int ) material . getMaxDurability ( ) , is ( item . getMaxDurability ( ) ) ) ;
2012-12-14 09:02:02 +01:00
}
}
@Test
public void maxStackSize ( ) {
2015-01-25 12:59:37 +01:00
if ( INVALIDATED_MATERIALS . contains ( material ) ) return ;
2012-12-17 08:31:41 +01:00
final ItemStack bukkit = new ItemStack ( material ) ;
final CraftItemStack craft = CraftItemStack . asCraftCopy ( bukkit ) ;
2012-12-14 09:02:02 +01:00
if ( material = = Material . AIR ) {
2012-12-17 08:31:41 +01:00
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 ) ) ;
2012-12-14 09:02:02 +01:00
} else {
2013-11-04 14:07:38 +01:00
assertThat ( material . getMaxStackSize ( ) , is ( CraftMagicNumbers . getItem ( material ) . getMaxStackSize ( ) ) ) ;
2012-12-17 08:31:41 +01:00
assertThat ( bukkit . getMaxStackSize ( ) , is ( material . getMaxStackSize ( ) ) ) ;
assertThat ( craft . getMaxStackSize ( ) , is ( material . getMaxStackSize ( ) ) ) ;
2012-12-14 09:02:02 +01:00
}
}
@Test
public void isTransparent ( ) {
if ( material = = Material . AIR ) {
assertTrue ( material . isTransparent ( ) ) ;
} else if ( material . isBlock ( ) ) {
2018-07-15 02:00:00 +02:00
// assertThat(material.isTransparent(), is(not(CraftMagicNumbers.getBlock(material).getBlockData().getMaterial().blocksLight()))); // PAIL: not unit testable anymore (17w50a)
2012-12-14 09:02:02 +01:00
} else {
assertFalse ( material . isTransparent ( ) ) ;
}
}
@Test
public void isFlammable ( ) {
if ( material ! = Material . AIR & & material . isBlock ( ) ) {
2016-02-29 22:32:46 +01:00
assertThat ( material . isFlammable ( ) , is ( CraftMagicNumbers . getBlock ( material ) . getBlockData ( ) . getMaterial ( ) . isBurnable ( ) ) ) ;
2012-12-14 09:02:02 +01:00
} else {
assertFalse ( material . isFlammable ( ) ) ;
}
}
@Test
public void isBurnable ( ) {
if ( material . isBlock ( ) ) {
2014-11-25 22:32:16 +01:00
Block block = CraftMagicNumbers . getBlock ( material ) ;
assertThat ( material . isBurnable ( ) , is ( fireValues . containsKey ( block ) & & fireValues . get ( block ) > 0 ) ) ;
2012-12-14 09:02:02 +01:00
} else {
assertFalse ( material . isBurnable ( ) ) ;
}
}
2017-03-23 23:18:32 +01:00
@Test
public void isFuel ( ) {
assertThat ( material . isFuel ( ) , is ( TileEntityFurnace . isFuel ( new net . minecraft . server . ItemStack ( CraftMagicNumbers . getItem ( material ) ) ) ) ) ;
}
2012-12-14 09:02:02 +01:00
@Test
public void isOccluding ( ) {
if ( material . isBlock ( ) ) {
2016-02-29 22:32:46 +01:00
assertThat ( material . isOccluding ( ) , is ( CraftMagicNumbers . getBlock ( material ) . isOccluding ( CraftMagicNumbers . getBlock ( material ) . getBlockData ( ) ) ) ) ;
2012-12-14 09:02:02 +01:00
} else {
assertFalse ( material . isOccluding ( ) ) ;
}
}
2013-02-15 02:38:34 +01:00
@Test
public void hasGravity ( ) {
if ( material . isBlock ( ) ) {
2013-11-04 14:07:38 +01:00
assertThat ( material . hasGravity ( ) , is ( CraftMagicNumbers . getBlock ( material ) instanceof BlockFalling ) ) ;
2013-02-15 02:38:34 +01:00
} else {
assertFalse ( material . hasGravity ( ) ) ;
}
}
2016-07-08 04:51:32 +02:00
@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-15 23:57:47 +01:00
2018-07-15 02:00:00 +02: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-15 23:57:47 +01:00
@Test
public void testBlock ( ) {
if ( material = = Material . AIR ) {
assertTrue ( material . isBlock ( ) ) ;
} else {
2018-08-26 04:00:00 +02:00
assertThat ( material . isBlock ( ) , is ( equalTo ( CraftMagicNumbers . getBlock ( material ) ! = null ) ) ) ;
2018-01-15 23:57:47 +01:00
}
}
@Test
2018-02-16 00:33:36 +01:00
public void testItem ( ) {
2018-01-15 23:57:47 +01:00
if ( material = = Material . AIR ) {
assertTrue ( material . isItem ( ) ) ;
} else {
assertThat ( material . isItem ( ) , is ( equalTo ( CraftMagicNumbers . getItem ( material ) ! = null ) ) ) ;
}
}
2018-08-02 14:26:02 +02:00
@Test
public void testInteractable ( ) throws ReflectiveOperationException {
if ( material . isBlock ( ) ) {
assertThat ( material . isInteractable ( ) ,
is ( ! CraftMagicNumbers . getBlock ( material ) . getClass ( )
. getMethod ( " interact " , IBlockData . class , net . minecraft . server . World . class , BlockPosition . class , EntityHuman . class , EnumHand . class , EnumDirection . class , float . class , float . class , float . class )
. getDeclaringClass ( ) . equals ( Block . class ) ) ) ;
} else {
assertFalse ( material . isInteractable ( ) ) ;
}
}
2018-08-08 03:06:36 +02:00
@Test
public void testBlockHardness ( ) {
if ( material . isBlock ( ) ) {
assertThat ( material . getHardness ( ) , is ( CraftMagicNumbers . getBlock ( material ) . strength ) ) ;
}
}
@Test
public void testBlastResistance ( ) {
if ( material . isBlock ( ) ) {
2018-08-26 04:00:00 +02:00
assertThat ( material . getBlastResistance ( ) , is ( CraftMagicNumbers . getBlock ( material ) . getDurability ( ) ) ) ;
2018-08-08 03:06:36 +02:00
}
}
2012-12-09 22:13:38 +01:00
}