mirror of https://github.com/Minestom/Minestom.git
114 lines
3.4 KiB
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());
|
|
}
|
|
}
|