Skip to content

Commit af2e40e

Browse files
fn: Add some tests for SkinManager
1 parent 6cbf0df commit af2e40e

7 files changed

Lines changed: 247 additions & 4 deletions

File tree

plugins/fancynpcs/api/src/main/java/de/oliver/fancynpcs/api/skins/SkinData.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import org.lushplugins.chatcolorhandler.ChatColorHandler;
44

5+
import java.util.Objects;
6+
57
public class SkinData {
68

79
private String identifier;
@@ -68,6 +70,31 @@ public void setTextureSignature(String textureSignature) {
6870
this.textureSignature = textureSignature;
6971
}
7072

73+
@Override
74+
public String toString() {
75+
return "SkinData{" +
76+
"identifier='" + identifier + '\'' +
77+
", variant=" + variant +
78+
", textureValue='" + textureValue + '\'' +
79+
", textureSignature='" + textureSignature + '\'' +
80+
'}';
81+
}
82+
83+
@Override
84+
public boolean equals(Object o) {
85+
if (o == null || getClass() != o.getClass()) return false;
86+
SkinData skinData = (SkinData) o;
87+
return Objects.equals(identifier, skinData.identifier) &&
88+
variant == skinData.variant &&
89+
Objects.equals(textureValue, skinData.textureValue) &&
90+
Objects.equals(textureSignature, skinData.textureSignature);
91+
}
92+
93+
@Override
94+
public int hashCode() {
95+
return Objects.hash(identifier, variant, textureValue, textureSignature);
96+
}
97+
7198
public enum SkinVariant {
7299
AUTO,
73100
SLIM,

plugins/fancynpcs/src/main/java/de/oliver/fancynpcs/skins/SkinGenerationRequest.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import de.oliver.fancynpcs.api.skins.SkinData;
44
import org.mineskin.request.GenerateRequest;
55

6+
import java.util.Objects;
7+
68
public class SkinGenerationRequest {
79

810
private final String id;
@@ -32,4 +34,27 @@ public SkinData.SkinVariant getVariant() {
3234
public GenerateRequest getMineskinRequest() {
3335
return mineskinRequest;
3436
}
37+
38+
@Override
39+
public String toString() {
40+
return "SkinGenerationRequest{" +
41+
"id='" + id + '\'' +
42+
", variant=" + variant +
43+
", mineskinRequest=" + mineskinRequest +
44+
'}';
45+
}
46+
47+
@Override
48+
public boolean equals(Object o) {
49+
if (o == null || getClass() != o.getClass()) return false;
50+
SkinGenerationRequest that = (SkinGenerationRequest) o;
51+
return Objects.equals(id, that.id) &&
52+
variant == that.variant &&
53+
Objects.equals(mineskinRequest, that.mineskinRequest);
54+
}
55+
56+
@Override
57+
public int hashCode() {
58+
return Objects.hash(id, variant, mineskinRequest);
59+
}
3560
}

plugins/fancynpcs/src/main/java/de/oliver/fancynpcs/tests/FancyNpcsTests.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import de.oliver.fancynpcs.tests.api.ChatColorHandlerTest;
44
import de.oliver.fancynpcs.tests.api.CreateNpcTest;
55
import de.oliver.fancynpcs.tests.commands.*;
6+
import de.oliver.fancynpcs.tests.skins.SkinManagerTest;
67
import de.oliver.plugintests.FPTestClass;
78
import org.bukkit.entity.Player;
89

@@ -22,6 +23,9 @@ public FancyNpcsTests() {
2223
addTest(CreateNpcTest.class);
2324
addTest(ChatColorHandlerTest.class);
2425

26+
// skin tests
27+
addTest(SkinManagerTest.class);
28+
2529
// command tests
2630
addTest(CreateCMDTest.class);
2731
addTest(TypeCMDTest.class);

plugins/fancynpcs/src/main/java/de/oliver/fancynpcs/tests/PlaceholderApiEnv.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
import org.jetbrains.annotations.Nullable;
99

1010
public class PlaceholderApiEnv extends PlaceholderExpansion {
11+
public static String parsedString = "Grabsky";
12+
1113
public static void registerPlaceholders() {
1214
if (!Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
1315
return;
@@ -34,12 +36,20 @@ public static void registerPlaceholders() {
3436

3537
@Override
3638
public @Nullable String onPlaceholderRequest(Player player, @NotNull String params) {
37-
return "Grabsky";
39+
if (player == null) {
40+
return null;
41+
}
42+
43+
return parsedString;
3844
}
3945

4046
@Override
4147
public @Nullable String onRequest(OfflinePlayer player, @NotNull String params) {
42-
return "Grabsky";
48+
if (player == null) {
49+
return null;
50+
}
51+
52+
return parsedString;
4353
}
4454

4555
}

plugins/fancynpcs/src/main/java/de/oliver/fancynpcs/tests/api/ChatColorHandlerTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package de.oliver.fancynpcs.tests.api;
22

3+
import de.oliver.fancynpcs.tests.PlaceholderApiEnv;
34
import de.oliver.plugintests.annotations.FPTest;
45
import org.bukkit.Bukkit;
56
import org.bukkit.entity.Player;
@@ -17,9 +18,9 @@ public void testPlaceholders(Player player) {
1718
return;
1819
}
1920

20-
String input = "Player name: %player_name%";
21+
String input = "Player name: %fn-test%";
2122
String got = ChatColorHandler.translate(input, player, ParserTypes.placeholder());
22-
String expected = "Player name: " + player.getName();
23+
String expected = "Player name: " + PlaceholderApiEnv.parsedString;
2324

2425
expect(got).toEqual(expected);
2526
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package de.oliver.fancynpcs.tests.skins;
2+
3+
import de.oliver.fancynpcs.skins.SkinGenerationQueue;
4+
import de.oliver.fancynpcs.skins.SkinGenerationRequest;
5+
6+
import java.util.ArrayList;
7+
import java.util.List;
8+
import java.util.concurrent.ScheduledFuture;
9+
10+
public class FakeSkinQueue implements SkinGenerationQueue {
11+
12+
private final List<SkinGenerationRequest> queue;
13+
private boolean running;
14+
15+
public FakeSkinQueue() {
16+
this.running = false;
17+
this.queue = new ArrayList<>();
18+
}
19+
20+
@Override
21+
public void run() {
22+
this.running = true;
23+
}
24+
25+
@Override
26+
public void add(SkinGenerationRequest request) {
27+
this.queue.add(request);
28+
}
29+
30+
@Override
31+
public void clear() {
32+
this.queue.clear();
33+
}
34+
35+
@Override
36+
public ScheduledFuture<?> getScheduler() {
37+
return null;
38+
}
39+
40+
public boolean isRunning() {
41+
return running;
42+
}
43+
44+
public List<SkinGenerationRequest> getQueue() {
45+
return queue;
46+
}
47+
}
Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
package de.oliver.fancynpcs.tests.skins;
2+
3+
import de.oliver.fancynpcs.api.skins.SkinData;
4+
import de.oliver.fancynpcs.skins.SkinGenerationRequest;
5+
import de.oliver.fancynpcs.skins.SkinManagerImpl;
6+
import de.oliver.fancynpcs.skins.cache.SkinCache;
7+
import de.oliver.fancynpcs.skins.cache.SkinCacheData;
8+
import de.oliver.fancynpcs.skins.cache.SkinCacheFile;
9+
import de.oliver.fancynpcs.skins.cache.SkinCacheMemory;
10+
import de.oliver.plugintests.annotations.FPAfterEach;
11+
import de.oliver.plugintests.annotations.FPBeforeEach;
12+
import de.oliver.plugintests.annotations.FPTest;
13+
import org.bukkit.entity.Player;
14+
15+
import java.util.UUID;
16+
17+
import static de.oliver.plugintests.Expectable.expect;
18+
19+
public class SkinManagerTest {
20+
21+
private SkinManagerImpl manager;
22+
private SkinCache memCache;
23+
private SkinCache fileCache;
24+
private FakeSkinQueue mojangQueue;
25+
private FakeSkinQueue mineSkinQueue;
26+
27+
@FPBeforeEach
28+
public void setUp(Player player) {
29+
memCache = new SkinCacheMemory();
30+
fileCache = new SkinCacheFile();
31+
mojangQueue = new FakeSkinQueue();
32+
mineSkinQueue = new FakeSkinQueue();
33+
manager = new SkinManagerImpl(fileCache, memCache, mojangQueue, mineSkinQueue);
34+
}
35+
36+
@FPAfterEach
37+
public void tearDown(Player player) {
38+
memCache.clear();
39+
fileCache.clear();
40+
}
41+
42+
@FPTest(name = "SkinManagerImpl#cacheSkin")
43+
public void testCacheSkin(Player player) {
44+
SkinData data = new SkinData("TestSkin", SkinData.SkinVariant.SLIM, "TestSignature", "TestTexture");
45+
manager.cacheSkin(data);
46+
47+
SkinCacheData gotFromFile = fileCache.getSkin("TestSkin");
48+
expect(gotFromFile).toBeDefined();
49+
expect(gotFromFile.skinData()).toEqual(data);
50+
51+
SkinCacheData gotFromMem = memCache.getSkin("TestSkin");
52+
expect(gotFromMem).toBeDefined();
53+
expect(gotFromMem.skinData()).toEqual(data);
54+
}
55+
56+
@FPTest(name = "SkinManagerImpl#getByUUID")
57+
public void testGetByUUID(Player player) {
58+
record TestCase(
59+
String name,
60+
UUID uuid,
61+
SkinData.SkinVariant variant,
62+
SkinData cachedFile,
63+
SkinData cachedMem,
64+
SkinData expData,
65+
boolean expQueued,
66+
SkinGenerationRequest mojangRequest
67+
) {}
68+
69+
TestCase[] testCases = {
70+
new TestCase(
71+
"Skin is cached in file",
72+
UUID.fromString("12345678-1234-1234-1234-123456789012"),
73+
SkinData.SkinVariant.SLIM,
74+
new SkinData("12345678-1234-1234-1234-123456789012", SkinData.SkinVariant.SLIM, "TestSignatureFile", "TestTextureFile"),
75+
null,
76+
new SkinData("12345678-1234-1234-1234-123456789012", SkinData.SkinVariant.SLIM, "TestSignatureFile", "TestTextureFile"),
77+
false,
78+
null
79+
),
80+
new TestCase(
81+
"Skin is cached in memory",
82+
UUID.fromString("12345678-1234-1234-1234-123456789012"),
83+
SkinData.SkinVariant.SLIM,
84+
null,
85+
new SkinData("12345678-1234-1234-1234-123456789012", SkinData.SkinVariant.SLIM, "TestSignatureMem", "TestTextureMem"),
86+
new SkinData("12345678-1234-1234-1234-123456789012", SkinData.SkinVariant.SLIM, "TestSignatureMem", "TestTextureMem"),
87+
false,
88+
null
89+
),
90+
new TestCase(
91+
"Skin is not cached",
92+
UUID.fromString("12345678-1234-1234-1234-123456789012"),
93+
SkinData.SkinVariant.SLIM,
94+
null,
95+
null,
96+
new SkinData("12345678-1234-1234-1234-123456789012", SkinData.SkinVariant.SLIM, null, null),
97+
true,
98+
new SkinGenerationRequest("12345678-1234-1234-1234-123456789012", SkinData.SkinVariant.SLIM)
99+
)
100+
};
101+
102+
for (TestCase testCase : testCases) {
103+
setUp(player);
104+
105+
System.out.println("Running test case: " + testCase.name);
106+
107+
if (testCase.cachedFile != null) {
108+
fileCache.addSkin(testCase.cachedFile);
109+
}
110+
if (testCase.cachedMem != null) {
111+
memCache.addSkin(testCase.cachedMem);
112+
}
113+
114+
SkinData got = manager.getByUUID(testCase.uuid, testCase.variant);
115+
expect(got).toEqual(testCase.expData);
116+
117+
if (testCase.expQueued) {
118+
expect(mojangQueue.getQueue().size()).toBe(1);
119+
SkinGenerationRequest queued = mojangQueue.getQueue().getFirst();
120+
expect(queued).toEqual(testCase.mojangRequest);
121+
} else {
122+
expect(mojangQueue.getQueue().isEmpty()).toBe(true);
123+
}
124+
125+
tearDown(player);
126+
}
127+
}
128+
129+
}

0 commit comments

Comments
 (0)