Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ dependencyResolutionManagement {

versionCatalogs {
create("libs") {
version("minestom", "2026.05.11-1.21.11")
version("minestom", "2026.05.17-1.21.11")
version("junit", "6.0.3")

library("minestom","net.minestom", "minestom").versionRef("minestom")
Expand Down
14 changes: 13 additions & 1 deletion src/main/java/net/minestom/testing/Collector.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public interface Collector<T> {
*
* @return a list of elements collected by this collector
*/
@NotNull List<@NotNull T> collect();
List<T> collect();

/**
* Assert a single element from the collection, check its type, and apply a consumer to it.
Expand Down Expand Up @@ -69,6 +69,18 @@ default void assertCount(int count) {
assertEquals(count, elements.size(), "Expected " + count + " element(s), got " + elements.size() + ": " + elements);
}

/**
* Assert the count of elements matching a predicate in the collector.
*
* @param count expected number of elements matching the predicate
* @param predicate to match elements
*/
default void assertCount(int count, Predicate<? super T> predicate) {
List<T> elements = collect();
long matchingCount = elements.stream().filter(predicate).count();
assertEquals(count, matchingCount, "Expected " + count + " element(s) matching the predicate, got " + matchingCount + ": " + elements);
}

/**
* Assert that the collector only contains a single element.
*/
Expand Down
14 changes: 10 additions & 4 deletions src/main/java/net/minestom/testing/EnvImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import net.minestom.server.event.EventFilter;
import net.minestom.server.event.EventListener;
import net.minestom.server.network.player.GameProfile;
import org.jetbrains.annotations.NotNull;
import org.junit.jupiter.api.Assertions;

import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
Expand All @@ -20,6 +20,8 @@ public final class EnvImpl implements Env {

public EnvImpl(ServerProcess process) {
this.process = process;
// If exceptions reach the exception handler, by default fail the test.
process().exception().setExceptionHandler(EnvImpl::handleException);

// Start the dispatcher threads if not already started.
process().dispatcher().start();
Expand All @@ -29,18 +31,22 @@ public EnvImpl(ServerProcess process) {
process.connection().setPlayerProvider(TestPlayerImpl::new);
}

static void handleException(Throwable exception) {
Assertions.fail("Server threw exception", exception);
}

@Override
public ServerProcess process() {
return process;
}

@Override
public TestConnection createConnection(GameProfile profile) {
return new TestConnectionImpl(this, profile);
public TestConnection createConnection(GameProfile gameProfile) {
return new TestConnectionImpl(this, gameProfile);
}

@Override
public <E extends Event, H> Collector<E> trackEvent(Class<E> eventType, EventFilter<? super E, H> filter, @NotNull H actor) {
public <E extends Event, H> Collector<E> trackEvent(Class<E> eventType, EventFilter<? super E, H> filter, H actor) {
var tracker = new EventCollector<E>(actor);
this.process.eventHandler().map(actor, filter).addListener(eventType, tracker.events::add);
return tracker;
Expand Down
5 changes: 3 additions & 2 deletions src/main/java/net/minestom/testing/TestConnectionImpl.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package net.minestom.testing;

import net.kyori.adventure.translation.GlobalTranslator;
import net.minestom.server.ServerFlag;
import net.minestom.server.ServerProcess;
import net.minestom.server.adventure.MinestomAdventure;
import net.minestom.server.coordinate.Pos;
Expand Down Expand Up @@ -89,7 +90,7 @@ private ServerPacket extractPacket(final SendablePacket packet) {
final Player player = getPlayer();
if (player == null) return serverPacket;

if (MinestomAdventure.AUTOMATIC_COMPONENT_TRANSLATION && serverPacket instanceof ServerPacket.ComponentHolding) {
if (ServerFlag.AUTOMATIC_COMPONENT_TRANSLATION && serverPacket instanceof ServerPacket.ComponentHolding) {
serverPacket = ((ServerPacket.ComponentHolding) serverPacket).copyWithOperator(component ->
GlobalTranslator.render(component, Objects.requireNonNullElseGet(player.getLocale(), MinestomAdventure::getDefaultLocale)));
}
Expand Down Expand Up @@ -127,4 +128,4 @@ public List<T> collect() {
return List.copyOf(packets);
}
}
}
}
Loading