Skip to content

Commit 005ac5d

Browse files
committed
test: add PlayerTracker unit tests
1 parent 51338f3 commit 005ac5d

1 file changed

Lines changed: 113 additions & 0 deletions

File tree

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
package dev.objz.commandbridge.velocity.util;
2+
3+
import dev.objz.commandbridge.logging.Log;
4+
import dev.objz.commandbridge.scripting.model.enums.Location;
5+
import org.junit.jupiter.api.BeforeAll;
6+
import org.junit.jupiter.api.BeforeEach;
7+
import org.junit.jupiter.api.Test;
8+
9+
import java.util.Set;
10+
import java.util.UUID;
11+
import java.util.concurrent.atomic.AtomicInteger;
12+
import java.util.logging.Logger;
13+
14+
import static org.junit.jupiter.api.Assertions.assertEquals;
15+
import static org.junit.jupiter.api.Assertions.assertFalse;
16+
import static org.junit.jupiter.api.Assertions.assertTrue;
17+
18+
class PlayerTrackerTest {
19+
20+
private static final UUID UUID_A = UUID.fromString("00000000-0000-0000-0000-000000000001");
21+
private static final UUID UUID_B = UUID.fromString("00000000-0000-0000-0000-000000000002");
22+
private static final UUID UUID_C = UUID.fromString("00000000-0000-0000-0000-000000000003");
23+
24+
private PlayerTracker tracker;
25+
private AtomicInteger joinCount;
26+
27+
@BeforeAll
28+
static void installLog() {
29+
try {
30+
Log.install(Logger.getLogger("PlayerTrackerTest"));
31+
} catch (IllegalStateException e) {
32+
// Log already installed, ignore
33+
}
34+
}
35+
36+
@BeforeEach
37+
void setUp() {
38+
tracker = new PlayerTracker();
39+
joinCount = new AtomicInteger(0);
40+
tracker.onPlayerJoin((clientId, uuid) -> joinCount.incrementAndGet());
41+
}
42+
43+
@Test
44+
void addPlayerFiresJoinListener() {
45+
tracker.addPlayer("client1", UUID_A);
46+
assertEquals(1, joinCount.get());
47+
}
48+
49+
@Test
50+
void updateDetectsNewPlayers() {
51+
tracker.update("client1", Set.of(UUID_A, UUID_B));
52+
assertEquals(2, joinCount.get());
53+
}
54+
55+
@Test
56+
void updateDoesNotFireForExistingPlayers() {
57+
tracker.update("client1", Set.of(UUID_A));
58+
assertEquals(1, joinCount.get());
59+
60+
tracker.update("client1", Set.of(UUID_A));
61+
assertEquals(1, joinCount.get());
62+
}
63+
64+
@Test
65+
void removePlayerMakesUntracked() {
66+
tracker.addPlayer("client1", UUID_A);
67+
tracker.removePlayer("client1", UUID_A);
68+
assertFalse(tracker.isPlayerOn(UUID_A, "client1"));
69+
}
70+
71+
@Test
72+
void isPlayerOnReturnsTrue() {
73+
tracker.addPlayer("client1", UUID_A);
74+
assertTrue(tracker.isPlayerOn(UUID_A, "client1"));
75+
}
76+
77+
@Test
78+
void isPlayerOnReturnsFalseWhenAbsent() {
79+
assertFalse(tracker.isPlayerOn(UUID_A, "client1"));
80+
}
81+
82+
@Test
83+
void isPlayerOnTargetVelocityLocalAlwaysTrue() {
84+
assertTrue(tracker.isPlayerOnTarget(UUID_A, "local-id", Location.VELOCITY, "local-id"));
85+
}
86+
87+
@Test
88+
void isPlayerOnTargetBackend() {
89+
tracker.addPlayer("server1", UUID_A);
90+
assertTrue(tracker.isPlayerOnTarget(UUID_A, "server1", Location.BACKEND, "local"));
91+
}
92+
93+
@Test
94+
void nullClientIdIgnored() {
95+
tracker.addPlayer(null, UUID_A);
96+
assertEquals(0, joinCount.get());
97+
}
98+
99+
@Test
100+
void nullPlayerUuidIgnored() {
101+
tracker.addPlayer("client1", null);
102+
assertEquals(0, joinCount.get());
103+
}
104+
105+
@Test
106+
void listenerExceptionDoesNotCrash() {
107+
tracker.onPlayerJoin((clientId, uuid) -> {
108+
throw new RuntimeException("Test exception");
109+
});
110+
tracker.addPlayer("client1", UUID_A);
111+
assertEquals(1, joinCount.get());
112+
}
113+
}

0 commit comments

Comments
 (0)