diff --git a/src/main/java/org/utplsql/api/TestRunner.java b/src/main/java/org/utplsql/api/TestRunner.java index e37eccd..79606a3 100644 --- a/src/main/java/org/utplsql/api/TestRunner.java +++ b/src/main/java/org/utplsql/api/TestRunner.java @@ -16,6 +16,7 @@ import java.sql.Connection; import java.sql.SQLException; import java.util.ArrayList; +import java.util.Collection; import java.util.List; import java.util.concurrent.*; @@ -129,6 +130,16 @@ public TestRunner randomTestOrderSeed( Integer seed ) { return this; } + public TestRunner addTag( String tag ) { + this.options.tags.add(tag); + return this; + } + + public TestRunner addTags(Collection tags) { + this.options.tags.addAll(tags); + return this; + } + public TestRunnerOptions getOptions() { return options; } private void delayedAddReporters() { diff --git a/src/main/java/org/utplsql/api/TestRunnerOptions.java b/src/main/java/org/utplsql/api/TestRunnerOptions.java index 6251f85..3fe39c1 100644 --- a/src/main/java/org/utplsql/api/TestRunnerOptions.java +++ b/src/main/java/org/utplsql/api/TestRunnerOptions.java @@ -4,7 +4,9 @@ import java.nio.charset.Charset; import java.util.ArrayList; +import java.util.LinkedHashSet; import java.util.List; +import java.util.Set; /** * Holds the various possible options of TestRunner @@ -27,4 +29,9 @@ public class TestRunnerOptions { public String clientCharacterSet = Charset.defaultCharset().toString(); public boolean randomTestOrder = false; public Integer randomTestOrderSeed; + public final Set tags = new LinkedHashSet<>(); + + public String getTagsAsString() { + return String.join(",", tags); + } } diff --git a/src/main/java/org/utplsql/api/compatibility/OptionalFeatures.java b/src/main/java/org/utplsql/api/compatibility/OptionalFeatures.java index bb83c49..b2896b0 100644 --- a/src/main/java/org/utplsql/api/compatibility/OptionalFeatures.java +++ b/src/main/java/org/utplsql/api/compatibility/OptionalFeatures.java @@ -12,7 +12,8 @@ public enum OptionalFeatures { FRAMEWORK_COMPATIBILITY_CHECK("3.0.3.1266", null), CUSTOM_REPORTERS("3.1.0.1849", null), CLIENT_CHARACTER_SET("3.1.2.2130", null), - RANDOM_EXECUTION_ORDER("3.1.7.2795", null); + RANDOM_EXECUTION_ORDER("3.1.7.2795", null), + TAGS("3.1.7.3006", null); private final Version minVersion; private final Version maxVersion; diff --git a/src/main/java/org/utplsql/api/testRunner/ActualTestRunnerStatement.java b/src/main/java/org/utplsql/api/testRunner/ActualTestRunnerStatement.java index 41c26e2..c6a9326 100644 --- a/src/main/java/org/utplsql/api/testRunner/ActualTestRunnerStatement.java +++ b/src/main/java/org/utplsql/api/testRunner/ActualTestRunnerStatement.java @@ -39,7 +39,8 @@ protected String getSql() { "a_fail_on_errors => " + failOnErrors + ", " + "a_client_character_set => ?, " + "a_random_test_order => " + randomExecutionOrder + ", " + - "a_random_test_order_seed => ?"+ + "a_random_test_order_seed => ?, "+ + "a_tags => ?"+ "); " + "END;"; } @@ -55,6 +56,12 @@ protected int createStatement() throws SQLException { callableStatement.setInt(++curParamIdx, options.randomTestOrderSeed); } + if ( options.tags.size() == 0 ) { + callableStatement.setNull(++curParamIdx, Types.VARCHAR); + } else { + callableStatement.setString(++curParamIdx, options.getTagsAsString()); + } + return curParamIdx; } } diff --git a/src/test/java/org/utplsql/api/EnvironmentVariableUtilTest.java b/src/test/java/org/utplsql/api/EnvironmentVariableUtilTest.java index e437cd1..c827232 100644 --- a/src/test/java/org/utplsql/api/EnvironmentVariableUtilTest.java +++ b/src/test/java/org/utplsql/api/EnvironmentVariableUtilTest.java @@ -37,7 +37,7 @@ void testGetVariableFromProperty() { @Test void testGetVariableFromDefault() { - assertEquals("defaultValue", EnvironmentVariableUtil.getEnvValue("RANDOM" + String.valueOf(System.currentTimeMillis()), "defaultValue")); + assertEquals("defaultValue", EnvironmentVariableUtil.getEnvValue("RANDOM" + System.currentTimeMillis(), "defaultValue")); } } \ No newline at end of file diff --git a/src/test/java/org/utplsql/api/OptionalFeaturesIT.java b/src/test/java/org/utplsql/api/OptionalFeaturesIT.java index 50118b0..f8fe9b3 100644 --- a/src/test/java/org/utplsql/api/OptionalFeaturesIT.java +++ b/src/test/java/org/utplsql/api/OptionalFeaturesIT.java @@ -74,4 +74,15 @@ void randomExecutionOrder() throws SQLException, InvalidVersionException { assertFalse(available); } } + + @Test + void tags() throws SQLException, InvalidVersionException { + boolean available = OptionalFeatures.TAGS.isAvailableFor(getConnection()); + + if (getDatabaseVersion().isGreaterOrEqualThan(Version.V3_1_7)) { + assertTrue(available); + } else { + assertFalse(available); + } + } } diff --git a/src/test/java/org/utplsql/api/TestRunnerIT.java b/src/test/java/org/utplsql/api/TestRunnerIT.java index a72385a..ebd7ba5 100644 --- a/src/test/java/org/utplsql/api/TestRunnerIT.java +++ b/src/test/java/org/utplsql/api/TestRunnerIT.java @@ -88,4 +88,11 @@ void runWithRandomExecutionOrder() throws SQLException { .run(getConnection()); } + @Test + void runWithTags() throws SQLException { + new TestRunner() + .addTag("none") + .run(getConnection()); + } + } diff --git a/src/test/java/org/utplsql/api/testRunner/TestRunnerStatementProviderIT.java b/src/test/java/org/utplsql/api/testRunner/TestRunnerStatementProviderIT.java index 1928bb0..c1b2a08 100644 --- a/src/test/java/org/utplsql/api/testRunner/TestRunnerStatementProviderIT.java +++ b/src/test/java/org/utplsql/api/testRunner/TestRunnerStatementProviderIT.java @@ -27,6 +27,7 @@ void testGettingPre303Version() throws SQLException { assertThat(stmt.getSql(), not(containsString("a_client_character_set"))); assertThat(stmt.getSql(), not(containsString("a_random_test_order"))); assertThat(stmt.getSql(), not(containsString("a_random_test_order_seed"))); + assertThat(stmt.getSql(), not(containsString("a_tags"))); } @@ -38,6 +39,7 @@ void testGettingPre312Version_from_303() throws SQLException { assertThat(stmt.getSql(), not(containsString("a_client_character_set"))); assertThat(stmt.getSql(), not(containsString("a_random_test_order"))); assertThat(stmt.getSql(), not(containsString("a_random_test_order_seed"))); + assertThat(stmt.getSql(), not(containsString("a_tags"))); } @Test @@ -48,6 +50,7 @@ void testGettingPre312Version_from_311() throws SQLException { assertThat(stmt.getSql(), not(containsString("a_client_character_set"))); assertThat(stmt.getSql(), not(containsString("a_random_test_order"))); assertThat(stmt.getSql(), not(containsString("a_random_test_order_seed"))); + assertThat(stmt.getSql(), not(containsString("a_tags"))); } @Test @@ -58,6 +61,7 @@ void testGettingPre317Version_from_312() throws SQLException { assertThat(stmt.getSql(), containsString("a_client_character_set")); assertThat(stmt.getSql(), not(containsString("a_random_test_order"))); assertThat(stmt.getSql(), not(containsString("a_random_test_order_seed"))); + assertThat(stmt.getSql(), not(containsString("a_tags"))); } @Test @@ -68,6 +72,7 @@ void testGettingPre317Version_from_316() throws SQLException { assertThat(stmt.getSql(), containsString("a_client_character_set")); assertThat(stmt.getSql(), not(containsString("a_random_test_order"))); assertThat(stmt.getSql(), not(containsString("a_random_test_order_seed"))); + assertThat(stmt.getSql(), not(containsString("a_tags"))); } @Test @@ -78,5 +83,6 @@ void testGettingActualVersion_from_latest() throws SQLException { assertThat(stmt.getSql(), containsString("a_client_character_set")); assertThat(stmt.getSql(), containsString("a_random_test_order")); assertThat(stmt.getSql(), containsString("a_random_test_order_seed")); + assertThat(stmt.getSql(), containsString("a_tags")); } }