Skip to content

Commit 3d93b94

Browse files
authored
[Feature] Improved Testing Lib (#42)
* Deprecate env test * Improve environment * Create new environment annotation * Use new environment annotation
1 parent 37576d2 commit 3d93b94

File tree

7 files changed

+85
-4
lines changed

7 files changed

+85
-4
lines changed

src/test/java/net/minestom/server/notifications/NotificationIntegrationTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,18 @@
88
import net.minestom.server.network.packet.server.play.AdvancementsPacket;
99
import net.minestom.testing.Collector;
1010
import net.minestom.testing.Env;
11-
import net.minestom.testing.EnvTest;
11+
import net.minestom.testing.annotations.EnvironmentTest;
1212
import org.junit.jupiter.api.Test;
1313

1414
import java.util.Optional;
1515

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

18-
@EnvTest
18+
@EnvironmentTest
1919
class NotificationIntegrationTest {
2020

2121
@Test
22-
void testBuilder(Env env) {
22+
void testBuilder() {
2323
var notification = Notification.builder()
2424
.icon(Material.ITEM_FRAME)
2525
.title(Component.text("unit test"))

testing/src/main/java/net/minestom/testing/Env.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,4 +56,14 @@ default boolean tickWhile(BooleanSupplier condition, Duration timeout) {
5656
default void destroyInstance(Instance instance) {
5757
process().instance().unregisterInstance(instance);
5858
}
59+
60+
/**
61+
* Cleanup the test environment
62+
* @since 1.4.1
63+
*/
64+
void cleanup();
65+
66+
static Env createInstance(ServerProcess process) {
67+
return new EnvImpl(process);
68+
}
5969
}

testing/src/main/java/net/minestom/testing/EnvImpl.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@ public EnvImpl(ServerProcess process) {
4848
return flexible;
4949
}
5050

51-
void cleanup() {
51+
@Override
52+
public void cleanup() {
5253
this.listeners.forEach(FlexibleListenerImpl::check);
5354
}
5455

testing/src/main/java/net/minestom/testing/EnvTest.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,15 @@
1010
import java.lang.annotation.Target;
1111
import java.lang.reflect.Method;
1212

13+
/**
14+
* @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.
15+
*/
1316
@ExtendWith(EnvTest.EnvParameterResolver.class)
1417
@ExtendWith(EnvTest.EnvBefore.class)
1518
@ExtendWith(EnvTest.EnvCleaner.class)
1619
@Retention(RetentionPolicy.RUNTIME)
1720
@Target(ElementType.TYPE)
21+
@Deprecated(since = "1.4.2", forRemoval = true)
1822
public @interface EnvTest {
1923

2024
final class EnvBefore implements BeforeEachCallback {
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package net.minestom.testing.annotations;
2+
3+
import net.minestom.testing.environment.TestEnvironmentCleaner;
4+
import net.minestom.testing.environment.TestEnvironmentParameterResolver;
5+
import org.junit.jupiter.api.extension.ExtendWith;
6+
7+
import java.lang.annotation.ElementType;
8+
import java.lang.annotation.Retention;
9+
import java.lang.annotation.RetentionPolicy;
10+
import java.lang.annotation.Target;
11+
12+
/**
13+
* Creates a fake environment for Microtus
14+
* @since 1.4.2
15+
*/
16+
@ExtendWith(TestEnvironmentCleaner.class)
17+
@ExtendWith(TestEnvironmentParameterResolver.class)
18+
@Retention(RetentionPolicy.RUNTIME)
19+
@Target(ElementType.TYPE)
20+
public @interface EnvironmentTest {
21+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package net.minestom.testing.environment;
2+
3+
import net.minestom.testing.Env;
4+
import org.junit.jupiter.api.extension.ExtensionContext;
5+
import org.junit.jupiter.api.extension.InvocationInterceptor;
6+
import org.junit.jupiter.api.extension.ReflectiveInvocationContext;
7+
8+
import java.lang.reflect.Method;
9+
import java.util.List;
10+
11+
/**
12+
* Handles {@link Env} to clean the Test Environment after usage
13+
* @since 1.4.2
14+
*/
15+
public final class TestEnvironmentCleaner implements InvocationInterceptor {
16+
@Override
17+
public void interceptTestMethod(Invocation<Void> invocation, ReflectiveInvocationContext<Method> invocationContext, ExtensionContext extensionContext) throws Throwable {
18+
invocation.proceed();
19+
List<Object> arguments = invocationContext.getArguments();
20+
arguments.stream().filter(Env.class::isInstance).findFirst().ifPresent(o -> {
21+
Env env = (Env) o;
22+
env.cleanup();
23+
});
24+
}
25+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package net.minestom.testing.environment;
2+
3+
import net.minestom.server.MinecraftServer;
4+
import net.minestom.testing.Env;
5+
import org.junit.jupiter.api.extension.ExtensionContext;
6+
import org.junit.jupiter.api.extension.ParameterContext;
7+
import org.junit.jupiter.api.extension.ParameterResolutionException;
8+
import org.junit.jupiter.api.extension.support.TypeBasedParameterResolver;
9+
10+
/**
11+
* Handles {@link Env} parameter for JUnit Tests to inject the TestEnvironment
12+
* @since 1.4.1
13+
*/
14+
public final class TestEnvironmentParameterResolver extends TypeBasedParameterResolver<Env> {
15+
@Override
16+
public Env resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext)
17+
throws ParameterResolutionException {
18+
return Env.createInstance(MinecraftServer.updateProcess());
19+
}
20+
}

0 commit comments

Comments
 (0)