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          //entry.setName("/.*List\\.html/");
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          //expressions.push("some result");
76          expressions.push("CompanyList.html");
77          container.operate(expressions);
78          assertEquals("EXACT_ENTRY_RESULT", result);
79          expressions = new Stack<String>();
80          //expressions.push("some result");
81          expressions.push("AddressList.html");
82          container.operate(expressions);
83          assertEquals("REGEXP_ENTRY_RESULT", result);
84          expressions = new Stack<String>();
85          //expressions.push("some result");
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         //entry.setName("/.*List\\.html/");
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         //entry.setName("/.*List\\.html/");
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 }