Skip to content

Commit

Permalink
#49: CommandLineOptions: POJO instead of interface
Browse files Browse the repository at this point in the history
- Requires less stubbing
- Easier test code
  • Loading branch information
marcphilipp committed Dec 6, 2015
1 parent 7dc017f commit 550e5b1
Show file tree
Hide file tree
Showing 6 changed files with 115 additions and 141 deletions.
Expand Up @@ -10,27 +10,93 @@

package org.junit.gen5.console.options;

import static java.util.Collections.emptyList;

import java.util.List;
import java.util.Optional;

public interface CommandLineOptions {
public class CommandLineOptions {

private boolean displayHelp;
private boolean exitCodeEnabled;
private boolean ansiColorOutputDisabled;
private boolean runAllTests;
private boolean hideDetails;
private String classnameFilter;
private List<String> tagsFilter = emptyList();
private List<String> additionalClasspathEntries = emptyList();
private List<String> arguments = emptyList();

public boolean isDisplayHelp() {
return displayHelp;
}

public void setDisplayHelp(boolean displayHelp) {
this.displayHelp = displayHelp;
}

public boolean isExitCodeEnabled() {
return exitCodeEnabled;
}

public void setExitCodeEnabled(boolean exitCodeEnabled) {
this.exitCodeEnabled = exitCodeEnabled;
}

public boolean isAnsiColorOutputDisabled() {
return ansiColorOutputDisabled;
}

public void setAnsiColorOutputDisabled(boolean ansiColorOutputDisabled) {
this.ansiColorOutputDisabled = ansiColorOutputDisabled;
}

public boolean isRunAllTests() {
return runAllTests;
}

public void setRunAllTests(boolean runAllTests) {
this.runAllTests = runAllTests;
}

public boolean isHideDetails() {
return hideDetails;
}

boolean isDisplayHelp();
public void setHideDetails(boolean hideDetails) {
this.hideDetails = hideDetails;
}

boolean isExitCodeEnabled();
public Optional<String> getClassnameFilter() {
return Optional.ofNullable(classnameFilter);
}

boolean isAnsiColorOutputDisabled();
public void setClassnameFilter(String classnameFilter) {
this.classnameFilter = classnameFilter;
}

boolean isRunAllTests();
public List<String> getTagsFilter() {
return tagsFilter;
}

boolean isHideDetails();
public void setTagsFilter(List<String> tagsFilter) {
this.tagsFilter = tagsFilter;
}

Optional<String> getClassnameFilter();
public List<String> getAdditionalClasspathEntries() {
return additionalClasspathEntries;
}

List<String> getTagsFilter();
public void setAdditionalClasspathEntries(List<String> additionalClasspathEntries) {
this.additionalClasspathEntries = additionalClasspathEntries;
}

List<String> getArguments();
public List<String> getArguments() {
return arguments;
}

List<String> getAdditionalClasspathEntries();
public void setArguments(List<String> arguments) {
this.arguments = arguments;
}

}

This file was deleted.

Expand Up @@ -23,8 +23,8 @@ public class JOptSimpleCommandLineOptionsParser implements CommandLineOptionsPar
public CommandLineOptions parse(String... arguments) {
AvailableOptions availableOptions = getAvailableOptions();
OptionParser parser = availableOptions.getParser();
OptionSet optionSet = parser.parse(arguments);
return new JOptSimpleCommandLineOptions(availableOptions, optionSet);
OptionSet detectedOptions = parser.parse(arguments);
return toCommandLineOptions(availableOptions, detectedOptions);
}

@Override
Expand All @@ -39,6 +39,20 @@ public void printHelp(Writer writer) {
}
}

private CommandLineOptions toCommandLineOptions(AvailableOptions options, OptionSet detectedOptions) {
CommandLineOptions result = new CommandLineOptions();
result.setDisplayHelp(detectedOptions.has(options.help));
result.setExitCodeEnabled(detectedOptions.has(options.enableExitCode));
result.setAnsiColorOutputDisabled(detectedOptions.has(options.disableAnsiColors));
result.setRunAllTests(detectedOptions.has(options.runAllTests));
result.setHideDetails(detectedOptions.has(options.hideDetails));
result.setClassnameFilter(detectedOptions.valueOf(options.classnameFilter));
result.setTagsFilter(detectedOptions.valuesOf(options.tagFilter));
result.setAdditionalClasspathEntries(detectedOptions.valuesOf(options.additionalClasspathEntries));
result.setArguments(detectedOptions.valuesOf(options.arguments));
return result;
}

private AvailableOptions getAvailableOptions() {
return new AvailableOptions();
}
Expand Down

This file was deleted.

Expand Up @@ -13,10 +13,8 @@
import static java.util.Collections.singletonList;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.gen5.api.Assertions.*;
import static org.junit.gen5.console.options.CommandLineOptionsStubs.runAllTestCommandLineOptions;
import static org.junit.gen5.engine.DummyTestEngine.TestResult.*;
import static org.junit.gen5.launcher.LauncherFactory.createLauncher;
import static org.mockito.Mockito.when;

