Skip to content
This repository was archived by the owner on May 14, 2025. It is now read-only.

Commit f68082e

Browse files
author
ritvik
committed
Move scanCommands() method to CommandScanner class
Signed-off-by: ritvik <rt308602@dal.ca>
1 parent e4d9ce7 commit f68082e

File tree

3 files changed

+50
-37
lines changed

3 files changed

+50
-37
lines changed

src/main/java/org/springframework/cli/runtime/command/CommandScanner.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.io.File;
2020
import java.io.IOException;
2121
import java.nio.file.Path;
22+
import java.nio.file.Paths;
2223
import java.util.ArrayList;
2324
import java.util.HashMap;
2425
import java.util.List;
@@ -30,6 +31,7 @@
3031
import org.slf4j.LoggerFactory;
3132

3233
import org.springframework.cli.SpringCliException;
34+
import org.springframework.cli.util.IoUtils;
3335

3436
/**
3537
* Scans a directory, by default .spring/commands in the current working directory, and
@@ -42,7 +44,7 @@
4244
*/
4345
public class CommandScanner {
4446

45-
private final Logger logger = LoggerFactory.getLogger(CommandScanner.class);
47+
private static final Logger logger = LoggerFactory.getLogger(CommandScanner.class);
4648

4749
private Path pathToScan;
4850

@@ -122,4 +124,12 @@ private Command getCommandObject(File directory) {
122124
return command;
123125
}
124126

127+
public static CommandScanResults scanCommands() {
128+
Path cwd = IoUtils.getWorkingDirectory().toAbsolutePath();
129+
Path pathToUse = Paths.get(cwd.toString(), ".spring", "commands");
130+
logger.debug("Looking for user-defined commands in directory " + pathToUse);
131+
CommandScanner scanner = new CommandScanner(pathToUse);
132+
return scanner.scan();
133+
}
134+
125135
}

src/main/java/org/springframework/cli/runtime/command/DynamicMethodCommandResolver.java

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@
1616

1717
package org.springframework.cli.runtime.command;
1818

19-
import java.nio.file.Path;
20-
import java.nio.file.Paths;
2119
import java.util.ArrayList;
2220
import java.util.Collection;
2321
import java.util.List;
@@ -31,7 +29,6 @@
3129

