JAL-3048 wip externalise trigger from RunResponse
[jalview.git] / test / jalview / util / dialogrunner / DialogRunnerTest.java
index 7d7e5e8..b89c4bf 100644 (file)
@@ -1,8 +1,17 @@
 package jalview.util.dialogrunner;
 
-import org.testng.Assert;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertTrue;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
 import org.testng.annotations.Test;
 
+import junit.extensions.PA;
+
 public class DialogRunnerTest
 {
   public class MockDialog implements DialogRunnerI
@@ -10,20 +19,20 @@ public class DialogRunnerTest
     DialogRunnerI runner = new DialogRunner();
 
     @Override
-    public DialogRunnerI addResponse(RunResponse action)
+    public DialogRunnerI addResponse(Object response, RunResponse action)
     {
-      return runner.addResponse(action);
+      return runner.addResponse(response, action);
     }
 
-    public void doDialog(String resp)
+    public List<RunResponse> doDialog(String resp)
     {
-      runner.handleResponse(resp);
+      return runner.handleResponse(resp);
     }
 
        @Override
-       public void handleResponse(Object response) {
-               // TODO Auto-generated method stub
-               
+       public List<RunResponse> handleResponse(Object response) 
+       {
+         return null;
        }
   }
 
@@ -43,20 +52,18 @@ public class DialogRunnerTest
 
     ok = new RunResponse("OK")
     {
-
       @Override
       public void run()
       {
-        returned = "DONE";
+        returnValue = "DONE";
       }
     };
     final RunResponse befok = new RunResponse("OK")
     {
-
       @Override
       public void run()
       {
-        returned = "OK";
+         returnValue = "OK";
       }
     };
 
@@ -65,7 +72,7 @@ public class DialogRunnerTest
       @Override
       public void run()
       {
-        returned = r_ddoit;
+         returnValue = r_ddoit;
       }
     };
     help = new RunResponse("HELP")
@@ -73,8 +80,7 @@ public class DialogRunnerTest
       @Override
       public void run()
       {
-        returned = r_needsb;
-
+         returnValue = r_needsb;
       }
     };
     ineed = new RunResponse(r_needsb)
@@ -82,56 +88,64 @@ public class DialogRunnerTest
       @Override
       public void run()
       {
-        returned = ooh;
+         returnValue = ooh;
       }
     };
 
-    Assert.assertFalse(dialog.runner.isRegistered(ok));
+    assertFalse(isRegistered(dialog.runner, ok));
 
-    dialog.addResponse(ok).addResponse(cancel).addResponse(help).addResponse(ineed);
+    dialog.addResponse("OK", ok).addResponse("CANCEL", cancel).
+        addResponse("HELP", help).addResponse(r_needsb, ineed);
 
-    Assert.assertTrue(dialog.runner.isRegistered(ok));
+    assertTrue(isRegistered(dialog.runner, ok));
 
-    Assert.assertFalse(dialog.runner.firstRunWasCalled);
-    dialog.doDialog("OK");
+//    Assert.assertFalse(dialog.runner.firstRunWasCalled);
+    List<RunResponse> actions = dialog.doDialog("OK");
     // OK called, nothing else.
-    Assert.assertTrue(dialog.runner.firstRunWasCalled);
-    Assert.assertTrue(ok.wasRun);
-    Assert.assertEquals(ok.returned, r_done);
-    Assert.assertFalse(cancel.wasRun);
-    Assert.assertEquals(dialog.runner.responses.size(), 2);
+  //  Assert.assertTrue(dialog.runner.firstRunWasCalled);
+    assertTrue(actions.contains(ok));//ok.wasRun);
+    assertEquals(ok.returnValue, r_done);
+    assertFalse(actions.contains(cancel));//cancel.wasRun);
+    assertEquals(actions/*dialog.runner.responses*/.size(), 2);
 
     // do it again - check it doesn't trigger again
-    ok.wasRun = false;
-    dialog.doDialog("OK");
-    Assert.assertFalse(ok.wasRun);
+    //ok.wasRun = false;
+    actions = dialog.doDialog("OK");
+    assertFalse(actions.contains(ok));
 
     // reset - everything false/null
-    dialog.runner.resetResponses();
-    Assert.assertFalse(dialog.runner.firstRunWasCalled);
-    Assert.assertFalse(ok.wasRun);
-    Assert.assertNull(ok.returned);
-    Assert.assertEquals(dialog.runner.responses.size(), 0);
+//    dialog.runner.resetResponses();
+//    Assert.assertFalse(dialog.runner.firstRunWasCalled);
+//    Assert.assertFalse(ok.wasRun);
+//    Assert.assertNull(ok.returned);
+//    Assert.assertEquals(dialog.runner.responses.size(), 0);
 
     // cancel called ..
-    dialog.doDialog("HELP");
-    Assert.assertTrue(dialog.runner.firstRunWasCalled);
-    Assert.assertFalse(ok.wasRun);
-    Assert.assertEquals(ineed.returned, ooh);
-    Assert.assertEquals(dialog.runner.responses.size(), 3);
+    actions = dialog.doDialog("HELP");
+//    Assert.assertTrue(dialog.runner.firstRunWasCalled);
+    assertFalse(actions.contains(ok));//ok.wasRun);
+    assertEquals(ineed.returnValue, ooh);
+    assertEquals(actions/*dialog.runner.responses*/.size(), 3);
 
     // TODO: test prepend and chained execution of tasks for a response.
-    Assert.assertFalse(dialog.runner.isRegistered(befok));
-    dialog.runner.setFirstResponse(befok);
+//    Assert.assertFalse(dialog.runner.isRegistered(befok));
+    dialog.runner.addResponse("OK", befok); //setFirstResponse(befok);
+
+    assertTrue(isRegistered(dialog.runner, befok));
+    assertTrue(isRegistered(dialog.runner, ok));
 
-    Assert.assertTrue(dialog.runner.isRegistered(befok));
-    Assert.assertTrue(dialog.runner.isRegistered(ok));
+//    dialog.runner.resetResponses();
 
-    dialog.runner.resetResponses();
+    actions = dialog.doDialog("OK");
+    assertTrue(actions.contains(befok));//befok.wasRun);
+    assertTrue(actions.contains(ok)); //ok.wasRun);
+    assertEquals(actions/*dialog.runner.responses*/.size(), 3);
+  }
 
-    dialog.doDialog("OK");
-    Assert.assertTrue(befok.wasRun);
-    Assert.assertTrue(ok.wasRun);
-    Assert.assertEquals(dialog.runner.responses.size(), 3);
+  private boolean isRegistered(DialogRunnerI runner, RunResponse action) 
+  {
+       Map<Object, Collection<Object>> actions  = (Map<Object, Collection<Object>>) PA.getValue(runner,  "callbacks");
+       Collection<Object> registered = actions.get(action.getTrigger());
+       return registered != null && registered.contains(action);
   }
 }