import java.io.PrintWriter;
import java.io.StringWriter;
Expand All @@ -31,7 +29,9 @@ public class ExecuteTestsTaskTest {
@Test
public void executeWithoutExitCode() throws Exception {
StringWriter stringWriter = new StringWriter();
CommandLineOptions options = runAllTestCommandLineOptions();

CommandLineOptions options = new CommandLineOptions();
options.setRunAllTests(true);

DummyTestEngine dummyTestEngine = new DummyTestEngine();
dummyTestEngine.addTest("succeedingTest", SUCCESS, noOp());
Expand All @@ -46,8 +46,9 @@ public void executeWithoutExitCode() throws Exception {

@Test
public void executeWithExitCode() throws Exception {
CommandLineOptions options = runAllTestCommandLineOptions();
when(options.isExitCodeEnabled()).thenReturn(true);
CommandLineOptions options = new CommandLineOptions();
options.setRunAllTests(true);
options.setExitCodeEnabled(true);

DummyTestEngine dummyTestEngine = new DummyTestEngine();
dummyTestEngine.addTest("succeedingTest", SUCCESS, noOp());
Expand All @@ -62,9 +63,9 @@ public void executeWithExitCode() throws Exception {
@Test
public void executeWithCustomClassLoader() throws Exception {
StringWriter stringWriter = new StringWriter();

CommandLineOptions options = runAllTestCommandLineOptions();
when(options.getAdditionalClasspathEntries()).thenReturn(singletonList("."));
CommandLineOptions options = new CommandLineOptions();
options.setRunAllTests(true);
options.setAdditionalClasspathEntries(singletonList("."));

ClassLoader oldClassLoader = ReflectionUtils.getDefaultClassLoader();
DummyTestEngine dummyTestEngine = new DummyTestEngine();
Expand All @@ -82,8 +83,9 @@ public void executeWithCustomClassLoader() throws Exception {
public void executeWithHiddenDetails() throws Exception {
StringWriter stringWriter = new StringWriter();

CommandLineOptions options = runAllTestCommandLineOptions();
when(options.isHideDetails()).thenReturn(true);
CommandLineOptions options = new CommandLineOptions();
options.setRunAllTests(true);
options.setHideDetails(true);

DummyTestEngine dummyTestEngine = new DummyTestEngine();
dummyTestEngine.addTest("failingTest", FAILURE, noOp());
Expand Down
Expand Up @@ -14,13 +14,11 @@
import static java.util.Collections.*;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.gen5.api.Assertions.*;
import static org.junit.gen5.console.options.CommandLineOptionsStubs.validCommandLineOptions;
import static org.mockito.Matchers.notNull;
import static org.mockito.Mockito.*;

import java.io.File;
import java.lang.reflect.Method;
import java.util.Optional;

import org.junit.Test;
import org.junit.gen5.console.options.CommandLineOptions;
Expand All @@ -31,13 +29,13 @@

public class TestPlanSpecificationCreatorTest {

private CommandLineOptions options = validCommandLineOptions();
private CommandLineOptions options = new CommandLineOptions();
private TestPlanSpecificationElementVisitor visitor = mock(TestPlanSpecificationElementVisitor.class);

@Test
public void convertsClassArgument() {
Class<?> testClass = getClass();
when(options.getArguments()).thenReturn(singletonList(testClass.getName()));
options.setArguments(singletonList(testClass.getName()));

convertAndVisit();

Expand All @@ -49,7 +47,7 @@ public void convertsMethodArgument() throws Exception {
Class<?> testClass = getClass();
// TODO #39 Use @TestName
Method testMethod = testClass.getDeclaredMethod("convertsMethodArgument");
when(options.getArguments()).thenReturn(singletonList(testClass.getName() + "#" + testMethod.getName()));
options.setArguments(singletonList(testClass.getName() + "#" + testMethod.getName()));

convertAndVisit();

Expand All @@ -59,7 +57,7 @@ public void convertsMethodArgument() throws Exception {
@Test
public void convertsPackageArgument() {
String packageName = getClass().getPackage().getName();
when(options.getArguments()).thenReturn(singletonList(packageName));
options.setArguments(singletonList(packageName));

convertAndVisit();

Expand All @@ -68,7 +66,7 @@ public void convertsPackageArgument() {

@Test
public void convertsAllOptionWithoutExplicitRootDirectories() {
when(options.isRunAllTests()).thenReturn(true);
options.setRunAllTests(true);

convertAndVisit();

Expand All @@ -77,8 +75,8 @@ public void convertsAllOptionWithoutExplicitRootDirectories() {

@Test
public void convertsAllOptionWithExplicitRootDirectories() {
when(options.isRunAllTests()).thenReturn(true);
when(options.getArguments()).thenReturn(asList(".", ".."));
options.setRunAllTests(true);
options.setArguments(asList(".", ".."));

convertAndVisit();

Expand All @@ -89,8 +87,8 @@ public void convertsAllOptionWithExplicitRootDirectories() {

@Test
public void convertsClassnameFilterOption() {
when(options.isRunAllTests()).thenReturn(true);
when(options.getClassnameFilter()).thenReturn(Optional.of(".*Test"));
options.setRunAllTests(true);
options.setClassnameFilter(".*Test");

TestPlanSpecification specification = convert();

Expand All @@ -100,8 +98,8 @@ public void convertsClassnameFilterOption() {

@Test
public void convertsTagFilterOption() {
when(options.isRunAllTests()).thenReturn(true);
when(options.getTagsFilter()).thenReturn(asList("fast", "slow"));
options.setRunAllTests(true);
options.setTagsFilter(asList("fast", "slow"));

TestPlanSpecification specification = convert();

Expand Down

0 comments on commit 550e5b1

Please sign in to comment.