package openmods.inventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import openmods.inventory.StackEqualityTesterBuilder.IEqualityTester; import org.junit.Assert; import org.junit.Test; public class EqualTest { private static void assertSymmetricEquals(IEqualityTester tester, ItemStack left, ItemStack right) { Assert.assertTrue(tester.isEqual(left, right)); Assert.assertTrue(tester.isEqual(right, left)); } private static void assertSymmetricNotEquals(IEqualityTester tester, ItemStack left, ItemStack right) { Assert.assertFalse(tester.isEqual(left, right)); Assert.assertFalse(tester.isEqual(right, left)); } @Test public void testEmptyIdentity() { ItemStack stack = new ItemStack(Utils.ITEM_A); StackEqualityTesterBuilder builder = new StackEqualityTesterBuilder(); IEqualityTester tester = builder.build(); Assert.assertTrue(tester.isEqual(null, null)); Assert.assertFalse(tester.isEqual(stack, null)); Assert.assertFalse(tester.isEqual(null, stack)); Assert.assertTrue(tester.isEqual(stack, stack)); } @Test public void testEmpty() { StackEqualityTesterBuilder builder = new StackEqualityTesterBuilder(); IEqualityTester tester = builder.build(); ItemStack stackA = new ItemStack(Utils.ITEM_A); ItemStack stackB = new ItemStack(Utils.ITEM_A); Assert.assertTrue(tester.isEqual(stackA, stackB)); } @Test public void testCompositeIdentity() { ItemStack stack = new ItemStack(Utils.ITEM_A); StackEqualityTesterBuilder builder = new StackEqualityTesterBuilder(); builder.useItem(); IEqualityTester tester = builder.build(); Assert.assertTrue(tester.isEqual(null, null)); Assert.assertFalse(tester.isEqual(stack, null)); Assert.assertFalse(tester.isEqual(null, stack)); Assert.assertTrue(tester.isEqual(stack, stack)); } @Test public void testItemComparator() { ItemStack stackA1 = new ItemStack(Utils.ITEM_A, 1); ItemStack stackA2 = new ItemStack(Utils.ITEM_A, 2); ItemStack stackB = new ItemStack(Utils.ITEM_B, 2); StackEqualityTesterBuilder builder = new StackEqualityTesterBuilder(); builder.useItem(); IEqualityTester tester = builder.build(); assertSymmetricEquals(tester, stackA1, stackA2); assertSymmetricNotEquals(tester, stackA1, stackB); assertSymmetricNotEquals(tester, stackA2, stackB); } @Test public void testNBTComparator() { ItemStack stackAa1 = new ItemStack(Utils.ITEM_A, 1); stackAa1.stackTagCompound = new NBTTagCompound(); stackAa1.stackTagCompound.setBoolean("test", true); ItemStack stackAa2 = new ItemStack(Utils.ITEM_A, 2); stackAa2.stackTagCompound = new NBTTagCompound(); stackAa2.stackTagCompound.setBoolean("test", true); ItemStack stackAb = new ItemStack(Utils.ITEM_A); stackAb.stackTagCompound = new NBTTagCompound(); stackAb.stackTagCompound.setBoolean("test", false); ItemStack stackAn = new ItemStack(Utils.ITEM_A); ItemStack stackBn = new ItemStack(Utils.ITEM_B); StackEqualityTesterBuilder builder = new StackEqualityTesterBuilder(); builder.useNBT(); IEqualityTester tester = builder.build(); assertSymmetricEquals(tester, stackAa1, stackAa2); assertSymmetricEquals(tester, stackAn, stackBn); assertSymmetricNotEquals(tester, stackAa1, stackAb); assertSymmetricNotEquals(tester, stackAa1, stackAn); assertSymmetricNotEquals(tester, stackAa1, stackBn); } @Test public void testCompositeComparator() { ItemStack stackA = new ItemStack(Utils.ITEM_A, 1, 10); ItemStack stackA1 = new ItemStack(Utils.ITEM_A, 1, 2); ItemStack stackA2 = new ItemStack(Utils.ITEM_A, 2, 1); ItemStack stackB = new ItemStack(Utils.ITEM_B, 1, 10); ItemStack stackB1 = new ItemStack(Utils.ITEM_B, 1, 2); ItemStack stackB2 = new ItemStack(Utils.ITEM_B, 2, 1); StackEqualityTesterBuilder builder = new StackEqualityTesterBuilder(); builder.useItem(); builder.useSize(); IEqualityTester tester = builder.build(); assertSymmetricEquals(tester, stackA, stackA1); assertSymmetricEquals(tester, stackB, stackB1); assertSymmetricNotEquals(tester, stackA1, stackA2); assertSymmetricNotEquals(tester, stackA1, stackB1); assertSymmetricNotEquals(tester, stackA2, stackB1); assertSymmetricNotEquals(tester, stackA2, stackB2); } }