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
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,18 @@
import net.minestom.server.network.packet.server.play.AdvancementsPacket;
import net.minestom.testing.Collector;
import net.minestom.testing.Env;
import net.minestom.testing.EnvTest;
import net.minestom.testing.annotations.EnvironmentTest;
import org.junit.jupiter.api.Test;

import java.util.Optional;

import static org.junit.jupiter.api.Assertions.*;

@EnvTest
@EnvironmentTest
class NotificationIntegrationTest {

@Test
void testBuilder(Env env) {
void testBuilder() {
var notification = Notification.builder()
.icon(Material.ITEM_FRAME)
.title(Component.text("unit test"))
Expand Down
10 changes: 10 additions & 0 deletions testing/src/main/java/net/minestom/testing/Env.java
Original file line number Diff line number Diff line change
Expand Up @@ -56,4 +56,14 @@ default boolean tickWhile(BooleanSupplier condition, Duration timeout) {
default void destroyInstance(Instance instance) {
process().instance().unregisterInstance(instance);
}

/**
* Cleanup the test environment
* @since 1.4.1
*/
void cleanup();

static Env createInstance(ServerProcess process) {
return new EnvImpl(process);
}
}
3 changes: 2 additions & 1 deletion testing/src/main/java/net/minestom/testing/EnvImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,8 @@ public EnvImpl(ServerProcess process) {
return flexible;
}

void cleanup() {
@Override
public void cleanup() {
this.listeners.forEach(FlexibleListenerImpl::check);
}

Expand Down
4 changes: 4 additions & 0 deletions testing/src/main/java/net/minestom/testing/EnvTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,15 @@
import java.lang.annotation.Target;
import java.lang.reflect.Method;

/**
* @deprecated As of Microtus 1.4.2, because this version don't support Non Env tests and env tests at the same time use {@link net.minestom.testing.annotations.EnvironmentTest} instead.
*/
@ExtendWith(EnvTest.EnvParameterResolver.class)
@ExtendWith(EnvTest.EnvBefore.class)
@ExtendWith(EnvTest.EnvCleaner.class)
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Deprecated(since = "1.4.2", forRemoval = true)
public @interface EnvTest {

final class EnvBefore implements BeforeEachCallback {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package net.minestom.testing.annotations;

import net.minestom.testing.environment.TestEnvironmentCleaner;
import net.minestom.testing.environment.TestEnvironmentParameterResolver;
import org.junit.jupiter.api.extension.ExtendWith;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
* Creates a fake environment for Microtus
* @since 1.4.2
*/
@ExtendWith(TestEnvironmentCleaner.class)
@ExtendWith(TestEnvironmentParameterResolver.class)
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface EnvironmentTest {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package net.minestom.testing.environment;

import net.minestom.testing.Env;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.junit.jupiter.api.extension.InvocationInterceptor;
import org.junit.jupiter.api.extension.ReflectiveInvocationContext;

import java.lang.reflect.Method;
import java.util.List;

/**
* Handles {@link Env} to clean the Test Environment after usage
* @since 1.4.2
*/
public final class TestEnvironmentCleaner implements InvocationInterceptor {
@Override
public void interceptTestMethod(Invocation<Void> invocation, ReflectiveInvocationContext<Method> invocationContext, ExtensionContext extensionContext) throws Throwable {
invocation.proceed();
List<Object> arguments = invocationContext.getArguments();
arguments.stream().filter(Env.class::isInstance).findFirst().ifPresent(o -> {
Env env = (Env) o;
env.cleanup();
});
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package net.minestom.testing.environment;

import net.minestom.server.MinecraftServer;
import net.minestom.testing.Env;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.junit.jupiter.api.extension.ParameterContext;
import org.junit.jupiter.api.extension.ParameterResolutionException;
import org.junit.jupiter.api.extension.support.TypeBasedParameterResolver;

/**
* Handles {@link Env} parameter for JUnit Tests to inject the TestEnvironment
* @since 1.4.1
*/
public final class TestEnvironmentParameterResolver extends TypeBasedParameterResolver<Env> {
@Override
public Env resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext)
throws ParameterResolutionException {
return Env.createInstance(MinecraftServer.updateProcess());
}
}