mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2025-09-27 14:59:09 +02:00
Move logic for config format into ConfigStringUtils
This commit is contained in:
323
src/test/java/com/gmail/nossr50/util/text/StringUtilsTest.java
Normal file
323
src/test/java/com/gmail/nossr50/util/text/StringUtilsTest.java
Normal file
@@ -0,0 +1,323 @@
|
||||
package com.gmail.nossr50.util.text;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import com.gmail.nossr50.datatypes.party.PartyFeature;
|
||||
import com.gmail.nossr50.datatypes.skills.SuperAbilityType;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class StringUtilsTest {
|
||||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
// Clear caches before each test to ensure test isolation
|
||||
clearCaches();
|
||||
}
|
||||
|
||||
/**
|
||||
* Utility method to clear all caches in StringUtils.
|
||||
* Reflection is used since the caches are private.
|
||||
*/
|
||||
private void clearCaches() {
|
||||
try {
|
||||
java.lang.reflect.Field entityCache = StringUtils.class.getDeclaredField("formattedEntityStrings");
|
||||
entityCache.setAccessible(true);
|
||||
((java.util.Map<?, ?>) entityCache.get(null)).clear();
|
||||
|
||||
java.lang.reflect.Field superAbilityCache = StringUtils.class.getDeclaredField("formattedSuperAbilityStrings");
|
||||
superAbilityCache.setAccessible(true);
|
||||
((java.util.Map<?, ?>) superAbilityCache.get(null)).clear();
|
||||
|
||||
java.lang.reflect.Field materialCache = StringUtils.class.getDeclaredField("formattedMaterialStrings");
|
||||
materialCache.setAccessible(true);
|
||||
((java.util.Map<?, ?>) materialCache.get(null)).clear();
|
||||
|
||||
java.lang.reflect.Field partyFeatureCache = StringUtils.class.getDeclaredField("prettyPartyFeatureStringCache");
|
||||
partyFeatureCache.setAccessible(true);
|
||||
((java.util.Map<?, ?>) partyFeatureCache.get(null)).clear();
|
||||
} catch (NoSuchFieldException | IllegalAccessException e) {
|
||||
fail("Failed to clear caches: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
// Tests for getCapitalized(String target)
|
||||
@Test
|
||||
void testGetCapitalized_NullInput() {
|
||||
assertNull(StringUtils.getCapitalized(null));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetCapitalized_EmptyString() {
|
||||
assertEquals("", StringUtils.getCapitalized(""));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetCapitalized_SingleCharacter() {
|
||||
assertEquals("A", StringUtils.getCapitalized("a"));
|
||||
assertEquals("Z", StringUtils.getCapitalized("Z"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetCapitalized_AllUppercase() {
|
||||
assertEquals("Test", StringUtils.getCapitalized("TEST"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetCapitalized_AllLowercase() {
|
||||
assertEquals("Test", StringUtils.getCapitalized("test"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetCapitalized_MixedCase() {
|
||||
assertEquals("Test", StringUtils.getCapitalized("tEsT"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetCapitalized_NonASCII() {
|
||||
assertEquals("Ñandú", StringUtils.getCapitalized("ñandú"));
|
||||
}
|
||||
|
||||
// Tests for ticksToSeconds(double ticks)
|
||||
@Test
|
||||
void testTicksToSeconds_PositiveTicks() {
|
||||
assertEquals("1.5", StringUtils.ticksToSeconds(30));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testTicksToSeconds_ZeroTicks() {
|
||||
assertEquals("0.0", StringUtils.ticksToSeconds(0));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testTicksToSeconds_FractionalTicks() {
|
||||
assertEquals("1.5", StringUtils.ticksToSeconds(30.0));
|
||||
assertEquals("1.5", StringUtils.ticksToSeconds(30.0));
|
||||
assertEquals("1.0", StringUtils.ticksToSeconds(20.0));
|
||||
assertEquals("0.1", StringUtils.ticksToSeconds(2.0));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testTicksToSeconds_NegativeTicks() {
|
||||
assertEquals("-1.0", StringUtils.ticksToSeconds(-20));
|
||||
}
|
||||
|
||||
// Tests for getPrettySuperAbilityString(SuperAbilityType superAbilityType)
|
||||
@Test
|
||||
void testGetPrettySuperAbilityString_NullInput() {
|
||||
assertThrows(NullPointerException.class, () -> {
|
||||
StringUtils.getPrettySuperAbilityString(null);
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetPrettySuperAbilityString_ValidInput() {
|
||||
SuperAbilityType superAbilityType = SuperAbilityType.SUPER_BREAKER;
|
||||
String expected = "Super Breaker";
|
||||
String actual = StringUtils.getPrettySuperAbilityString(superAbilityType);
|
||||
assertEquals(expected, actual);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetPrettySuperAbilityString_Caching() {
|
||||
SuperAbilityType superAbilityType = SuperAbilityType.SUPER_BREAKER;
|
||||
|
||||
// First call should compute and cache
|
||||
String firstCall = StringUtils.getPrettySuperAbilityString(superAbilityType);
|
||||
|
||||
// Second call should retrieve from cache
|
||||
String secondCall = StringUtils.getPrettySuperAbilityString(superAbilityType);
|
||||
|
||||
assertSame(firstCall, secondCall, "Cached value should be the same instance");
|
||||
}
|
||||
|
||||
// Tests for getPrettyEntityTypeString(EntityType entityType)
|
||||
@Test
|
||||
void testGetPrettyEntityTypeString_ValidInput() {
|
||||
EntityType zombie = EntityType.ZOMBIE;
|
||||
String expected = "Zombie";
|
||||
String actual = StringUtils.getPrettyEntityTypeString(zombie);
|
||||
assertEquals(expected, actual);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetPrettyEntityTypeString_WithUnderscores() {
|
||||
EntityType entity = EntityType.SKELETON_HORSE;
|
||||
String expected = "Skeleton Horse";
|
||||
String actual = StringUtils.getPrettyEntityTypeString(entity);
|
||||
assertEquals(expected, actual);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetPrettyEntityTypeString_Caching() {
|
||||
EntityType skeleton = EntityType.SKELETON;
|
||||
|
||||
// First call should compute and cache
|
||||
String firstCall = StringUtils.getPrettyEntityTypeString(skeleton);
|
||||
|
||||
// Second call should retrieve from cache
|
||||
String secondCall = StringUtils.getPrettyEntityTypeString(skeleton);
|
||||
|
||||
assertSame(firstCall, secondCall, "Cached value should be the same instance");
|
||||
}
|
||||
|
||||
// Tests for getFormattedMaterialString(Material material)
|
||||
@Test
|
||||
void testGetPrettyMaterialString_ValidInput() {
|
||||
Material diamondSword = Material.DIAMOND_SWORD;
|
||||
String expected = "Diamond Sword";
|
||||
String actual = StringUtils.getPrettyMaterialString(diamondSword);
|
||||
assertEquals(expected, actual);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetPrettyMaterialString_WithUnderscores() {
|
||||
Material goldenApple = Material.GOLDEN_APPLE;
|
||||
String expected = "Golden Apple";
|
||||
String actual = StringUtils.getPrettyMaterialString(goldenApple);
|
||||
assertEquals(expected, actual);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testGetPrettyMaterialString_Caching() {
|
||||
Material ironPickaxe = Material.IRON_PICKAXE;
|
||||
|
||||
// First call should compute and cache
|
||||
String firstCall = StringUtils.getPrettyMaterialString(ironPickaxe);
|
||||
|
||||
// Second call should retrieve from cache
|
||||
String secondCall = StringUtils.getPrettyMaterialString(ironPickaxe);
|
||||
|
||||
assertSame(firstCall, secondCall, "Cached value should be the same instance");
|
||||
}
|
||||
|
||||
// Tests for buildStringAfterNthElement(String[] args, int index)
|
||||
@Test
|
||||
void testBuildStringAfterNthElement_IndexZero() {
|
||||
String[] args = {"Hello", "World", "Test"};
|
||||
String expected = "Hello World Test";
|
||||
String actual = StringUtils.buildStringAfterNthElement(args, 0);
|
||||
assertEquals(expected, actual);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testBuildStringAfterNthElement_IndexMiddle() {
|
||||
String[] args = {"This", "is", "a", "test"};
|
||||
String expected = "a test";
|
||||
String actual = StringUtils.buildStringAfterNthElement(args, 2);
|
||||
assertEquals(expected, actual);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testBuildStringAfterNthElement_IndexLast() {
|
||||
String[] args = {"Only", "One"};
|
||||
String expected = "One";
|
||||
String actual = StringUtils.buildStringAfterNthElement(args, 1);
|
||||
assertEquals(expected, actual);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testBuildStringAfterNthElement_IndexOutOfBounds() {
|
||||
String[] args = {"Too", "Short"};
|
||||
String expected = "";
|
||||
String actual = StringUtils.buildStringAfterNthElement(args, 5);
|
||||
assertEquals(expected, actual);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testBuildStringAfterNthElement_EmptyArray() {
|
||||
String[] args = {};
|
||||
String expected = "";
|
||||
String actual = StringUtils.buildStringAfterNthElement(args, 0);
|
||||
assertEquals(expected, actual);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testBuildStringAfterNthElement_ArgsWithSpaces() {
|
||||
String[] args = {"Multiple", " ", "Spaces"};
|
||||
String expected = " Spaces";
|
||||
String actual = StringUtils.buildStringAfterNthElement(args, 1);
|
||||
assertEquals(expected, actual);
|
||||
}
|
||||
|
||||
// Tests for isInt(String string)
|
||||
@Test
|
||||
void testIsInt_ValidIntegers() {
|
||||
assertTrue(StringUtils.isInt("123"));
|
||||
assertTrue(StringUtils.isInt("-456"));
|
||||
assertTrue(StringUtils.isInt("0"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testIsInt_InvalidIntegers() {
|
||||
assertFalse(StringUtils.isInt("123.45"));
|
||||
assertFalse(StringUtils.isInt("abc"));
|
||||
assertFalse(StringUtils.isInt(""));
|
||||
assertFalse(StringUtils.isInt(" "));
|
||||
assertFalse(StringUtils.isInt(null)); // This will throw NullPointerException
|
||||
}
|
||||
|
||||
// Tests for isDouble(String string)
|
||||
@Test
|
||||
void testIsDouble_ValidDoubles() {
|
||||
assertTrue(StringUtils.isDouble("123.45"));
|
||||
assertTrue(StringUtils.isDouble("-456.78"));
|
||||
assertTrue(StringUtils.isDouble("0.0"));
|
||||
assertTrue(StringUtils.isDouble("1e10"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testIsDouble_InvalidDoubles() {
|
||||
assertFalse(StringUtils.isDouble("abc"));
|
||||
assertFalse(StringUtils.isDouble(""));
|
||||
assertFalse(StringUtils.isDouble(" "));
|
||||
assertFalse(StringUtils.isDouble("123.45.67"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testIsDouble_NullInput() {
|
||||
assertThrows(NullPointerException.class, () -> {
|
||||
StringUtils.isDouble(null);
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void testCachingMechanism_EntityType() {
|
||||
EntityType zombie = EntityType.ZOMBIE;
|
||||
|
||||
String firstCall = StringUtils.getPrettyEntityTypeString(zombie);
|
||||
String secondCall = StringUtils.getPrettyEntityTypeString(zombie);
|
||||
|
||||
assertSame(firstCall, secondCall, "EntityType caching failed");
|
||||
}
|
||||
|
||||
@Test
|
||||
void testCachingMechanism_Material() {
|
||||
Material diamondSword = Material.DIAMOND_SWORD;
|
||||
|
||||
String firstCall = StringUtils.getPrettyMaterialString(diamondSword);
|
||||
String secondCall = StringUtils.getPrettyMaterialString(diamondSword);
|
||||
|
||||
assertSame(firstCall, secondCall, "Material caching failed");
|
||||
}
|
||||
|
||||
// Tests for createPrettyString via public methods
|
||||
@Test
|
||||
void testCreatePrettyString_Spaces() {
|
||||
String[] args = {"hello", "world"};
|
||||
String expected = "hello world";
|
||||
String actual = StringUtils.buildStringAfterNthElement(args, 0);
|
||||
assertEquals(expected, actual);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testPrettify_Substrings() {
|
||||
Material goldenApple = Material.GOLDEN_APPLE;
|
||||
String expected = "Golden Apple";
|
||||
String actual = StringUtils.getPrettyMaterialString(goldenApple);
|
||||
assertEquals(expected, actual);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user