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. 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 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/main/java/org/utplsql/cli/RunPicocliCommand.java b/src/main/java/org/utplsql/cli/RunPicocliCommand.java index da0d871..a90ffd9 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"}, @@ -222,23 +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])); + 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 4418a45..ea66ffd 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,118 @@ public boolean isRandomTestOrder() { public Integer getRandomTestOrderSeed() { return randomTestOrderSeed; } + + public String[] getCoverageSchemes() { + return coverageSchemes; + } + + public static class Builder { + + private String connectString; + private String[] suitePaths = new String[0]; + private ReporterConfig[] reporters; + private boolean outputAnsiColor; + private Integer failureExitCode; + private boolean skipCompatibilityCheck; + private String[] includePackages = new String[0]; + private String[] excludePackages = new String[0]; + private FileMapperConfig sourceMapping; + private FileMapperConfig testMapping; + private ConfigLevel logConfigLevel; + private Integer timeoutInMinutes; + private boolean dbmsOutput; + private boolean randomTestOrder; + private Integer randomTestOrderSeed; + private String[] tags = new String[0]; + private String[] coverageSchemes = new String[0]; + + 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); + } + } } 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()); 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") ); + } } 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") ); + } +}