1 9 package org.jboss.portal.test.portlet; 10 11 import java.io.ByteArrayInputStream ; 12 import java.io.InputStream ; 13 import java.util.HashMap ; 14 import java.util.List ; 15 import java.util.Locale ; 16 import java.util.Map ; 17 import java.util.MissingResourceException ; 18 import java.util.ResourceBundle ; 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 31 public class PortletResourceBundleTestCase extends TestCase 32 { 33 34 private static final String RESOURCE_BUNDLE_NAME = "MyResourceBundle"; 35 36 public PortletResourceBundleTestCase(String key) 37 { 38 super(key); 39 } 40 41 42 43 public void testExact() 44 { 45 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 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 supportedLocales = languagesMD.getSupportedLocales(); 57 supportedLocales.add(Locale.FRENCH); 58 59 ResourceBundles rbs = new ResourceBundles(languagesMD, loader); 61 62 ResourceBundle 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 e) 74 { 75 } 76 } 77 78 public void testFallbackOnParent() 79 { 80 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 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 supportedLocales = languagesMD.getSupportedLocales(); 92 supportedLocales.add(Locale.FRENCH); 93 94 ResourceBundles rbs = new ResourceBundles(languagesMD, loader); 96 97 ResourceBundle 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 e) 109 { 110 } 111 } 112 113 public void testFallbackOnDefaultBundle() 114 { 115 ResourceClassLoader loader = new ResourceClassLoader(Thread.currentThread().getContextClassLoader()); 117 loader.addResource(RESOURCE_BUNDLE_NAME + ".properties", "javax.portlet.title=Title_\ntest=Test_\n"); 118 119 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 ResourceBundles rbs = new ResourceBundles(languagesMD, loader); 129 130 ResourceBundle 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 e) 142 { 143 } 144 } 145 146 public void testNoDefaultBundle() 147 { 148 ResourceClassLoader loader = new ResourceClassLoader(Thread.currentThread().getContextClassLoader()); 150 151 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 ResourceBundles rbs = new ResourceBundles(languagesMD, loader); 161 162 ResourceBundle 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 e) 173 { 174 } 175 try 176 { 177 rb_fr.getString(PortletConstants.PORTLET_KEYWORDS); 178 fail("MissingResourceException expected"); 179 } 180 catch (MissingResourceException e) 181 { 182 } 183 } 184 185 186 187 public void testFallbackMissingKey() 188 { 189 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 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 supportedLocales = languagesMD.getSupportedLocales(); 202 supportedLocales.add(Locale.FRENCH); 203 204 ResourceBundles rbs = new ResourceBundles(languagesMD, loader); 206 207 ResourceBundle 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 e) 219 { 220 } 221 } 222 223 224 private class ResourceClassLoader extends ClassLoader 225 { 226 227 private Map resources = new HashMap (); 228 229 public ResourceClassLoader(ClassLoader parent) 230 { 231 super(parent); 232 } 233 234 public void addResource(String name, String content) 235 { 236 if (name == null) 237 { 238 throw new IllegalArgumentException (); 239 } 240 if (content == null) 241 { 242 throw new IllegalArgumentException (); 243 } 244 resources.put(name, content.getBytes()); 245 } 246 247 public InputStream getResourceAsStream(String name) 248 { 249 if (resources.containsKey(name)) 250 { 251 return new ByteArrayInputStream ((byte[])resources.get(name)); 252 } 253 else 254 { 255 return super.getResourceAsStream(name); 256 } 257 } 258 } 259 260 } 261 | Popular Tags |