Minestom/src/test/java/net/minestom/server/tag/TagItemTest.java

114 lines
3.4 KiB
Java

package net.minestom.server.tag;
import net.minestom.server.item.ItemStack;
import net.minestom.server.item.Material;
import org.junit.jupiter.api.Test;
import java.lang.ref.WeakReference;
import static net.minestom.testing.TestUtils.assertEqualsSNBT;
import static net.minestom.testing.TestUtils.waitUntilCleared;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;
public class TagItemTest {
@Test
public void get() {
var item = ItemStack.of(Material.DIAMOND);
var tag = Tag.ItemStack("item");
var handler = TagHandler.newHandler();
handler.setTag(tag, item);
assertEquals(item, handler.getTag(tag));
}
@Test
public void getDifferentObject() {
var item = ItemStack.of(Material.DIAMOND);
var handler = TagHandler.newHandler();
handler.setTag(Tag.ItemStack("item"), item);
assertEquals(item, handler.getTag(Tag.ItemStack("item")));
}
@Test
public void remove() {
var item = ItemStack.of(Material.DIAMOND);
var tag = Tag.ItemStack("item");
var handler = TagHandler.newHandler();
handler.setTag(tag, item);
assertEquals(item, handler.getTag(tag));
handler.setTag(tag, null);
assertNull(handler.getTag(tag));
}
@Test
public void gc() {
var item = ItemStack.of(Material.DIAMOND);
var tag = Tag.ItemStack("item");
var handler = TagHandler.newHandler();
handler.setTag(tag, item);
assertEquals(item, handler.getTag(tag));
handler.setTag(tag, null);
var ref = new WeakReference<>(item);
//noinspection UnusedAssignment
item = null;
waitUntilCleared(ref);
}
@Test
public void invalidation() {
var item = ItemStack.of(Material.DIAMOND);
var item2 = ItemStack.of(Material.DIAMOND, 2);
var handler = TagHandler.newHandler();
var tag = Tag.ItemStack("item");
handler.setTag(tag, item);
assertEquals(item, handler.getTag(tag));
handler.setTag(tag, item2);
assertEquals(item2, handler.getTag(tag));
}
@Test
public void differentTagInvalidation() {
var item = ItemStack.of(Material.DIAMOND);
var item2 = ItemStack.of(Material.DIAMOND, 2);
var handler = TagHandler.newHandler();
var itemTag = Tag.ItemStack("item");
var nbtTag = Tag.NBT("item");
// Write the item using the ItemStack tag
{
handler.setTag(itemTag, item);
assertEquals(item, handler.getTag(itemTag));
assertEquals(item.toItemNBT(), handler.getTag(nbtTag));
}
// Override it with an NBT tag
{
handler.setTag(nbtTag, item2.toItemNBT());
assertEquals(item2, handler.getTag(itemTag));
assertEquals(item2.toItemNBT(), handler.getTag(nbtTag));
}
}
@Test
public void snbt() {
var handler = TagHandler.newHandler();
var tag = Tag.ItemStack("item");
handler.setTag(tag, ItemStack.of(Material.DIAMOND));
assertEqualsSNBT("""
{
"item": {
"id":"minecraft:diamond",
"Count":1B
}
}
""", handler.asCompound());
handler.removeTag(tag);
assertEqualsSNBT("{}", handler.asCompound());
}
}