From addc9c26e3f462c2dc9c2baebc2d630c720c8553 Mon Sep 17 00:00:00 2001 From: hneemann Date: Mon, 18 Jun 2018 13:06:18 +0200 Subject: [PATCH] closes #164 --- .../de/neemann/gui/ClosingWindowListener.java | 14 ++-- .../digital/integration/TestInGUI.java | 78 +++++++++++++++++++ 2 files changed, 85 insertions(+), 7 deletions(-) diff --git a/src/main/java/de/neemann/gui/ClosingWindowListener.java b/src/main/java/de/neemann/gui/ClosingWindowListener.java index 61364a8cd..8a7883e0f 100644 --- a/src/main/java/de/neemann/gui/ClosingWindowListener.java +++ b/src/main/java/de/neemann/gui/ClosingWindowListener.java @@ -43,7 +43,7 @@ public class ClosingWindowListener extends WindowAdapter { * @param confirmSave the ConfirmSave interface * @param doExit if true the parent JFrame is disposed by this listener */ - public ClosingWindowListener(final JFrame parent, final ConfirmSave confirmSave, final boolean doExit) { + private ClosingWindowListener(final JFrame parent, final ConfirmSave confirmSave, final boolean doExit) { this((Component) parent, new GUICloser() { @Override public void closeGUI() { @@ -80,14 +80,14 @@ public class ClosingWindowListener extends WindowAdapter { .setCancleOption(CANCEL_MESSAGE) .show(parent); - if (r != JOptionPane.CANCEL_OPTION) { + if (r == JOptionPane.YES_OPTION || r == JOptionPane.NO_OPTION) { if (r == JOptionPane.YES_OPTION) { confirmSave.saveChanges(); - } - return true; - } else { + return !confirmSave.isStateChanged(); + } else + return true; + } else return false; - } } return true; } @@ -98,7 +98,7 @@ public class ClosingWindowListener extends WindowAdapter { * @param parent the parent component of the confirm dialog * @param guiCloser the guiCloser */ - public ClosingWindowListener(Component parent, GUICloser guiCloser) { + private ClosingWindowListener(Component parent, GUICloser guiCloser) { this.parent = parent; this.guiCloser = guiCloser; } diff --git a/src/test/java/de/neemann/digital/integration/TestInGUI.java b/src/test/java/de/neemann/digital/integration/TestInGUI.java index b474a1685..49fada2f4 100644 --- a/src/test/java/de/neemann/digital/integration/TestInGUI.java +++ b/src/test/java/de/neemann/digital/integration/TestInGUI.java @@ -543,6 +543,84 @@ public class TestInGUI extends TestCase { .execute(); } + public void testSaveDialog() { + new GuiTester() + .press("F10") + .press("RIGHT", 5) + .press("DOWN", "RIGHT", "ENTER") + .mouseMove(100, 150) + .mouseClick(InputEvent.BUTTON1_MASK) + .delay(100) + + // aboard with escape + .press("control typed n") + .delay(100) + .add(new GuiTester.WindowCheck<>(JDialog.class, + (guiTester, window) -> assertEquals(Lang.get("win_stateChanged"), window.getTitle()))) + .press("ESCAPE") + .add(new GuiTester.WindowCheck<>(Main.class, + (gt, main) -> assertEquals(1, main.getCircuitComponent().getCircuit().getElements().size()))) + + // press edit further + .press("control typed n") + .delay(100) + .add(new GuiTester.SetFocusTo<>(JDialog.class, + c -> c instanceof JButton && ((JButton)c).getText().equals(Lang.get("btn_editFurther")))) + .press("SPACE") + .delay(100) + .add(new GuiTester.WindowCheck<>(Main.class, + (gt, main) -> assertEquals(1, main.getCircuitComponent().getCircuit().getElements().size()))) + + // press save and the escape the save dialog (JFileChooser) + .press("control typed n") + .delay(100) + .add(new GuiTester.SetFocusTo<>(JDialog.class, + c -> c instanceof JButton && ((JButton)c).getText().equals(Lang.get("btn_save")))) + .press("SPACE") + .delay(100) + .add(new GuiTester.WindowCheck<>(JDialog.class)) + .press("ESCAPE") + .add(new GuiTester.WindowCheck<>(Main.class, + (gt, main) -> assertEquals(1, main.getCircuitComponent().getCircuit().getElements().size()))) + + // press save and save the file + .press("control typed n") + .delay(100) + .add(new GuiTester.SetFocusTo<>(JDialog.class, + c -> c instanceof JButton && ((JButton)c).getText().equals(Lang.get("btn_save")))) + .press("SPACE") + .delay(100) + .add(new GuiTester.WindowCheck<>(JDialog.class)) + .typeTempFile("save.dig") + .press("ENTER") + .delay(100) + .add(new GuiTester.WindowCheck<>(Main.class, + (gt, main) -> assertEquals(0, main.getCircuitComponent().getCircuit().getElements().size()))) + + .execute(); + } + + public void testSaveDialog2() { + new GuiTester() + .press("F10") + .press("RIGHT", 5) + .press("DOWN", "RIGHT", "ENTER") + .mouseMove(100, 150) + .mouseClick(InputEvent.BUTTON1_MASK) + .delay(100) + + // discard changes + .press("control typed n") + .delay(100) + .add(new GuiTester.SetFocusTo<>(JDialog.class, + c -> c instanceof JButton && ((JButton)c).getText().equals(Lang.get("btn_discard")))) + .press("SPACE") + .delay(100) + .add(new GuiTester.WindowCheck<>(Main.class, + (gt, main) -> assertEquals(0, main.getCircuitComponent().getCircuit().getElements().size()))) + .execute(); + } + public void test74xxFunctions() { new GuiTester("dig/manualError/10_74xx.dig")