Adds tests for TypeValidationHelper
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				EpicKnarvik97/Blacksmith/pipeline/head This commit looks good
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	EpicKnarvik97/Blacksmith/pipeline/head This commit looks good
				
			This commit is contained in:
		| @@ -77,7 +77,7 @@ public class BlacksmithPlugin extends JavaPlugin { | |||||||
|     public void reload() { |     public void reload() { | ||||||
|         this.reloadConfig(); |         this.reloadConfig(); | ||||||
|         config.load(); |         config.load(); | ||||||
|         translator.loadLanguages(this.getDataFolder(), this.getConfig().getString("language", "en")); |         translator.loadLanguages(this.getDataFolder(), this.getConfig().getString("language", "en"), "en"); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
| @@ -122,7 +122,7 @@ public class BlacksmithPlugin extends JavaPlugin { | |||||||
|         translator = new Translator(); |         translator = new Translator(); | ||||||
|         translator.registerMessageCategory(TranslatableTimeUnit.UNIT_SECOND); |         translator.registerMessageCategory(TranslatableTimeUnit.UNIT_SECOND); | ||||||
|         translator.registerMessageCategory(BlacksmithTranslatableMessage.ITEM_TYPE_ENCHANTMENT); |         translator.registerMessageCategory(BlacksmithTranslatableMessage.ITEM_TYPE_ENCHANTMENT); | ||||||
|         translator.loadLanguages(this.getDataFolder(), fileConfiguration.getString("language", "en")); |         translator.loadLanguages(this.getDataFolder(), fileConfiguration.getString("language", "en"), "en"); | ||||||
|         BlacksmithPlugin.stringFormatter = new StringFormatter(this.getDescription().getPrefix(), translator); |         BlacksmithPlugin.stringFormatter = new StringFormatter(this.getDescription().getPrefix(), translator); | ||||||
|  |  | ||||||
|         //Set up Vault integration |         //Set up Vault integration | ||||||
|   | |||||||
| @@ -210,4 +210,5 @@ public enum BlacksmithTranslatableMessage implements TranslatableMessage { | |||||||
|     public TranslatableMessage[] getAllMessages() { |     public TranslatableMessage[] getAllMessages() { | ||||||
|         return BlacksmithTranslatableMessage.values(); |         return BlacksmithTranslatableMessage.values(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -3,7 +3,9 @@ package net.knarcraft.blacksmith.util; | |||||||
| import net.knarcraft.blacksmith.BlacksmithPlugin; | import net.knarcraft.blacksmith.BlacksmithPlugin; | ||||||
| import net.knarcraft.blacksmith.config.SettingValueType; | import net.knarcraft.blacksmith.config.SettingValueType; | ||||||
| import net.knarcraft.blacksmith.formatting.BlacksmithTranslatableMessage; | import net.knarcraft.blacksmith.formatting.BlacksmithTranslatableMessage; | ||||||
|  | import org.bukkit.Material; | ||||||
| import org.bukkit.command.CommandSender; | import org.bukkit.command.CommandSender; | ||||||
|  | import org.bukkit.enchantments.Enchantment; | ||||||
|  |  | ||||||
| import java.util.List; | import java.util.List; | ||||||
|  |  | ||||||
| @@ -33,7 +35,8 @@ public final class TypeValidationHelper { | |||||||
|                 case PERCENTAGE -> isPercentage(value, sender); |                 case PERCENTAGE -> isPercentage(value, sender); | ||||||
|                 case BOOLEAN -> true; |                 case BOOLEAN -> true; | ||||||
|                 case STRING_LIST, REFORGE_ABLE_ITEMS -> isStringList(value, sender); |                 case STRING_LIST, REFORGE_ABLE_ITEMS -> isStringList(value, sender); | ||||||
|                 case MATERIAL, ENCHANTMENT -> false; |                 case MATERIAL -> isMaterial(value, sender); | ||||||
|  |                 case ENCHANTMENT -> isEnchantment(value, sender); | ||||||
|             }; |             }; | ||||||
|         } catch (ClassCastException exception) { |         } catch (ClassCastException exception) { | ||||||
|             //This error signifies that an object is not a string, and of the wrong class |             //This error signifies that an object is not a string, and of the wrong class | ||||||
| @@ -41,6 +44,40 @@ public final class TypeValidationHelper { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Checks whether the given value is a material | ||||||
|  |      * | ||||||
|  |      * @param value  <p>The value to check</p> | ||||||
|  |      * @param sender <p>The command sender to use for printing error messages</p> | ||||||
|  |      * @return <p>True if the value is a material</p> | ||||||
|  |      */ | ||||||
|  |     private static boolean isMaterial(Object value, CommandSender sender) { | ||||||
|  |         boolean isMaterial = value instanceof Material || (value instanceof String string && | ||||||
|  |                 InputParsingHelper.matchMaterial(string) != null); | ||||||
|  |         if (!isMaterial && sender != null) { | ||||||
|  |             BlacksmithPlugin.getStringFormatter().displayErrorMessage(sender, | ||||||
|  |                     BlacksmithTranslatableMessage.ITEM_TYPE_MATERIAL); | ||||||
|  |         } | ||||||
|  |         return isMaterial; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Checks whether the given value is an enchantment | ||||||
|  |      * | ||||||
|  |      * @param value  <p>The value to check</p> | ||||||
|  |      * @param sender <p>The command sender to use for printing error messages</p> | ||||||
|  |      * @return <p>True if the value is an enchantment</p> | ||||||
|  |      */ | ||||||
|  |     private static boolean isEnchantment(Object value, CommandSender sender) { | ||||||
|  |         boolean isEnchantment = value instanceof Enchantment || (value instanceof String string && | ||||||
|  |                 InputParsingHelper.matchEnchantment(string) != null); | ||||||
|  |         if (!isEnchantment && sender != null) { | ||||||
|  |             BlacksmithPlugin.getStringFormatter().displayErrorMessage(sender, | ||||||
|  |                     BlacksmithTranslatableMessage.ITEM_TYPE_ENCHANTMENT); | ||||||
|  |         } | ||||||
|  |         return isEnchantment; | ||||||
|  |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Checks whether the given value is a string list |      * Checks whether the given value is a string list | ||||||
|      * |      * | ||||||
| @@ -65,16 +102,13 @@ public final class TypeValidationHelper { | |||||||
|      * @return <p>True if the value is a percentage</p> |      * @return <p>True if the value is a percentage</p> | ||||||
|      */ |      */ | ||||||
|     private static boolean isPercentage(Object value, CommandSender sender) { |     private static boolean isPercentage(Object value, CommandSender sender) { | ||||||
|         try { |         boolean isPercentage = isPositiveInteger(value, null) && ConfigHelper.asInt(value) >= 0 && | ||||||
|             int intValue = ConfigHelper.asInt(value); |                 ConfigHelper.asInt(value) <= 100; | ||||||
|             return intValue >= 0 && intValue <= 100; |         if (!isPercentage && sender != null) { | ||||||
|         } catch (NumberFormatException | NullPointerException exception) { |  | ||||||
|             if (sender != null) { |  | ||||||
|             BlacksmithPlugin.getStringFormatter().displayErrorMessage(sender, |             BlacksmithPlugin.getStringFormatter().displayErrorMessage(sender, | ||||||
|                     BlacksmithTranslatableMessage.INPUT_PERCENTAGE_REQUIRED); |                     BlacksmithTranslatableMessage.INPUT_PERCENTAGE_REQUIRED); | ||||||
|         } |         } | ||||||
|             return false; |         return isPercentage; | ||||||
|         } |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|   | |||||||
| @@ -0,0 +1,170 @@ | |||||||
|  | package net.knarcraft.blacksmith.util; | ||||||
|  |  | ||||||
|  | import be.seeseemelk.mockbukkit.enchantments.EnchantmentMock; | ||||||
|  | import net.knarcraft.blacksmith.config.SettingValueType; | ||||||
|  | import org.bukkit.Material; | ||||||
|  | import org.bukkit.NamespacedKey; | ||||||
|  | import org.bukkit.enchantments.Enchantment; | ||||||
|  | import org.junit.jupiter.api.BeforeAll; | ||||||
|  | import org.junit.jupiter.api.Test; | ||||||
|  |  | ||||||
|  | import java.util.ArrayList; | ||||||
|  | import java.util.List; | ||||||
|  |  | ||||||
|  | import static org.junit.jupiter.api.Assertions.assertFalse; | ||||||
|  | import static org.junit.jupiter.api.Assertions.assertTrue; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Tests for the type validator helper | ||||||
|  |  */ | ||||||
|  | public class TypeValidatorHelperTest { | ||||||
|  |  | ||||||
|  |     private static Enchantment curseOfBinding; | ||||||
|  |  | ||||||
|  |     @BeforeAll | ||||||
|  |     public static void setUp() { | ||||||
|  |         //Note: When not testing against a real server, no default enchantments are loaded! | ||||||
|  |         curseOfBinding = new EnchantmentMock(NamespacedKey.minecraft("binding_curse"), | ||||||
|  |                 "CURSE_OF_BINDING"); | ||||||
|  |         Enchantment.registerEnchantment(curseOfBinding); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Test | ||||||
|  |     public void isValidPositiveDoubleValidTest() { | ||||||
|  |         SettingValueType type = SettingValueType.POSITIVE_DOUBLE; | ||||||
|  |         assertTrue(TypeValidationHelper.isValid(type, 6578d, null)); | ||||||
|  |         assertTrue(TypeValidationHelper.isValid(type, 5346.4534, null)); | ||||||
|  |         assertTrue(TypeValidationHelper.isValid(type, "237.4378", null)); | ||||||
|  |         assertTrue(TypeValidationHelper.isValid(type, 74567, null)); | ||||||
|  |         assertTrue(TypeValidationHelper.isValid(type, "843552", null)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Test | ||||||
|  |     public void isValidPositiveDoubleInvalidTest() { | ||||||
|  |         SettingValueType type = SettingValueType.POSITIVE_DOUBLE; | ||||||
|  |         assertFalse(TypeValidationHelper.isValid(type, "potato", null)); | ||||||
|  |         assertFalse(TypeValidationHelper.isValid(type, 354f, null)); | ||||||
|  |         assertFalse(TypeValidationHelper.isValid(type, SettingValueType.STRING, null)); | ||||||
|  |         assertFalse(TypeValidationHelper.isValid(type, -1, null)); | ||||||
|  |         assertFalse(TypeValidationHelper.isValid(type, -0.45654, null)); | ||||||
|  |         assertFalse(TypeValidationHelper.isValid(type, null, null)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Test | ||||||
|  |     public void isValidStringValidTest() { | ||||||
|  |         assertTrue(TypeValidationHelper.isValid(SettingValueType.STRING, "potato", null)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Test | ||||||
|  |     public void isValidStringInvalidTest() { | ||||||
|  |         SettingValueType type = SettingValueType.STRING; | ||||||
|  |         assertFalse(TypeValidationHelper.isValid(type, 5467, null)); | ||||||
|  |         assertFalse(TypeValidationHelper.isValid(type, SettingValueType.POSITIVE_DOUBLE, null)); | ||||||
|  |         assertFalse(TypeValidationHelper.isValid(type, "", null)); | ||||||
|  |         assertFalse(TypeValidationHelper.isValid(type, "      ", null)); | ||||||
|  |         assertFalse(TypeValidationHelper.isValid(type, null, null)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Test | ||||||
|  |     public void isValidPositiveIntegerValidTest() { | ||||||
|  |         SettingValueType type = SettingValueType.POSITIVE_INTEGER; | ||||||
|  |         assertTrue(TypeValidationHelper.isValid(type, 6574567, null)); | ||||||
|  |         assertTrue(TypeValidationHelper.isValid(type, "785768", null)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Test | ||||||
|  |     public void isValidPositiveIntegerInvalidTest() { | ||||||
|  |         SettingValueType type = SettingValueType.POSITIVE_INTEGER; | ||||||
|  |         assertFalse(TypeValidationHelper.isValid(type, 0.2345, null)); | ||||||
|  |         assertFalse(TypeValidationHelper.isValid(type, -1, null)); | ||||||
|  |         assertFalse(TypeValidationHelper.isValid(type, "potato", null)); | ||||||
|  |         assertFalse(TypeValidationHelper.isValid(type, null, null)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Test | ||||||
|  |     public void isValidPercentageValidTest() { | ||||||
|  |         SettingValueType type = SettingValueType.PERCENTAGE; | ||||||
|  |         assertTrue(TypeValidationHelper.isValid(type, 33, null)); | ||||||
|  |         assertTrue(TypeValidationHelper.isValid(type, 100, null)); | ||||||
|  |         assertTrue(TypeValidationHelper.isValid(type, 0, null)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Test | ||||||
|  |     public void isValidPercentageInvalidTest() { | ||||||
|  |         SettingValueType type = SettingValueType.PERCENTAGE; | ||||||
|  |         assertFalse(TypeValidationHelper.isValid(type, -1, null)); | ||||||
|  |         assertFalse(TypeValidationHelper.isValid(type, -73, null)); | ||||||
|  |         assertFalse(TypeValidationHelper.isValid(type, 101, null)); | ||||||
|  |         assertFalse(TypeValidationHelper.isValid(type, 14.4, null)); | ||||||
|  |         assertFalse(TypeValidationHelper.isValid(type, "potato", null)); | ||||||
|  |         assertFalse(TypeValidationHelper.isValid(type, null, null)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Test | ||||||
|  |     public void isValidBooleanValidTest() { | ||||||
|  |         SettingValueType type = SettingValueType.BOOLEAN; | ||||||
|  |         //Note: As anything invalid will just be parsed to false, anything goes | ||||||
|  |         assertTrue(TypeValidationHelper.isValid(type, null, null)); | ||||||
|  |         assertTrue(TypeValidationHelper.isValid(type, "potato", null)); | ||||||
|  |         assertTrue(TypeValidationHelper.isValid(type, "True", null)); | ||||||
|  |         assertTrue(TypeValidationHelper.isValid(type, "False", null)); | ||||||
|  |         assertTrue(TypeValidationHelper.isValid(type, "On", null)); | ||||||
|  |         assertTrue(TypeValidationHelper.isValid(type, "Off", null)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Test | ||||||
|  |     public void isValidStringListValidTest() { | ||||||
|  |         SettingValueType type = SettingValueType.STRING_LIST; | ||||||
|  |         List<String> testList = new ArrayList<>(); | ||||||
|  |         testList.add("fish"); | ||||||
|  |         testList.add("potato"); | ||||||
|  |         assertTrue(TypeValidationHelper.isValid(type, "1, 2, 3, 4, 5, 6, 7, 8", null)); | ||||||
|  |         assertTrue(TypeValidationHelper.isValid(type, new ArrayList<>(), null)); | ||||||
|  |         assertTrue(TypeValidationHelper.isValid(type, testList, null)); | ||||||
|  |         assertTrue(TypeValidationHelper.isValid(type, "potato", null)); | ||||||
|  |         assertTrue(TypeValidationHelper.isValid(type, "", null)); | ||||||
|  |         assertTrue(TypeValidationHelper.isValid(type, new String[]{"a", "b", "c"}, null)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Test | ||||||
|  |     public void isValidStringListInvalidTest() { | ||||||
|  |         SettingValueType type = SettingValueType.STRING_LIST; | ||||||
|  |         assertFalse(TypeValidationHelper.isValid(type, null, null)); | ||||||
|  |         assertFalse(TypeValidationHelper.isValid(type, 456, null)); | ||||||
|  |         assertFalse(TypeValidationHelper.isValid(type, -2345.4321, null)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Test | ||||||
|  |     public void isValidMaterialValidTest() { | ||||||
|  |         SettingValueType type = SettingValueType.MATERIAL; | ||||||
|  |         assertTrue(TypeValidationHelper.isValid(type, Material.POTATO, null)); | ||||||
|  |         assertTrue(TypeValidationHelper.isValid(type, "POTATO", null)); | ||||||
|  |         assertTrue(TypeValidationHelper.isValid(type, "minecraft:potato", null)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Test | ||||||
|  |     public void isValidMaterialInvalidTest() { | ||||||
|  |         SettingValueType type = SettingValueType.MATERIAL; | ||||||
|  |         assertFalse(TypeValidationHelper.isValid(type, null, null)); | ||||||
|  |         assertFalse(TypeValidationHelper.isValid(type, 1, null)); | ||||||
|  |         assertFalse(TypeValidationHelper.isValid(type, "random", null)); | ||||||
|  |         assertFalse(TypeValidationHelper.isValid(type, -546.678, null)); | ||||||
|  |         assertFalse(TypeValidationHelper.isValid(type, true, null)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Test | ||||||
|  |     public void isValidEnchantmentValidTest() { | ||||||
|  |         SettingValueType type = SettingValueType.ENCHANTMENT; | ||||||
|  |         assertTrue(TypeValidationHelper.isValid(type, curseOfBinding, null)); | ||||||
|  |         assertTrue(TypeValidationHelper.isValid(type, "binding_curse", null)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     @Test | ||||||
|  |     public void isValidEnchantmentInvalidTest() { | ||||||
|  |         SettingValueType type = SettingValueType.ENCHANTMENT; | ||||||
|  |         assertFalse(TypeValidationHelper.isValid(type, "potato", null)); | ||||||
|  |         assertFalse(TypeValidationHelper.isValid(type, 7675, null)); | ||||||
|  |         assertFalse(TypeValidationHelper.isValid(type, null, null)); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user