nodes) {
context.setConn(conn);
final TestTemplate testTemplate = new TestTemplate(context);
if (generateFiles) {
- final String packageName = context.getTestPackagePrefix() + nodeTools.toObjectName(node)
- + context.getTestPackageSuffix();
+ final String packageName = context.getTestPackagePrefix().toLowerCase()
+ + nodeTools.toObjectName(node).toLowerCase()
+ + context.getTestPackageSuffix().toLowerCase();
final String packagePath = outputDirectory + File.separator + packageName;
saveConsoleOutput(templateTools.writeToFile(packagePath + ".pks", testTemplate.generateSpec()));
saveConsoleOutput(templateTools.writeToFile(packagePath + ".pkb", testTemplate.generateBody()));
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 bc445465..7bbdff3f 100644
--- a/sqldev/src/main/java/org/utplsql/sqldev/oddgen/TestTemplate.java
+++ b/sqldev/src/main/java/org/utplsql/sqldev/oddgen/TestTemplate.java
@@ -39,13 +39,13 @@ public String generateSpec() {
final StringBuilder sb = new StringBuilder();
final String objectName = context.getObjectName().toLowerCase();
final String packageName = context.getTestPackagePrefix() + objectName + context.getTestPackageSuffix();
- sb.append("CREATE OR REPLACE PACKAGE ");
+ 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");
+ sb.append("\n\n");
}
sb.append("\t--%suite(");
sb.append(packageName);
@@ -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
@@ -68,7 +69,7 @@ public String generateSpec() {
if (context.isDisableTests()) {
sb.append("\t--%disabled\n");
}
- sb.append("\tPROCEDURE ");
+ sb.append("\tprocedure ");
sb.append(context.getTestUnitPrefix());
sb.append(unit);
sb.append(context.getTestUnitSuffix());
@@ -82,7 +83,7 @@ public String generateSpec() {
sb.append("\t--%endcontext\n\n");
}
}
- sb.append("END ");
+ sb.append("end ");
sb.append(packageName);
sb.append(";\n");
sb.append("/");
@@ -93,15 +94,15 @@ public String generateSpec() {
public String generateBody() {
StringBuilder sb = new StringBuilder();
final String objectName = context.getObjectName().toLowerCase();
- sb.append("CREATE OR REPLACE PACKAGE BODY ");
+ sb.append("create or replace package body ");
sb.append(context.getTestPackagePrefix());
sb.append(objectName);
sb.append(context.getTestPackageSuffix());
- sb.append(" IS\n\n");
+ sb.append(" is\n\n");
if (context.isGenerateComments()) {
- sb.append("\t/* generated by utPLSQL for SQL Developer on ");
+ sb.append("\t-- generated by utPLSQL for SQL Developer on ");
sb.append(today);
- sb.append(" */\n\n");
+ sb.append("\n\n");
}
for (final String u : units) {
final String unit = u.toLowerCase();
@@ -116,33 +117,34 @@ public String generateBody() {
sb.append(" case ");
sb.append(i);
sb.append(": ...\n");
+ } else {
+ sb.append("\n");
}
sb.append("\t--\n");
}
- sb.append("\tPROCEDURE ");
+ sb.append("\tprocedure ");
sb.append(procedureName);
- sb.append(" IS\n");
- sb.append("\t\tl_actual INTEGER := 0;\n");
- sb.append("\t\tl_expected INTEGER := 1;\n");
- sb.append("\tBEGIN\n");
+ sb.append(" is\n");
+ sb.append("\t\tl_actual integer := 0;\n");
+ sb.append("\t\tl_expected integer := 1;\n");
+ sb.append("\tbegin\n");
if (context.isGenerateComments()) {
- sb.append("\t\t-- populate actual\n");
+ sb.append("\t\t-- arrange\n\n");
+ sb.append("\t\t-- act\n");
sb.append("\t\t-- ");
sb.append(objectName);
sb.append(".");
sb.append(unit);
sb.append(";\n\n");
- sb.append("\t\t-- populate expected\n");
- sb.append("\t\t-- ...\n\n");
sb.append("\t\t-- assert\n");
}
sb.append("\t\tut.expect(l_actual).to_equal(l_expected);\n");
- sb.append("\tEND ");
+ sb.append("\tend ");
sb.append(procedureName);
sb.append(";\n\n");
}
}
- sb.append("END ");
+ sb.append("end ");
sb.append(context.getTestPackagePrefix());
sb.append(objectName);
sb.append(context.getTestPackageSuffix());
diff --git a/sqldev/src/main/java/org/utplsql/sqldev/runner/UtplsqlRunner.java b/sqldev/src/main/java/org/utplsql/sqldev/runner/UtplsqlRunner.java
index 5f7c783d..6222c2e0 100644
--- a/sqldev/src/main/java/org/utplsql/sqldev/runner/UtplsqlRunner.java
+++ b/sqldev/src/main/java/org/utplsql/sqldev/runner/UtplsqlRunner.java
@@ -469,4 +469,10 @@ public Thread getProducerThread() {
public Thread getConsumerThread() {
return consumerThread;
}
+
+ // for testing purposes only
+ public Run getRun() {
+ return run;
+ }
+
}
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 ebc0e7cc..5a0773b2 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/preference/PreferencePanel.java b/sqldev/src/main/java/org/utplsql/sqldev/ui/preference/PreferencePanel.java
index d56a1176..703766ff 100644
--- a/sqldev/src/main/java/org/utplsql/sqldev/ui/preference/PreferencePanel.java
+++ b/sqldev/src/main/java/org/utplsql/sqldev/ui/preference/PreferencePanel.java
@@ -244,11 +244,11 @@ private String trimPlusNewLine(final String input) {
private CharSequence utSpecTemplate() {
StringBuilder sb = new StringBuilder();
- sb.append("CREATE OR REPLACE PACKAGE ");
+ sb.append("create or replace package ");
sb.append(testPackagePrefixTextField.getText());
sb.append("[package_name]");
sb.append(testPackageSuffixTextField.getText());
- sb.append(" IS\n\n");
+ sb.append(" is\n\n");
sb.append("\t--%suite\n");
if (!suitePathTextField.getText().isEmpty()) {
sb.append("\t--%suitepath(");
@@ -258,7 +258,7 @@ private CharSequence utSpecTemplate() {
sb.append("\n\t");
sb.append(utSpecProcTemplate().toString().trim().replace("\n", "\n\t"));
sb.append("\n\n");
- sb.append("END ");
+ sb.append("end ");
sb.append(testPackagePrefixTextField.getText());
sb.append("[package_name]");
sb.append(testPackageSuffixTextField.getText());
@@ -279,7 +279,7 @@ private CharSequence utSpecProcTemplate() {
if (disableTestsCheckBox.isSelected()) {
sb.append("--%disabled\n");
}
- sb.append("PROCEDURE ");
+ sb.append("procedure ");
sb.append(testUnitPrefixTextField.getText());
sb.append("[procedure_name]");
sb.append(testUnitSuffixTextField.getText());
@@ -296,14 +296,14 @@ private CharSequence utSpecProcTemplate() {
private CharSequence utBodyTemplate() {
StringBuilder sb = new StringBuilder();
- sb.append("CREATE OR REPLACE PACKAGE BODY ");
+ sb.append("create or replace package body ");
sb.append(testPackagePrefixTextField.getText());
sb.append("[package_name]");
sb.append(testPackageSuffixTextField.getText());
- sb.append(" IS\n\n\t");
+ sb.append(" is\n\n\t");
sb.append(utBodyProcTemplate().toString().trim().replace("\n", "\n\t"));
sb.append("\n\n");
- sb.append("END ");
+ sb.append("end ");
sb.append(testPackagePrefixTextField.getText());
sb.append("[package_name]");
sb.append(testPackageSuffixTextField.getText());
@@ -328,26 +328,24 @@ private CharSequence utBodyProcTemplate() {
sb.append('\n');
sb.append("--\n");
}
- sb.append("PROCEDURE ");
+ sb.append("procedure ");
sb.append(testUnitPrefixTextField.getText());
sb.append("[procedure_name]");
sb.append(testUnitSuffixTextField.getText());
if (withContext) {
sb.append(i);
}
- sb.append(" IS\n");
- sb.append("\tl_actual INTEGER := 0;\n");
- sb.append("\tl_expected INTEGER := 1;\n");
- sb.append("BEGIN\n");
+ sb.append(" is\n");
+ sb.append("\tl_actual integer := 0;\n");
+ sb.append("\tl_expected integer := 1;\n");
+ sb.append("begin\n");
if (generateCommentsCheckBox.isSelected()) {
- sb.append("\t-- populate actual\n");
- sb.append("\t-- ...\n\n");
- sb.append("\t-- populate expected\n");
- sb.append("\t-- ...\n\n");
+ sb.append("\t-- arrange\n\n");
+ sb.append("\t-- act\n\n");
sb.append("\t-- assert\n");
}
sb.append("\tut.expect(l_actual).to_equal(l_expected);\n");
- sb.append("END ");
+ sb.append("end ");
sb.append(testUnitPrefixTextField.getText());
sb.append("[procedure_name]");
sb.append(testUnitSuffixTextField.getText());
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 145dde29..5f225a84 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
@@ -142,6 +142,7 @@ public class RunnerPanel {
private RunnerTextField testPackageTextField;
private RunnerTextField testProcedureTextField;
private RunnerTextArea testDescriptionTextArea;
+ private RunnerTextArea testDisabledReasonTextArea;
private RunnerTextArea testIdTextArea;
private RunnerTextField testStartTextField;
private FailuresTableModel failuresTableModel;
@@ -249,6 +250,7 @@ private void resetDerived() {
testPackageTextField.setText(null);
testProcedureTextField.setText(null);
testDescriptionTextArea.setText(null);
+ testDisabledReasonTextArea.setText(null);
testStartTextField.setText(null);
failuresTableModel.setModel(null);
failuresTableModel.fireTableDataChanged();
@@ -345,6 +347,8 @@ private void selectTestInTestOverviewTable(Test test) {
private void applyShowSuites() {
applyFilter(showSuccessfulTestsCheckBoxMenuItem.isSelected(), showDisabledTestsCheckBoxMenuItem.isSelected());
+ final TableColumn overviewTreeTableTime = testOverviewTreeTable.getColumnModel().getColumn(3);
+ final TableColumn overviewTableTime = testOverviewTable.getColumnModel().getColumn(4);
if (showSuitesCheckBoxMenuItem.isSelected()) {
testOverviewScrollPane.setViewportView(testOverviewTreeTable);
// sync in tree-table - just first selected test
@@ -357,6 +361,7 @@ private void applyShowSuites() {
testOverviewTreeTable.getTree().setSelectionPath(new TreePath(itemNode.getPath()));
}
}
+ overviewTreeTableTime.setPreferredWidth(overviewTableTime.getWidth());
} else {
testOverviewScrollPane.setViewportView(testOverviewTable);
// sync in table - just first test in selected item
@@ -372,6 +377,7 @@ private void applyShowSuites() {
}
selectTestInTestOverviewTable(test);
}
+ overviewTableTime.setPreferredWidth(overviewTreeTableTime.getWidth());
}
showSelectedRow();
}
@@ -405,6 +411,19 @@ public boolean include(final RowFilter.Entry extends TestOverviewTableModel, ?
}
}
+ private void openItemNode(final ItemNode node) {
+ if (!node.getPackageName().equals("***")) {
+ final UtplsqlDao dao = new UtplsqlDao(DatabaseTools.getConnection(currentRun.getConnectionName()));
+ final String source = dao.getSource(node.getOwnerName(), "PACKAGE", node.getPackageName().toUpperCase()).trim();
+ final UtplsqlParser parser = new UtplsqlParser(source);
+ int line = 1;
+ if (node.getUserObject() instanceof Test) {
+ line = parser.getLineOf(node.getProcedureName());
+ }
+ openEditor(node.getOwnerName(), "PACKAGE", node.getPackageName().toUpperCase(), line, 1);
+ }
+ }
+
private void openTest(final Test test) {
final UtplsqlDao dao = new UtplsqlDao(DatabaseTools.getConnection(currentRun.getConnectionName()));
final String source = dao.getSource(test.getOwnerName(), "PACKAGE", test.getObjectName().toUpperCase()).trim();
@@ -414,11 +433,21 @@ private void openTest(final Test test) {
}
private void openSelectedTest() {
- final int rowIndex = testOverviewTable.getSelectedRow();
- if (rowIndex != -1) {
- final int row = testOverviewTable.convertRowIndexToModel(rowIndex);
- final Test test = testOverviewTableModel.getTest(row);
- openTest(test);
+ if (!showSuitesCheckBoxMenuItem.isSelected()) {
+ // table
+ final int rowIndex = testOverviewTable.getSelectedRow();
+ if (rowIndex != -1) {
+ final int row = testOverviewTable.convertRowIndexToModel(rowIndex);
+ final Test test = testOverviewTableModel.getTest(row);
+ openTest(test);
+ }
+ } else {
+ // tree-table
+ TreePath path = testOverviewTreeTable.getTree().getSelectionPath();
+ if (path != null) {
+ ItemNode itemNode = (ItemNode) path.getLastPathComponent();
+ openItemNode(itemNode);
+ }
}
}
@@ -427,14 +456,27 @@ private void openSelectedFailure() {
if (rowIndex != -1) {
final int row = failuresTable.convertRowIndexToModel(rowIndex);
final Expectation expectation = failuresTableModel.getExpectation(row);
- final Test test = testOverviewTableModel
- .getTest(testOverviewTable.convertRowIndexToModel(testOverviewTable.getSelectedRow()));
- final Integer callerLine = expectation.getCallerLine();
- if (callerLine != null) {
- openEditor(test.getOwnerName(), "PACKAGE BODY", test.getObjectName().toUpperCase(),
- expectation.getCallerLine(), 1);
+ Test test = null;
+ if (!showSuitesCheckBoxMenuItem.isSelected()) {
+ // table
+ test = testOverviewTableModel
+ .getTest(testOverviewTable.convertRowIndexToModel(testOverviewTable.getSelectedRow()));
} else {
- openTest(test);
+ // tree-table
+ TreePath path = testOverviewTreeTable.getTree().getSelectionPath();
+ if (path != null) {
+ ItemNode itemNode = (ItemNode) path.getLastPathComponent();
+ test = ((Test)itemNode.getUserObject());
+ }
+ }
+ if (test != null) {
+ final Integer callerLine = expectation.getCallerLine();
+ if (callerLine != null) {
+ openEditor(test.getOwnerName(), "PACKAGE BODY", test.getObjectName().toUpperCase(),
+ expectation.getCallerLine(), 1);
+ } else {
+ openTest(test);
+ }
}
}
}
@@ -526,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);
}
@@ -798,10 +840,12 @@ private void showSelectedRow() {
if (!showSuitesCheckBoxMenuItem.isSelected()) {
// table
final int rowIndex = testOverviewTable.getSelectedRow();
- final int row = testOverviewTable.convertRowIndexToModel(rowIndex);
- final Rectangle position = testOverviewTable
- .getCellRect(testOverviewTable.convertRowIndexToView(row), 0, true);
- testOverviewTable.scrollRectToVisible(position);
+ if (rowIndex != -1) {
+ final int row = testOverviewTable.convertRowIndexToModel(rowIndex);
+ final Rectangle position = testOverviewTable
+ .getCellRect(testOverviewTable.convertRowIndexToView(row), 0, true);
+ testOverviewTable.scrollRectToVisible(position);
+ }
} else {
// tree-table
TreePath path = testOverviewTreeTable.getTree().getSelectionPath();
@@ -887,6 +931,13 @@ private String getLinkedAndFormattedText(final String text) {
localText = localText.substring(0, start) + title + localText.substring(end);
m = p3.matcher(localText);
}
+ // replaces two consecutive spaces with two non-breaking spaces to fix #140
+ // assume that consecutive spaces do not conflict with previous replacements
+ // using CSS "white-space: pre-wrap;" does not work within Swing, it's simply ignored.
+ // See https://docs.oracle.com/javase/8/docs/api/javax/swing/text/html/CSS.html
+ // putting text in pre tags is not an option, because this suppresses wrap.
+ localText = localText.replaceAll(" ", " ");
+ // add paragraph for each line to preserve line breaks
StringBuilder sb = new StringBuilder();
for (final String p : localText.split("\n")) {
sb.append("");
@@ -1296,6 +1347,7 @@ private void initializeGUI() {
testPackageTextField.setText(test.getObjectName());
testProcedureTextField.setText(test.getProcedureName());
testDescriptionTextArea.setText(StringTools.trim(test.getDescription()));
+ testDisabledReasonTextArea.setText(StringTools.trim(test.getDisabledReason()));
testIdTextArea.setText(test.getId());
testStartTextField.setText(StringTools.formatDateTime(test.getStartTime()));
failuresTableModel.setModel(test.getFailedExpectations());
@@ -1396,11 +1448,12 @@ public Component getTableCellRendererComponent(final JTable table, final Object
if (test.getFailedExpectations() != null && !test.getFailedExpectations().isEmpty()) {
failuresTable.setRowSelectionInterval(0, 0);
}
+ testDisabledReasonTextArea.setText(test.getDisabledReason());
} else {
failuresTableModel.setModel(null);
failuresTableModel.fireTableDataChanged();
testFailureMessageTextPane.setText(null);
-
+ testDisabledReasonTextArea.setText(null);
}
testErrorStackTextPane.setText(getHtml(StringTools.trim(item.getErrorStack())));
testWarningsTextPane.setText(getHtml(StringTools.trim(item.getWarnings())));
@@ -1412,7 +1465,19 @@ public Component getTableCellRendererComponent(final JTable table, final Object
testOverviewCodeCoverageMenuItem.setEnabled(true);
}
});
-
+ testOverviewTreeTable.addMouseListener(new MouseAdapter() {
+ @Override
+ public void mouseClicked(final MouseEvent e) {
+ if (e.getClickCount() == 2) {
+ if (failuresTable.getSelectedRowCount() == 1) {
+ // open failure only if a Test node is selected
+ openSelectedFailure();
+ } else {
+ openSelectedTest();
+ }
+ }
+ }
+ });
final JTree overviewTreeTableName = testOverviewTreeTable.getTree();
overviewTreeTableName.setCellRenderer(new DefaultTreeCellRenderer() {
private static final long serialVersionUID = 580783625740405285L;
@@ -1515,6 +1580,8 @@ public Component getTreeCellRendererComponent(JTree tree, Object value, boolean
showTestDescriptionCheckBoxMenuItem.addActionListener(event -> {
applyShowTestDescription();
fixCheckBoxMenuItem(showTestDescriptionCheckBoxMenuItem);
+ // force refresh to fix issue #131 (truncated name/description), accepting side-effect, that the selection is lost
+ refreshAction();
});
testOverviewPopupMenu.add(showTestDescriptionCheckBoxMenuItem);
showWarningIndicatorCheckBoxMenuItem = new JCheckBoxMenuItem(UtplsqlResources.getString("PREF_SHOW_WARNING_INDICATOR_LABEL").replace("?", ""), true);
@@ -1651,11 +1718,39 @@ public Component getTreeCellRendererComponent(JTree tree, Object value, boolean
c.weightx = 1;
c.weighty = 0;
testInfoPanel.add(testDescriptionTextArea, c);
+ // - Disabled Reason
+ final JLabel testDisabledReasonLabel = new JLabel(UtplsqlResources.getString("RUNNER_DISABLED_REASON_LABEL"));
+ testDisabledReasonLabel.setBorder(BorderFactory.createEmptyBorder(isMacLookAndFeel() ? 5 : 3, 0, 0, 0));
+ c.gridx = 0;
+ c.gridy = 4;
+ c.gridwidth = 1;
+ c.gridheight = 1;
+ c.insets = new Insets(5, 10, 0, 0); // top, left, bottom, right
+ c.anchor = GridBagConstraints.NORTHWEST;
+ c.fill = GridBagConstraints.NONE;
+ c.weightx = 0;
+ c.weighty = 0;
+ testInfoPanel.add(testDisabledReasonLabel, c);
+ testDisabledReasonTextArea = new RunnerTextArea();
+ testDisabledReasonTextArea.setEditable(false);
+ testDisabledReasonTextArea.setEnabled(true);
+ testDisabledReasonTextArea.setLineWrap(true);
+ testDisabledReasonTextArea.setWrapStyleWord(true);
+ c.gridx = 1;
+ c.gridy = 4;
+ c.gridwidth = 1;
+ c.gridheight = 1;
+ c.insets = new Insets(5, 5, 0, 10); // top, left, bottom, right
+ c.anchor = GridBagConstraints.WEST;
+ c.fill = GridBagConstraints.HORIZONTAL;
+ c.weightx = 1;
+ c.weighty = 0;
+ testInfoPanel.add(testDisabledReasonTextArea, c);
// - Suitepath (id)
final JLabel testIdLabel = new JLabel(UtplsqlResources.getString("RUNNER_TEST_ID_COLUMN"));
testIdLabel.setBorder(BorderFactory.createEmptyBorder(isMacLookAndFeel() ? 5 : 3, 0, 0, 0));
c.gridx = 0;
- c.gridy = 4;
+ c.gridy = 5;
c.gridwidth = 1;
c.gridheight = 1;
c.insets = new Insets(5, 10, 0, 0); // top, left, bottom, right
@@ -1670,7 +1765,7 @@ public Component getTreeCellRendererComponent(JTree tree, Object value, boolean
testIdTextArea.setLineWrap(true);
testIdTextArea.setWrapStyleWord(false);
c.gridx = 1;
- c.gridy = 4;
+ c.gridy = 5;
c.gridwidth = 1;
c.gridheight = 1;
c.insets = new Insets(5, 5, 0, 10); // top, left, bottom, right
@@ -1682,7 +1777,7 @@ public Component getTreeCellRendererComponent(JTree tree, Object value, boolean
// - Start
final JLabel testStartLabel = new JLabel(UtplsqlResources.getString("RUNNER_START_LABEL"));
c.gridx = 0;
- c.gridy = 5;
+ c.gridy = 6;
c.gridwidth = 1;
c.gridheight = 1;
c.insets = new Insets(5, 10, 10, 0); // top, left, bottom, right
@@ -1694,7 +1789,7 @@ public Component getTreeCellRendererComponent(JTree tree, Object value, boolean
testStartTextField = new RunnerTextField();
testStartTextField.setEditable(false);
c.gridx = 1;
- c.gridy = 5;
+ c.gridy = 6;
c.gridwidth = 1;
c.gridheight = 1;
c.insets = new Insets(5, 5, 10, 10); // top, left, bottom, right
@@ -1703,8 +1798,9 @@ public Component getTreeCellRendererComponent(JTree tree, Object value, boolean
c.weightx = 1;
c.weighty = 0;
testInfoPanel.add(testStartTextField, c);
+ // - Vertical filler
c.gridx = 0;
- c.gridy = 6;
+ c.gridy = 7;
c.gridwidth = 1;
c.gridheight = 1;
c.insets = new Insets(0, 0, 0, 0); // top, left, bottom, right
@@ -1881,10 +1977,12 @@ public void mouseClicked(final MouseEvent e) {
BorderFactory.createCompoundBorder(BorderFactory.createLineBorder(new Color(219, 219, 219)),
BorderFactory.createEmptyBorder(1, 1, 1, 1)));
testDescriptionTextArea.setBorder(border);
+ testDisabledReasonTextArea.setBorder(border);
testIdTextArea.setBorder(border);
} else {
final Border referenceBorder = testOwnerTextField.getBorder();
testDescriptionTextArea.setBorder(referenceBorder);
+ testDisabledReasonTextArea.setBorder(referenceBorder);
testIdTextArea.setBorder(referenceBorder);
}
}
diff --git a/sqldev/src/main/java/org/utplsql/sqldev/ui/runner/SmartTime.java b/sqldev/src/main/java/org/utplsql/sqldev/ui/runner/SmartTime.java
index fc4b2812..69ea1500 100644
--- a/sqldev/src/main/java/org/utplsql/sqldev/ui/runner/SmartTime.java
+++ b/sqldev/src/main/java/org/utplsql/sqldev/ui/runner/SmartTime.java
@@ -16,7 +16,6 @@
package org.utplsql.sqldev.ui.runner;
import java.text.DecimalFormat;
-import java.util.Locale;
public class SmartTime {
private Double seconds;
@@ -46,7 +45,6 @@ public Double getSeconds() {
@Override
public String toString() {
- Locale.setDefault(new Locale("en", "US"));
String ret;
if (seconds == null) {
ret = null;
diff --git a/sqldev/src/main/java/org/utplsql/sqldev/ui/runner/TestOverviewTreeTableModel.java b/sqldev/src/main/java/org/utplsql/sqldev/ui/runner/TestOverviewTreeTableModel.java
index c1562d2c..1676c3a1 100644
--- a/sqldev/src/main/java/org/utplsql/sqldev/ui/runner/TestOverviewTreeTableModel.java
+++ b/sqldev/src/main/java/org/utplsql/sqldev/ui/runner/TestOverviewTreeTableModel.java
@@ -483,12 +483,6 @@ public Object getValueAt(Object node, int col) {
switch (col) {
case 0:
if (showDescription && itemNode.getDescription() != null) {
- if (itemNode.getUserObject() instanceof Suite) {
- if (!itemNode.getName().contains("context_#")) {
- // description of suites might be bewildering, hence use it for contexts only
- return itemNode.getName();
- }
- }
return itemNode.getDescription();
} else {
return itemNode.getName();
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 680cabc3..911a6dfe 100644
--- a/sqldev/src/main/resources/org/utplsql/sqldev/resources/UtplsqlResources.properties
+++ b/sqldev/src/main/resources/org/utplsql/sqldev/resources/UtplsqlResources.properties
@@ -103,6 +103,7 @@ RUNNER_TESTS_LABEL=Tests
RUNNER_FAILURES_LABEL=Failures
RUNNER_ERRORS_LABEL=Errors
RUNNER_DISABLED_LABEL=Disabled
+RUNNER_DISABLED_REASON_LABEL=Disabled Reason
RUNNER_WARNINGS_LABEL=Warnings
RUNNER_INFO_LABEL=Info
RUNNER_INITIALIZING_TEXT=Initializing...
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 8ba5566e..7691dcb7 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
@@ -71,6 +71,7 @@ RUNNER_TESTS_LABEL=Tests
RUNNER_FAILURES_LABEL=Fehlschl\u00e4ge
RUNNER_ERRORS_LABEL=Fehler
RUNNER_DISABLED_LABEL=Deaktiviert
+RUNNER_DISABLED_REASON_LABEL=Deaktivierungsgrund
RUNNER_WARNINGS_LABEL=Warnungen
RUNNER_INFO_LABEL=Info
RUNNER_INITIALIZING_TEXT=Initialisierung...
diff --git a/sqldev/src/main/resources/org/utplsql/sqldev/resources/UtplsqlSnippets.xml b/sqldev/src/main/resources/org/utplsql/sqldev/resources/UtplsqlSnippets.xml
index 8915628f..f1a3d4e4 100644
--- a/sqldev/src/main/resources/org/utplsql/sqldev/resources/UtplsqlSnippets.xml
+++ b/sqldev/src/main/resources/org/utplsql/sqldev/resources/UtplsqlSnippets.xml
@@ -16,7 +16,7 @@
)]]>
-
+
)]]>
@@ -71,176 +71,191 @@
.].][,...])]]>
-
+
.].][,...])]]>
-
+
)]]>
-
+
-
+ )]]>
-
+
)]]>
-
+
+
+ )]]>
+
+
+
-
+
-
+ [,...])]]>
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
+
+
+
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
+
+
+
+
+
-
+
-
+
@@ -250,7 +265,7 @@
-
+
diff --git a/sqldev/src/test/java/org/utplsql/sqldev/test/JsonToStringStylerTest.java b/sqldev/src/test/java/org/utplsql/sqldev/test/JsonToStringStylerTest.java
index a5c548ce..606b8f9b 100644
--- a/sqldev/src/test/java/org/utplsql/sqldev/test/JsonToStringStylerTest.java
+++ b/sqldev/src/test/java/org/utplsql/sqldev/test/JsonToStringStylerTest.java
@@ -191,6 +191,7 @@ public void runWithTests() {
sb.append(" \"objectName\": null,\n");
sb.append(" \"procedureName\": null,\n");
sb.append(" \"disabled\": null,\n");
+ sb.append(" \"disabledReason\": null,\n");
sb.append(" \"testNumber\": null,\n");
sb.append(" \"failedExpectations\": null\n");
sb.append(" },\n");
@@ -222,6 +223,7 @@ public void runWithTests() {
sb.append(" \"objectName\": null,\n");
sb.append(" \"procedureName\": null,\n");
sb.append(" \"disabled\": null,\n");
+ sb.append(" \"disabledReason\": null,\n");
sb.append(" \"testNumber\": null,\n");
sb.append(" \"failedExpectations\": null\n");
sb.append(" }\n");
diff --git a/sqldev/src/test/java/org/utplsql/sqldev/test/preference/PreferenceModelTest.java b/sqldev/src/test/java/org/utplsql/sqldev/test/preference/PreferenceModelTest.java
index 1ed23f7e..68bf9e4e 100644
--- a/sqldev/src/test/java/org/utplsql/sqldev/test/preference/PreferenceModelTest.java
+++ b/sqldev/src/test/java/org/utplsql/sqldev/test/preference/PreferenceModelTest.java
@@ -32,14 +32,14 @@ public void defaultValues() {
Assert.assertFalse(model.isCheckRunUtplsqlTest());
Assert.assertFalse(model.isUseSmartTimes());
Assert.assertEquals(10, model.getNumberOfRunsInHistory());
- Assert.assertFalse(model.isShowDisabledCounter());
- Assert.assertFalse(model.isShowWarningsCounter());
- Assert.assertFalse(model.isShowInfoCounter());
- Assert.assertFalse(model.isShowWarningIndicator());
- Assert.assertFalse(model.isShowInfoIndicator());
+ Assert.assertTrue(model.isShowDisabledCounter());
+ Assert.assertTrue(model.isShowWarningsCounter());
+ Assert.assertTrue(model.isShowInfoCounter());
+ Assert.assertTrue(model.isShowWarningIndicator());
+ Assert.assertTrue(model.isShowInfoIndicator());
Assert.assertTrue(model.isShowSuccessfulTests());
Assert.assertTrue(model.isShowDisabledTests());
- Assert.assertFalse(model.isShowTestDescription());
+ Assert.assertTrue(model.isShowTestDescription());
Assert.assertTrue(model.isSyncDetailTab());
Assert.assertTrue(model.isShowSuites());
Assert.assertEquals("test_", model.getTestPackagePrefix());
diff --git a/sqldev/src/test/java/org/utplsql/sqldev/test/runner/SmartTimeTest.java b/sqldev/src/test/java/org/utplsql/sqldev/test/runner/SmartTimeTest.java
index 297a33f1..0f9662c0 100644
--- a/sqldev/src/test/java/org/utplsql/sqldev/test/runner/SmartTimeTest.java
+++ b/sqldev/src/test/java/org/utplsql/sqldev/test/runner/SmartTimeTest.java
@@ -15,11 +15,19 @@
*/
package org.utplsql.sqldev.test.runner;
+import java.util.Locale;
+
import org.junit.Assert;
+import org.junit.Before;
import org.junit.Test;
import org.utplsql.sqldev.ui.runner.SmartTime;
public class SmartTimeTest {
+
+ @Before
+ public void setup() {
+ Locale.setDefault(new Locale("en", "US"));
+ }
@Test
public void null_default() {
diff --git a/sqldev/src/test/java/org/utplsql/sqldev/test/runner/UtplsqlRunnerAggregationTest.java b/sqldev/src/test/java/org/utplsql/sqldev/test/runner/UtplsqlRunnerAggregationTest.java
new file mode 100644
index 00000000..798da672
--- /dev/null
+++ b/sqldev/src/test/java/org/utplsql/sqldev/test/runner/UtplsqlRunnerAggregationTest.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright 2021 Philipp Salvisberg
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.utplsql.sqldev.test.runner;
+
+import java.sql.Connection;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.springframework.jdbc.datasource.SingleConnectionDataSource;
+import org.utplsql.sqldev.model.DatabaseTools;
+import org.utplsql.sqldev.model.SystemTools;
+import org.utplsql.sqldev.model.runner.ItemNode;
+import org.utplsql.sqldev.runner.UtplsqlRunner;
+import org.utplsql.sqldev.test.AbstractJdbcTest;
+
+public class UtplsqlRunnerAggregationTest extends AbstractJdbcTest {
+ static final int SHOW_GUI_AFTER_RUN_COMPLETION_IN_SECONDS = 0;
+
+ @Before
+ public void setup() {
+ // based on https://github.com/utPLSQL/utPLSQL-SQLDeveloper/issues/126
+ jdbcTemplate.execute(
+ "create or replace package x is\n"
+ + "\n"
+ + " --%suite(suite x)\n"
+ + " --%suitepath(foo.bar)\n"
+ + "\n"
+ + " --%test(feature a)\n"
+ + " --%disabled\n"
+ + " procedure test_a;\n"
+ + "\n"
+ + " --%test(feature b)\n"
+ + " --%disabled\n"
+ + " procedure test_b;\n"
+ + "\n"
+ + "end;");
+ jdbcTemplate.execute(
+ "create or replace package y is\n"
+ + "\n"
+ + " --%suite(suite y)\n"
+ + " --%suitepath(foo.bar)\n"
+ + "\n"
+ + " --%test(feature c)\n"
+ + " --%disabled\n"
+ + " procedure test_c;\n"
+ + "\n"
+ + " --%test(feature d)\n"
+ + " --%disabled\n"
+ + " procedure test_d;\n"
+ + "\n"
+ + "end;");
+ }
+
+ @After
+ public void teardown() {
+ executeAndIgnore(jdbcTemplate, "DROP PACKAGE x");
+ executeAndIgnore(jdbcTemplate, "DROP PACKAGE y");
+ }
+
+ private Connection getNewConnection() {
+ final SingleConnectionDataSource ds = new SingleConnectionDataSource();
+ ds.setDriverClassName("oracle.jdbc.OracleDriver");
+ ds.setUrl(dataSource.getUrl());
+ ds.setUsername(dataSource.getUsername());
+ ds.setPassword(dataSource.getPassword());
+ return DatabaseTools.getConnection(ds);
+ }
+
+ @Test
+ public void aggregateDescription() {
+ UtplsqlRunner runner = new UtplsqlRunner(Collections.singletonList(":foo"), getNewConnection(), getNewConnection());
+ runner.runTestAsync();
+ SystemTools.waitForThread(runner.getProducerThread(), 10000);
+ SystemTools.waitForThread(runner.getConsumerThread(), 10000);
+ Assert.assertNotNull(runner);
+ LinkedHashMap nodes = runner.getRun().getItemNodes();
+ Assert.assertEquals(9, nodes.size()); // 8 + 1 for the run node
+ Assert.assertNotNull(nodes.get(runner.getRun().getReporterId()));
+ Assert.assertNull(nodes.get("foo").getDescription());
+ Assert.assertNull(nodes.get("foo.bar").getDescription());
+ Assert.assertEquals("suite y", nodes.get("foo.bar.y").getDescription());
+ Assert.assertEquals("suite x", nodes.get("foo.bar.x").getDescription());
+ Assert.assertEquals("feature c", nodes.get("foo.bar.y.test_c").getDescription());
+ Assert.assertEquals("feature d", nodes.get("foo.bar.y.test_d").getDescription());
+ Assert.assertEquals("feature a", nodes.get("foo.bar.x.test_a").getDescription());
+ Assert.assertEquals("feature b", nodes.get("foo.bar.x.test_b").getDescription());
+ SystemTools.sleep(SHOW_GUI_AFTER_RUN_COMPLETION_IN_SECONDS * 1000);
+ runner.dispose();
+ }
+
+}
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 d64d1302..991dbc82 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,12 +46,18 @@ 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);
preferences.setShowWarningIndicator(false);
preferences.setShowInfoIndicator(false);
+ preferences.setShowTestDescription(true);
}
}
@@ -183,7 +189,7 @@ public void runTestsWithMaxTime() {
}
@Test
- public void runTestsHidingSuccesfulRuns() {
+ public void runTestsHidingSuccessfulRuns() {
preferences.setShowSuccessfulTests(false);
preferences.setShowWarningIndicator(true);
preferences.setShowInfoIndicator(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 00000000..534bdc7c
--- /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 3b8b4b51..9c71960d 100644
--- a/sqldev/src/test/resources/test.properties
+++ b/sqldev/src/test/resources/test.properties
@@ -1,5 +1,5 @@
# properties to connect to Oracle Database using JDBC thin driver
-host=localhost
+host=fillmore
port=1521
service=odb.docker