KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jboss > portal > test > portlet > PortletResourceBundleTestCase


1 /*****************************************
2  * *
3  * JBoss Portal: The OpenSource Portal *
4  * *
5  * Distributable under LGPL license. *
6  * See terms of license at gnu.org. *
7  * *
8  *****************************************/

9 package org.jboss.portal.test.portlet;
10
11 import java.io.ByteArrayInputStream JavaDoc;
12 import java.io.InputStream JavaDoc;
13 import java.util.HashMap JavaDoc;
14 import java.util.List JavaDoc;
15 import java.util.Locale JavaDoc;
16 import java.util.Map JavaDoc;
17 import java.util.MissingResourceException JavaDoc;
18 import java.util.ResourceBundle JavaDoc;
19
20 import junit.framework.TestCase;
21
22 import org.jboss.portal.portlet.PortletConstants;
23 import org.jboss.portal.portlet.metadata.LanguagesMetaData;
24 import org.jboss.portal.portlet.plugins.language.ResourceBundles;
25
26 /**
27  * @author <a HREF="mailto:julien@jboss.org">Julien Viet</a>
28  * @author <a HREF="mailto:theute@jboss.org">Thomas Heute</a>
29  * @version $Revision: 1.4 $
30  */

31 public class PortletResourceBundleTestCase extends TestCase
32 {
33
34    private static final String JavaDoc RESOURCE_BUNDLE_NAME = "MyResourceBundle";
35
36    public PortletResourceBundleTestCase(String JavaDoc key)
37    {
38       super(key);
39    }
40    
41    
42
43    public void testExact()
44    {
45       // Builder loader
46
ResourceClassLoader loader = new ResourceClassLoader(Thread.currentThread().getContextClassLoader());
47       loader.addResource(RESOURCE_BUNDLE_NAME + "_fr.properties", "javax.portlet.title=Title_fr\ntest=Test_fr\n");
48
49       // Build the language metadata
50
LanguagesMetaData.InfoMetaData infoMD = new LanguagesMetaData.InfoMetaData();
51       infoMD.setTitle("Title");
52       infoMD.setShortTitle("ShortTitle");
53       LanguagesMetaData languagesMD = new LanguagesMetaData();
54       languagesMD.setInfo(infoMD);
55       languagesMD.setResourceBundle(RESOURCE_BUNDLE_NAME);
56       List JavaDoc supportedLocales = languagesMD.getSupportedLocales();
57       supportedLocales.add(Locale.FRENCH);
58
59       // Build the bundle
60
ResourceBundles rbs = new ResourceBundles(languagesMD, loader);
61
62       // Test the fr bundle
63
ResourceBundle JavaDoc rb_fr = rbs.get(Locale.FRENCH);
64       assertNotNull(rb_fr);
65       assertEquals("Title_fr", rb_fr.getString(PortletConstants.PORTLET_TITLE));
66       assertEquals("ShortTitle", rb_fr.getString(PortletConstants.PORTLET_SHORT_TITLE));
67       assertEquals("Test_fr", rb_fr.getString("test"));
68       try
69       {
70          rb_fr.getString(PortletConstants.PORTLET_KEYWORDS);
71          fail("MissingResourceException expected");
72       }
73       catch (MissingResourceException JavaDoc e)
74       {
75       }
76    }
77
78    public void testFallbackOnParent()
79    {
80       // Builder loader
81
ResourceClassLoader loader = new ResourceClassLoader(Thread.currentThread().getContextClassLoader());
82       loader.addResource(RESOURCE_BUNDLE_NAME + "_fr.properties", "javax.portlet.title=Title_fr\ntest=Test_fr\n");
83
84       // Build the language metadata
85
LanguagesMetaData.InfoMetaData infoMD = new LanguagesMetaData.InfoMetaData();
86       infoMD.setTitle("Title");
87       infoMD.setShortTitle("ShortTitle");
88       LanguagesMetaData languagesMD = new LanguagesMetaData();
89       languagesMD.setInfo(infoMD);
90       languagesMD.setResourceBundle(RESOURCE_BUNDLE_NAME);
91       List JavaDoc supportedLocales = languagesMD.getSupportedLocales();
92       supportedLocales.add(Locale.FRENCH);
93
94       // Build the bundle
95
ResourceBundles rbs = new ResourceBundles(languagesMD, loader);
96
97       // Test the fr_FR bundle that must fallback on fr
98
ResourceBundle JavaDoc rb_fr_FR = rbs.get(Locale.FRANCE);
99       assertNotNull(rb_fr_FR);
100       assertEquals("Title_fr", rb_fr_FR.getString(PortletConstants.PORTLET_TITLE));
101       assertEquals("ShortTitle", rb_fr_FR.getString(PortletConstants.PORTLET_SHORT_TITLE));
102       assertEquals("Test_fr", rb_fr_FR.getString("test"));
103       try
104       {
105          rb_fr_FR.getString(PortletConstants.PORTLET_KEYWORDS);
106          fail("MissingResourceException expected");
107       }
108       catch (MissingResourceException JavaDoc e)
109       {
110       }
111    }
112
113    public void testFallbackOnDefaultBundle()
114    {
115       // Builder loader
116
ResourceClassLoader loader = new ResourceClassLoader(Thread.currentThread().getContextClassLoader());
117       loader.addResource(RESOURCE_BUNDLE_NAME + ".properties", "javax.portlet.title=Title_\ntest=Test_\n");
118
119       // Build the language metadata
120
LanguagesMetaData.InfoMetaData infoMD = new LanguagesMetaData.InfoMetaData();
121       infoMD.setTitle("Title");
122       infoMD.setShortTitle("ShortTitle");
123       LanguagesMetaData languagesMD = new LanguagesMetaData();
124       languagesMD.setInfo(infoMD);
125       languagesMD.setResourceBundle(RESOURCE_BUNDLE_NAME);
126
127       // Build the bundle
128
ResourceBundles rbs = new ResourceBundles(languagesMD, loader);
129
130       // Test the fr_FR bundle that must fallback on the default
131
ResourceBundle JavaDoc rb_fr = rbs.get(Locale.FRENCH);
132       assertNotNull(rb_fr);
133       assertEquals("Title_", rb_fr.getString(PortletConstants.PORTLET_TITLE));
134       assertEquals("ShortTitle", rb_fr.getString(PortletConstants.PORTLET_SHORT_TITLE));
135       assertEquals("Test_", rb_fr.getString("test"));
136       try
137       {
138          rb_fr.getString(PortletConstants.PORTLET_KEYWORDS);
139          fail("MissingResourceException expected");
140       }
141       catch (MissingResourceException JavaDoc e)
142       {
143       }
144    }
145
146    public void testNoDefaultBundle()
147    {
148       // Builder loader
149
ResourceClassLoader loader = new ResourceClassLoader(Thread.currentThread().getContextClassLoader());
150
151       // Build the language metadata
152
LanguagesMetaData.InfoMetaData infoMD = new LanguagesMetaData.InfoMetaData();
153       infoMD.setTitle("Title");
154       infoMD.setShortTitle("ShortTitle");
155       LanguagesMetaData languagesMD = new LanguagesMetaData();
156       languagesMD.setInfo(infoMD);
157       languagesMD.setResourceBundle(RESOURCE_BUNDLE_NAME);
158
159       // Build the bundle
160
ResourceBundles rbs = new ResourceBundles(languagesMD, loader);
161
162       // Test the fr_FR bundle that must fallback on the default
163
ResourceBundle JavaDoc rb_fr = rbs.get(Locale.FRENCH);
164       assertNotNull(rb_fr);
165       assertEquals("Title", rb_fr.getString(PortletConstants.PORTLET_TITLE));
166       assertEquals("ShortTitle", rb_fr.getString(PortletConstants.PORTLET_SHORT_TITLE));
167       try
168       {
169          rb_fr.getString("test");
170          fail("MissingResourceException expected");
171       }
172       catch (MissingResourceException JavaDoc e)
173       {
174       }
175       try
176       {
177          rb_fr.getString(PortletConstants.PORTLET_KEYWORDS);
178          fail("MissingResourceException expected");
179       }
180       catch (MissingResourceException JavaDoc e)
181       {
182       }
183    }
184    
185    
186
187    public void testFallbackMissingKey()
188    {
189       // Builder loader
190
ResourceClassLoader loader = new ResourceClassLoader(Thread.currentThread().getContextClassLoader());
191       loader.addResource(RESOURCE_BUNDLE_NAME + ".properties", "javax.portlet.title=Title\ntest=Test\n");
192       loader.addResource(RESOURCE_BUNDLE_NAME + "_fr.properties", "javax.portlet.title=Title_fr\n");
193
194       // Build the language metadata
195
LanguagesMetaData.InfoMetaData infoMD = new LanguagesMetaData.InfoMetaData();
196       infoMD.setTitle("Title");
197       infoMD.setShortTitle("ShortTitle");
198       LanguagesMetaData languagesMD = new LanguagesMetaData();
199       languagesMD.setInfo(infoMD);
200       languagesMD.setResourceBundle(RESOURCE_BUNDLE_NAME);
201       List JavaDoc supportedLocales = languagesMD.getSupportedLocales();
202       supportedLocales.add(Locale.FRENCH);
203
204       // Build the bundle
205
ResourceBundles rbs = new ResourceBundles(languagesMD, loader);
206
207       // Test the fr bundle
208
ResourceBundle JavaDoc rb_fr = rbs.get(Locale.FRENCH);
209       assertNotNull(rb_fr);
210       assertEquals("Title_fr", rb_fr.getString(PortletConstants.PORTLET_TITLE));
211       assertEquals("ShortTitle", rb_fr.getString(PortletConstants.PORTLET_SHORT_TITLE));
212       assertEquals("Test", rb_fr.getString("test"));
213       try
214       {
215          rb_fr.getString(PortletConstants.PORTLET_KEYWORDS);
216          fail("MissingResourceException expected");
217       }
218       catch (MissingResourceException JavaDoc e)
219       {
220       }
221    }
222    
223    
224    private class ResourceClassLoader extends ClassLoader JavaDoc
225    {
226
227       private Map JavaDoc resources = new HashMap JavaDoc();
228
229       public ResourceClassLoader(ClassLoader JavaDoc parent)
230       {
231          super(parent);
232       }
233
234       public void addResource(String JavaDoc name, String JavaDoc content)
235       {
236          if (name == null)
237          {
238             throw new IllegalArgumentException JavaDoc();
239          }
240          if (content == null)
241          {
242             throw new IllegalArgumentException JavaDoc();
243          }
244          resources.put(name, content.getBytes());
245       }
246
247       public InputStream JavaDoc getResourceAsStream(String JavaDoc name)
248       {
249          if (resources.containsKey(name))
250          {
251             return new ByteArrayInputStream JavaDoc((byte[])resources.get(name));
252          }
253          else
254          {
255             return super.getResourceAsStream(name);
256          }
257       }
258    }
259
260 }
261
Popular Tags