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