From 7e85e4fdbd9c39a89e28e6f104ee20a17f854c37 Mon Sep 17 00:00:00 2001
From: Robert Scott <code@humanleg.org.uk>
Date: Sat, 13 Oct 2018 19:12:09 +0100
Subject: [PATCH v1 1/3] tests: dialog mockers: add act() hook method to all of
 these

the intention being to provide a place to perform a (possibly mutating)
action when a dialog is shown which should only be called once per dialog
invocation.
---
 .../josm/testutils/mockers/ExtendedDialogMocker.java           |  8 ++++++++
 .../josm/testutils/mockers/HelpAwareOptionPaneMocker.java      |  8 ++++++++
 .../josm/testutils/mockers/JOptionPaneSimpleMocker.java        | 10 ++++++++++
 3 files changed, 26 insertions(+)

diff --git a/test/unit/org/openstreetmap/josm/testutils/mockers/ExtendedDialogMocker.java b/test/unit/org/openstreetmap/josm/testutils/mockers/ExtendedDialogMocker.java
index 5d0abbdde..e65e25c8a 100644
--- a/test/unit/org/openstreetmap/josm/testutils/mockers/ExtendedDialogMocker.java
+++ b/test/unit/org/openstreetmap/josm/testutils/mockers/ExtendedDialogMocker.java
@@ -107,6 +107,13 @@ public class ExtendedDialogMocker extends BaseDialogMockUp<ExtendedDialog> {
         );
     }
 
+    /**
+     * Target for overriding, similar to {@link #getMockResult} except with the implication it will only
+     * be invoked once per dialog display, therefore ideal opportunity to perform any mutating actions,
+     * e.g. making a selection on a widget.
+     */
+    protected void act(final ExtendedDialog instance) {};
+
     protected Object[] getInvocationLogEntry(final ExtendedDialog instance, final int mockResult) {
         return new Object[] {
             mockResult,
@@ -129,6 +136,7 @@ public class ExtendedDialogMocker extends BaseDialogMockUp<ExtendedDialog> {
         if (value == true) {
             try {
                 final ExtendedDialog instance = invocation.getInvokedInstance();
+                this.act(instance);
                 final int mockResult = this.getMockResult(instance);
                 // TODO check validity of mockResult?
                 Deencapsulation.setField(instance, "result", mockResult);
diff --git a/test/unit/org/openstreetmap/josm/testutils/mockers/HelpAwareOptionPaneMocker.java b/test/unit/org/openstreetmap/josm/testutils/mockers/HelpAwareOptionPaneMocker.java
index 1d49d05b0..922039d1d 100644
--- a/test/unit/org/openstreetmap/josm/testutils/mockers/HelpAwareOptionPaneMocker.java
+++ b/test/unit/org/openstreetmap/josm/testutils/mockers/HelpAwareOptionPaneMocker.java
@@ -77,6 +77,13 @@ public class HelpAwareOptionPaneMocker extends BaseDialogMockUp<HelpAwareOptionP
         return this.getMockResultMap().get(messageString);
     }
 
+    /**
+     * Target for overriding, similar to {@link #getMockResultForMessage} except with the implication it
+     * will only be invoked once per dialog display, therefore ideal opportunity to perform any mutating
+     * actions, e.g. making a selection on a widget.
+     */
+    protected void act(final Object message) {};
+
     protected int getButtonPositionFromLabel(
         final HelpAwareOptionPane.ButtonSpec[] options,
         final String label
@@ -133,6 +140,7 @@ public class HelpAwareOptionPaneMocker extends BaseDialogMockUp<HelpAwareOptionP
         final String helpTopic
     ) {
         try {
+            this.act(msg);
             final Object result = this.getMockResultForMessage(msg);
 
             if (result == null) {
diff --git a/test/unit/org/openstreetmap/josm/testutils/mockers/JOptionPaneSimpleMocker.java b/test/unit/org/openstreetmap/josm/testutils/mockers/JOptionPaneSimpleMocker.java
index a59090f44..911264eda 100644
--- a/test/unit/org/openstreetmap/josm/testutils/mockers/JOptionPaneSimpleMocker.java
+++ b/test/unit/org/openstreetmap/josm/testutils/mockers/JOptionPaneSimpleMocker.java
@@ -133,6 +133,13 @@ public class JOptionPaneSimpleMocker extends BaseDialogMockUp<JOptionPane> {
         return this.getMockResultMap().get(messageString);
     }
 
+    /**
+     * Target for overriding, similar to {@link #getMockResultForMessage} except with the implication it
+     * will only be invoked once per dialog display, therefore ideal opportunity to perform any mutating
+     * actions, e.g. making a selection on a widget.
+     */
+    protected void act(final Object message) {};
+
     protected Object[] getInvocationLogEntry(
         final Object message,
         final String title,
@@ -161,6 +168,7 @@ public class JOptionPaneSimpleMocker extends BaseDialogMockUp<JOptionPane> {
         final Object initialSelectionValue
     ) {
         try {
+            this.act(message);
             final Object result = this.getMockResultForMessage(message);
             if (selectionValues == null) {
                 if (!(result instanceof String)) {
@@ -215,6 +223,7 @@ public class JOptionPaneSimpleMocker extends BaseDialogMockUp<JOptionPane> {
         final Icon icon
     ) {
         try {
+            this.act(message);
             // why look up a "result" for a message dialog which can only have one possible result? it's
             // a good opportunity to assert its contents
             final Object result = this.getMockResultForMessage(message);
@@ -262,6 +271,7 @@ public class JOptionPaneSimpleMocker extends BaseDialogMockUp<JOptionPane> {
         final Icon icon
     ) {
         try {
+            this.act(message);
             final Object result = this.getMockResultForMessage(message);
             if (!(result instanceof Integer && Ints.contains(optionTypePermittedResults.get(optionType), (int) result))) {
                 fail(String.format(
-- 
2.11.0

