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. -![Run utPLSQL test](images/run_utplsql_test.png) +![Run utPLSQL test](https://raw.githubusercontent.com/utPLSQL/utPLSQL-SQLDeveloper/main/images/run_utplsql_test.png) ### 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. -![Anonymous PL/SQL block to debug utPLSQL test](images/debug_utplsql_test_anonymous_block.png) +![Anonymous PL/SQL block to debug utPLSQL test](https://raw.githubusercontent.com/utPLSQL/utPLSQL-SQLDeveloper/main/images/debug_utplsql_test_anonymous_block.png) 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. -![Stop utPLSQL test run](images/debug_utplsql_test_stop.png) +![Stop utPLSQL test run](https://raw.githubusercontent.com/utPLSQL/utPLSQL-SQLDeveloper/main/images/debug_utplsql_test_stop.png) ### 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. -![Code coverage dialog](images/code_coverage_dialog.png) +![Code coverage dialog](https://raw.githubusercontent.com/utPLSQL/utPLSQL-SQLDeveloper/main/images/code_coverage_dialog.png) -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. -![Code coverage report](images/code_coverage_report_all_files.png) +![Code coverage report](https://raw.githubusercontent.com/utPLSQL/utPLSQL-SQLDeveloper/main/images/code_coverage_report_all_files.png) ### 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. -![Generate utPLSQL test](images/generate_utplsql_test.png) +![Generate utPLSQL test](https://raw.githubusercontent.com/utPLSQL/utPLSQL-SQLDeveloper/main/images/generate_utplsql_test.png) #### 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 -![Generate utPLSQL test](images/generate_utplsql_test_from_template.png) +![Generate utPLSQL test](https://raw.githubusercontent.com/utPLSQL/utPLSQL-SQLDeveloper/main/images/generate_utplsql_test_from_template.png) ### 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. -![utPLSQL Annotations](images/snippets_annotations.png) +![utPLSQL Annotations](https://raw.githubusercontent.com/utPLSQL/utPLSQL-SQLDeveloper/main/images/snippets_annotations.png) #### Expectations Expectations are used in the package body to compare actual with expected results. -![utPLSQL Expectations](images/snippets_expectations.png) +![utPLSQL Expectations](https://raw.githubusercontent.com/utPLSQL/utPLSQL-SQLDeveloper/main/images/snippets_expectations.png) ### Preferences Set your preferences to change the behaviour of utPLSQL within SQL Developer. -![Preferences](images/preferences.png) +![Preferences](https://raw.githubusercontent.com/utPLSQL/utPLSQL-SQLDeveloper/main/images/preferences.png) ### 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](images/oddgen_run_utplsql_test.png) +![Generate utPLSQL test](https://raw.githubusercontent.com/utPLSQL/utPLSQL-SQLDeveloper/main/images/oddgen_run_utplsql_test.png) #### 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. -![Generate utPLSQL test](images/oddgen_generate_utplsql_test.png) +![Generate utPLSQL test](https://raw.githubusercontent.com/utPLSQL/utPLSQL-SQLDeveloper/main/images/oddgen_generate_utplsql_test.png) ## 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.utplsql org.utplsql.sqldev - 1.4.0 + 2.1.0-SNAPSHOT bundle UTF-8 - 1.8 - 1.8 - - /Applications/SQLDeveloper21.4.2.app/Contents/Resources/sqldeveloper + 17 + 24.3.1 + + /Applications/SQLDeveloper${sqldev.version}.app/Contents/Resources/sqldeveloper utplsql_for_SQLDev_${project.version} - - - -noverify -Djava.util.logging.config.file=${project.basedir}/src/test/resources/logging.conf @@ -27,140 +24,147 @@ oracle idert - 12.2.1 + ${sqldev.version} system ${sqldev.basedir}/ide/lib/idert.jar oracle oracle.javatools-nodeps - 12.2.1 + ${sqldev.version} system ${sqldev.basedir}/external/oracle.javatools-nodeps.jar oracle javatools - 12.2.1 + ${sqldev.version} system ${sqldev.basedir}/ide/lib/javatools.jar oracle oracle.ide.ceditor - 12.2.1 + ${sqldev.version} system ${sqldev.basedir}/ide/extensions/oracle.ide.ceditor.jar oracle oracle.ide - 12.2.1 + ${sqldev.version} system ${sqldev.basedir}/ide/extensions/oracle.ide.jar oracle uic - 12.2.1 + ${sqldev.version} system ${sqldev.basedir}/ide/lib/uic.jar oracle oracle.ide.navigator - 12.2.1 + ${sqldev.version} system ${sqldev.basedir}/ide/extensions/oracle.ide.navigator.jar oracle javax-ide - 12.2.1 + ${sqldev.version} system ${sqldev.basedir}/ide/lib/javax-ide.jar oracle oracle.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 + oracle oracle.sqldeveloper - 21.4.2 + ${sqldev.version} system ${sqldev.basedir}/sqldeveloper/extensions/oracle.sqldeveloper.jar oracle oracle.sqldeveloper.utils - 21.4.2 + ${sqldev.version} system ${sqldev.basedir}/sqldeveloper/extensions/oracle.sqldeveloper.utils.jar oracle oracle.sqldeveloper.worksheet - 21.4.2 + ${sqldev.version} system ${sqldev.basedir}/sqldeveloper/extensions/oracle.sqldeveloper.worksheet.jar oracle oracle.sqldeveloper.schemabrowser - 21.4.2 + ${sqldev.version} system ${sqldev.basedir}/sqldeveloper/extensions/oracle.sqldeveloper.schemabrowser.jar oracle - ojdbc8 - 21.4.0 + ojdbc11 + ${sqldev.version} system - ${sqldev.basedir}/jdbc/lib/ojdbc8.jar + ${sqldev.basedir}/jdbc/lib/ojdbc11.jar oracle dbapi - 21.4.2 + ${sqldev.version} system ${sqldev.basedir}/ide/lib/dbapi.jar oracle oracle.ide.db - 21.4.2 + ${sqldev.version} system ${sqldev.basedir}/ide/extensions/oracle.ide.db.jar oracle oracle.jdeveloper.db.connection - 21.4.2 + ${sqldev.version} system ${sqldev.basedir}/jdev/extensions/oracle.jdeveloper.db.connection.jar oracle oracle.jdeveloper.java.core.jar - 12.2.1 + ${sqldev.version} system ${sqldev.basedir}/jdev/extensions/oracle.jdeveloper.java.core.jar oracle oracle.jdeveloper.runner.jar - 12.2.1 + ${sqldev.version} system ${sqldev.basedir}/jdev/extensions/oracle.jdeveloper.runner.jar oracle oracle.ide.runner - 12.2.1 + ${sqldev.version} system ${sqldev.basedir}/ide/extensions/oracle.ide.runner.jar @@ -168,7 +172,7 @@ oracle javatools-nodeps - 12.2.1 + ${sqldev.version} system ${sqldev.basedir}/modules/oracle.javatools/javatools-nodeps.jar @@ -176,14 +180,14 @@ oracle jewt4.jar - 12.2.1 + ${sqldev.version} system ${sqldev.basedir}/modules/oracle.bali.jewt/jewt4.jar oracle share.jar - 12.2.1 + ${sqldev.version} system ${sqldev.basedir}/modules/oracle.bali.share/share.jar @@ -198,7 +202,7 @@ org.osgi org.osgi.core - 5.0.0 + 6.0.0 provided @@ -206,19 +210,19 @@ org.springframework spring-jdbc - 5.3.16 + 7.0.8 org.springframework spring-core - 5.3.16 + 7.0.8 org.springframework spring-web - 5.3.16 + 7.0.8 @@ -236,7 +240,7 @@ org.jetbrains annotations - 23.0.0 + 26.1.0 compile @@ -244,7 +248,6 @@ ${project.basedir}/src/main/java - ${project.basedir}/src/test/java src/main/resources @@ -253,40 +256,43 @@ + ${project.basedir}/src/test/java + + + src/test/resources + + **/*.* + + + org.apache.maven.plugins - 3.10.0 + 3.15.0 maven-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.4 org.apache.maven.plugins maven-surefire-plugin - 2.22.2 + 3.5.6 @@ -316,7 +322,7 @@ org.apache.maven.plugins maven-antrun-plugin - 3.0.0 + 3.1.0 prepare-package @@ -337,7 +343,7 @@ org.codehaus.mojo properties-maven-plugin - 1.0.0 + 1.1.0 initialize @@ -357,7 +363,7 @@ org.codehaus.mojo build-helper-maven-plugin - 3.1.0 + 3.3.0 parse-version @@ -427,7 +433,7 @@ org.apache.felix maven-bundle-plugin - 4.2.1 + 6.0.2 true ${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.plugins checksum-maven-plugin - 1.9 + 1.11 calculate-checksums @@ -533,7 +540,7 @@ org.jacoco jacoco-maven-plugin - 0.8.5 + 0.8.15 @@ -599,12 +606,21 @@ org.codehaus.mojo buildnumber-maven-plugin - 3.0.0 + 3.3.0 - + + + + + org.javassist + javassist + 3.30.2-GA + + + org.utplsql.sqldev Extension 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