Paper/patches/server/0958-Add-MaterialTagsTest.p...

59 lines
2.5 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Shane Freeder <theboyetronic@gmail.com>
Date: Sat, 4 Nov 2023 18:39:18 -0400
Subject: [PATCH] Add MaterialTagsTest
diff --git a/src/test/java/io/papermc/paper/inventory/item/MaterialTagsTest.java b/src/test/java/io/papermc/paper/inventory/item/MaterialTagsTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..3f2734eae2053b4b8fccd7149178699e36ce8b78
--- /dev/null
+++ b/src/test/java/io/papermc/paper/inventory/item/MaterialTagsTest.java
@@ -0,0 +1,46 @@
+package io.papermc.paper.inventory.item;
+
+import com.destroystokyo.paper.MaterialTags;
+import it.unimi.dsi.fastutil.objects.ObjectArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+import net.minecraft.core.registries.BuiltInRegistries;
+import net.minecraft.world.item.Item;
+import net.minecraft.world.item.enchantment.EnchantmentCategory;
+import org.bukkit.craftbukkit.util.CraftMagicNumbers;
+import org.bukkit.support.AbstractTestingBase;
+import org.jetbrains.annotations.NotNull;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
+
+public class MaterialTagsTest extends AbstractTestingBase {
+
+ private final static EnchantmentCategory[] ENCHANTMENT_CATEGORIES = EnchantmentCategory.values();
+
+ @ParameterizedTest
+ @MethodSource("items")
+ public void testEnchantables(@NotNull final Item item) {
+ final List<EnchantmentCategory> enchantableCategories = new ObjectArrayList<>();
+ for (final EnchantmentCategory enchantmentCategory : ENCHANTMENT_CATEGORIES) {
+ if (enchantmentCategory.canEnchant(item)) enchantableCategories.add(enchantmentCategory);
+ }
+
+ final boolean taggedAsEnchantable = MaterialTags.ENCHANTABLE.isTagged(CraftMagicNumbers.getMaterial(item));
+ final boolean requiresTagByInternals = !enchantableCategories.isEmpty();
+ Assertions.assertEquals(
+ requiresTagByInternals,
+ taggedAsEnchantable,
+ () -> "%s matches enchantment categories [%s] but was tagged by material tags as enchantable: %s".formatted(
+ item.getDescriptionId(),
+ enchantableCategories.stream().map(Enum::name).collect(Collectors.joining(", ")),
+ taggedAsEnchantable
+ )
+ );
+ }
+
+ private static Stream<Item> items() {
+ return BuiltInRegistries.ITEM.stream();
+ }
+}