diff --git a/src/main/java/de/neemann/digital/gui/components/testing/TestResultDialog.java b/src/main/java/de/neemann/digital/gui/components/testing/TestResultDialog.java index 24bff568b..11bd4d5ab 100644 --- a/src/main/java/de/neemann/digital/gui/components/testing/TestResultDialog.java +++ b/src/main/java/de/neemann/digital/gui/components/testing/TestResultDialog.java @@ -9,6 +9,7 @@ import de.neemann.digital.draw.library.ElementNotFoundException; import de.neemann.digital.draw.model.ModelCreator; import de.neemann.digital.lang.Lang; import de.neemann.digital.testing.*; +import de.neemann.gui.ErrorMessage; import de.neemann.gui.IconCreator; import javax.swing.*; @@ -47,13 +48,16 @@ public class TestResultDialog extends JDialog { Collections.sort(tsl); JTabbedPane tp = new JTabbedPane(); - int i=0; - int errorTabIndex=-1; + int i = 0; + int errorTabIndex = -1; for (TestSet ts : tsl) { Model model = new ModelCreator(circuit, library).createModel(false); TestResult tr = new TestResult(ts.data).create(model); + if (tr.getException() != null) + SwingUtilities.invokeLater(new ErrorMessage(Lang.get("msg_errorWhileExecutingTests_N0", ts.name)).addCause(tr.getException()).setComponent(this)); + JTable table = new JTable(new TestResultModel(tr)); table.setDefaultRenderer(MatchedValue.class, new MatchedValueRenderer()); table.setDefaultRenderer(Integer.class, new NumberRenderer()); @@ -67,12 +71,12 @@ public class TestResultDialog extends JDialog { } else { tabName = Lang.get("msg_test_N_Failed", ts.name); tabIcon = ICON_FAILED; - errorTabIndex=i; + errorTabIndex = i; } tp.addTab(tabName, tabIcon, new JScrollPane(table)); i++; } - if (errorTabIndex>=0) + if (errorTabIndex >= 0) tp.setSelectedIndex(errorTabIndex); getContentPane().add(tp); diff --git a/src/main/java/de/neemann/digital/gui/components/testing/TestResultModel.java b/src/main/java/de/neemann/digital/gui/components/testing/TestResultModel.java index 41a388b0a..0aad91759 100644 --- a/src/main/java/de/neemann/digital/gui/components/testing/TestResultModel.java +++ b/src/main/java/de/neemann/digital/gui/components/testing/TestResultModel.java @@ -1,5 +1,6 @@ package de.neemann.digital.gui.components.testing; +import de.neemann.digital.lang.Lang; import de.neemann.digital.testing.MatchedValue; import de.neemann.digital.testing.TestResult; @@ -37,7 +38,7 @@ public class TestResultModel implements TableModel { @Override public String getColumnName(int columnIndex) { if (columnIndex == 0) - return "No"; + return Lang.get("number"); else return testResult.getSignalName(columnIndex - 1); } diff --git a/src/main/java/de/neemann/digital/testing/TestResult.java b/src/main/java/de/neemann/digital/testing/TestResult.java index f7f7c7676..1035db5f2 100644 --- a/src/main/java/de/neemann/digital/testing/TestResult.java +++ b/src/main/java/de/neemann/digital/testing/TestResult.java @@ -23,6 +23,7 @@ public class TestResult { private final ArrayList lines; private final ArrayList results; private boolean allPassed; + private Exception exception; /** * Creates a new testing result @@ -107,7 +108,13 @@ public class TestResult { in.value.setBool(!in.value.getBool()); } - model.doStep(); + try { + model.doStep(); + } catch (NodeException | RuntimeException e) { + exception = e; + allPassed = false; + return this; + } for (TestSignal out : outputs) { MatchedValue matchedValue = new MatchedValue(row[out.index], out.value); @@ -229,7 +236,7 @@ public class TestResult { @Override public T next() { - if (value==null) + if (value == null) throw new NoSuchElementException(); T r = value; value = null; @@ -275,7 +282,7 @@ public class TestResult { @Override public Value[] next() { - if (n>=count) + if (n >= count) throw new NoSuchElementException(); int mask = 1; for (int in : dcIndex) { @@ -287,4 +294,11 @@ public class TestResult { return row; } } + + /** + * @return the exception thrown during test test execution, or null if there was no error. + */ + public Exception getException() { + return exception; + } } diff --git a/src/test/java/de/neemann/digital/integration/TestExamples.java b/src/test/java/de/neemann/digital/integration/TestExamples.java index 5e7c947c1..4850dbce0 100644 --- a/src/test/java/de/neemann/digital/integration/TestExamples.java +++ b/src/test/java/de/neemann/digital/integration/TestExamples.java @@ -40,7 +40,7 @@ public class TestExamples extends TestCase { public void testTestExamples() throws Exception { File examples = new File(Resources.getRoot(), "/dig/test"); assertEquals(42, new FileScanner(this::check).scan(examples)); - assertEquals(33, testCasesInFiles); + assertEquals(35, testCasesInFiles); }