From bbbdbb57b3e778be44fbdba40656cc1bb627cbd0 Mon Sep 17 00:00:00 2001 From: pesse Date: Thu, 12 Mar 2020 22:08:39 +0100 Subject: [PATCH 1/6] Add command-line param `--coverage-schemes` --- src/main/java/org/utplsql/cli/RunPicocliCommand.java | 8 +++++++- .../java/org/utplsql/cli/config/RunCommandConfig.java | 8 ++++++-- src/test/java/org/utplsql/cli/PicocliRunCommandTest.java | 4 +++- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/utplsql/cli/RunPicocliCommand.java b/src/main/java/org/utplsql/cli/RunPicocliCommand.java index da0d871..c87826b 100644 --- a/src/main/java/org/utplsql/cli/RunPicocliCommand.java +++ b/src/main/java/org/utplsql/cli/RunPicocliCommand.java @@ -28,6 +28,11 @@ public class RunPicocliCommand implements IRunCommand { split = ",") private List tags = new ArrayList<>(); + @Option(names = {"--coverage-schemes"}, + description = "comma-separated list of schemas on which coverage should be gathered", + split = ",") + private List coverageSchemes = new ArrayList<>(); + @Option( names = {"-c", "--color"}, @@ -238,7 +243,8 @@ public RunCommandConfig getRunCommandConfig() { enableDbmsOutput, randomTestOrder, randomTestOrderSeed, - tags.toArray(new String[0])); + tags.toArray(new String[0]), + coverageSchemes.toArray(new String[0])); } private RunAction getRunAction() { diff --git a/src/main/java/org/utplsql/cli/config/RunCommandConfig.java b/src/main/java/org/utplsql/cli/config/RunCommandConfig.java index 4418a45..2ea4223 100644 --- a/src/main/java/org/utplsql/cli/config/RunCommandConfig.java +++ b/src/main/java/org/utplsql/cli/config/RunCommandConfig.java @@ -22,9 +22,10 @@ public class RunCommandConfig extends ConnectionConfig { private boolean randomTestOrder = false; private final Integer randomTestOrderSeed; private final String[] tags; + private final String[] coverageSchemes; - @ConstructorProperties({"connectString", "suitePaths", "reporters", "outputAnsiColor", "failureExitCode", "skipCompatibilityCheck", "includePackages", "excludePackages", "sourceMapping", "testMapping", "logConfigLevel", "timeoutInMinutes", "dbmsOutput", "randomTestOrder", "randomTestOrderSeed", "tags"}) - public RunCommandConfig(String connectString, String[] suitePaths, ReporterConfig[] reporters, boolean outputAnsiColor, Integer failureExitCode, boolean skipCompatibilityCheck, String[] includePackages, String[] excludePackages, FileMapperConfig sourceMapping, FileMapperConfig testMapping, ConfigLevel logConfigLevel, Integer timeoutInMinutes, boolean dbmsOutput, boolean randomTestOrder, Integer randomTestOrderSeed, String[] tags) { + @ConstructorProperties({"connectString", "suitePaths", "reporters", "outputAnsiColor", "failureExitCode", "skipCompatibilityCheck", "includePackages", "excludePackages", "sourceMapping", "testMapping", "logConfigLevel", "timeoutInMinutes", "dbmsOutput", "randomTestOrder", "randomTestOrderSeed", "tags", "coverageSchemes"}) + public RunCommandConfig(String connectString, String[] suitePaths, ReporterConfig[] reporters, boolean outputAnsiColor, Integer failureExitCode, boolean skipCompatibilityCheck, String[] includePackages, String[] excludePackages, FileMapperConfig sourceMapping, FileMapperConfig testMapping, ConfigLevel logConfigLevel, Integer timeoutInMinutes, boolean dbmsOutput, boolean randomTestOrder, Integer randomTestOrderSeed, String[] tags, String[] coverageSchemes) { super(connectString); this.suitePaths = suitePaths; this.reporters = reporters; @@ -41,6 +42,7 @@ public RunCommandConfig(String connectString, String[] suitePaths, ReporterConfi this.randomTestOrder = randomTestOrder; this.randomTestOrderSeed = randomTestOrderSeed; this.tags = tags; + this.coverageSchemes = coverageSchemes; } public String[] getSuitePaths() { @@ -102,4 +104,6 @@ public boolean isRandomTestOrder() { public Integer getRandomTestOrderSeed() { return randomTestOrderSeed; } + + public String[] getCoverageSchemes() { return coverageSchemes; } } diff --git a/src/test/java/org/utplsql/cli/PicocliRunCommandTest.java b/src/test/java/org/utplsql/cli/PicocliRunCommandTest.java index 809912d..a7b4eb5 100644 --- a/src/test/java/org/utplsql/cli/PicocliRunCommandTest.java +++ b/src/test/java/org/utplsql/cli/PicocliRunCommandTest.java @@ -48,7 +48,8 @@ void runCommandAllArguments() throws Exception { "-type_mapping=\"tsql=PACKAGE BODY\"", "-owner_subexpression=1", "-type_subexpression=2", - "-name_subexpression=3"); + "-name_subexpression=3", + "--coverage-schemes=schema1,other_schema"); assertNotNull(config.getConnectString()); assertThat( config.getSuitePaths(), is(new String[]{"app.betwnstr", "app.basic"})); @@ -65,6 +66,7 @@ void runCommandAllArguments() throws Exception { assertEquals( 123, config.getRandomTestOrderSeed() ); assertNotNull( config.getReporters() ); assertEquals( 1, config.getReporters().length ); + assertThat( config.getCoverageSchemes(), is(new String[]{"schema1", "other_schema"}) ); // Source FileMapping assertNotNull(config.getSourceMapping()); From 4059d91311889126dbbd257520a202e69f3e0b8c Mon Sep 17 00:00:00 2001 From: pesse Date: Thu, 12 Mar 2020 22:32:30 +0100 Subject: [PATCH 2/6] Use 3.1.9-SNAPSHOT version of java-api --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 3b38f34..4da718b 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ org.utplsql cli - 3.1.8-SNAPSHOT + 3.1.9-SNAPSHOT jar cli @@ -23,7 +23,7 @@ org.utplsql java-api - 3.1.8 + 3.1.9-SNAPSHOT compile From a97124537fdefa180d2d0c3652fa2bb6f3b238fb Mon Sep 17 00:00:00 2001 From: pesse Date: Thu, 12 Mar 2020 22:35:20 +0100 Subject: [PATCH 3/6] Pass `--coverage-schemes` to TestRunner --- src/main/java/org/utplsql/cli/RunAction.java | 3 ++- .../java/org/utplsql/cli/RunCommandArgumentsTest.java | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/utplsql/cli/RunAction.java b/src/main/java/org/utplsql/cli/RunAction.java index 29d248b..d91108a 100644 --- a/src/main/java/org/utplsql/cli/RunAction.java +++ b/src/main/java/org/utplsql/cli/RunAction.java @@ -165,7 +165,8 @@ TestRunner newTestRunner(List reporterList) { .excludeObjects(Arrays.asList(config.getExcludePackages())) .randomTestOrder(config.isRandomTestOrder()) .randomTestOrderSeed(config.getRandomTestOrderSeed()) - .addTags(Arrays.asList(config.getTags())); + .addTags(Arrays.asList(config.getTags())) + .addCoverageSchemes(Arrays.asList(config.getCoverageSchemes())); } private void outputMainInformation() { diff --git a/src/test/java/org/utplsql/cli/RunCommandArgumentsTest.java b/src/test/java/org/utplsql/cli/RunCommandArgumentsTest.java index a2f0a9a..add6844 100644 --- a/src/test/java/org/utplsql/cli/RunCommandArgumentsTest.java +++ b/src/test/java/org/utplsql/cli/RunCommandArgumentsTest.java @@ -18,6 +18,7 @@ public void allArgumentsAreRecognized() { "-o=sonar_result.xml", "-s", "--tags=tag1,tag2", + "--coverage-schemes=schema1,some_other_schema", "-d", "-c", "--failure-exit-code=10", @@ -64,4 +65,14 @@ void provideTags() { TestRunner testRunner = runCmd.newTestRunner(new ArrayList<>()); assertThat( testRunner.getOptions().tags, contains("tag1", "tag.2") ); } + + @Test + void provideCoverageSchemes() { + IRunCommand runCmd = TestHelper.createRunCommand(TestHelper.getConnectionString(), + "--coverage-schemes=schema-1,some_other_schema" + ); + + TestRunner testRunner = runCmd.newTestRunner(new ArrayList<>()); + assertThat( testRunner.getOptions().coverageSchemes, contains("schema-1", "some_other_schema") ); + } } From efe4e534ca1dc28d9bdb7d7764018d23e6aa111d Mon Sep 17 00:00:00 2001 From: pesse Date: Thu, 12 Mar 2020 22:44:30 +0100 Subject: [PATCH 4/6] Add `--coverage-schemes` to README --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index fd518ec..d3d4e17 100644 --- a/README.md +++ b/README.md @@ -179,6 +179,9 @@ utplsql run "my/Username"/"myP@ssword"@connectstring -seed - Sets the seed to use for random test execution order. If set, it sets -random to true (--random-test-order-seed) + +--coverage-schemes - A comma separated list of schemas on which coverage should be gathered + Format: --coverage-schemes=schema1[,schema2[,schema3]] ``` Parameters -f, -o, -s are correlated. That is parameters -o and -s are controlling outputs for reporter specified by the preceding -f parameter. From 1bc62661eccf2acde07b908f9620e6e60e15effa Mon Sep 17 00:00:00 2001 From: pesse Date: Thu, 12 Mar 2020 23:31:45 +0100 Subject: [PATCH 5/6] Refactor to Builder-pattern for RunCommandConfig --- .../org/utplsql/cli/RunPicocliCommand.java | 37 +++--- .../utplsql/cli/config/RunCommandConfig.java | 114 +++++++++++++++++- 2 files changed, 132 insertions(+), 19 deletions(-) diff --git a/src/main/java/org/utplsql/cli/RunPicocliCommand.java b/src/main/java/org/utplsql/cli/RunPicocliCommand.java index c87826b..a90ffd9 100644 --- a/src/main/java/org/utplsql/cli/RunPicocliCommand.java +++ b/src/main/java/org/utplsql/cli/RunPicocliCommand.java @@ -227,24 +227,25 @@ public RunCommandConfig getRunCommandConfig() { } } - return new RunCommandConfig( - connectionString, - suitePaths.toArray(new String[0]), - reporterConfigs.toArray(new ReporterConfig[0]), - colorConsole, - failureExitCode, - skipCompatibilityCheck, - splitOrEmpty(includeObjects), - splitOrEmpty(excludeObjects), - sourceFileMapping, - testFileMapping, - loggerConfigLevel, - timeoutInMinutes, - enableDbmsOutput, - randomTestOrder, - randomTestOrderSeed, - tags.toArray(new String[0]), - coverageSchemes.toArray(new String[0])); + return new RunCommandConfig.Builder() + .connectString(connectionString) + .suitePaths(suitePaths.toArray(new String[0])) + .reporters(reporterConfigs.toArray(new ReporterConfig[0])) + .outputAnsiColor(colorConsole) + .failureExitCode(failureExitCode) + .skipCompatibilityCheck(skipCompatibilityCheck) + .includePackages(splitOrEmpty(includeObjects)) + .excludePackages(splitOrEmpty(excludeObjects)) + .sourceMapping(sourceFileMapping) + .testMapping(testFileMapping) + .logConfigLevel(loggerConfigLevel) + .timeoutInMinutes(timeoutInMinutes) + .dbmsOutput(enableDbmsOutput) + .randomTestOrder(randomTestOrder) + .randomTestOrderSeed(randomTestOrderSeed) + .tags(tags.toArray(new String[0])) + .coverageSchemes(coverageSchemes.toArray(new String[0])) + .create(); } private RunAction getRunAction() { diff --git a/src/main/java/org/utplsql/cli/config/RunCommandConfig.java b/src/main/java/org/utplsql/cli/config/RunCommandConfig.java index 2ea4223..a07b6f6 100644 --- a/src/main/java/org/utplsql/cli/config/RunCommandConfig.java +++ b/src/main/java/org/utplsql/cli/config/RunCommandConfig.java @@ -105,5 +105,117 @@ public Integer getRandomTestOrderSeed() { return randomTestOrderSeed; } - public String[] getCoverageSchemes() { return coverageSchemes; } + public String[] getCoverageSchemes() { + return coverageSchemes; + } + + public static class Builder { + + private String connectString; + private String[] suitePaths; + private ReporterConfig[] reporters; + private boolean outputAnsiColor; + private Integer failureExitCode; + private boolean skipCompatibilityCheck; + private String[] includePackages; + private String[] excludePackages; + private FileMapperConfig sourceMapping; + private FileMapperConfig testMapping; + private ConfigLevel logConfigLevel; + private Integer timeoutInMinutes; + private boolean dbmsOutput; + private boolean randomTestOrder; + private Integer randomTestOrderSeed; + private String[] tags; + private String[] coverageSchemes; + + public Builder connectString(String connectString) { + this.connectString = connectString; + return this; + } + + public Builder suitePaths(String[] suitePaths) { + this.suitePaths = suitePaths; + return this; + } + + public Builder reporters(ReporterConfig[] reporters) { + this.reporters = reporters; + return this; + } + + public Builder outputAnsiColor(boolean outputAnsiColor) { + this.outputAnsiColor = outputAnsiColor; + return this; + } + + public Builder failureExitCode(Integer failureExitCode) { + this.failureExitCode = failureExitCode; + return this; + } + + public Builder skipCompatibilityCheck(boolean skipCompatibilityCheck) { + this.skipCompatibilityCheck = skipCompatibilityCheck; + return this; + } + + public Builder includePackages(String[] includePackages) { + this.includePackages = includePackages; + return this; + } + + public Builder excludePackages(String[] excludePackages) { + this.excludePackages = excludePackages; + return this; + } + + public Builder sourceMapping(FileMapperConfig sourceMapping) { + this.sourceMapping = sourceMapping; + return this; + } + + public Builder testMapping(FileMapperConfig testMapping) { + this.testMapping = testMapping; + return this; + } + + public Builder logConfigLevel(ConfigLevel logConfigLevel) { + this.logConfigLevel = logConfigLevel; + return this; + } + + public Builder timeoutInMinutes(Integer timeoutInMinutes) { + this.timeoutInMinutes = timeoutInMinutes; + return this; + } + + public Builder dbmsOutput(boolean dbmsOutput) { + this.dbmsOutput = dbmsOutput; + return this; + } + + public Builder randomTestOrder(boolean randomTestOrder) { + this.randomTestOrder = randomTestOrder; + return this; + } + + public Builder randomTestOrderSeed(Integer randomTestOrderSeed) { + this.randomTestOrderSeed = randomTestOrderSeed; + return this; + } + + public Builder tags(String[] tags) { + this.tags = tags; + return this; + } + + public Builder coverageSchemes(String[] coverageSchemes) { + this.coverageSchemes = coverageSchemes; + return this; + } + + public RunCommandConfig create() { + return new RunCommandConfig(connectString, suitePaths, reporters, outputAnsiColor, failureExitCode, skipCompatibilityCheck, includePackages, excludePackages, sourceMapping, testMapping, logConfigLevel, timeoutInMinutes, dbmsOutput, randomTestOrder, randomTestOrderSeed, tags, coverageSchemes); + } + } } From 2a7e7166feacd48008d817c09dc7d40e70155fbe Mon Sep 17 00:00:00 2001 From: pesse Date: Thu, 12 Mar 2020 23:46:04 +0100 Subject: [PATCH 6/6] Start composable test for RunCommandConfig -> TestRunnerOptions --- .../utplsql/cli/config/RunCommandConfig.java | 10 +++--- ...ConfigParamsArePassedToTestRunnerTest.java | 31 +++++++++++++++++++ 2 files changed, 36 insertions(+), 5 deletions(-) create mode 100644 src/test/java/org/utplsql/cli/RunCommandConfigParamsArePassedToTestRunnerTest.java diff --git a/src/main/java/org/utplsql/cli/config/RunCommandConfig.java b/src/main/java/org/utplsql/cli/config/RunCommandConfig.java index a07b6f6..ea66ffd 100644 --- a/src/main/java/org/utplsql/cli/config/RunCommandConfig.java +++ b/src/main/java/org/utplsql/cli/config/RunCommandConfig.java @@ -112,13 +112,13 @@ public String[] getCoverageSchemes() { public static class Builder { private String connectString; - private String[] suitePaths; + private String[] suitePaths = new String[0]; private ReporterConfig[] reporters; private boolean outputAnsiColor; private Integer failureExitCode; private boolean skipCompatibilityCheck; - private String[] includePackages; - private String[] excludePackages; + private String[] includePackages = new String[0]; + private String[] excludePackages = new String[0]; private FileMapperConfig sourceMapping; private FileMapperConfig testMapping; private ConfigLevel logConfigLevel; @@ -126,8 +126,8 @@ public static class Builder { private boolean dbmsOutput; private boolean randomTestOrder; private Integer randomTestOrderSeed; - private String[] tags; - private String[] coverageSchemes; + private String[] tags = new String[0]; + private String[] coverageSchemes = new String[0]; public Builder connectString(String connectString) { this.connectString = connectString; diff --git a/src/test/java/org/utplsql/cli/RunCommandConfigParamsArePassedToTestRunnerTest.java b/src/test/java/org/utplsql/cli/RunCommandConfigParamsArePassedToTestRunnerTest.java new file mode 100644 index 0000000..b1b34d4 --- /dev/null +++ b/src/test/java/org/utplsql/cli/RunCommandConfigParamsArePassedToTestRunnerTest.java @@ -0,0 +1,31 @@ +package org.utplsql.cli; + +import org.junit.jupiter.api.Test; +import org.utplsql.api.TestRunner; +import org.utplsql.cli.config.RunCommandConfig; + +import java.util.ArrayList; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.contains; + +public class RunCommandConfigParamsArePassedToTestRunnerTest { + + @Test + void tags() { + RunCommandConfig config = new RunCommandConfig.Builder() + .tags(new String[]{"tag1", "tag2"}) + .create(); + TestRunner testRunner = new RunAction(config).newTestRunner(new ArrayList<>()); + assertThat( testRunner.getOptions().tags, contains("tag1", "tag2") ); + } + + @Test + void coverageSchemes() { + RunCommandConfig config = new RunCommandConfig.Builder() + .coverageSchemes(new String[]{"schema1", "another_schema", "and-another-one"}) + .create(); + TestRunner testRunner = new RunAction(config).newTestRunner(new ArrayList<>()); + assertThat( testRunner.getOptions().coverageSchemes, contains("schema1", "another_schema", "and-another-one") ); + } +}