From a236389838c7e6784d68dfa0a41378a7ebb07197 Mon Sep 17 00:00:00 2001 From: Goetz Lindenmaier <goetz@openjdk.org> Date: Tue, 22 Oct 2024 09:20:27 +0000 Subject: [PATCH] 8328402: Implement pausing functionality for the PassFailJFrame Backport-of: 581b1e29aebd425bade14d2ee46704a16187df5b --- .../awt/regtesthelpers/PassFailJFrame.java | 57 +++++++++++++++---- 1 file changed, 45 insertions(+), 12 deletions(-) diff --git a/test/jdk/java/awt/regtesthelpers/PassFailJFrame.java b/test/jdk/java/awt/regtesthelpers/PassFailJFrame.java index 6290d14b428..1aa83339701 100644 --- a/test/jdk/java/awt/regtesthelpers/PassFailJFrame.java +++ b/test/jdk/java/awt/regtesthelpers/PassFailJFrame.java @@ -24,6 +24,7 @@ import java.awt.AWTException; import java.awt.BorderLayout; import java.awt.Dimension; +import java.awt.Font; import java.awt.GraphicsConfiguration; import java.awt.GraphicsDevice; import java.awt.GraphicsEnvironment; @@ -186,7 +187,7 @@ public final class PassFailJFrame { private static final CountDownLatch latch = new CountDownLatch(1); - private static TimeoutHandler timeoutHandler; + private static TimeoutHandlerPanel timeoutHandlerPanel; /** * The description of why the test fails. @@ -423,10 +424,8 @@ public final class PassFailJFrame { int rows, int columns, boolean enableScreenCapture) { JPanel main = new JPanel(new BorderLayout()); - - JLabel testTimeoutLabel = new JLabel("", JLabel.CENTER); - timeoutHandler = new TimeoutHandler(testTimeoutLabel, testTimeOut); - main.add(testTimeoutLabel, BorderLayout.NORTH); + timeoutHandlerPanel = new TimeoutHandlerPanel(testTimeOut); + main.add(timeoutHandlerPanel, BorderLayout.NORTH); JTextComponent text = instructions.startsWith("<html>") ? configureHTML(instructions, rows, columns) @@ -438,13 +437,13 @@ public final class PassFailJFrame { JButton btnPass = new JButton("Pass"); btnPass.addActionListener((e) -> { latch.countDown(); - timeoutHandler.stop(); + timeoutHandlerPanel.stop(); }); JButton btnFail = new JButton("Fail"); btnFail.addActionListener((e) -> { requestFailureReason(); - timeoutHandler.stop(); + timeoutHandlerPanel.stop(); }); JPanel buttonsPanel = new JPanel(); @@ -602,17 +601,35 @@ public final class PassFailJFrame { } - private static final class TimeoutHandler implements ActionListener { - private final long endTime; + private static final class TimeoutHandlerPanel + extends JPanel + implements ActionListener { + + private static final String PAUSE_BUTTON_LABEL = "Pause"; + private static final String RESUME_BUTTON_LABEL = "Resume"; + + private long endTime; + private long pauseTimeLeft; private final Timer timer; private final JLabel label; + private final JButton button; - public TimeoutHandler(final JLabel label, final long testTimeOut) { - endTime = System.currentTimeMillis() + TimeUnit.MINUTES.toMillis(testTimeOut); + public TimeoutHandlerPanel(final long testTimeOut) { + endTime = System.currentTimeMillis() + + TimeUnit.MINUTES.toMillis(testTimeOut); - this.label = label; + label = new JLabel("", JLabel.CENTER); + button = new JButton(PAUSE_BUTTON_LABEL); + + button.setFocusPainted(false); + button.setFont(new Font(Font.DIALOG, Font.BOLD, 10)); + button.addActionListener(e -> pauseToggle()); + + setLayout(new BorderLayout()); + add(label, BorderLayout.CENTER); + add(button, BorderLayout.EAST); timer = new Timer(1000, this); timer.start(); @@ -643,6 +660,22 @@ public final class PassFailJFrame { hours, minutes, seconds)); } + + private void pauseToggle() { + if (timer.isRunning()) { + pauseTimeLeft = endTime - System.currentTimeMillis(); + timer.stop(); + label.setEnabled(false); + button.setText(RESUME_BUTTON_LABEL); + } else { + endTime = System.currentTimeMillis() + pauseTimeLeft; + updateTime(pauseTimeLeft); + timer.start(); + label.setEnabled(true); + button.setText(PAUSE_BUTTON_LABEL); + } + } + public void stop() { timer.stop(); } -- GitLab