Fix ShellOption with required

- Where applicable mark option required so that
  user is notified instead of blindly using null.
- Fixes #436
This commit is contained in:
Janne Valkealahti
2022-06-02 08:41:48 +01:00
parent 0be37d164f
commit f7992a682e
2 changed files with 28 additions and 2 deletions

View File

@@ -140,6 +140,9 @@ public class StandardMethodTargetRegistrar implements MethodTargetRegistrar, App
&& !ObjectUtils.nullSafeEquals(so.defaultValue(), ShellOption.NULL)) { && !ObjectUtils.nullSafeEquals(so.defaultValue(), ShellOption.NULL)) {
optionSpec.defaultValue(so.defaultValue()); optionSpec.defaultValue(so.defaultValue());
} }
else {
optionSpec.required();
}
} }
} }
else { else {

View File

@@ -64,7 +64,7 @@ public class StandardMethodTargetRegistrarTests {
@Test @Test
public void testRegistrations() { public void testRegistrations() {
applicationContext = new AnnotationConfigApplicationContext(Sample.class); applicationContext = new AnnotationConfigApplicationContext(Sample1.class);
registrar.setApplicationContext(applicationContext); registrar.setApplicationContext(applicationContext);
registrar.register(catalog); registrar.register(catalog);
Map<String, CommandRegistration> registrations = catalog.getRegistrations(); Map<String, CommandRegistration> registrations = catalog.getRegistrations();
@@ -74,6 +74,7 @@ public class StandardMethodTargetRegistrarTests {
assertThat(registrations.get("say-hello").getAvailability()).isNotNull(); assertThat(registrations.get("say-hello").getAvailability()).isNotNull();
assertThat(registrations.get("say-hello").getOptions()).hasSize(1); assertThat(registrations.get("say-hello").getOptions()).hasSize(1);
assertThat(registrations.get("say-hello").getOptions().get(0).getLongNames()).containsExactly("what"); assertThat(registrations.get("say-hello").getOptions().get(0).getLongNames()).containsExactly("what");
assertThat(registrations.get("say-hello").getOptions().get(0).isRequired()).isTrue();
assertThat(registrations.get("hi")).isNotNull(); assertThat(registrations.get("hi")).isNotNull();
assertThat(registrations.get("hi").getAvailability()).isNotNull(); assertThat(registrations.get("hi").getAvailability()).isNotNull();
@@ -83,7 +84,7 @@ public class StandardMethodTargetRegistrarTests {
} }
@ShellComponent @ShellComponent
public static class Sample { public static class Sample1 {
@ShellMethod("some command") @ShellMethod("some command")
public String sayHello(String what) { public String sayHello(String what) {
@@ -96,6 +97,28 @@ public class StandardMethodTargetRegistrarTests {
} }
} }
@Test
public void testOptionRequiredWithAnnotation() {
applicationContext = new AnnotationConfigApplicationContext(Sample2.class);
registrar.setApplicationContext(applicationContext);
registrar.register(catalog);
Map<String, CommandRegistration> registrations = catalog.getRegistrations();
assertThat(registrations).hasSize(1);
assertThat(registrations.get("say-hello")).isNotNull();
assertThat(registrations.get("say-hello").getOptions()).hasSize(1);
assertThat(registrations.get("say-hello").getOptions().get(0).isRequired()).isTrue();
}
@ShellComponent
public static class Sample2 {
@ShellMethod("some command")
public String sayHello(@ShellOption String what) {
return "hello " + what;
}
}
@Test @Test
public void testAvailabilityIndicators() { public void testAvailabilityIndicators() {
applicationContext = new AnnotationConfigApplicationContext(SampleWithAvailability.class); applicationContext = new AnnotationConfigApplicationContext(SampleWithAvailability.class);