1 package org.itracker.core.resources;
2
3 import java.util.Enumeration;
4 import java.util.Locale;
5 import java.util.ResourceBundle;
6
7 import org.itracker.AbstractDependencyInjectionTest;
8 import org.junit.Test;
9
10 public class ITrackerResourcesTest extends AbstractDependencyInjectionTest {
11 private String defaultLocaleString_;
12 private Locale defaultLocale_;
13 private ResourceBundle defaultResourceBundle_;
14 private String testLocaleString_ = "en_ID";
15 private Locale testLocale_;
16 private ITrackerResourceBundle testResourceBundle_;
17
18 @Override
19 public void onSetUp() throws Exception {
20 super.onSetUp();
21 defaultLocaleString_ = ITrackerResources.getDefaultLocale();
22 assertNotNull(defaultLocaleString_);
23 if (defaultLocaleString_.length() == 2) {
24 defaultLocale_ = new Locale(defaultLocaleString_);
25 } else if (defaultLocaleString_.length() == 5) {
26 defaultLocale_ = new Locale(defaultLocaleString_.substring(0, 2), defaultLocaleString_.substring(3, 5));
27 } else {
28 fail();
29 }
30 assertNotNull(defaultLocale_);
31 defaultResourceBundle_ = ITrackerResources.getBundle();
32
33 Object[][] data = {{"itracker.web.attr.admin", "itracker.web.attr.administer", "itracker.web.attr.adminTask", "itracker.web.attr.longString", "itracker.web.attr.newLine"},
34 {"Admin", "Administer", "The {0} {1} {2}", "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567", "abc\nde"}};
35
36 testLocale_ = new Locale(testLocaleString_);
37 testResourceBundle_ = new ITrackerResourceBundle(testLocale_, data);
38 assertNotNull(testResourceBundle_);
39 ITrackerResources.putBundle(testLocale_, testResourceBundle_);
40 }
41
42 @Override
43 public void onTearDown() throws Exception {
44 super.onTearDown();
45 ITrackerResources.setDefaultLocale(defaultLocaleString_);
46 }
47
48 @Test
49 public void testGetLocaleNull() {
50 Locale locale = ITrackerResources.getLocale(null);
51 assertNotNull(locale);
52 assertEquals(ITrackerResources.getLocale(ITrackerResources.getDefaultLocale()), locale);
53 }
54
55 @Test
56 public void testGetLocaleInvalidString() {
57 Locale localeInvalid = ITrackerResources.getLocale("ABCDEFG");
58 Locale localeDefault = ITrackerResources.getLocale(ITrackerResources.getDefaultLocale());
59 assertEquals(localeInvalid, localeDefault);
60 ITrackerResources.setDefaultLocale("ABCDEFG");
61 localeInvalid = ITrackerResources.getLocale("ABCDEFG");
62 localeDefault = ITrackerResources.getLocale(ITrackerResources.DEFAULT_LOCALE);
63 assertEquals(localeInvalid, localeDefault);
64 }
65
66 @Test
67 public void testGetBundleEmptyString() {
68 ResourceBundle resourceBundle = ITrackerResources.getBundle("");
69 assertNotNull(resourceBundle);
70 assertEquals(defaultResourceBundle_, resourceBundle);
71 }
72
73 @Test
74 public void testGetBundleStringParameter() {
75 ResourceBundle resourceBundle = ITrackerResources.getBundle(defaultLocaleString_);
76 assertNotNull(resourceBundle);
77 assertEquals(defaultResourceBundle_, resourceBundle);
78 }
79
80 @Test
81 public void testGetBundleNullLocale() {
82 ResourceBundle resourceBundle = ITrackerResources.getBundle((Locale) null);
83 assertNotNull(resourceBundle);
84 assertEquals(defaultResourceBundle_, resourceBundle);
85 }
86
87 @Test
88 public void testGetEditBundleNullLocale() {
89
90 ResourceBundle resourceBundle = ITrackerResources.getEditBundle(null);
91 assertNotNull(resourceBundle);
92 assertEquals(defaultResourceBundle_.getLocale(), resourceBundle.getLocale());
93 Enumeration<String> keys = resourceBundle.getKeys();
94 while (keys.hasMoreElements()) {
95 String key = keys.nextElement();
96 assertEquals(defaultResourceBundle_.getString(key), resourceBundle.getString(key));
97 }
98 keys = defaultResourceBundle_.getKeys();
99 while (keys.hasMoreElements()) {
100 String key = keys.nextElement();
101 assertEquals(defaultResourceBundle_.getString(key), resourceBundle.getString(key));
102 }
103 }
104
105 @Test
106 public void testClearBundles() {
107 Enumeration<String> keys = ITrackerResources.getBundle(ITrackerResources.BASE_LOCALE).getKeys();
108 int nKeys = 0;
109 while (keys.hasMoreElements()) {
110 keys.nextElement();
111 ++nKeys;
112 }
113 assertTrue(5 < nKeys);
114
115 ITrackerResources.clearBundles();
116
117 keys = ITrackerResources.getBundle(testLocale_).getKeys();
118 nKeys = 0;
119 while (keys.hasMoreElements()) {
120 keys.nextElement();
121 ++nKeys;
122 }
123 assertTrue(5 < nKeys);
124 }
125
126 @Test
127 public void testClearKeyFromBundles() {
128 ResourceBundle resourceBundle = ITrackerResources.getBundle(testLocale_);
129 String value = resourceBundle.getString("itracker.web.attr.admin");
130 assertNotNull(value);
131 assertEquals("Admin", value);
132
133 ITrackerResources.clearKeyFromBundles("itracker.web.attr.admin", false);
134
135 resourceBundle = ITrackerResources.getBundle(testLocale_);
136
137 try {
138 assertNotNull(resourceBundle.getString("itracker.web.attr.admin"));
139 assertEquals("", ResourceBundle.getBundle(ITrackerResources.RESOURCE_BUNDLE_NAME, resourceBundle.getLocale()).getString("itracker.web.attr.admin"),
140 resourceBundle.getString("itracker.web.attr.admin"));
141
142 } catch (RuntimeException exception) {
143 fail("should fall back to properties resource, but throwed " + exception.getClass() + ", " + exception.getMessage());
144 }
145 }
146
147 @Test
148 public void testGetStringNullKey() {
149 assertEquals("", ITrackerResources.getString(null, testLocaleString_));
150 }
151
152 @Test
153 public void testGetStringDefaultLocaleString() {
154 ITrackerResources.setDefaultLocale(testLocaleString_);
155 assertEquals("Admin", ITrackerResources.getString("itracker.web.attr.admin", (String) null));
156 }
157
158 @Test
159 public void testGetStringWithLocaleString() {
160 assertEquals("Admin", ITrackerResources.getString("itracker.web.attr.admin", testLocaleString_));
161 }
162
163 @Test
164 public void testGetStringWithLocaleWithNullKey() {
165 assertEquals("", ITrackerResources.getString(null, testLocale_));
166 }
167
168 @Test
169 public void testGetStringWithLocaleWithDirtyKey() {
170 testResourceBundle_.removeValue("itracker.web.attr.admin", true);
171 String value = ITrackerResources.getString("itracker.web.attr.admin", testLocale_);
172
173
174
175 assertEquals("Admin", value);
176 }
177
178 @Test
179
180 public void testGetStringWithLocaleWithRemovedKey() {
181 testResourceBundle_.removeValue("itracker.web.attr.admin", false);
182 String value = ITrackerResources.getString("itracker.web.attr.admin", testLocale_);
183
184 assertEquals("Admin", value);
185 }
186
187 @Test
188 public void testGetStringWithWrongLocale() {
189 Locale locale = new Locale("EEEEEEEEEEe");
190 String value = ITrackerResources.getString("itracker.web.attr.admin", locale);
191
192
193
194 assertEquals("Admin", value);
195 }
196
197 @Test
198 public void testGetStringWithMultipleOptions() {
199 Object[] options = {"administrator", "administer", "the library"};
200 String value = ITrackerResources.getString("itracker.web.attr.adminTask", testLocaleString_, options);
201 assertEquals("The administrator administer the library", value);
202 }
203
204 @Test
205 public void testGetStringWithSingleOption() {
206 String value = ITrackerResources.getString("itracker.web.attr.adminTask", testLocaleString_, "administrator");
207 assertEquals("The administrator ", value);
208 }
209
210 @Test
211 public void testGetStringWithLocaleWithSingleOption() {
212 String value = ITrackerResources.getString("itracker.web.attr.adminTask", testLocale_, "administrator");
213 assertEquals("The administrator ", value);
214 }
215
216 @Test
217 public void testGetCheckForKey() {
218 ITrackerResources.setDefaultLocale(testLocaleString_);
219 String value = ITrackerResources.getCheckForKey("itracker.web.attr.admin");
220 assertEquals("Admin", value);
221 }
222
223 @Test
224 public void testGetCheckForKeyDirty() {
225 ITrackerResources.setDefaultLocale(testLocaleString_);
226 testResourceBundle_.removeValue("itracker.web.attr.admin", true);
227 String value = ITrackerResources.getCheckForKey("itracker.web.attr.admin");
228
229
230
231 assertEquals("Admin", value);
232 }
233
234 @Test
235 public void testGetCheckForKeyWithWrongBundle() {
236 ITrackerResources.setDefaultLocale("AAAAAA");
237 try {
238 ITrackerResources.getCheckForKey("itracker.web.attr.admin");
239
240 } catch (RuntimeException exception) {
241
242 fail("throwed " + exception.getClass() + ": " + exception.getMessage());
243 }
244 }
245
246 @Test
247 public void testIsLongStringFalse() {
248 ITrackerResources.setDefaultLocale(testLocaleString_);
249 assertFalse(ITrackerResources.isLongString("itracker.web.attr.admin"));
250 }
251
252 @Test
253 public void testIsLongStringTrueLong() {
254 ITrackerResources.setDefaultLocale(testLocaleString_);
255 assertTrue(ITrackerResources.isLongString("itracker.web.attr.longString"));
256 }
257
258 @Test
259 public void testIsLongStringTrueNewLine() {
260 ITrackerResources.setDefaultLocale(testLocaleString_);
261 assertTrue(ITrackerResources.isLongString("itracker.web.attr.newLine"));
262 }
263
264 @Test
265 public void testInitialized() {
266 ITrackerResources.setInitialized(false);
267 assertFalse(ITrackerResources.isInitialized());
268 ITrackerResources.setInitialized(true);
269 assertTrue(ITrackerResources.isInitialized());
270 }
271
272 @Test
273 public void testHex() {
274 assertEquals('0', ITrackerResources.encodeHex(0));
275 assertEquals(0, ITrackerResources.decodeHex('0'));
276 assertEquals('1', ITrackerResources.encodeHex(1));
277 assertEquals(1, ITrackerResources.decodeHex('1'));
278 assertEquals('2', ITrackerResources.encodeHex(2));
279 assertEquals(2, ITrackerResources.decodeHex('2'));
280 assertEquals('3', ITrackerResources.encodeHex(3));
281 assertEquals(3, ITrackerResources.decodeHex('3'));
282 assertEquals('4', ITrackerResources.encodeHex(4));
283 assertEquals(4, ITrackerResources.decodeHex('4'));
284 assertEquals('5', ITrackerResources.encodeHex(5));
285 assertEquals(5, ITrackerResources.decodeHex('5'));
286 assertEquals('6', ITrackerResources.encodeHex(6));
287 assertEquals(6, ITrackerResources.decodeHex('6'));
288 assertEquals('7', ITrackerResources.encodeHex(7));
289 assertEquals(7, ITrackerResources.decodeHex('7'));
290 assertEquals('8', ITrackerResources.encodeHex(8));
291 assertEquals(8, ITrackerResources.decodeHex('8'));
292 assertEquals('9', ITrackerResources.encodeHex(9));
293 assertEquals(9, ITrackerResources.decodeHex('9'));
294 assertEquals('A', ITrackerResources.encodeHex(10));
295 assertEquals(10, ITrackerResources.decodeHex('A'));
296 assertEquals(10, ITrackerResources.decodeHex('a'));
297 assertEquals('B', ITrackerResources.encodeHex(11));
298 assertEquals(11, ITrackerResources.decodeHex('B'));
299 assertEquals(11, ITrackerResources.decodeHex('b'));
300 assertEquals('C', ITrackerResources.encodeHex(12));
301 assertEquals(12, ITrackerResources.decodeHex('C'));
302 assertEquals(12, ITrackerResources.decodeHex('c'));
303 assertEquals('D', ITrackerResources.encodeHex(13));
304 assertEquals(13, ITrackerResources.decodeHex('D'));
305 assertEquals(13, ITrackerResources.decodeHex('d'));
306 assertEquals('E', ITrackerResources.encodeHex(14));
307 assertEquals(14, ITrackerResources.decodeHex('E'));
308 assertEquals(14, ITrackerResources.decodeHex('e'));
309 assertEquals('F', ITrackerResources.encodeHex(15));
310 assertEquals(15, ITrackerResources.decodeHex('F'));
311 assertEquals(15, ITrackerResources.decodeHex('f'));
312 }
313
314 @Test
315 public void testUnicodeString() {
316 String originalString = "itracker unit testing";
317 String escapedString = ITrackerResources.escapeUnicodeString(originalString, true);
318 assertEquals(originalString, ITrackerResources.unescapeUnicodeString(escapedString));
319 escapedString = ITrackerResources.escapeUnicodeString(originalString, false);
320 assertEquals(originalString, ITrackerResources.unescapeUnicodeString(escapedString));
321 }
322
323 @Override
324 protected String[] getDataSetFiles() {
325 return new String[]{};
326 }
327
328 @Override
329 protected String[] getConfigLocations() {
330 return new String[]{"application-context.xml"};
331 }
332 }
333
334