001 /*
002 * $Id: MessagesTestCase.java 354761 2005-12-07 15:11:58Z niallp $
003 * $Revision: 354761 $
004 * $Date: 2005-12-07 15:11:58 +0000 (Wed, 07 Dec 2005) $
005 *
006 * ====================================================================
007 *
008 * Copyright 2003-2005 The Apache Software Foundation
009 *
010 * Licensed under the Apache License, Version 2.0 (the "License");
011 * you may not use this file except in compliance with the License.
012 * You may obtain a copy of the License at
013 *
014 * http://www.apache.org/licenses/LICENSE-2.0
015 *
016 * Unless required by applicable law or agreed to in writing, software
017 * distributed under the License is distributed on an "AS IS" BASIS,
018 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
019 * See the License for the specific language governing permissions and
020 * limitations under the License.
021 *
022 */
023
024 package org.apache.commons.resources;
025
026 import java.util.Locale;
027
028 import junit.framework.Test;
029 import junit.framework.TestCase;
030 import junit.framework.TestSuite;
031
032 import org.apache.commons.resources.impl.ResourceBundleResourcesFactory;
033
034 /**
035 * <p>Unit tests for
036 * <code>org.apache.commons.resources.Messages</code>.
037 * </p>
038 */
039 public class MessagesTestCase extends TestCase {
040
041 // Configuration value for our resource bundles
042 protected static final String CONFIG = "org.apache.commons.resources.impl.TestResources";
043
044 // Logical name of the Resources instance to be created
045 protected static final String NAME = "name";
046
047
048 // The ResourcesFactory to use for acquiring the Resources
049 protected ResourcesFactory factory = null;
050
051
052 // The Resources instance containing our messages
053 protected Resources resources = null;
054
055 // The Messages instance to be tested
056 protected Messages messages = null;
057
058
059 // ----------------------------------------------------------- Constructors
060
061
062 public MessagesTestCase(String name) {
063 super(name);
064 }
065
066
067 // --------------------------------------------------- Overall Test Methods
068
069
070 // Set up instance variables required by this test case
071 public void setUp() throws Exception {
072 factory = new ResourceBundleResourcesFactory();
073 resources = factory.getResources(NAME, CONFIG);
074 resources.setReturnNull(false);
075 messages = new Messages(resources);
076 }
077
078 // Return the tests included in this test suite
079 public static Test suite() {
080 return (new TestSuite(MessagesTestCase.class));
081 }
082
083 // Tear down the instance variables required by this test case
084 public void tearDown() {
085 messages = null;
086 resources = null;
087 factory = null;
088 }
089
090
091 // ------------------------------------------------ Individual Test Methods
092
093
094 /**
095 * Test the use of the shortcut getMessages() method.
096 */
097 public void testLocal() {
098 String message = null;
099
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 }