1   /*
2    * $Id: MessagesTestCase.java 354761 2005-12-07 15:11:58Z niallp $
3    * $Revision: 354761 $
4    * $Date: 2005-12-07 10:11:58 -0500 (Wed, 07 Dec 2005) $
5    *
6    * ====================================================================
7    *
8    *  Copyright 2003-2005 The Apache Software Foundation
9    * 
10   *  Licensed under the Apache License, Version 2.0 (the "License");
11   *  you may not use this file except in compliance with the License.
12   *  You may obtain a copy of the License at
13   *
14   *      http://www.apache.org/licenses/LICENSE-2.0
15   *
16   *  Unless required by applicable law or agreed to in writing, software
17   *  distributed under the License is distributed on an "AS IS" BASIS,
18   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19   *  See the License for the specific language governing permissions and
20   *  limitations under the License.
21   *
22   */
23  
24  package org.apache.commons.resources;
25  
26  import java.util.Locale;
27  
28  import junit.framework.Test;
29  import junit.framework.TestCase;
30  import junit.framework.TestSuite;
31  
32  import org.apache.commons.resources.impl.ResourceBundleResourcesFactory;
33  
34  /***
35   * <p>Unit tests for
36   * <code>org.apache.commons.resources.Messages</code>.
37   * </p>
38   */
39  public class MessagesTestCase extends TestCase {
40  
41      // Configuration value for our resource bundles
42      protected static final String CONFIG = "org.apache.commons.resources.impl.TestResources";
43  
44      // Logical name of the Resources instance to be created
45      protected static final String NAME = "name";
46  
47  
48      // The ResourcesFactory to use for acquiring the Resources
49      protected ResourcesFactory factory = null;
50  
51  
52      // The Resources instance containing our messages
53      protected Resources resources = null;
54  
55      // The Messages instance to be tested
56      protected Messages messages = null;
57  
58  
59      // ----------------------------------------------------------- Constructors
60  
61  
62      public MessagesTestCase(String name) {
63          super(name);
64      }
65  
66  
67      // --------------------------------------------------- Overall Test Methods
68  
69  
70      // Set up instance variables required by this test case
71      public void setUp() throws Exception {
72          factory = new ResourceBundleResourcesFactory();
73          resources = factory.getResources(NAME, CONFIG);
74          resources.setReturnNull(false);
75          messages = new Messages(resources);
76      }
77  
78      // Return the tests included in this test suite
79      public static Test suite() {
80          return (new TestSuite(MessagesTestCase.class));
81      }
82  
83      // Tear down the instance variables required by this test case
84      public void tearDown() {
85          messages = null;
86          resources = null;
87          factory = null;
88      }
89  
90  
91      // ------------------------------------------------ Individual Test Methods
92  
93  
94      /***
95       * Test the use of the shortcut getMessages() method.
96       */
97      public void testLocal() {
98          String message = null;
99          
100         Messages local =
101             Messages.getMessages(
102                 "org.apache.commons.resources.impl.LocalStrings");
103         
104         assertNotNull("Local messages found", local);
105 
106         message = local.getMessage("local.message");
107         
108         assertEquals(
109             "Correct individual message",
110             "[Local] REPLACE {0} WITH {1}",
111             message);
112 
113         message =
114             local.getMessage("local.message", new String[] { "abc", "def" });
115             
116         assertEquals(
117             "Correct replaced message",
118             "[Local] REPLACE abc WITH def",
119             message);
120 
121         local.getResources().setReturnNull(false);
122         message = local.getMessage("local.missing");
123         assertEquals("Correct missing message", "???local.missing???", message);
124         
125 
126         Messages messages2 = new MyMessages(null);
127         Messages messages3 = messages2.getMessages(null);
128         assertNull("Invalid Messages", messages3);
129 
130     }
131     
132 
133 
134     /***
135      * Test the ability to retrieve messages with replacements.
136      */
137     public void testMessage() {
138         String message = null;
139 
140         message = messages.getMessage("test.missing");
141         assertEquals("Correct missing message", "???test.missing???", message);
142         
143         message = messages.getMessage(Locale.ENGLISH, "test.message");
144         assertEquals(
145             "Correct individual message",
146             "[Base] REPLACE {0} WITH {1}",
147             message);
148 
149         message =
150             messages.getMessage("test.message", new String[] { "abc", "def" });
151         
152         assertEquals(
153             "Correct replaced message",
154             "[Base] REPLACE abc WITH def",
155             message);
156 
157         message =
158             messages.getMessage(Locale.ENGLISH, "test.message", new String[] { "abc", "def" });
159         
160         assertEquals(
161             "Correct replaced message",
162             "[Base] REPLACE abc WITH def",
163             message);
164 
165         message =
166             messages.getMessage(Locale.ENGLISH, "test.message.single", "abc");
167         
168         assertEquals(
169             "Correct replaced message",
170             "[Base] REPLACE abc",
171             message);
172         
173         message =
174             messages.getMessage("test.message.single", "abc");
175         
176         assertEquals(
177             "Correct replaced message",
178             "[Base] REPLACE abc",
179             message);
180         
181         Resources resources2 = 
182             factory.getResources(NAME + "-does-not-exist", 
183                     CONFIG + "-does-not-exist");
184         resources2.setReturnNull(false);
185         Messages messages2 = new Messages(resources2);
186         message = messages2.getMessage("test.message");
187         
188         Exception exception = new Exception("Bad Implementation");
189         ResourcesException resourcesException = new ResourcesException(exception);
190         try{
191             if (true)
192                  throw resourcesException;
193         }
194         catch(ResourcesException e){
195             assertEquals("Check exception", e, resourcesException);
196             assertEquals("Check exception cause", e.getRootCause(), exception);
197             assertEquals("Check exception message", e.getMessage(), exception.getMessage());
198         }
199         
200     }
201 
202 
203     /***
204      * Test the ability to retrieve messages with replacements.
205      */
206     public void testMessages() {
207         String message = null;
208 
209         message = messages.getMessage("test.message");
210         assertEquals(
211             "Correct individual message",
212             "[Base] REPLACE {0} WITH {1}",
213             message);
214 
215         message =
216             messages.getMessage("test.message", new String[] { "abc", "def" });
217         
218         assertEquals(
219             "Correct replaced message",
220             "[Base] REPLACE abc WITH def",
221             message);
222 
223         message = messages.getMessage("test.missing");
224         assertEquals("Correct missing message", "???test.missing???", message);
225         
226         
227     }
228 
229 
230     /***
231      * Test the characteristics of a newly created instance.
232      */
233     public void testPristine() {
234         assertNotNull(messages);
235         assertTrue(
236             "Correct wrapped resources",
237             resources == messages.getResources());
238     }
239 
240 
241     class MyMessages extends Messages{
242 
243         public MyMessages(Resources resources) {
244             super(resources);
245             ResourcesFactory factory = new ResourcesFactory() {
246                 public Resources getResources(String name)
247                                  throws ResourcesException {
248                     throw new ResourcesException("Bad Implementation");
249                 }
250 
251                 public boolean isReturnNull() {
252                     return false;
253                 }
254 
255                 public void setReturnNull(boolean returnNull) {}
256 
257                 public Resources getResources(String name, String config) throws ResourcesException {
258                     return null;
259                 }
260 
261                 public void release() throws ResourcesException {
262                 }
263             };
264             Messages.setFactory(factory);
265         }
266         
267     }
268 }