diff --git a/spring-shell-samples/src/main/java/org/springframework/shell/samples/e2e/ErrorHandlingCommands.java b/spring-shell-samples/src/main/java/org/springframework/shell/samples/e2e/ErrorHandlingCommands.java index 8831187e..c3af77ea 100644 --- a/spring-shell-samples/src/main/java/org/springframework/shell/samples/e2e/ErrorHandlingCommands.java +++ b/spring-shell-samples/src/main/java/org/springframework/shell/samples/e2e/ErrorHandlingCommands.java @@ -167,7 +167,8 @@ public class ErrorHandlingCommands { return CommandHandlingResult.of("Hi, handled custom exception 3\n", 3); } if (e instanceof CustomException4) { - return CommandHandlingResult.of("Hi, handled custom exception\n", 42); + String msg = String.format("Hi, handled custom exception %s\n", e); + return CommandHandlingResult.of(msg, 42); } if (e instanceof IllegalArgumentException) { return CommandHandlingResult.of("Hi, handled illegal exception\n", 42); diff --git a/spring-shell-samples/src/test/java/org/springframework/shell/samples/AbstractSampleTests.java b/spring-shell-samples/src/test/java/org/springframework/shell/samples/AbstractSampleTests.java index 2db9f4fe..3c7484ac 100644 --- a/spring-shell-samples/src/test/java/org/springframework/shell/samples/AbstractSampleTests.java +++ b/spring-shell-samples/src/test/java/org/springframework/shell/samples/AbstractSampleTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2022 the original author or authors. + * Copyright 2022-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,8 +15,11 @@ */ package org.springframework.shell.samples; +import java.util.List; import java.util.concurrent.TimeUnit; +import org.assertj.core.api.Condition; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Import; import org.springframework.shell.samples.standard.ResolvedCommands; @@ -29,9 +32,10 @@ import org.springframework.shell.test.autoconfigure.ShellTest; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.annotation.DirtiesContext.ClassMode; +import static org.assertj.core.api.Assertions.assertThat; import static org.awaitility.Awaitility.await; -@ShellTest +@ShellTest(terminalWidth = 120) @Import(ResolvedCommands.ResolvedCommandsConfiguration.class) @DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD) public class AbstractSampleTests { @@ -45,6 +49,17 @@ public class AbstractSampleTests { }); } + protected void assertScreenNotContainsText(BaseShellSession session, String textFound, String textNotFound) { + Condition notCondition = new Condition<>(line -> line.contains(textNotFound), + String.format("Text '%s' not found", textNotFound)); + + await().atMost(2, TimeUnit.SECONDS).untilAsserted(() -> { + ShellAssertions.assertThat(session.screen()).containsText(textFound); + List lines = session.screen().lines(); + assertThat(lines).areNot(notCondition); + }); + } + protected BaseShellSession createSession(String command, boolean interactive) { if (interactive) { InteractiveShellSession session = client.interactive().run(); diff --git a/spring-shell-samples/src/test/java/org/springframework/shell/samples/e2e/ArityCommandsTests.java b/spring-shell-samples/src/test/java/org/springframework/shell/samples/e2e/ArityCommandsTests.java new file mode 100644 index 00000000..8a4fc28b --- /dev/null +++ b/spring-shell-samples/src/test/java/org/springframework/shell/samples/e2e/ArityCommandsTests.java @@ -0,0 +1,56 @@ +/* + * Copyright 2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.shell.samples.e2e; + +import org.junit.jupiter.params.ParameterizedTest; + +import org.springframework.shell.samples.AbstractSampleTests; +import org.springframework.shell.samples.e2e.ArityCommands.LegacyAnnotation; +import org.springframework.shell.samples.e2e.ArityCommands.Registration; +import org.springframework.shell.test.ShellTestClient.BaseShellSession; +import org.springframework.test.context.ContextConfiguration; + +@ContextConfiguration(classes = { LegacyAnnotation.class, Registration.class }) +class ArityCommandsTests extends AbstractSampleTests { + + @ParameterizedTest + @E2ESource(command = "arity-boolean-default-true") + void defaultBooleanValue(String command, boolean interactive) { + BaseShellSession session = createSession(command, interactive); + assertScreenContainsText(session, "Hello true"); + } + + @ParameterizedTest + @E2ESource(command = "arity-boolean-default-true --overwrite false") + void defaultBooleanValueOverwrite(String command, boolean interactive) { + BaseShellSession session = createSession(command, interactive); + assertScreenContainsText(session, "Hello false"); + } + + @ParameterizedTest + @E2ESource(command = "arity-string-array --arg1 foo bar") + void arityStringArray(String command, boolean interactive) { + BaseShellSession session = createSession(command, interactive); + assertScreenContainsText(session, "Hello [foo, bar]"); + } + + @ParameterizedTest + @E2ESource(command = "arity-float-array --arg1 1 2") + void arityFloatArray(String command, boolean interactive) { + BaseShellSession session = createSession(command, interactive); + assertScreenContainsText(session, "Hello [1.0,2.0]"); + } +} diff --git a/spring-shell-samples/src/test/java/org/springframework/shell/samples/e2e/DefaultValueCommandsTests.java b/spring-shell-samples/src/test/java/org/springframework/shell/samples/e2e/DefaultValueCommandsTests.java new file mode 100644 index 00000000..799cb841 --- /dev/null +++ b/spring-shell-samples/src/test/java/org/springframework/shell/samples/e2e/DefaultValueCommandsTests.java @@ -0,0 +1,56 @@ +/* + * Copyright 2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.shell.samples.e2e; + +import org.junit.jupiter.params.ParameterizedTest; + +import org.springframework.shell.samples.AbstractSampleTests; +import org.springframework.shell.samples.e2e.DefaultValueCommands.LegacyAnnotation; +import org.springframework.shell.samples.e2e.DefaultValueCommands.Registration; +import org.springframework.shell.test.ShellTestClient.BaseShellSession; +import org.springframework.test.context.ContextConfiguration; + +@ContextConfiguration(classes = { LegacyAnnotation.class, Registration.class }) +class DefaultValueCommandsTests extends AbstractSampleTests { + + @ParameterizedTest + @E2ESource(command = "default-value") + void defaultValue(String command, boolean interactive) { + BaseShellSession session = createSession(command, interactive); + assertScreenContainsText(session, "Hello hi"); + } + + @ParameterizedTest + @E2ESource(command = "default-value-boolean1") + void defaultValueBoolean1(String command, boolean interactive) { + BaseShellSession session = createSession(command, interactive); + assertScreenContainsText(session, "Hello false"); + } + + @ParameterizedTest + @E2ESource(command = "default-value-boolean2") + void defaultValueBoolean2(String command, boolean interactive) { + BaseShellSession session = createSession(command, interactive); + assertScreenContainsText(session, "Hello true"); + } + + @ParameterizedTest + @E2ESource(command = "default-value-boolean3") + void defaultValueBoolean3(String command, boolean interactive) { + BaseShellSession session = createSession(command, interactive); + assertScreenContainsText(session, "Hello false"); + } +} diff --git a/spring-shell-samples/src/test/java/org/springframework/shell/samples/e2e/E2EArgumentsProvider.java b/spring-shell-samples/src/test/java/org/springframework/shell/samples/e2e/E2EArgumentsProvider.java new file mode 100644 index 00000000..9727c12d --- /dev/null +++ b/spring-shell-samples/src/test/java/org/springframework/shell/samples/e2e/E2EArgumentsProvider.java @@ -0,0 +1,52 @@ +/* + * Copyright 2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.shell.samples.e2e; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Stream; + +import org.junit.jupiter.api.extension.ExtensionContext; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.ArgumentsProvider; +import org.junit.jupiter.params.support.AnnotationConsumer; + +class E2EArgumentsProvider implements ArgumentsProvider, AnnotationConsumer { + + private E2ESource annotation; + + @Override + public void accept(E2ESource annotation) { + this.annotation = annotation; + } + + @Override + public Stream provideArguments(ExtensionContext context) throws Exception { + String command = this.annotation.command(); + List arguments = new ArrayList<>(); + boolean anno = this.annotation.anno(); + boolean reg = this.annotation.reg(); + if (anno) { + arguments.add(Arguments.of(String.format("e2e %s %s", "anno", command), false)); + arguments.add(Arguments.of(String.format("e2e %s %s", "anno", command), true)); + } + if (reg) { + arguments.add(Arguments.of(String.format("e2e %s %s", "reg", command), false)); + arguments.add(Arguments.of(String.format("e2e %s %s", "reg", command), true)); + } + return arguments.stream(); + } +} diff --git a/spring-shell-samples/src/test/java/org/springframework/shell/samples/e2e/E2ESource.java b/spring-shell-samples/src/test/java/org/springframework/shell/samples/e2e/E2ESource.java new file mode 100644 index 00000000..9ab22425 --- /dev/null +++ b/spring-shell-samples/src/test/java/org/springframework/shell/samples/e2e/E2ESource.java @@ -0,0 +1,42 @@ +/* + * Copyright 2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.shell.samples.e2e; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import org.junit.jupiter.params.provider.ArgumentsSource; + +/** + * JUnit source creating a matrix for command combinations. + * + * @author Janne Valkealahti + */ +@Target({ ElementType.ANNOTATION_TYPE, ElementType.METHOD }) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@ArgumentsSource(E2EArgumentsProvider.class) +@interface E2ESource { + + String command(); + + boolean anno() default true; + + boolean reg() default true; +} diff --git a/spring-shell-samples/src/test/java/org/springframework/shell/samples/e2e/ErrorHandlingCommandsTests.java b/spring-shell-samples/src/test/java/org/springframework/shell/samples/e2e/ErrorHandlingCommandsTests.java new file mode 100644 index 00000000..ea12f21d --- /dev/null +++ b/spring-shell-samples/src/test/java/org/springframework/shell/samples/e2e/ErrorHandlingCommandsTests.java @@ -0,0 +1,73 @@ +/* + * Copyright 2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.shell.samples.e2e; + +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.params.ParameterizedTest; + +import org.springframework.shell.samples.AbstractSampleTests; +import org.springframework.shell.samples.e2e.ErrorHandlingCommands.LegacyAnnotation; +import org.springframework.shell.samples.e2e.ErrorHandlingCommands.Registration; +import org.springframework.shell.test.ShellTestClient.BaseShellSession; +import org.springframework.test.context.ContextConfiguration; + +@ContextConfiguration(classes = { LegacyAnnotation.class, Registration.class }) +class ErrorHandlingCommandsTests extends AbstractSampleTests { + + @ParameterizedTest + @E2ESource(command = "error-handling --arg1 throw1") + void testErrorHandling1(String command, boolean interactive) { + BaseShellSession session = createSession(command, interactive); + assertScreenContainsText(session, "Hi, handled custom exception"); + } + + @Disabled("trouble with spring-shell-test") + @ParameterizedTest + @E2ESource(command = "error-handling --arg1 throw2") + void testErrorHandling2(String command, boolean interactive) { + BaseShellSession session = createSession(command, interactive); + assertScreenContainsText(session, "org.springframework.shell.samples.e2e.ErrorHandlingCommands$CustomException2"); + } + + @Disabled("trouble with spring-shell-test") + @ParameterizedTest + @E2ESource(command = "error-handling --arg1 throw3") + void testErrorHandling3(String command, boolean interactive) { + BaseShellSession session = createSession(command, interactive); + assertScreenContainsText(session, "java.lang.RuntimeException"); + } + + @ParameterizedTest + @E2ESource(command = "error-handling --arg1 throw4") + void testErrorHandling4(String command, boolean interactive) { + BaseShellSession session = createSession(command, interactive); + assertScreenContainsText(session, "Hi, handled illegal exception"); + } + + @ParameterizedTest + @E2ESource(command = "error-handling --arg1 throw5") + void testErrorHandling5(String command, boolean interactive) { + BaseShellSession session = createSession(command, interactive); + assertScreenContainsText(session, "Hi, handled custom exception 3"); + } + + @ParameterizedTest + @E2ESource(command = "error-handling --arg1 throw6") + void testErrorHandling6(String command, boolean interactive) { + BaseShellSession session = createSession(command, interactive); + assertScreenContainsText(session, "Hi, handled custom exception org.springframework.shell.samples.e2e.ErrorHandlingCommands$CustomException4"); + } +} diff --git a/spring-shell-samples/src/test/java/org/springframework/shell/samples/e2e/HelpOptionCommandsTests.java b/spring-shell-samples/src/test/java/org/springframework/shell/samples/e2e/HelpOptionCommandsTests.java new file mode 100644 index 00000000..33a60aca --- /dev/null +++ b/spring-shell-samples/src/test/java/org/springframework/shell/samples/e2e/HelpOptionCommandsTests.java @@ -0,0 +1,49 @@ +/* + * Copyright 2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.shell.samples.e2e; + +import org.junit.jupiter.params.ParameterizedTest; + +import org.springframework.shell.samples.AbstractSampleTests; +import org.springframework.shell.samples.e2e.HelpOptionCommands.LegacyAnnotation; +import org.springframework.shell.samples.e2e.HelpOptionCommands.Registration; +import org.springframework.shell.test.ShellTestClient.BaseShellSession; +import org.springframework.test.context.ContextConfiguration; + +@ContextConfiguration(classes = { LegacyAnnotation.class, Registration.class }) +class HelpOptionCommandsTests extends AbstractSampleTests { + + @ParameterizedTest + @E2ESource(command = "help-option-default -h") + void testHelpOptionDefault(String command, boolean interactive) { + BaseShellSession session = createSession(command, interactive); + assertScreenContainsText(session, "NAME"); + } + + @ParameterizedTest + @E2ESource(command = "help-option-exists --help hi", anno = false) + void testHelpOptionExists1(String command, boolean interactive) { + BaseShellSession session = createSession(command, interactive); + assertScreenContainsText(session, "Hello hi"); + } + + @ParameterizedTest + @E2ESource(command = "help-option-exists --myhelp", anno = false) + void testHelpOptionExists2(String command, boolean interactive) { + BaseShellSession session = createSession(command, interactive); + assertScreenContainsText(session, "NAME"); + } +} diff --git a/spring-shell-samples/src/test/java/org/springframework/shell/samples/e2e/HiddenCommandsTests.java b/spring-shell-samples/src/test/java/org/springframework/shell/samples/e2e/HiddenCommandsTests.java new file mode 100644 index 00000000..745aeb57 --- /dev/null +++ b/spring-shell-samples/src/test/java/org/springframework/shell/samples/e2e/HiddenCommandsTests.java @@ -0,0 +1,41 @@ +/* + * Copyright 2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.shell.samples.e2e; + +import org.junit.jupiter.params.ParameterizedTest; + +import org.springframework.shell.samples.AbstractSampleTests; +import org.springframework.shell.samples.e2e.HiddenCommands.Registration; +import org.springframework.shell.test.ShellTestClient.BaseShellSession; +import org.springframework.test.context.ContextConfiguration; + +@ContextConfiguration(classes = { Registration.class }) +class HiddenCommandsTests extends AbstractSampleTests { + + @ParameterizedTest + @E2ESource(command = "hidden-1", anno = false) + void hiddenCommandExecutes(String command, boolean interactive) { + BaseShellSession session = createSession(command, interactive); + assertScreenContainsText(session, "Hello from hidden command"); + } + + @ParameterizedTest + @E2ESource(command = "help", anno = false) + void hiddenNotVisibleInHelp(String command, boolean interactive) { + BaseShellSession session = createSession("help", interactive); + assertScreenNotContainsText(session, "help", "hidden-1"); + } +} diff --git a/spring-shell-samples/src/test/java/org/springframework/shell/samples/e2e/OptionTypeCommandsTests.java b/spring-shell-samples/src/test/java/org/springframework/shell/samples/e2e/OptionTypeCommandsTests.java new file mode 100644 index 00000000..00c80bb3 --- /dev/null +++ b/spring-shell-samples/src/test/java/org/springframework/shell/samples/e2e/OptionTypeCommandsTests.java @@ -0,0 +1,98 @@ +/* + * Copyright 2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.shell.samples.e2e; + +import org.junit.jupiter.params.ParameterizedTest; + +import org.springframework.shell.samples.AbstractSampleTests; +import org.springframework.shell.samples.e2e.OptionTypeCommands.LegacyAnnotation; +import org.springframework.shell.samples.e2e.OptionTypeCommands.Registration; +import org.springframework.shell.test.ShellTestClient.BaseShellSession; +import org.springframework.test.context.ContextConfiguration; + +@ContextConfiguration(classes = { LegacyAnnotation.class, Registration.class }) +class OptionTypeCommandsTests extends AbstractSampleTests { + + @ParameterizedTest + @E2ESource(command = "option-type-string --arg1 hi") + void optionTypeString(String command, boolean interactive) { + BaseShellSession session = createSession(command, interactive); + assertScreenContainsText(session, "Hello hi"); + } + + @ParameterizedTest + @E2ESource(command = "option-type-boolean", reg = false) + void optionTypeBooleanWithAnno(String command, boolean interactive) { + BaseShellSession session = createSession(command, interactive); + assertScreenContainsText(session, "Hello arg1=false arg2=true arg3=false arg4=false arg5=true arg6=false"); + } + + @ParameterizedTest + @E2ESource(command = "option-type-boolean", anno = false) + void optionTypeBooleanWithReg(String command, boolean interactive) { + BaseShellSession session = createSession(command, interactive); + assertScreenContainsText(session, "Hello arg1=false arg2=true arg3=false arg4=null arg5=true arg6=false"); + } + + @ParameterizedTest + @E2ESource(command = "option-type-integer --arg1 1 --arg2 2") + void optionTypeInteger(String command, boolean interactive) { + BaseShellSession session = createSession(command, interactive); + assertScreenContainsText(session, "Hello '1' '2'"); + } + + @ParameterizedTest + @E2ESource(command = "option-type-enum --arg1 ONE") + void optionTypeEnum(String command, boolean interactive) { + BaseShellSession session = createSession(command, interactive); + assertScreenContainsText(session, "Hello ONE"); + } + + @ParameterizedTest + @E2ESource(command = "option-type-string-array --arg1 one two") + void optionTypeStringArray(String command, boolean interactive) { + BaseShellSession session = createSession(command, interactive); + assertScreenContainsText(session, "Hello [one,two]"); + } + + @ParameterizedTest + @E2ESource(command = "option-type-int-array --arg1 1 2") + void optionTypeIntArray(String command, boolean interactive) { + BaseShellSession session = createSession(command, interactive); + assertScreenContainsText(session, "Hello [1,2]"); + } + + @ParameterizedTest + @E2ESource(command = "option-type-string-list --arg1 one two") + void optionTypeStringList(String command, boolean interactive) { + BaseShellSession session = createSession(command, interactive); + assertScreenContainsText(session, "Hello [one, two]"); + } + + @ParameterizedTest + @E2ESource(command = "option-type-string-set --arg1 one two") + void optionTypeStringSet(String command, boolean interactive) { + BaseShellSession session = createSession(command, interactive); + assertScreenContainsText(session, "Hello [one, two]"); + } + + @ParameterizedTest + @E2ESource(command = "option-type-string-collection --arg1 one two") + void optionTypeStringCollection(String command, boolean interactive) { + BaseShellSession session = createSession(command, interactive); + assertScreenContainsText(session, "Hello [one, two]"); + } +} diff --git a/spring-shell-samples/src/test/java/org/springframework/shell/samples/e2e/OptionalValueCommandsTests.java b/spring-shell-samples/src/test/java/org/springframework/shell/samples/e2e/OptionalValueCommandsTests.java new file mode 100644 index 00000000..1e8cdc07 --- /dev/null +++ b/spring-shell-samples/src/test/java/org/springframework/shell/samples/e2e/OptionalValueCommandsTests.java @@ -0,0 +1,35 @@ +/* + * Copyright 2023 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.shell.samples.e2e; + +import org.junit.jupiter.params.ParameterizedTest; + +import org.springframework.shell.samples.AbstractSampleTests; +import org.springframework.shell.samples.e2e.OptionalValueCommands.LegacyAnnotation; +import org.springframework.shell.samples.e2e.OptionalValueCommands.Registration; +import org.springframework.shell.test.ShellTestClient.BaseShellSession; +import org.springframework.test.context.ContextConfiguration; + +@ContextConfiguration(classes = { LegacyAnnotation.class, Registration.class }) +class OptionalValueCommandsTests extends AbstractSampleTests { + + @ParameterizedTest + @E2ESource(command = "optional-value") + void optionalValueResolvesToNull(String command, boolean interactive) { + BaseShellSession session = createSession(command, interactive); + assertScreenContainsText(session, "Hello null"); + } +} diff --git a/spring-shell-samples/src/test/java/org/springframework/shell/samples/e2e/RequiredValueCommandsTests.java b/spring-shell-samples/src/test/java/org/springframework/shell/samples/e2e/RequiredValueCommandsTests.java index 112c9ee9..7938b125 100644 --- a/spring-shell-samples/src/test/java/org/springframework/shell/samples/e2e/RequiredValueCommandsTests.java +++ b/spring-shell-samples/src/test/java/org/springframework/shell/samples/e2e/RequiredValueCommandsTests.java @@ -16,7 +16,6 @@ package org.springframework.shell.samples.e2e; import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.CsvSource; import org.springframework.shell.samples.AbstractSampleTests; import org.springframework.shell.samples.e2e.RequiredValueCommands.LegacyAnnotation; @@ -24,16 +23,11 @@ import org.springframework.shell.samples.e2e.RequiredValueCommands.Registration; import org.springframework.shell.test.ShellTestClient.BaseShellSession; import org.springframework.test.context.ContextConfiguration; -@ContextConfiguration(classes = {LegacyAnnotation.class, Registration.class}) +@ContextConfiguration(classes = { LegacyAnnotation.class, Registration.class }) class RequiredValueCommandsTests extends AbstractSampleTests { @ParameterizedTest - @CsvSource({ - "e2e anno required-value,false", - "e2e reg required-value,false", - "e2e anno required-value,true", - "e2e reg required-value,true" - }) + @E2ESource(command = "required-value") void shouldRequireOption(String command, boolean interactive) { BaseShellSession session = createSession(command, interactive); assertScreenContainsText(session, "Missing mandatory option");