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

114 lines
3.4 KiB
Java
Raw Normal View History

2022-03-20 01:47:57 +01:00
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;
2022-03-20 01:47:57 +01:00
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));
2022-03-20 01:47:57 +01:00
}
@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));
2022-03-20 01:47:57 +01:00
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));
2022-03-20 01:47:57 +01:00
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));
2022-03-20 01:47:57 +01:00
handler.setTag(tag, item2);
assertEquals(item2, handler.getTag(tag));
2022-03-20 01:47:57 +01:00
}
@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));
2022-03-20 01:47:57 +01:00
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));
}
}
2022-04-07 15:26:45 +02:00
@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",
2022-04-10 10:01:39 +02:00
"Count":1B
2022-04-07 15:26:45 +02:00
}
}
""", handler.asCompound());
handler.removeTag(tag);
assertEqualsSNBT("{}", handler.asCompound());
}
2022-03-20 01:47:57 +01:00
}