3230
import org.springframework.beans.factory.ObjectProvider;
3331
import org.springframework.cli.runtime.engine.model.ModelPopulator;
34-
import org.springframework.cli.util.IoUtils;
3532
import org.springframework.cli.util.TerminalMessage;
3633
import org.springframework.shell.command.CommandRegistration;
3734
import org.springframework.shell.command.CommandRegistration.BuilderSupplier;
@@ -71,19 +68,19 @@ public DynamicMethodCommandResolver(Collection<ModelPopulator> modelPopulators,
7168

7269
@Override
7370
public List<CommandRegistration> resolve() {
74-
CommandScanResults commandScanResults = scanCommands();
71+
CommandScanResults commandScanResults = CommandScanner.scanCommands();
7572
log.debug("Found commands " + commandScanResults);
7673
return registerSpringCliCommands(commandScanResults, modelPopulators, builder);
7774
}
7875

79-
protected CommandScanResults scanCommands() {
80-
Path cwd = IoUtils.getWorkingDirectory().toAbsolutePath();
81-
Path pathToUse = Paths.get(cwd.toString(), ".spring", "commands");
82-
log.debug("Looking for user-defined commands in directory " + pathToUse);
83-
CommandScanner scanner = new CommandScanner(pathToUse);
84-
CommandScanResults commandScanResults = scanner.scan();
85-
return commandScanResults;
86-
}
76+
// protected CommandScanResults scanCommands() {
77+
// Path cwd = IoUtils.getWorkingDirectory().toAbsolutePath();
78+
// Path pathToUse = Paths.get(cwd.toString(), ".spring", "commands");
79+
// log.debug("Looking for user-defined commands in directory " + pathToUse);
80+
// CommandScanner scanner = new CommandScanner(pathToUse);
81+
// CommandScanResults commandScanResults = scanner.scan();
82+
// return commandScanResults;
83+
// }
8784

8885
private List<CommandRegistration> registerSpringCliCommands(CommandScanResults results,
8986
Collection<ModelPopulator> modelPopulators, CommandRegistration.BuilderSupplier builderSupplier) {

src/test/java/org/springframework/cli/runtime/command/DynamicMethodCommandResolverTests.java

Lines changed: 30 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,19 @@
2323
import java.util.Map;
2424

2525
import org.junit.jupiter.api.Test;
26-
import org.mockito.Mockito;
26+
import org.junit.jupiter.api.extension.ExtendWith;
27+
import org.mockito.MockedStatic;
28+
import org.mockito.junit.jupiter.MockitoExtension;
2729

2830
import org.springframework.cli.runtime.engine.model.ModelPopulator;
2931
import org.springframework.cli.runtime.engine.model.SystemModelPopulator;
3032
import org.springframework.cli.util.TerminalMessage;
3133
import org.springframework.shell.command.CommandRegistration;
3234

3335
import static org.assertj.core.api.Assertions.assertThat;
36+
import static org.mockito.Mockito.mockStatic;
3437

38+
@ExtendWith(MockitoExtension.class)
3539
class DynamicMethodCommandResolverTests {
3640

3741
@Test
@@ -71,30 +75,32 @@ void testResolving() {
7175
modelPopulators.add(systemModelPopulator);
7276
DynamicMethodCommandResolver resolver = new DynamicMethodCommandResolver(modelPopulators,
7377
() -> CommandRegistration.builder(), TerminalMessage.noop(), null);
74-
// Move to mock scan so that we control results
75-
DynamicMethodCommandResolver spy = Mockito.spy(resolver);
76-
Mockito.when(spy.scanCommands()).thenReturn(commandScanResults);
77-
List<CommandRegistration> resolved = spy.resolve();
78-
79-
assertThat(resolved).hasSize(2);
80-
assertThat(resolved).satisfiesExactly(registration -> {
81-
assertThat(registration.getCommand()).isEqualTo("k8s-simple new");
82-
assertThat(registration.getDescription()).isEqualTo("subcommand description");
83-
assertThat(registration.getOptions()).hasSize(2);
84-
assertThat(registration.getOptions().get(0)).satisfies(option -> {
85-
assertThat(option.getLongNames()).contains("with-gusto");
86-
assertThat(option.getType().getType()).isEqualTo(Boolean.class);
87-
assertThat(option.getDescription()).isEqualTo("what a nice simple option");
88-
assertThat(option.getDefaultValue()).isEqualTo("true");
89-
assertThat(option.isRequired()).isTrue();
90-
});
91-
assertThat(registration.getOptions().get(1)).satisfies(option -> {
92-
assertThat(option.getLongNames()).contains("with-greeting");
93-
assertThat(option.getType().getType()).isEqualTo(String.class);
78+
79+
try (MockedStatic<CommandScanner> mockedCommandScanner = mockStatic(CommandScanner.class)) {
80+
mockedCommandScanner.when(CommandScanner::scanCommands).thenReturn(commandScanResults);
81+
82+
List<CommandRegistration> resolved = resolver.resolve();
83+
84+
assertThat(resolved).hasSize(2);
85+
assertThat(resolved).satisfiesExactly(registration -> {
86+
assertThat(registration.getCommand()).isEqualTo("k8s-simple new");
87+
assertThat(registration.getDescription()).isEqualTo("subcommand description");
88+
assertThat(registration.getOptions()).hasSize(2);
89+
assertThat(registration.getOptions().get(0)).satisfies(option -> {
90+
assertThat(option.getLongNames()).contains("with-gusto");
91+
assertThat(option.getType().getType()).isEqualTo(Boolean.class);
92+
assertThat(option.getDescription()).isEqualTo("what a nice simple option");
93+
assertThat(option.getDefaultValue()).isEqualTo("true");
94+
assertThat(option.isRequired()).isTrue();
95+
});
96+
assertThat(registration.getOptions().get(1)).satisfies(option -> {
97+
assertThat(option.getLongNames()).contains("with-greeting");
98+
assertThat(option.getType().getType()).isEqualTo(String.class);
99+
});
100+
}, registration -> {
101+
assertThat(registration.getCommand()).isEqualTo("k8s-simple new-services");
94102
});
95-
}, registration -> {
96-
assertThat(registration.getCommand()).isEqualTo("k8s-simple new-services");
97-
});
103+
}
98104
}
99105

100106
}

0 commit comments

Comments
 (0)