1 package org.weda.workflow;
2
3 import java.util.Stack;
4 import tim.test.LogableTestCase;
5 import org.weda.workflow.impl.BasicEntryContainer;
6
7 /**
8 *
9 * @author tim
10 */
11 public class BasicEntryContainerTest extends LogableTestCase {
12 private String result;
13
14 public BasicEntryContainerTest(String name) {
15 super(name);
16 }
17
18 public void test_withNoEntries() throws Exception {
19 BasicEntryContainer container = new BasicEntryContainer();
20 container.setName("testName");
21 container.init();
22 try{
23 Stack<String> expressions = new Stack<String>();
24 expressions.push("CompanyList.html");
25 container.operate(expressions);
26 assertTrue(false);
27 }catch(EntryException e){
28 assertTrue(true);
29 }
30 }
31
32 public void test_withDefaultEntry() throws Exception {
33 BasicEntryContainer container = new BasicEntryContainer();
34 container.setName("testName");
35 TestAbstractEntry entry = new TestAbstractEntry();
36 entry.setData(this, "DEFAULT_ENTRY_RESULT");
37 entry.setDefaultEntry(true);
38 container.addEntry(entry);
39 container.init();
40 Stack<String> expressions = new Stack<String>();
41 expressions.push("some result");
42 expressions.push("CompanyList.html");
43 container.operate(expressions);
44 assertEquals("DEFAULT_ENTRY_RESULT", result);
45 }
46
47 public void test_withDefaultAndExactEntries() throws Exception {
48 BasicEntryContainer container = new BasicEntryContainer();
49 container.setName("testName");
50
51 TestAbstractEntry entry = new TestAbstractEntry();
52 entry.setData(this, "DEFAULT_ENTRY_RESULT");
53 entry.setDefaultEntry(true);
54 container.addEntry(entry);
55
56 entry = new TestAbstractEntry();
57 entry.setData(this, "EXACT_ENTRY_RESULT");
58
59 entry.setName("CompanyList.html");
60 container.addEntry(entry);
61
62 container.init();
63 Stack<String> expressions = new Stack<String>();
64 expressions.push("some result");
65 expressions.push("CompanyList.html");
66 container.operate(expressions);
67 assertEquals("EXACT_ENTRY_RESULT", result);
68 }
69
70 public void test_withAllEntryTypes() throws Exception {
71 EntryContainer container = createContainer("testName", "");
72 container.init();
73
74 Stack<String> expressions = new Stack<String>();
75
76 expressions.push("CompanyList.html");
77 container.operate(expressions);
78 assertEquals("EXACT_ENTRY_RESULT", result);
79 expressions = new Stack<String>();
80
81 expressions.push("AddressList.html");
82 container.operate(expressions);
83 assertEquals("REGEXP_ENTRY_RESULT", result);
84 expressions = new Stack<String>();
85
86 expressions.push("AddressEdit.html");
87 container.operate(expressions);
88 assertEquals("DEFAULT_ENTRY_RESULT", result);
89 }
90
91 public void test_hierachi() throws Exception{
92 BasicEntryContainer<EntryContainer> rootContainer =
93 new BasicEntryContainer<EntryContainer>();
94 rootContainer.setName("rootContainer");
95 EntryContainer childContainer1 =
96 createContainer2("childContainer1", "1");
97 EntryContainer childContainer2 =
98 createContainer2("childContainer2", "2");
99 EntryContainer childContainer3 =
100 createContainer("childContainer3", "3");
101 childContainer3.setDefaultEntry(true);
102 rootContainer.addEntry(childContainer1);
103 rootContainer.addEntry(childContainer2);
104 rootContainer.addEntry(childContainer3);
105 rootContainer.init();
106 Stack<String> expressions = new Stack<String>();
107 expressions.push("CompanyList.html");
108 expressions.push("childContainer1");
109 rootContainer.operate(expressions);
110 assertEquals("1EXACT_ENTRY_RESULT", result);
111 expressions = new Stack<String>();
112 expressions.push("AddressList.html");
113 expressions.push("childContainer2");
114 rootContainer.operate(expressions);
115 assertEquals("2REGEXP_ENTRY_RESULT", result);
116
117 expressions = new Stack<String>();
118 expressions.push("CompanyEdit.html");
119 expressions.push("childContainer1");
120 rootContainer.operate(expressions);
121 assertEquals("3DEFAULT_ENTRY_RESULT", result);
122 }
123
124 public void test_merge() throws Exception {
125 BasicEntryContainer container1 = new BasicEntryContainer();
126 TestAbstractEntry entry = new TestAbstractEntry();
127 entry.setName("name1");
128 container1.addEntry(entry);
129
130 BasicEntryContainer container2 = new BasicEntryContainer();
131 entry = new TestAbstractEntry();
132 entry.setName("name1");
133 container2.addEntry(entry);
134 try{
135 container1.merge(container2);
136 fail();
137 }catch(EntryContainerException e){}
138
139 entry.setName("name2");
140 container1.merge(container2);
141 assertEquals(2, container1.getEntries().size());
142 assertNotNull(container1.getEntryByName("name1"));
143 assertNotNull(container1.getEntryByName("name2"));
144
145 BasicEntryContainer rootContainer1 = new BasicEntryContainer();
146 BasicEntryContainer rootContainer2 = new BasicEntryContainer();
147 container1.setName("container1");
148 container2.setName("container2");
149 rootContainer1.addEntry(container1);
150 rootContainer2.addEntry(container2);
151 rootContainer1.merge(rootContainer2);
152 assertEquals(2, rootContainer1.getEntries().size());
153 assertNotNull(rootContainer1.getEntryByName("container1"));
154 assertNotNull(rootContainer2.getEntryByName("container2"));
155
156 rootContainer1.getEntries().remove(
157 rootContainer2.getEntryByName("container2"));
158 container2.setName("container1");
159 container1.getEntries().remove(container1.getEntryByName("name2"));
160 entry.setName("name1");
161
162 try{
163 rootContainer1.merge(rootContainer2);
164 fail();
165 }catch(EntryContainerException e){}
166 entry.setName("name2");
167 rootContainer1.merge(rootContainer2);
168 assertEquals(1, rootContainer1.getEntries().size());
169 BasicEntryContainer container = (BasicEntryContainer)
170 rootContainer1.getEntryByName("container1");
171 assertEquals(2, container.getEntries().size());
172 assertNotNull(container.getEntryByName("name1"));
173 assertNotNull(container.getEntryByName("name2"));
174 }
175
176 public void setResult(String result){
177 this.result=result;
178 }
179
180 private EntryContainer createContainer(
181 String containerName, String resultPrefix)
182 throws Exception
183 {
184 BasicEntryContainer container = new BasicEntryContainer();
185 container.setName(containerName);
186
187 TestAbstractEntry entry = new TestAbstractEntry();
188 entry.setData(this, resultPrefix+"DEFAULT_ENTRY_RESULT");
189 entry.setDefaultEntry(true);
190 container.addEntry(entry);
191
192 entry = new TestAbstractEntry();
193 entry.setData(this, resultPrefix+"EXACT_ENTRY_RESULT");
194
195 entry.setName("CompanyList.html");
196 container.addEntry(entry);
197
198 entry = new TestAbstractEntry();
199 entry.setData(this, resultPrefix+"REGEXP_ENTRY_RESULT");
200 entry.setName("/.*List\\.html/");
201 container.addEntry(entry);
202
203 return container;
204 }
205
206 private EntryContainer createContainer2(
207 String containerName, String resultPrefix)
208 throws Exception
209 {
210 BasicEntryContainer container = new BasicEntryContainer();
211 container.setName(containerName);
212
213 TestAbstractEntry entry = new TestAbstractEntry();
214 entry.setData(this, resultPrefix+"EXACT_ENTRY_RESULT");
215
216 entry.setName("CompanyList.html");
217 container.addEntry(entry);
218
219 entry = new TestAbstractEntry();
220 entry.setData(this, resultPrefix+"REGEXP_ENTRY_RESULT");
221 entry.setName("/.*List\\.html/");
222 container.addEntry(entry);
223
224 return container;
225 }
226 }