JAL-3048 wip externalise trigger from RunResponse
[jalview.git] / test / jalview / util / dialogrunner / DialogRunnerTest.java
1 package jalview.util.dialogrunner;
2
3 import static org.testng.Assert.assertEquals;
4 import static org.testng.Assert.assertFalse;
5 import static org.testng.Assert.assertTrue;
6
7 import java.util.Collection;
8 import java.util.List;
9 import java.util.Map;
10
11 import org.testng.annotations.Test;
12
13 import junit.extensions.PA;
14
15 public class DialogRunnerTest
16 {
17   public class MockDialog implements DialogRunnerI
18   {
19     DialogRunnerI runner = new DialogRunner();
20
21     @Override
22     public DialogRunnerI addResponse(Object response, RunResponse action)
23     {
24       return runner.addResponse(response, action);
25     }
26
27     public List<RunResponse> doDialog(String resp)
28     {
29       return runner.handleResponse(resp);
30     }
31
32         @Override
33         public List<RunResponse> handleResponse(Object response) 
34         {
35           return null;
36         }
37   }
38
39   MockDialog dialog = new MockDialog();
40
41   @Test
42   public void testDialogRunner()
43   {
44     RunResponse ok, cancel, help, ineed;
45         final String ooh = "OOOOoooOOOOH!";
46         final String r_ok = "OK";
47         final String r_cancel = "CANCEL";
48         final String r_done = "DONE";
49         final String r_help = "HELP";
50         final String r_ddoit = "DIDNT DOIT";
51         final String r_needsb = "I NEED SOMEBODY";
52
53     ok = new RunResponse("OK")
54     {
55       @Override
56       public void run()
57       {
58         returnValue = "DONE";
59       }
60     };
61     final RunResponse befok = new RunResponse("OK")
62     {
63       @Override
64       public void run()
65       {
66           returnValue = "OK";
67       }
68     };
69
70     cancel = new RunResponse("CANCEL")
71     {
72       @Override
73       public void run()
74       {
75           returnValue = r_ddoit;
76       }
77     };
78     help = new RunResponse("HELP")
79     {
80       @Override
81       public void run()
82       {
83           returnValue = r_needsb;
84       }
85     };
86     ineed = new RunResponse(r_needsb)
87     {
88       @Override
89       public void run()
90       {
91           returnValue = ooh;
92       }
93     };
94
95     assertFalse(isRegistered(dialog.runner, ok));
96
97     dialog.addResponse("OK", ok).addResponse("CANCEL", cancel).
98         addResponse("HELP", help).addResponse(r_needsb, ineed);
99
100     assertTrue(isRegistered(dialog.runner, ok));
101
102 //    Assert.assertFalse(dialog.runner.firstRunWasCalled);
103     List<RunResponse> actions = dialog.doDialog("OK");
104     // OK called, nothing else.
105   //  Assert.assertTrue(dialog.runner.firstRunWasCalled);
106     assertTrue(actions.contains(ok));//ok.wasRun);
107     assertEquals(ok.returnValue, r_done);
108     assertFalse(actions.contains(cancel));//cancel.wasRun);
109     assertEquals(actions/*dialog.runner.responses*/.size(), 2);
110
111     // do it again - check it doesn't trigger again
112     //ok.wasRun = false;
113     actions = dialog.doDialog("OK");
114     assertFalse(actions.contains(ok));
115
116     // reset - everything false/null
117 //    dialog.runner.resetResponses();
118 //    Assert.assertFalse(dialog.runner.firstRunWasCalled);
119 //    Assert.assertFalse(ok.wasRun);
120 //    Assert.assertNull(ok.returned);
121 //    Assert.assertEquals(dialog.runner.responses.size(), 0);
122
123     // cancel called ..
124     actions = dialog.doDialog("HELP");
125 //    Assert.assertTrue(dialog.runner.firstRunWasCalled);
126     assertFalse(actions.contains(ok));//ok.wasRun);
127     assertEquals(ineed.returnValue, ooh);
128     assertEquals(actions/*dialog.runner.responses*/.size(), 3);
129
130     // TODO: test prepend and chained execution of tasks for a response.
131 //    Assert.assertFalse(dialog.runner.isRegistered(befok));
132     dialog.runner.addResponse("OK", befok); //setFirstResponse(befok);
133
134     assertTrue(isRegistered(dialog.runner, befok));
135     assertTrue(isRegistered(dialog.runner, ok));
136
137 //    dialog.runner.resetResponses();
138
139     actions = dialog.doDialog("OK");
140     assertTrue(actions.contains(befok));//befok.wasRun);
141     assertTrue(actions.contains(ok)); //ok.wasRun);
142     assertEquals(actions/*dialog.runner.responses*/.size(), 3);
143   }
144
145   private boolean isRegistered(DialogRunnerI runner, RunResponse action) 
146   {
147         Map<Object, Collection<Object>> actions  = (Map<Object, Collection<Object>>) PA.getValue(runner,  "callbacks");
148         Collection<Object> registered = actions.get(action.getTrigger());
149         return registered != null && registered.contains(action);
150   }
151 }