### Question:
DefaultEventManager implements EventManager { @NotNull @Override public <T extends Event> Task<T> callEventAsync(@NotNull Class<? extends T> event) { return Task.supply(() -> this.callEvent(event)); }  @Nullable @Override T callEvent(@NotNull Class<? extends T> event); @NotNull @Override T callEvent(@NotNull T event); @NotNull @Override Task<T> callEventAsync(@NotNull Class<? extends T> event); @NotNull @Override Task<T> callEventAsync(@NotNull T event); @Override void registerListener(@NotNull Object listener); @Override void registerListener(@NotNull Class<?> listener); @Override void unregisterListener(@NotNull Object listener); @Override void unregisterAll(); @NotNull @Override @UnmodifiableView List<ListenerContainer> getListeners();  }### Answer:
@Test @Order(3) @Timeout(5) void testCallEventAsync() { TestEvent event = this.eventManager.callEventAsync(new TestEvent()).getUninterruptedly(); Assertions.assertNotNull(event); Assertions.assertEquals(2, event.counter.get()); }
@Test @Order(4) @Timeout(5) void testCallEventAsyncClazz() { TestEvent event = this.eventManager.callEventAsync(TestEvent.class).getUninterruptedly(); Assertions.assertNotNull(event); Assertions.assertEquals(2, event.counter.get()); }