Skip to content

Change or revise the testing framework #62

@TheMeinerLP

Description

@TheMeinerLP

After waiting for an internal tool and interesting errors from Intellij, the testing framework should be converted to extensions instead of annotations.

Before:

@EnvironmentTest
class NotificationIntegrationTest {

    @Test
    void testBuilder() {
        var notification = Notification.builder()
                .icon(Material.ITEM_FRAME)
                .title(Component.text("unit test"))
                .frameType(FrameType.TASK)
                .build();
        assertEquals(FrameType.TASK, notification.type());
        assertEquals(ItemStack.of(Material.ITEM_FRAME), notification.icon());
        assertEquals(Component.text("unit test"), notification.title());
    }

    @Test
    void testSend(Env env) {
        var instance = env.createFlatInstance();
        var connection = env.createConnection();
        Collector<AdvancementsPacket> advancementsPacketCollector = connection.trackIncoming(AdvancementsPacket.class);
        var player = connection.connect(instance, new Pos(0, 42, 0)).join();
        var notification = Notification.builder()
                .icon(Material.ITEM_FRAME)
                .title(Component.text("unit test"))
                .frameType(FrameType.TASK)
                .build();
        notification.send(player);
        advancementsPacketCollector.assertCount(2);
        AdvancementsPacket advancementsPacket = advancementsPacketCollector.collect().get(1);
        assertNotNull(advancementsPacket);
        Optional<AdvancementsPacket.AdvancementMapping> advancementMapping = advancementsPacket.advancementMappings().stream().findFirst();
        advancementMapping.ifPresent(advancementMapping1 -> {
            AdvancementsPacket.Advancement advancement = advancementMapping1.value();
            assertFalse(advancement.sendTelemetryData());
            var displayData = advancement.displayData();
            assertEquals(ItemStack.of(Material.ITEM_FRAME), displayData.icon());
            assertEquals(Component.text("unit test"), displayData.title());
            assertEquals(FrameType.TASK, displayData.frameType());
        });
    }
}

After:

@ExtendWith(MicrotusExtension.class)
class NotificationIntegrationTest {

    @Test
    void testBuilder() {
        var notification = Notification.builder()
                .icon(Material.ITEM_FRAME)
                .title(Component.text("unit test"))
                .frameType(FrameType.TASK)
                .build();
        assertEquals(FrameType.TASK, notification.type());
        assertEquals(ItemStack.of(Material.ITEM_FRAME), notification.icon());
        assertEquals(Component.text("unit test"), notification.title());
    }

    @Test
    void testSend(Env env) {
        var instance = env.createFlatInstance();
        var connection = env.createConnection();
        Collector<AdvancementsPacket> advancementsPacketCollector = connection.trackIncoming(AdvancementsPacket.class);
        var player = connection.connect(instance, new Pos(0, 42, 0)).join();
        var notification = Notification.builder()
                .icon(Material.ITEM_FRAME)
                .title(Component.text("unit test"))
                .frameType(FrameType.TASK)
                .build();
        notification.send(player);
        advancementsPacketCollector.assertCount(2);
        AdvancementsPacket advancementsPacket = advancementsPacketCollector.collect().get(1);
        assertNotNull(advancementsPacket);
        Optional<AdvancementsPacket.AdvancementMapping> advancementMapping = advancementsPacket.advancementMappings().stream().findFirst();
        advancementMapping.ifPresent(advancementMapping1 -> {
            AdvancementsPacket.Advancement advancement = advancementMapping1.value();
            assertFalse(advancement.sendTelemetryData());
            var displayData = advancement.displayData();
            assertEquals(ItemStack.of(Material.ITEM_FRAME), displayData.icon());
            assertEquals(Component.text("unit test"), displayData.title());
            assertEquals(FrameType.TASK, displayData.frameType());
        });
    }
}

Extension Class:

public class MicrotusExtension extends TypeBasedParameterResolver<Env> implements InvocationInterceptor {

    @Override
    public Env resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext)
            throws ParameterResolutionException {
        return Env.createInstance(MinecraftServer.updateProcess());
    }

    @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();
        });
    }
}

Metadata

Metadata

Assignees

Labels

documentationImprovements or additions to documentationenhancementNew feature or request

Type

No type

Projects

Status

✅ Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions