diff --git a/README.md b/README.md
index 8003f6c..a6c1ec7 100644
--- a/README.md
+++ b/README.md
@@ -2,11 +2,11 @@
## Introduction
-utPLSQL for SQL Developer extends Oracle's SQL Developer to
+utPLSQL for SQL Developer extends Oracle's SQL Developer to
* run utPLSQL unit tests
* debug utPLSQL unit tests
-* run utPLSQL code coverage reports
+* run utPLSQL code coverage reports
* generate utPLSQL unit tests (skeletons)
* provide utPLSQL annotations and expectations as snippets
@@ -14,33 +14,33 @@ utPLSQL for SQL Developer extends Oracle's SQL Developer to
In the Connections window, select a connection or one or more packages or package procedures to run utPLSQL tests. Or you can run utPLSQL tests directly from the PL/SQL editor. The test procedures are determined according to the cursor position in the PL/SQL editor.
-
+
### Debug utPLSQL test
-Select the tests to debug, the same way you would if you were just running them, but select `Debug utPLSQL test...` in the context menu.
+Select the tests to debug, the same way you would if you were just running them, but select `Debug utPLSQL test...` in the context menu.
And then the PL/SQL Debugger is called for the generated, anonymous PL/SQL block.
-
+
The initialization timeout for the realtime reporter is increased to 1 hour. The overall timeout is left to the default value of 4 hours. So you have enough time to step through the PL/SQL code and analyse it. Press the `Stop` button at any time to cancel the test run.
-
+
### Code coverage...
In the Connections window, select a connection or one or more packages for a code coverage report.
-In the dialog you can set some parameters. If you run code coverage for a few chosen packages or from the PL/SQL editor the objects to be included are determined according the object dependencies in the Oracle data dictionary.
+In the dialog you can set some parameters. If you run code coverage for a few chosen packages or from the PL/SQL editor the objects to be included are determined according the object dependencies in the Oracle data dictionary.
-
+
-Press `Run` to produce the code coverage process in the background. You may minimize or close the dialog. To abort the process, press `Cancel`.
+Press `Run` to produce the code coverage process in the background. You may minimize or close the dialog. To abort the process, press `Cancel`.
The HTML report is shown in your default browser.
-
+
### Generate utPLSQL test
@@ -48,7 +48,7 @@ The HTML report is shown in your default browser.
Select a package, type, function or procedure to build a utPLSQL test package skeleton. The generated package compiles and executes, but still needs some rework.
-
+
#### From scratch
@@ -56,7 +56,7 @@ Select a package, type, function or procedure to build a utPLSQL test package sk
2. Type `ut_` in the Worksheet or a PL/SQL editor and press `Ctrl-Space` to get the list of a utPLSQL code templates
3. Press `Return` to paste a code template at the current cursor position
-
+
### Snippets
@@ -68,19 +68,19 @@ Insert the snippets by drag & drop into your code.
Annotations are used in the package specification for various test configurations.
-
+
#### Expectations
Expectations are used in the package body to compare actual with expected results.
-
+
### Preferences
Set your preferences to change the behaviour of utPLSQL within SQL Developer.
-
+
### oddgen integration
@@ -89,19 +89,19 @@ utPLSQL for SQL Developer implements the [OddgenGenerator2 interface](https://ww
* run existing utPLSQL test suitepaths and test suites
* bulk generate new utPLSQL unit tests into dedicated files
-The use of [oddgen for SQL Developer](https://www.oddgen.org/) is optional.
+The use of [oddgen for SQL Developer](https://www.oddgen.org/) is optional.
#### Run utPLSQL test
utPLSQL can run tests based on suitepaths and suites. The next screenshot shows the generated run command for two selected suitepaths.
-
+
#### Generate utPLSQL test
Use oddgen to generate utPLSQL test package skeletons. When generating to files, a file for each package specification and package body is created.
-
+
## Releases
@@ -128,6 +128,7 @@ Binary releases are published [here](https://github.com/utPLSQL/utPLSQL-SQLDevel
4. Use the ```Search Update Center``` option and select the ```salvis.com``` update center to install the lastest version of ```utPLSQL for SQL Developer```.
## Issues
+
Please file your bug reports, enhancement requests, questions and other support requests within [Github's issue tracker](https://help.github.com/articles/about-issues/).
* [Questions](https://github.com/utPLSQL/utPLSQL-SQLDeveloper/issues?q=is%3Aissue+label%3Aquestion)
@@ -144,20 +145,21 @@ Please file your bug reports, enhancement requests, questions and other support
## How to Build
-1. [Download](http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html) and install SQL Developer 21.4.2
-2. [Download](https://maven.apache.org/download.cgi) and install Apache Maven 3.8.3
-3. [Download](https://git-scm.com/downloads) and install a git command line client
-4. Clone the utPLSQL-SQLDeveloper repository
-5. Open a terminal window in the utPLSQL-SQLDeveloper root folder and type
+1. [Download](http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html) and install SQL Developer 24.3.1
+2. Download and install a JDK 17 or newer
+3. [Download](https://maven.apache.org/download.cgi) and install Apache Maven 3.9.16
+4. [Download](https://git-scm.com/downloads) and install a git command line client
+5. Clone the utPLSQL-SQLDeveloper repository
+6. Open a terminal window in the utPLSQL-SQLDeveloper root folder and type
- cd sqldev
+ cd sqldev
-6. Run maven build by the following command
+7. Run maven build by the following command
- mvn -Dsqldev.basedir=/Applications/SQLDeveloper21.4.2.app/Contents/Resources/sqldeveloper -DskipTests=true clean package
+ mvn -Dsqldev.basedir=/Applications/SQLDeveloper24.3.1.app/Contents/Resources/sqldeveloper -DskipTests=true clean package
- Amend the parameter sqldev.basedir to match the path of your SQL Developer installation. This folder is used to reference Oracle jar files which are not available in public Maven repositories
-7. The resulting file ```utplsql_for_SQLDev_x.x.x-SNAPSHOT.zip``` in the ```target``` directory can be installed within SQL Developer
+ Amend the parameter sqldev.basedir to match the path of your SQL Developer installation. This folder is used to reference Oracle jar files which are not available in public Maven repositories
+8. The resulting file ```utplsql_for_SQLDev_x.x.x-SNAPSHOT.zip``` in the ```target``` directory can be installed within SQL Developer
## License
diff --git a/sqldev/pom.xml b/sqldev/pom.xml
index 5e7e198..a2340e3 100644
--- a/sqldev/pom.xml
+++ b/sqldev/pom.xml
@@ -6,18 +6,15 @@
org.utplsqlorg.utplsql.sqldev
- 1.4.0
+ 2.1.0-SNAPSHOTbundleUTF-8
- 1.8
- 1.8
-
- /Applications/SQLDeveloper21.4.2.app/Contents/Resources/sqldeveloper
+ 17
+ 24.3.1
+
+ /Applications/SQLDeveloper${sqldev.version}.app/Contents/Resources/sqldeveloperutplsql_for_SQLDev_${project.version}
-
-
- -noverify -Djava.util.logging.config.file=${project.basedir}/src/test/resources/logging.conf
@@ -27,140 +24,147 @@
oracleidert
- 12.2.1
+ ${sqldev.version}system${sqldev.basedir}/ide/lib/idert.jaroracleoracle.javatools-nodeps
- 12.2.1
+ ${sqldev.version}system${sqldev.basedir}/external/oracle.javatools-nodeps.jaroraclejavatools
- 12.2.1
+ ${sqldev.version}system${sqldev.basedir}/ide/lib/javatools.jaroracleoracle.ide.ceditor
- 12.2.1
+ ${sqldev.version}system${sqldev.basedir}/ide/extensions/oracle.ide.ceditor.jaroracleoracle.ide
- 12.2.1
+ ${sqldev.version}system${sqldev.basedir}/ide/extensions/oracle.ide.jaroracleuic
- 12.2.1
+ ${sqldev.version}system${sqldev.basedir}/ide/lib/uic.jaroracleoracle.ide.navigator
- 12.2.1
+ ${sqldev.version}system${sqldev.basedir}/ide/extensions/oracle.ide.navigator.jaroraclejavax-ide
- 12.2.1
+ ${sqldev.version}system${sqldev.basedir}/ide/lib/javax-ide.jaroracleoracle.dbtools-common
- 21.4.1
+ ${sqldev.version}system${sqldev.basedir}/sqldeveloper/lib/dbtools-common.jar
+
+ oracle
+ oracle.dbtools-arbori
+ ${sqldev.version}
+ system
+ ${sqldev.basedir}/sqldeveloper/lib/dbtools-arbori.jar
+ oracleoracle.sqldeveloper
- 21.4.2
+ ${sqldev.version}system${sqldev.basedir}/sqldeveloper/extensions/oracle.sqldeveloper.jaroracleoracle.sqldeveloper.utils
- 21.4.2
+ ${sqldev.version}system${sqldev.basedir}/sqldeveloper/extensions/oracle.sqldeveloper.utils.jaroracleoracle.sqldeveloper.worksheet
- 21.4.2
+ ${sqldev.version}system${sqldev.basedir}/sqldeveloper/extensions/oracle.sqldeveloper.worksheet.jaroracleoracle.sqldeveloper.schemabrowser
- 21.4.2
+ ${sqldev.version}system${sqldev.basedir}/sqldeveloper/extensions/oracle.sqldeveloper.schemabrowser.jaroracle
- ojdbc8
- 21.4.0
+ ojdbc11
+ ${sqldev.version}system
- ${sqldev.basedir}/jdbc/lib/ojdbc8.jar
+ ${sqldev.basedir}/jdbc/lib/ojdbc11.jaroracledbapi
- 21.4.2
+ ${sqldev.version}system${sqldev.basedir}/ide/lib/dbapi.jaroracleoracle.ide.db
- 21.4.2
+ ${sqldev.version}system${sqldev.basedir}/ide/extensions/oracle.ide.db.jaroracleoracle.jdeveloper.db.connection
- 21.4.2
+ ${sqldev.version}system${sqldev.basedir}/jdev/extensions/oracle.jdeveloper.db.connection.jaroracleoracle.jdeveloper.java.core.jar
- 12.2.1
+ ${sqldev.version}system${sqldev.basedir}/jdev/extensions/oracle.jdeveloper.java.core.jaroracleoracle.jdeveloper.runner.jar
- 12.2.1
+ ${sqldev.version}system${sqldev.basedir}/jdev/extensions/oracle.jdeveloper.runner.jaroracleoracle.ide.runner
- 12.2.1
+ ${sqldev.version}system${sqldev.basedir}/ide/extensions/oracle.ide.runner.jar
@@ -168,7 +172,7 @@
oraclejavatools-nodeps
- 12.2.1
+ ${sqldev.version}system${sqldev.basedir}/modules/oracle.javatools/javatools-nodeps.jar
@@ -176,14 +180,14 @@
oraclejewt4.jar
- 12.2.1
+ ${sqldev.version}system${sqldev.basedir}/modules/oracle.bali.jewt/jewt4.jaroracleshare.jar
- 12.2.1
+ ${sqldev.version}system${sqldev.basedir}/modules/oracle.bali.share/share.jar
@@ -198,7 +202,7 @@
org.osgiorg.osgi.core
- 5.0.0
+ 6.0.0provided
@@ -206,19 +210,19 @@
org.springframeworkspring-jdbc
- 5.3.16
+ 7.0.8org.springframeworkspring-core
- 5.3.16
+ 7.0.8org.springframeworkspring-web
- 5.3.16
+ 7.0.8
@@ -236,7 +240,7 @@
org.jetbrainsannotations
- 23.0.0
+ 26.1.0compile
@@ -244,7 +248,6 @@
${project.basedir}/src/main/java
- ${project.basedir}/src/test/javasrc/main/resources
@@ -253,40 +256,43 @@
+ ${project.basedir}/src/test/java
+
+
+ src/test/resources
+
+ **/*.*
+
+
+ org.apache.maven.plugins
- 3.10.0
+ 3.15.0maven-compiler-plugin
- ${jdk.version}
- ${jdk.version}
-
- ${jdk.version.test}
- ${jdk.version.test}
-
- **/*.java
-
+ ${jdk.version}
-
-
-
- test-compile
- process-test-sources
-
- testCompile
-
-
- ${jdk.version.test}
- ${jdk.version.test}
-
-
-
+
+
+ org.apache.maven.plugins
+ maven-resources-plugin
+ 3.5.0
+
+
+ org.apache.maven.plugins
+ maven-install-plugin
+ 3.1.4
+
+
+ org.apache.maven.plugins
+ maven-deploy-plugin
+ 3.1.4org.apache.maven.pluginsmaven-surefire-plugin
- 2.22.2
+ 3.5.6
@@ -316,7 +322,7 @@
org.apache.maven.pluginsmaven-antrun-plugin
- 3.0.0
+ 3.1.0prepare-package
@@ -337,7 +343,7 @@
org.codehaus.mojoproperties-maven-plugin
- 1.0.0
+ 1.1.0initialize
@@ -357,7 +363,7 @@
org.codehaus.mojobuild-helper-maven-plugin
- 3.1.0
+ 3.3.0parse-version
@@ -427,7 +433,7 @@
org.apache.felixmaven-bundle-plugin
- 4.2.1
+ 6.0.2true${project.name}
@@ -470,7 +476,8 @@
org.aspectj.runtime,
org.aspectj.lang.reflect,
org.springframework.core.style,
- org.springframework.lang
+ org.springframework.lang,
+ org.jspecify.annotations
<_noee>true
@@ -497,7 +504,7 @@
maven-assembly-plugin
- 3.3.0
+ 3.8.0${final.name}false
@@ -519,7 +526,7 @@
net.nicoulaj.maven.pluginschecksum-maven-plugin
- 1.9
+ 1.11calculate-checksums
@@ -533,7 +540,7 @@
org.jacocojacoco-maven-plugin
- 0.8.5
+ 0.8.15
@@ -599,12 +606,21 @@
org.codehaus.mojobuildnumber-maven-plugin
- 3.0.0
+ 3.3.0
-
+
+
+
+
+ org.javassist
+ javassist
+ 3.30.2-GA
+
+
+ org.utplsql.sqldevExtension for running unit tests in SQL Developer.
diff --git a/sqldev/src/main/java/org/utplsql/sqldev/coverage/CodeCoverageReporter.java b/sqldev/src/main/java/org/utplsql/sqldev/coverage/CodeCoverageReporter.java
index 8935af0..79bcaa7 100644
--- a/sqldev/src/main/java/org/utplsql/sqldev/coverage/CodeCoverageReporter.java
+++ b/sqldev/src/main/java/org/utplsql/sqldev/coverage/CodeCoverageReporter.java
@@ -190,7 +190,7 @@ private void run() {
PreferenceModel preferences;
try {
preferences = PreferenceModel.getInstance(Preferences.getPreferences());
- } catch (NoClassDefFoundError error) {
+ } catch (NoClassDefFoundError | ExceptionInInitializerError error) {
// not running in SQL Developer (in tests)
preferences = PreferenceModel.getInstance(null);
}
diff --git a/sqldev/src/main/java/org/utplsql/sqldev/dal/UtplsqlDao.java b/sqldev/src/main/java/org/utplsql/sqldev/dal/UtplsqlDao.java
index 5282b46..605d376 100644
--- a/sqldev/src/main/java/org/utplsql/sqldev/dal/UtplsqlDao.java
+++ b/sqldev/src/main/java/org/utplsql/sqldev/dal/UtplsqlDao.java
@@ -241,7 +241,8 @@ public boolean containsUtplsqlTest(final String owner, final String objectName,
sb.append(" AND (item_name = upper(?) or ? IS NULL)\n");
final String sql = sb.toString();
final Object[] binds = new Object[] {owner, objectName, subobjectName, subobjectName};
- final Integer found = jdbcTemplate.queryForObject(sql, Integer.class, binds);
+ final int[] types = new int[] {Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, Types.VARCHAR};
+ final Integer found = jdbcTemplate.queryForObject(sql, binds, types, Integer.class);
return found != null && found > 0;
} else {
// using internal API (deprecated, not accessible in latest version)
diff --git a/sqldev/src/main/java/org/utplsql/sqldev/oddgen/TestTemplate.java b/sqldev/src/main/java/org/utplsql/sqldev/oddgen/TestTemplate.java
index daef240..7bbdff3 100644
--- a/sqldev/src/main/java/org/utplsql/sqldev/oddgen/TestTemplate.java
+++ b/sqldev/src/main/java/org/utplsql/sqldev/oddgen/TestTemplate.java
@@ -41,9 +41,9 @@ public String generateSpec() {
final String packageName = context.getTestPackagePrefix() + objectName + context.getTestPackageSuffix();
sb.append("create or replace package ");
sb.append(packageName);
- sb.append(" is\n\n");
+ sb.append(" is\n");
if (context.isGenerateComments()) {
- sb.append("\t-- generated by utPLSQL for SQL Developer on ");
+ sb.append("\n\t-- generated by utPLSQL for SQL Developer on ");
sb.append(today);
sb.append("\n\n");
}
@@ -53,8 +53,9 @@ public String generateSpec() {
if (!context.getSuitePath().isEmpty()) {
sb.append("\t--%suitepath(");
sb.append(context.getSuitePath());
- sb.append(")\n\n");
+ sb.append(")\n");
}
+ sb.append("\n");
for (final String u : units) {
final String unit = u.toLowerCase();
if (context.getNumberOfTestsPerUnit() > 1
diff --git a/sqldev/src/main/java/org/utplsql/sqldev/runner/UtplsqlWorksheetRunner.java b/sqldev/src/main/java/org/utplsql/sqldev/runner/UtplsqlWorksheetRunner.java
index ebc0e7c..5a0773b 100644
--- a/sqldev/src/main/java/org/utplsql/sqldev/runner/UtplsqlWorksheetRunner.java
+++ b/sqldev/src/main/java/org/utplsql/sqldev/runner/UtplsqlWorksheetRunner.java
@@ -77,30 +77,30 @@ private CharSequence getCode() {
StringBuilder sb = new StringBuilder();
if (!debug) {
if (preferences.isResetPackage()) {
- sb.append("EXECUTE dbms_session.reset_package;\n");
+ sb.append("execute dbms_session.reset_package;\n");
}
- sb.append("SET SERVEROUTPUT ON SIZE UNLIMITED\n");
+ sb.append("set serveroutput on size unlimited\n");
if (preferences.isClearScreen()) {
- sb.append("CLEAR SCREEN\n");
+ sb.append("clear screen\n");
}
if (pathList.size() == 1) {
- sb.append("EXECUTE ut.run('");
+ sb.append("execute ut.run('");
sb.append(pathList.get(0));
sb.append("');\n");
} else {
// we want a horizontal dense output because we resize the worksheet to fit the command in common cases
- sb.append("EXECUTE ut.run(ut_varchar2_list(");
+ sb.append("execute ut.run(ut_varchar2_list(");
sb.append(StringTools.getCSV(pathList, "").replace("\n", ""));
sb.append("));\n");
}
} else {
- sb.append("BEGIN\n");
+ sb.append("begin\n");
sb.append(" ut.run(\n");
sb.append(" ut_varchar2_list(\n");
sb.append(StringTools.getCSV(pathList, 9));
sb.append(" )\n");
sb.append(" );\n");
- sb.append("END;\n");
+ sb.append("end;\n");
}
return sb;
}
diff --git a/sqldev/src/main/java/org/utplsql/sqldev/ui/runner/RunnerPanel.java b/sqldev/src/main/java/org/utplsql/sqldev/ui/runner/RunnerPanel.java
index 3182a89..5f225a8 100644
--- a/sqldev/src/main/java/org/utplsql/sqldev/ui/runner/RunnerPanel.java
+++ b/sqldev/src/main/java/org/utplsql/sqldev/ui/runner/RunnerPanel.java
@@ -568,7 +568,7 @@ private void syncDetailTab() {
private PreferenceModel getPreferenceModel() {
try {
return PreferenceModel.getInstance(Preferences.getPreferences());
- } catch (NoClassDefFoundError e) {
+ } catch (NoClassDefFoundError | ExceptionInInitializerError e) {
// running outside of SQL Developer
return PreferenceModel.getInstance(null);
}
diff --git a/sqldev/src/main/resources/org/utplsql/sqldev/resources/UtplsqlResources.properties b/sqldev/src/main/resources/org/utplsql/sqldev/resources/UtplsqlResources.properties
index 911a6df..a2adee4 100644
--- a/sqldev/src/main/resources/org/utplsql/sqldev/resources/UtplsqlResources.properties
+++ b/sqldev/src/main/resources/org/utplsql/sqldev/resources/UtplsqlResources.properties
@@ -6,7 +6,7 @@ EXTENSION_NAME=utPLSQL for SQL Developer
EXTENSION_DESCRIPTION=Extension for running unit tests in SQL Developer.
EXTENSION_OWNER=Philipp Salvisberg
# suppress inspection "UnusedProperty"
-MIN_SQLDEV_VERSION=12.2.0.19.0.7
+MIN_SQLDEV_VERSION=24.3.1.347.1826
# Icons
UTPLSQL_ICON=/org/utplsql/sqldev/resources/images/utPLSQL.png
diff --git a/sqldev/src/main/resources/org/utplsql/sqldev/resources/UtplsqlResources_de.properties b/sqldev/src/main/resources/org/utplsql/sqldev/resources/UtplsqlResources_de.properties
index 7691dcb..7c9661b 100644
--- a/sqldev/src/main/resources/org/utplsql/sqldev/resources/UtplsqlResources_de.properties
+++ b/sqldev/src/main/resources/org/utplsql/sqldev/resources/UtplsqlResources_de.properties
@@ -89,7 +89,7 @@ RUNNER_DESCRIPTION_LABEL=Beschreibung
RUNNER_START_LABEL=Start
RUNNER_ASSERT_DESCRIPTION_COLUMN=Assert Beschreibung (gescheiterte Zeile)
RUNNER_TEST_TAB_LABEL=Test/Suite
-RUNNER_FAILURES_TAB_LABEL=Misserfolge
+RUNNER_FAILURES_TAB_LABEL=Fehlschl\u00e4ge
RUNNER_ERRORS_TAB_LABEL=Fehler
RUNNER_WARNINGS_TAB_LABEL=Warnungen
RUNNER_INFO_TAB_LABEL=Info
diff --git a/sqldev/src/test/java/org/utplsql/sqldev/test/dal/RealtimeReporterFetchSizeTest.java b/sqldev/src/test/java/org/utplsql/sqldev/test/dal/RealtimeReporterFetchSizeTest.java
index a68e4b2..7bdfab6 100644
--- a/sqldev/src/test/java/org/utplsql/sqldev/test/dal/RealtimeReporterFetchSizeTest.java
+++ b/sqldev/src/test/java/org/utplsql/sqldev/test/dal/RealtimeReporterFetchSizeTest.java
@@ -100,7 +100,7 @@ private void delayFreeStreamingConsumtionProducer(final String reporterId) {
@Test
public void delayFreeStreamingConsumtion() {
- final long TOLERANCE_MS = 600;
+ final long TOLERANCE_MS = 2000;
SingleConnectionDataSource ds = new SingleConnectionDataSource();
ds.setDriverClassName("oracle.jdbc.OracleDriver");
ds.setUrl(dataSource.getUrl());
@@ -114,7 +114,7 @@ public void delayFreeStreamingConsumtion() {
thread.start();
dao.consumeReport(reporterId, consumer);
logger.fine(consumer.getPostTestEvents().toString());
- Assert.assertEquals(5, consumer.getPostTestEvents().entrySet().size());
+ Assert.assertEquals(5, consumer.getPostTestEvents().size());
final Long test_1_0 = consumer.getPostTestEvents().get("junit_utplsql_fetch_size_pkg.test_1_0");
final Long test_2_1 = consumer.getPostTestEvents().get("junit_utplsql_fetch_size_pkg.test_2_1");
final Long test_3_2 = consumer.getPostTestEvents().get("junit_utplsql_fetch_size_pkg.test_3_2");
diff --git a/sqldev/src/test/java/org/utplsql/sqldev/test/runner/UtplsqlRunnerTest.java b/sqldev/src/test/java/org/utplsql/sqldev/test/runner/UtplsqlRunnerTest.java
index 4ff779a..991dbc8 100644
--- a/sqldev/src/test/java/org/utplsql/sqldev/test/runner/UtplsqlRunnerTest.java
+++ b/sqldev/src/test/java/org/utplsql/sqldev/test/runner/UtplsqlRunnerTest.java
@@ -46,7 +46,12 @@ public void setupDefaultPreferences() {
preferences = PreferenceModel.getInstance(null);
// the second call will call will succeed and use preferences from user.home
// this ensures that the test and the runner use the same preferences
- preferences = PreferenceModel.getInstance(Preferences.getPreferences());
+ try {
+ preferences = PreferenceModel.getInstance(Preferences.getPreferences());
+ } catch (NoClassDefFoundError e2) {
+ // the second call also failed. no other option left (new behavior with Java17)
+ preferences = PreferenceModel.getInstance(null);
+ }
} finally {
// set defaults manually, since all tests are using the same preference store
preferences.setShowSuccessfulTests(true);
diff --git a/sqldev/src/test/java/org/utplsql/sqldev/test/template/TemplateTest.java b/sqldev/src/test/java/org/utplsql/sqldev/test/template/TemplateTest.java
new file mode 100644
index 0000000..534bdc7
--- /dev/null
+++ b/sqldev/src/test/java/org/utplsql/sqldev/test/template/TemplateTest.java
@@ -0,0 +1,228 @@
+package org.utplsql.sqldev.test.template;
+
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.utplsql.sqldev.model.oddgen.GenContext;
+import org.utplsql.sqldev.oddgen.TestTemplate;
+import org.utplsql.sqldev.test.AbstractJdbcTest;
+import org.utplsql.sqldev.test.coverage.CodeCoverageReporterTest;
+
+import java.sql.SQLException;
+
+public class TemplateTest extends AbstractJdbcTest {
+
+ @Before
+ public void setup() {
+ executeAndIgnore(jdbcTemplate, """
+ create or replace package junit_pkg is
+ procedure proc;
+ end;
+ """);
+ }
+
+
+ @After
+ public void teardown() {
+ executeAndIgnore(jdbcTemplate, "drop package junit_pkg");
+ }
+
+ @Test
+ public void spec_no_comment_no_disable_no_path() throws SQLException {
+ // arrange
+ var context = new GenContext();
+ context.setConn(dataSource.getConnection());
+ context.setObjectType("PACKAGE");
+ context.setObjectName("JUNIT_PKG");
+ context.setTestPackagePrefix("");
+ context.setTestPackageSuffix("_test");
+ context.setTestUnitPrefix("");
+ context.setTestUnitSuffix("");
+ context.setNumberOfTestsPerUnit(1);
+ context.setGenerateComments(false);
+ context.setDisableTests(false);
+ context.setSuitePath("");
+ context.setIndentSpaces(3);
+
+ // act
+ var template = new TestTemplate(context);
+ var actual = template.generateSpec();
+
+ // assert
+ var expected = """
+ create or replace package junit_pkg_test is
+ --%suite(junit_pkg_test)
+
+ --%test
+ procedure proc;
+
+ end junit_pkg_test;
+ /
+ """.trim();
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void spec_no_comment_no_disable_with_path() throws SQLException {
+ // arrange
+ var context = new GenContext();
+ context.setConn(dataSource.getConnection());
+ context.setObjectType("PACKAGE");
+ context.setObjectName("JUNIT_PKG");
+ context.setTestPackagePrefix("");
+ context.setTestPackageSuffix("_test");
+ context.setTestUnitPrefix("");
+ context.setTestUnitSuffix("");
+ context.setNumberOfTestsPerUnit(1);
+ context.setGenerateComments(false);
+ context.setDisableTests(false);
+ context.setSuitePath("org.utplsql");
+ context.setIndentSpaces(3);
+
+ // act
+ var template = new TestTemplate(context);
+ var actual = template.generateSpec();
+
+ // assert
+ var expected = """
+ create or replace package junit_pkg_test is
+ --%suite(junit_pkg_test)
+ --%suitepath(org.utplsql)
+
+ --%test
+ procedure proc;
+
+ end junit_pkg_test;
+ /
+ """.trim();
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void spec_no_comment_disable_with_path() throws SQLException {
+ // arrange
+ var context = new GenContext();
+ context.setConn(dataSource.getConnection());
+ context.setObjectType("PACKAGE");
+ context.setObjectName("JUNIT_PKG");
+ context.setTestPackagePrefix("");
+ context.setTestPackageSuffix("_test");
+ context.setTestUnitPrefix("");
+ context.setTestUnitSuffix("");
+ context.setNumberOfTestsPerUnit(1);
+ context.setGenerateComments(false);
+ context.setDisableTests(true);
+ context.setSuitePath("org.utplsql");
+ context.setIndentSpaces(3);
+
+ // act
+ var template = new TestTemplate(context);
+ var actual = template.generateSpec();
+
+ // assert
+ var expected = """
+ create or replace package junit_pkg_test is
+ --%suite(junit_pkg_test)
+ --%suitepath(org.utplsql)
+
+ --%test
+ --%disabled
+ procedure proc;
+
+ end junit_pkg_test;
+ /
+ """.trim();
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void spec_comment_disable_with_path() throws SQLException {
+ // arrange
+ var context = new GenContext();
+ context.setConn(dataSource.getConnection());
+ context.setObjectType("PACKAGE");
+ context.setObjectName("JUNIT_PKG");
+ context.setTestPackagePrefix("");
+ context.setTestPackageSuffix("_test");
+ context.setTestUnitPrefix("");
+ context.setTestUnitSuffix("");
+ context.setNumberOfTestsPerUnit(1);
+ context.setGenerateComments(true);
+ context.setDisableTests(true);
+ context.setSuitePath("org.utplsql");
+ context.setIndentSpaces(3);
+
+ // act
+ var template = new TestTemplate(context);
+ var actual = template.generateSpec()
+ .replaceAll("[0-9]{4}-[0-9]{2}-[0-9]{2}[ ]{1}[0-9]{2}:[0-9]{2}:[0-9]{2}", "datetime");
+
+ // assert
+ var expected = """
+ create or replace package junit_pkg_test is
+
+ -- generated by utPLSQL for SQL Developer on datetime
+
+ --%suite(junit_pkg_test)
+ --%suitepath(org.utplsql)
+
+ --%test
+ --%disabled
+ procedure proc;
+
+ end junit_pkg_test;
+ /
+ """.trim();
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void spec_comment_disable_with_path_two_units() throws SQLException {
+ // arrange
+ var context = new GenContext();
+ context.setConn(dataSource.getConnection());
+ context.setObjectType("PACKAGE");
+ context.setObjectName("JUNIT_PKG");
+ context.setTestPackagePrefix("");
+ context.setTestPackageSuffix("_test");
+ context.setTestUnitPrefix("");
+ context.setTestUnitSuffix("");
+ context.setNumberOfTestsPerUnit(2);
+ context.setGenerateComments(true);
+ context.setDisableTests(true);
+ context.setSuitePath("org.utplsql");
+ context.setIndentSpaces(3);
+
+ // act
+ var template = new TestTemplate(context);
+ var actual = template.generateSpec()
+ .replaceAll("[0-9]{4}-[0-9]{2}-[0-9]{2}[ ]{1}[0-9]{2}:[0-9]{2}:[0-9]{2}", "datetime");
+
+ // assert
+ var expected = """
+ create or replace package junit_pkg_test is
+
+ -- generated by utPLSQL for SQL Developer on datetime
+
+ --%suite(junit_pkg_test)
+ --%suitepath(org.utplsql)
+
+ --%context(proc)
+
+ --%test
+ --%disabled
+ procedure proc1;
+
+ --%test
+ --%disabled
+ procedure proc2;
+
+ --%endcontext
+
+ end junit_pkg_test;
+ /
+ """.trim();
+ Assert.assertEquals(expected, actual);
+ }
+}
diff --git a/sqldev/src/test/resources/test.properties b/sqldev/src/test/resources/test.properties
index 9c71960..8ddd39f 100644
--- a/sqldev/src/test/resources/test.properties
+++ b/sqldev/src/test/resources/test.properties
@@ -1,7 +1,7 @@
# properties to connect to Oracle Database using JDBC thin driver
-host=fillmore
+host=127.0.0.1
port=1521
-service=odb.docker
+service=freepdb1
# oracle users
scott_username=scott