From c39e0517faa89d6816ee0ec4d9d6aafb5b8ebf03 Mon Sep 17 00:00:00 2001 From: Citymonstret Date: Sat, 28 May 2022 17:14:03 +0200 Subject: [PATCH] chore: add test for issue #281 cannot replicate the issue (anymore). --- .../commandframework/issue/Issue281.java | 91 +++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 cloud-core/src/test/java/cloud/commandframework/issue/Issue281.java diff --git a/cloud-core/src/test/java/cloud/commandframework/issue/Issue281.java b/cloud-core/src/test/java/cloud/commandframework/issue/Issue281.java new file mode 100644 index 00000000..7b2f0201 --- /dev/null +++ b/cloud-core/src/test/java/cloud/commandframework/issue/Issue281.java @@ -0,0 +1,91 @@ +// +// MIT License +// +// Copyright (c) 2021 Alexander Söderberg & Contributors +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// +package cloud.commandframework.issue; + +import cloud.commandframework.CommandManager; +import cloud.commandframework.TestCommandSender; +import cloud.commandframework.exceptions.CommandExecutionException; +import cloud.commandframework.execution.AsynchronousCommandExecutionCoordinator; +import cloud.commandframework.internal.CommandRegistrationHandler; +import cloud.commandframework.meta.CommandMeta; +import cloud.commandframework.meta.SimpleCommandMeta; +import java.util.concurrent.CompletionException; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.junit.jupiter.api.Test; + +import static com.google.common.truth.Truth.assertThat; +import static org.junit.jupiter.api.Assertions.assertThrows; + +/** + * Test for https://github.com/Incendo/cloud/issues/281. + */ +@SuppressWarnings("unchecked") +class Issue281 { + + @Test + void commandExceptionShouldNotBeSwallowed() { + // Arrange + final CommandManager commandManager = new CommandManager( + AsynchronousCommandExecutionCoordinator.newBuilder().withSynchronousParsing().build(), + CommandRegistrationHandler.nullCommandRegistrationHandler() + ) { + @Override + public boolean hasPermission( + @NonNull final TestCommandSender sender, + @NonNull final String permission + ) { + return true; + } + + @Override + public @NonNull CommandMeta createDefaultCommandMeta() { + return SimpleCommandMeta.empty(); + } + }; + + final CustomException customException = new CustomException(); + + commandManager.command( + commandManager.commandBuilder("test") + .handler((context) -> { + throw customException; + }) + .build() + ); + + // Act + final CompletionException exception = assertThrows( + CompletionException.class, + () -> commandManager.executeCommand(new TestCommandSender(), "test").join() + ); + + // Assert + assertThat(exception).hasCauseThat().isInstanceOf(CommandExecutionException.class); + assertThat(exception).hasCauseThat().hasCauseThat().isInstanceOf(CustomException.class); + } + + @SuppressWarnings("serial") + private static final class CustomException extends RuntimeException { + } +}