mirror of
https://github.com/FancyInnovations/FancyPlugins.git
synced 2025-12-06 07:43:36 +00:00
fn: Add some tests for SkinManager
This commit is contained in:
@@ -2,6 +2,8 @@ package de.oliver.fancynpcs.api.skins;
|
||||
|
||||
import org.lushplugins.chatcolorhandler.ChatColorHandler;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public class SkinData {
|
||||
|
||||
private String identifier;
|
||||
@@ -68,6 +70,31 @@ public class SkinData {
|
||||
this.textureSignature = textureSignature;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "SkinData{" +
|
||||
"identifier='" + identifier + '\'' +
|
||||
", variant=" + variant +
|
||||
", textureValue='" + textureValue + '\'' +
|
||||
", textureSignature='" + textureSignature + '\'' +
|
||||
'}';
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
SkinData skinData = (SkinData) o;
|
||||
return Objects.equals(identifier, skinData.identifier) &&
|
||||
variant == skinData.variant &&
|
||||
Objects.equals(textureValue, skinData.textureValue) &&
|
||||
Objects.equals(textureSignature, skinData.textureSignature);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(identifier, variant, textureValue, textureSignature);
|
||||
}
|
||||
|
||||
public enum SkinVariant {
|
||||
AUTO,
|
||||
SLIM,
|
||||
|
||||
@@ -3,6 +3,8 @@ package de.oliver.fancynpcs.skins;
|
||||
import de.oliver.fancynpcs.api.skins.SkinData;
|
||||
import org.mineskin.request.GenerateRequest;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public class SkinGenerationRequest {
|
||||
|
||||
private final String id;
|
||||
@@ -32,4 +34,27 @@ public class SkinGenerationRequest {
|
||||
public GenerateRequest getMineskinRequest() {
|
||||
return mineskinRequest;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "SkinGenerationRequest{" +
|
||||
"id='" + id + '\'' +
|
||||
", variant=" + variant +
|
||||
", mineskinRequest=" + mineskinRequest +
|
||||
'}';
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
SkinGenerationRequest that = (SkinGenerationRequest) o;
|
||||
return Objects.equals(id, that.id) &&
|
||||
variant == that.variant &&
|
||||
Objects.equals(mineskinRequest, that.mineskinRequest);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(id, variant, mineskinRequest);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package de.oliver.fancynpcs.tests;
|
||||
import de.oliver.fancynpcs.tests.api.ChatColorHandlerTest;
|
||||
import de.oliver.fancynpcs.tests.api.CreateNpcTest;
|
||||
import de.oliver.fancynpcs.tests.commands.*;
|
||||
import de.oliver.fancynpcs.tests.skins.SkinManagerTest;
|
||||
import de.oliver.plugintests.FPTestClass;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
@@ -22,6 +23,9 @@ public class FancyNpcsTests {
|
||||
addTest(CreateNpcTest.class);
|
||||
addTest(ChatColorHandlerTest.class);
|
||||
|
||||
// skin tests
|
||||
addTest(SkinManagerTest.class);
|
||||
|
||||
// command tests
|
||||
addTest(CreateCMDTest.class);
|
||||
addTest(TypeCMDTest.class);
|
||||
|
||||
@@ -8,6 +8,8 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class PlaceholderApiEnv extends PlaceholderExpansion {
|
||||
public static String parsedString = "Grabsky";
|
||||
|
||||
public static void registerPlaceholders() {
|
||||
if (!Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
|
||||
return;
|
||||
@@ -34,12 +36,20 @@ public class PlaceholderApiEnv extends PlaceholderExpansion {
|
||||
|
||||
@Override
|
||||
public @Nullable String onPlaceholderRequest(Player player, @NotNull String params) {
|
||||
return "Grabsky";
|
||||
if (player == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return parsedString;
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable String onRequest(OfflinePlayer player, @NotNull String params) {
|
||||
return "Grabsky";
|
||||
if (player == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return parsedString;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package de.oliver.fancynpcs.tests.api;
|
||||
|
||||
import de.oliver.fancynpcs.tests.PlaceholderApiEnv;
|
||||
import de.oliver.plugintests.annotations.FPTest;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
@@ -17,9 +18,9 @@ public class ChatColorHandlerTest {
|
||||
return;
|
||||
}
|
||||
|
||||
String input = "Player name: %player_name%";
|
||||
String input = "Player name: %fn-test%";
|
||||
String got = ChatColorHandler.translate(input, player, ParserTypes.placeholder());
|
||||
String expected = "Player name: " + player.getName();
|
||||
String expected = "Player name: " + PlaceholderApiEnv.parsedString;
|
||||
|
||||
expect(got).toEqual(expected);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
package de.oliver.fancynpcs.tests.skins;
|
||||
|
||||
import de.oliver.fancynpcs.skins.SkinGenerationQueue;
|
||||
import de.oliver.fancynpcs.skins.SkinGenerationRequest;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.ScheduledFuture;
|
||||
|
||||
public class FakeSkinQueue implements SkinGenerationQueue {
|
||||
|
||||
private final List<SkinGenerationRequest> queue;
|
||||
private boolean running;
|
||||
|
||||
public FakeSkinQueue() {
|
||||
this.running = false;
|
||||
this.queue = new ArrayList<>();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
this.running = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void add(SkinGenerationRequest request) {
|
||||
this.queue.add(request);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear() {
|
||||
this.queue.clear();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ScheduledFuture<?> getScheduler() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean isRunning() {
|
||||
return running;
|
||||
}
|
||||
|
||||
public List<SkinGenerationRequest> getQueue() {
|
||||
return queue;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,129 @@
|
||||
package de.oliver.fancynpcs.tests.skins;
|
||||
|
||||
import de.oliver.fancynpcs.api.skins.SkinData;
|
||||
import de.oliver.fancynpcs.skins.SkinGenerationRequest;
|
||||
import de.oliver.fancynpcs.skins.SkinManagerImpl;
|
||||
import de.oliver.fancynpcs.skins.cache.SkinCache;
|
||||
import de.oliver.fancynpcs.skins.cache.SkinCacheData;
|
||||
import de.oliver.fancynpcs.skins.cache.SkinCacheFile;
|
||||
import de.oliver.fancynpcs.skins.cache.SkinCacheMemory;
|
||||
import de.oliver.plugintests.annotations.FPAfterEach;
|
||||
import de.oliver.plugintests.annotations.FPBeforeEach;
|
||||
import de.oliver.plugintests.annotations.FPTest;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import static de.oliver.plugintests.Expectable.expect;
|
||||
|
||||
public class SkinManagerTest {
|
||||
|
||||
private SkinManagerImpl manager;
|
||||
private SkinCache memCache;
|
||||
private SkinCache fileCache;
|
||||
private FakeSkinQueue mojangQueue;
|
||||
private FakeSkinQueue mineSkinQueue;
|
||||
|
||||
@FPBeforeEach
|
||||
public void setUp(Player player) {
|
||||
memCache = new SkinCacheMemory();
|
||||
fileCache = new SkinCacheFile();
|
||||
mojangQueue = new FakeSkinQueue();
|
||||
mineSkinQueue = new FakeSkinQueue();
|
||||
manager = new SkinManagerImpl(fileCache, memCache, mojangQueue, mineSkinQueue);
|
||||
}
|
||||
|
||||
@FPAfterEach
|
||||
public void tearDown(Player player) {
|
||||
memCache.clear();
|
||||
fileCache.clear();
|
||||
}
|
||||
|
||||
@FPTest(name = "SkinManagerImpl#cacheSkin")
|
||||
public void testCacheSkin(Player player) {
|
||||
SkinData data = new SkinData("TestSkin", SkinData.SkinVariant.SLIM, "TestSignature", "TestTexture");
|
||||
manager.cacheSkin(data);
|
||||
|
||||
SkinCacheData gotFromFile = fileCache.getSkin("TestSkin");
|
||||
expect(gotFromFile).toBeDefined();
|
||||
expect(gotFromFile.skinData()).toEqual(data);
|
||||
|
||||
SkinCacheData gotFromMem = memCache.getSkin("TestSkin");
|
||||
expect(gotFromMem).toBeDefined();
|
||||
expect(gotFromMem.skinData()).toEqual(data);
|
||||
}
|
||||
|
||||
@FPTest(name = "SkinManagerImpl#getByUUID")
|
||||
public void testGetByUUID(Player player) {
|
||||
record TestCase(
|
||||
String name,
|
||||
UUID uuid,
|
||||
SkinData.SkinVariant variant,
|
||||
SkinData cachedFile,
|
||||
SkinData cachedMem,
|
||||
SkinData expData,
|
||||
boolean expQueued,
|
||||
SkinGenerationRequest mojangRequest
|
||||
) {}
|
||||
|
||||
TestCase[] testCases = {
|
||||
new TestCase(
|
||||
"Skin is cached in file",
|
||||
UUID.fromString("12345678-1234-1234-1234-123456789012"),
|
||||
SkinData.SkinVariant.SLIM,
|
||||
new SkinData("12345678-1234-1234-1234-123456789012", SkinData.SkinVariant.SLIM, "TestSignatureFile", "TestTextureFile"),
|
||||
null,
|
||||
new SkinData("12345678-1234-1234-1234-123456789012", SkinData.SkinVariant.SLIM, "TestSignatureFile", "TestTextureFile"),
|
||||
false,
|
||||
null
|
||||
),
|
||||
new TestCase(
|
||||
"Skin is cached in memory",
|
||||
UUID.fromString("12345678-1234-1234-1234-123456789012"),
|
||||
SkinData.SkinVariant.SLIM,
|
||||
null,
|
||||
new SkinData("12345678-1234-1234-1234-123456789012", SkinData.SkinVariant.SLIM, "TestSignatureMem", "TestTextureMem"),
|
||||
new SkinData("12345678-1234-1234-1234-123456789012", SkinData.SkinVariant.SLIM, "TestSignatureMem", "TestTextureMem"),
|
||||
false,
|
||||
null
|
||||
),
|
||||
new TestCase(
|
||||
"Skin is not cached",
|
||||
UUID.fromString("12345678-1234-1234-1234-123456789012"),
|
||||
SkinData.SkinVariant.SLIM,
|
||||
null,
|
||||
null,
|
||||
new SkinData("12345678-1234-1234-1234-123456789012", SkinData.SkinVariant.SLIM, null, null),
|
||||
true,
|
||||
new SkinGenerationRequest("12345678-1234-1234-1234-123456789012", SkinData.SkinVariant.SLIM)
|
||||
)
|
||||
};
|
||||
|
||||
for (TestCase testCase : testCases) {
|
||||
setUp(player);
|
||||
|
||||
System.out.println("Running test case: " + testCase.name);
|
||||
|
||||
if (testCase.cachedFile != null) {
|
||||
fileCache.addSkin(testCase.cachedFile);
|
||||
}
|
||||
if (testCase.cachedMem != null) {
|
||||
memCache.addSkin(testCase.cachedMem);
|
||||
}
|
||||
|
||||
SkinData got = manager.getByUUID(testCase.uuid, testCase.variant);
|
||||
expect(got).toEqual(testCase.expData);
|
||||
|
||||
if (testCase.expQueued) {
|
||||
expect(mojangQueue.getQueue().size()).toBe(1);
|
||||
SkinGenerationRequest queued = mojangQueue.getQueue().getFirst();
|
||||
expect(queued).toEqual(testCase.mojangRequest);
|
||||
} else {
|
||||
expect(mojangQueue.getQueue().isEmpty()).toBe(true);
|
||||
}
|
||||
|
||||
tearDown(player);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user