1   /*
2    * $Id: TestActionMessages.java 471754 2006-11-06 14:55:09Z husted $
3    *
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *  http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  package org.apache.struts.action;
22  
23  import junit.framework.Test;
24  import junit.framework.TestCase;
25  import junit.framework.TestSuite;
26  
27  import java.util.Iterator;
28  
29  /**
30   * Unit tests for the <code>org.apache.struts.action.ActionMessages</code>
31   * class.
32   *
33   * @version $Rev: 471754 $ $Date: 2004-10-16 12:09:25 -0400 (Sat, 16 Oct 2004)
34   *          $
35   */
36  public class TestActionMessages extends TestCase {
37      protected ActionMessages aMsgs = null;
38      protected ActionMessages anMsgs = null;
39      protected ActionMessage msg1 = null;
40      protected ActionMessage msg2 = null;
41      protected ActionMessage msg3 = null;
42      protected ActionMessage msg4 = null;
43      protected ActionMessage msg5 = null;
44  
45      /**
46       * Defines the testcase name for JUnit.
47       *
48       * @param theName the testcase's name.
49       */
50      public TestActionMessages(String theName) {
51          super(theName);
52      }
53  
54      /**
55       * Start the tests.
56       *
57       * @param theArgs the arguments. Not used
58       */
59      public static void main(String[] theArgs) {
60          junit.awtui.TestRunner.main(new String[] {
61                  TestActionMessages.class.getName()
62              });
63      }
64  
65      /**
66       * @return a test suite (<code>TestSuite</code>) that includes all methods
67       *         starting with "test"
68       */
69      public static Test suite() {
70          // All methods starting with "test" will be executed in the test suite.
71          return new TestSuite(TestActionMessages.class);
72      }
73  
74      public void setUp() {
75          aMsgs = new ActionMessages();
76          anMsgs = new ActionMessages();
77  
78          Object[] objs1 = new Object[] { "a", "b", "c", "d", "e" };
79          Object[] objs2 = new Object[] { "f", "g", "h", "i", "j" };
80  
81          msg1 = new ActionMessage("aMessage", objs1);
82          msg2 = new ActionMessage("anMessage", objs2);
83          msg3 = new ActionMessage("msg3", "value1");
84          msg4 = new ActionMessage("msg4", "value2");
85          msg5 = new ActionMessage("msg5", "value3", "value4");
86      }
87  
88      public void tearDown() {
89          aMsgs = null;
90      }
91  
92      public void testEmpty() {
93          assertTrue("aMsgs is not empty!", aMsgs.isEmpty());
94      }
95  
96      public void testNotEmpty() {
97          aMsgs.add("myProp", msg1);
98          assertTrue("aMsgs is empty!", aMsgs.isEmpty() == false);
99      }
100 
101     public void testSizeWithOneProperty() {
102         aMsgs.add("myProp", msg1);
103         aMsgs.add("myProp", msg2);
104         assertTrue("number of mesages is not 2", aMsgs.size("myProp") == 2);
105     }
106 
107     public void testSizeWithManyProperties() {
108         aMsgs.add("myProp1", msg1);
109         aMsgs.add("myProp2", msg2);
110         aMsgs.add("myProp3", msg3);
111         aMsgs.add("myProp3", msg4);
112         aMsgs.add("myProp4", msg5);
113         assertTrue("number of messages for myProp1 is not 1",
114             aMsgs.size("myProp1") == 1);
115         assertTrue("number of messages", aMsgs.size() == 5);
116     }
117 
118     public void testSizeAndEmptyAfterClear() {
119         testSizeWithOneProperty();
120         aMsgs.clear();
121         testEmpty();
122         assertTrue("number of meesages is not 0", aMsgs.size("myProp") == 0);
123     }
124 
125     public void testGetWithNoProperty() {
126         Iterator it = aMsgs.get("myProp");
127 
128         assertTrue("iterator is not empty!", it.hasNext() == false);
129     }
130 
131     public void testGetForAProperty() {
132         testSizeWithOneProperty();
133 
134         Iterator it = aMsgs.get("myProp");
135 
136         assertTrue("iterator is empty!", it.hasNext() == true);
137     }
138 
139     /**
140      * Tests adding an ActionMessages object to an ActionMessages object.
141      */
142     public void testAddMessages() {
143         ActionMessage msg1 = new ActionMessage("key");
144         ActionMessage msg2 = new ActionMessage("key2");
145         ActionMessage msg3 = new ActionMessage("key3");
146         ActionMessages msgs = new ActionMessages();
147         ActionMessages add = new ActionMessages();
148 
149         msgs.add("prop1", msg1);
150         add.add("prop1", msg2);
151         add.add("prop3", msg3);
152 
153         msgs.add(add);
154         assertTrue(msgs.size() == 3);
155         assertTrue(msgs.size("prop1") == 2);
156 
157         // test message order
158         Iterator props = msgs.get();
159         int count = 1;
160 
161         while (props.hasNext()) {
162             ActionMessage msg = (ActionMessage) props.next();
163 
164             if (count == 1) {
165                 assertTrue(msg.getKey().equals("key"));
166             } else if (count == 2) {
167                 assertTrue(msg.getKey().equals("key2"));
168             } else {
169                 assertTrue(msg.getKey().equals("key3"));
170             }
171 
172             count++;
173         }
174     }
175 }