diff --git a/src/test/java/de/neemann/digital/docu/ScreenShots.java b/src/test/java/de/neemann/digital/docu/ScreenShots.java index 2e92e6519..8b4d7b42d 100644 --- a/src/test/java/de/neemann/digital/docu/ScreenShots.java +++ b/src/test/java/de/neemann/digital/docu/ScreenShots.java @@ -6,9 +6,12 @@ import de.neemann.digital.gui.components.graphics.GraphicDialog; import de.neemann.digital.gui.components.karnaugh.KarnaughMapDialog; import de.neemann.digital.gui.components.table.TableDialog; import de.neemann.digital.gui.components.testing.TestCaseDescriptionDialog; +import de.neemann.digital.gui.components.testing.ValueTableDialog; import de.neemann.digital.integration.GuiTester; import de.neemann.digital.integration.Resources; +import de.neemann.digital.integration.TestInGUI; import de.neemann.digital.lang.Lang; +import de.neemann.digital.testing.TestCaseElement; import de.neemann.gui.language.Language; import javax.imageio.ImageIO; @@ -164,12 +167,46 @@ public class ScreenShots { .add(new GuiTester.WindowCheck<>(Main.class, (gt, w) -> w.setSize(WIN_DX, WIN_DY))) .delay(500) .add(new ScreenShot<>(Main.class)) + .add(new TestInGUI.SetMouseToElement((v) -> v.equalsDescription(TestCaseElement.TESTCASEDESCRIPTION))) + .mouseClick(InputEvent.BUTTON3_MASK) + .delay(500) + .add(new GuiTester.WindowCheck<>(AttributeDialog.class, (gt, w) -> { + Point p = w.getLocation(); + p.y -= 50; + p.x -= 70; + w.setLocation(p); + })) + .delay(500) + .press("TAB", "SPACE") + .delay(500) + .add(new GuiTester.WindowCheck<>(TestCaseDescriptionDialog.class, (gt, w) -> { + Point p = w.getLocation(); + p.y -= 50; + p.x -= 50; + w.setLocation(p); + w.getContentPane().setPreferredSize(new Dimension(400, 300)); + w.pack(); + })) + .delay(500) + .add(new ScreenShot<>(TestCaseDescriptionDialog.class).useParent().useParent()) + .add(new GuiTester.CloseTopMost()) + .add(new GuiTester.CloseTopMost()) + .press("F8") + .add(new GuiTester.WindowCheck<>(ValueTableDialog.class, (gt, w) -> { + Point p = w.getLocation(); + p.y += 90; + w.setLocation(p); + w.getContentPane().setPreferredSize(new Dimension(400, 300)); + w.pack(); + })) + .add(new ScreenShot<>(ValueTableDialog.class).useParent()) .execute(); new GuiTester("dig/test/docu/rcAdder.dig", "rcAdder.dig") .add(new GuiTester.WindowCheck<>(Main.class, (gt, w) -> w.setSize(WIN_DX, WIN_DY))) .delay(500) .add(new ScreenShot<>(Main.class)) - .add(new ClickAtCircuit(600, 380, InputEvent.BUTTON3_MASK)) + .add(new TestInGUI.SetMouseToElement((v) -> v.equalsDescription(TestCaseElement.TESTCASEDESCRIPTION))) + .mouseClick(InputEvent.BUTTON3_MASK) .delay(500) .add(new GuiTester.WindowCheck<>(AttributeDialog.class, (gt, w) -> { Point p = w.getLocation(); diff --git a/src/test/java/de/neemann/digital/integration/TestInGUI.java b/src/test/java/de/neemann/digital/integration/TestInGUI.java index 86b127e63..ab33b9718 100644 --- a/src/test/java/de/neemann/digital/integration/TestInGUI.java +++ b/src/test/java/de/neemann/digital/integration/TestInGUI.java @@ -879,7 +879,7 @@ public class TestInGUI extends TestCase { } } - private static class SetMouseToElement extends GuiTester.WindowCheck
{ + public static class SetMouseToElement extends GuiTester.WindowCheck
{ private final Circuit.ElementFilter filter; public SetMouseToElement(Circuit.ElementFilter filter) { diff --git a/src/test/resources/dig/test/docu/fullAdder.dig b/src/test/resources/dig/test/docu/fullAdder.dig index f40ca6b4c..162dd3f45 100644 --- a/src/test/resources/dig/test/docu/fullAdder.dig +++ b/src/test/resources/dig/test/docu/fullAdder.dig @@ -21,7 +21,7 @@ A - + In @@ -91,6 +91,10 @@ + + + + @@ -99,14 +103,14 @@ - - - - + + + + @@ -139,6 +143,10 @@ + + + + diff --git a/src/test/resources/dig/test/docu/halfAdder.dig b/src/test/resources/dig/test/docu/halfAdder.dig index fd51f4808..935bb30e4 100644 --- a/src/test/resources/dig/test/docu/halfAdder.dig +++ b/src/test/resources/dig/test/docu/halfAdder.dig @@ -6,12 +6,12 @@ XOr - + And - + In @@ -56,36 +56,36 @@ - - + + - - - - - + + + + + - + - + - + - - + + @@ -93,7 +93,15 @@ - + + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/docu/images/de/scr20.png b/src/test/resources/docu/images/de/scr20.png index c8007040b..ded11b656 100644 Binary files a/src/test/resources/docu/images/de/scr20.png and b/src/test/resources/docu/images/de/scr20.png differ diff --git a/src/test/resources/docu/images/de/scr21.png b/src/test/resources/docu/images/de/scr21.png index 3ede099e9..895b3bb05 100644 Binary files a/src/test/resources/docu/images/de/scr21.png and b/src/test/resources/docu/images/de/scr21.png differ diff --git a/src/test/resources/docu/images/de/scr22.png b/src/test/resources/docu/images/de/scr22.png index 59e241223..436ead87b 100644 Binary files a/src/test/resources/docu/images/de/scr22.png and b/src/test/resources/docu/images/de/scr22.png differ diff --git a/src/test/resources/docu/images/de/scr23.png b/src/test/resources/docu/images/de/scr23.png index a1ec9335e..88eabb531 100644 Binary files a/src/test/resources/docu/images/de/scr23.png and b/src/test/resources/docu/images/de/scr23.png differ diff --git a/src/test/resources/docu/images/de/scr24.png b/src/test/resources/docu/images/de/scr24.png new file mode 100644 index 000000000..59e241223 Binary files /dev/null and b/src/test/resources/docu/images/de/scr24.png differ diff --git a/src/test/resources/docu/images/de/scr25.png b/src/test/resources/docu/images/de/scr25.png new file mode 100644 index 000000000..ee5f82b50 Binary files /dev/null and b/src/test/resources/docu/images/de/scr25.png differ diff --git a/src/test/resources/docu/images/en/scr20.png b/src/test/resources/docu/images/en/scr20.png index 5d43ab6a3..2bdd9f573 100644 Binary files a/src/test/resources/docu/images/en/scr20.png and b/src/test/resources/docu/images/en/scr20.png differ diff --git a/src/test/resources/docu/images/en/scr21.png b/src/test/resources/docu/images/en/scr21.png index 8a4a7119b..4b3926aae 100644 Binary files a/src/test/resources/docu/images/en/scr21.png and b/src/test/resources/docu/images/en/scr21.png differ diff --git a/src/test/resources/docu/images/en/scr22.png b/src/test/resources/docu/images/en/scr22.png index 32d2b7dc9..cd8c2dc82 100644 Binary files a/src/test/resources/docu/images/en/scr22.png and b/src/test/resources/docu/images/en/scr22.png differ diff --git a/src/test/resources/docu/images/en/scr23.png b/src/test/resources/docu/images/en/scr23.png index 695fb139e..9f8f81d6e 100644 Binary files a/src/test/resources/docu/images/en/scr23.png and b/src/test/resources/docu/images/en/scr23.png differ diff --git a/src/test/resources/docu/images/en/scr24.png b/src/test/resources/docu/images/en/scr24.png new file mode 100644 index 000000000..32d2b7dc9 Binary files /dev/null and b/src/test/resources/docu/images/en/scr24.png differ diff --git a/src/test/resources/docu/images/en/scr25.png b/src/test/resources/docu/images/en/scr25.png new file mode 100644 index 000000000..079bb85ba Binary files /dev/null and b/src/test/resources/docu/images/en/scr25.png differ diff --git a/src/test/resources/docu/static_de.xml b/src/test/resources/docu/static_de.xml index 08065c15f..e114a83ec 100644 --- a/src/test/resources/docu/static_de.xml +++ b/src/test/resources/docu/static_de.xml @@ -164,13 +164,25 @@ Der Volladdierer addiert die drei Bits 'A', 'B' und 'Ci' und gibt die Summe an 'S' und 'Co' aus. + + Um die korrekte Funktion des Volladdierers zu überprüfen, sollte ein Testfall angelegt werden. + Im Testfall wird die Warheitstabelle hinterlegt, welche die Schaltung erfüllen soll. Auf diese Weise + kann automatisch überprüft werden, ob das tatsächlich der Fall ist. + + + + Über den Testfall-Editor oder den Testknopf in der Toolbar können die Tests ausgeführt werden. + Die in der Tabelle grün hinterlegten Felder zeigen an, dass die Ausgabe der Schaltung mit der Vorgabe + in der Wertetabelle des Testfalls übereinstimmt. + + Nun lassen sich die Volladdierer zu einem so gen. Ripple-Carry Addierer zusammensetzen. Dabei wird der Carry-Ausgang einer Addition als Carry-Eingang an die Addition des nächst höherwertigen Bits weitergegeben, genau so, wie es bei der schriftlichen Addition üblich ist. Dieser 4-Bit Addierer soll - auf korrekte Funktion überprüft werden. Dazu wurde ein Testfall eingefügt. + auf korrekte Funktion überprüft werden. Dazu wurde auch hier ein Testfall eingefügt. - + Dieser Testfall führt einen 100% Test durch, was nur bei relativ einfachen Schaltungen möglich ist: Alle möglichen 512 Eingangskombinationen werden an die diff --git a/src/test/resources/docu/static_en.xml b/src/test/resources/docu/static_en.xml index 86828e4e0..f0573e06e 100644 --- a/src/test/resources/docu/static_en.xml +++ b/src/test/resources/docu/static_en.xml @@ -149,13 +149,25 @@ The full adder adds the three bits 'A', 'B' and 'Ci' and gives the sum to the outputs 'S' and 'Co'. + + In order to check the correct function of the full adder, a test case should be added. In the test case, + the truth table is stored, which should fulfill the circuit. In this way it can be automatically + checked whether this is the case. + + + + The tests can be executed via the test case editor or the test button in the toolbar. + The table cells highlighted in green indicate that the output of the circuit matches + the truth table given in the test case. + + Now the full adders can be put together to form a so-called ripple-carry adder. In this case, the carry output of an addition is forwarded as a carry input to the addition of the next higher-order bit, just as it is usual in pencil-and-paper addition. This 4-bit adder should be tested for correct function. For this purpose a test case was inserted. - + This test case performs a 100% test, which is possible only with relatively simple circuits: all possible 512 input combinations are applied to the circuit, and it is checked whether the output