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    }