1/*
2 *  Licensed to the Apache Software Foundation (ASF) under one or more
3 *  contributor license agreements.  See the NOTICE file distributed with
4 *  this work for additional information regarding copyright ownership.
5 *  The ASF licenses this file to You under the Apache License, Version 2.0
6 *  (the "License"); you may not use this file except in compliance with
7 *  the License.  You may obtain a copy of the License at
8 *
9 *     http://www.apache.org/licenses/LICENSE-2.0
10 *
11 *  Unless required by applicable law or agreed to in writing, software
12 *  distributed under the License is distributed on an "AS IS" BASIS,
13 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 *  See the License for the specific language governing permissions and
15 *  limitations under the License.
16 */
17package org.apache.harmony.tests.java.util;
18
19import junit.framework.TestCase;
20import tests.support.resource.Support_Resources;
21import java.io.File;
22import java.io.FileNotFoundException;
23import java.io.FileWriter;
24import java.io.IOException;
25import java.io.InputStreamReader;
26import java.io.PrintWriter;
27import java.io.Reader;
28import java.io.Writer;
29import java.net.URL;
30import java.util.ArrayList;
31import java.util.Collections;
32import java.util.List;
33import java.util.ListResourceBundle;
34import java.util.Locale;
35import java.util.PropertyResourceBundle;
36import java.util.ResourceBundle;
37import java.util.ResourceBundle.Control;
38import java.util.Scanner;
39import static java.util.ResourceBundle.Control.*;
40
41/**
42 * Test cases for java.util.ResourceBundle.Control
43 *
44 * @since 1.6
45 */
46public class ControlTest extends TestCase {
47
48    /**
49     * Control with format:FORMAT_PROPERTIES
50     */
51    private Control controlP;
52
53    /**
54     * Control with format:FORMAT_CLASS
55     */
56    private Control controlC;
57
58    /**
59     * Control with format:FORMAT_DEFAULT
60     */
61    private Control control;
62
63    /**
64     * {@link java.util.ResourceBundle.Control#Control()}.
65     */
66    @SuppressWarnings("nls")
67    public void test_Constructor() {
68
69        class SubControl extends Control {
70            SubControl() {
71                super();
72            }
73        }
74        Control subControl = new SubControl();
75        assertEquals(FORMAT_DEFAULT, subControl.getFormats(""));
76        assertFalse(control.equals(subControl));
77    }
78
79    /**
80     * Test for all the public constants.
81     *
82     * {@link java.util.ResourceBundle.Control#FORMAT_CLASS}
83     * {@link java.util.ResourceBundle.Control#FORMAT_DEFAULT}
84     * {@link java.util.ResourceBundle.Control#FORMAT_PROPERTIES}
85     * {@link java.util.ResourceBundle.Control#TTL_DONT_CACHE}
86     * {@link java.util.ResourceBundle.Control#TTL_NO_EXPIRATION_CONTROL}
87     */
88    @SuppressWarnings("nls")
89    public void test_Constants() {
90        List<String> list = FORMAT_CLASS;
91        assertEquals(1, list.size());
92        assertEquals("java.class", list.get(0));
93        list = FORMAT_PROPERTIES;
94        assertEquals(1, list.size());
95        assertEquals("java.properties", list.get(0));
96        list = FORMAT_DEFAULT;
97        assertEquals(2, list.size());
98        assertEquals("java.class", list.get(0));
99        assertEquals("java.properties", list.get(1));
100        try {
101            FORMAT_CLASS.add("");
102            fail("Should throw UnsupportedOperationException");
103        } catch (UnsupportedOperationException e) {
104            // expected
105        }
106        try {
107            FORMAT_DEFAULT.add("");
108            fail("Should throw UnsupportedOperationException");
109        } catch (UnsupportedOperationException e) {
110            // expected
111        }
112        try {
113            FORMAT_PROPERTIES.add("");
114            fail("Should throw UnsupportedOperationException");
115        } catch (UnsupportedOperationException e) {
116            // expected
117        }
118        Class<?> unmodifiableListClass = Collections.unmodifiableList(
119                new ArrayList<String>()).getClass();
120        assertEquals(FORMAT_CLASS.getClass(), unmodifiableListClass);
121        assertEquals(FORMAT_DEFAULT.getClass(), unmodifiableListClass);
122        assertEquals(FORMAT_PROPERTIES.getClass(), unmodifiableListClass);
123        assertEquals(-1L, TTL_DONT_CACHE);
124        assertEquals(-2L, TTL_NO_EXPIRATION_CONTROL);
125    }
126
127    /**
128     * {@link java.util.ResourceBundle.Control#getControl(java.util.List)}.
129     */
130    @SuppressWarnings("nls")
131    public void test_getControl_LList() {
132        // singleton
133        assertSame(control, Control.getControl(FORMAT_DEFAULT));
134        assertSame(controlC, Control.getControl(FORMAT_CLASS));
135        assertSame(controlP, Control.getControl(FORMAT_PROPERTIES));
136
137        // class
138        assertTrue(control.getClass() == Control.class);
139        assertTrue(controlC.getClass() != Control.class);
140        assertTrue(controlP.getClass() != Control.class);
141
142        // formats: need not same, just need equal
143        List<String> list = new ArrayList<String>(FORMAT_CLASS);
144        assertSame(controlC, Control.getControl(list));
145        // can add
146        list.add(FORMAT_PROPERTIES.get(0));
147        assertSame(control, Control.getControl(list));
148
149        // exceptions
150        try {
151            Control.getControl(null);
152            fail("Should throw NullPointerException");
153        } catch (NullPointerException e) {
154            // expected
155        }
156        list = new ArrayList<String>();
157        try {
158            Control.getControl(list);
159            fail("Should throw IllegalArgumentException");
160        } catch (IllegalArgumentException e) {
161            // expected
162        }
163        list = new ArrayList<String>(FORMAT_CLASS);
164        // java.class -> JAVA.CLASS
165        list.set(0, list.get(0).toUpperCase());
166        try {
167            Control.getControl(list);
168            fail("Should throw IllegalArgumentException");
169        } catch (IllegalArgumentException e) {
170            // expected
171        }
172        list = new ArrayList<String>(FORMAT_CLASS);
173        list.add("");
174        try {
175            Control.getControl(list);
176            fail("Should throw IllegalArgumentException");
177        } catch (IllegalArgumentException e) {
178            // expected
179        }
180    }
181
182    /**
183     * {@link java.util.ResourceBundle.Control#getNoFallbackControl(java.util.List)}.
184     */
185    @SuppressWarnings("nls")
186    public void test_getNoFallbackControl_LList() {
187        assertNotSame(control, Control.getNoFallbackControl(FORMAT_DEFAULT));
188        assertNotSame(controlC, Control.getNoFallbackControl(FORMAT_CLASS));
189        assertNotSame(controlP, Control.getNoFallbackControl(FORMAT_PROPERTIES));
190        controlP = Control.getNoFallbackControl(FORMAT_PROPERTIES);
191        controlC = Control.getNoFallbackControl(FORMAT_CLASS);
192        control = Control.getNoFallbackControl(FORMAT_DEFAULT);
193        // singleton
194        assertSame(control, Control.getNoFallbackControl(FORMAT_DEFAULT));
195        assertSame(controlC, Control.getNoFallbackControl(FORMAT_CLASS));
196        assertSame(controlP, Control.getNoFallbackControl(FORMAT_PROPERTIES));
197
198        // class
199        assertTrue(control.getClass() != Control.class);
200        assertTrue(controlC.getClass() != Control.class);
201        assertTrue(controlP.getClass() != Control.class);
202
203        // format
204        assertEquals(FORMAT_CLASS, controlC.getFormats(""));
205        assertEquals(FORMAT_DEFAULT, control.getFormats(""));
206        assertEquals(FORMAT_PROPERTIES, controlP.getFormats(""));
207
208        // no fall back locale
209        Locale defaultLocale = Locale.getDefault();
210        Locale.setDefault(new Locale("TestLanguage", "TestCountry", "Var"));
211        assertNull(control.getFallbackLocale("message", Locale.US));
212        try {
213            control.getFallbackLocale("message", null);
214            fail("Should throw NullPointerException");
215        } catch (NullPointerException e) {
216            // expected
217        }
218        try {
219            control.getFallbackLocale(null, Locale.US);
220            fail("Should throw NullPointerException");
221        } catch (NullPointerException e) {
222            // expected
223        }
224        Locale.setDefault(defaultLocale);
225
226        // formats: need not same, just need equal
227        List<String> list = new ArrayList<String>(FORMAT_CLASS);
228        assertSame(controlC, Control.getNoFallbackControl(list));
229        // can add
230        list.add(FORMAT_PROPERTIES.get(0));
231        assertSame(control, Control.getNoFallbackControl(list));
232
233        // exceptions
234        try {
235            Control.getNoFallbackControl(null);
236            fail("Should throw NullPointerException");
237        } catch (NullPointerException e) {
238            // expected
239        }
240        list = new ArrayList<String>();
241        try {
242            Control.getNoFallbackControl(list);
243            fail("Should throw IllegalArgumentException");
244        } catch (IllegalArgumentException e) {
245            // expected
246        }
247        list = new ArrayList<String>(FORMAT_CLASS);
248        // java.class -> JAVA.CLASS
249        list.set(0, list.get(0).toUpperCase());
250        try {
251            Control.getNoFallbackControl(list);
252            fail("Should throw IllegalArgumentException");
253        } catch (IllegalArgumentException e) {
254            // expected
255        }
256        list = new ArrayList<String>(FORMAT_CLASS);
257        list.add("");
258        try {
259            Control.getNoFallbackControl(list);
260            fail("Should throw IllegalArgumentException");
261        } catch (IllegalArgumentException e) {
262            // expected
263        }
264    }
265
266    /**
267     * {@link java.util.ResourceBundle.Control#getFormats(java.lang.String)}.
268     */
269    @SuppressWarnings("nls")
270    public void test_getFormats_LString() {
271        assertEquals(FORMAT_DEFAULT, control.getFormats(""));
272        assertEquals(FORMAT_PROPERTIES, controlP.getFormats(""));
273        assertEquals(FORMAT_CLASS, controlC.getFormats(""));
274        try {
275            controlC.getFormats(null);
276            fail("Should throw NullPointerException");
277        } catch (NullPointerException e) {
278            // expected
279        }
280    }
281
282    /**
283     * {@link java.util.ResourceBundle.Control#getCandidateLocales(java.lang.String, java.util.Locale)}.
284     */
285    @SuppressWarnings("nls")
286    public void test_getCandidateLocales_LStringLLocale() {
287        // the ResourceBundle for this baseName and Locale does not exists
288        List<Locale> result = control.getCandidateLocales("baseName",
289                new Locale("one", "two", "three"));
290        assertEquals(4, result.size());
291        Locale locale = result.get(0);
292        assertEquals("one", locale.getLanguage());
293        assertEquals("TWO", locale.getCountry());
294        assertEquals("three", locale.getVariant());
295        assertEquals(new Locale("one", "TWO"), result.get(1));
296        assertEquals(new Locale("one"), result.get(2));
297        assertSame(Locale.ROOT, result.get(3));
298        // ArrayList is not immutable
299        assertTrue(ArrayList.class == result.getClass());
300
301        result = control.getCandidateLocales("baseName", new Locale("one",
302                "two", ""));
303        assertEquals(new Locale("one", "TWO"), result.get(0));
304        assertEquals(new Locale("one"), result.get(1));
305        assertSame(Locale.ROOT, result.get(2));
306
307        result = control.getCandidateLocales("baseName", new Locale("one", "",
308                "three"));
309        assertEquals(new Locale("one", "", "three"), result.get(0));
310        assertEquals(new Locale("one"), result.get(1));
311        assertSame(Locale.ROOT, result.get(2));
312
313        result = control.getCandidateLocales("baseName", new Locale("", "two",
314                "three"));
315        assertEquals(new Locale("", "TWO", "three"), result.get(0));
316        assertEquals(new Locale("", "TWO"), result.get(1));
317        assertSame(Locale.ROOT, result.get(2));
318
319        result = control.getCandidateLocales("baseName", new Locale("", "",
320                "three"));
321        assertEquals(new Locale("", "", "three"), result.get(0));
322        assertSame(Locale.ROOT, result.get(1));
323
324        result = control.getCandidateLocales("baseName", new Locale("", "two",
325                ""));
326        assertEquals(new Locale("", "TWO"), result.get(0));
327        assertSame(Locale.ROOT, result.get(1));
328
329        result = control.getCandidateLocales("baseName", Locale.ROOT);
330        assertSame(Locale.ROOT, result.get(0));
331
332        try {
333            control.getCandidateLocales(null, Locale.US);
334            fail("Should throw NullPointerException");
335        } catch (NullPointerException e) {
336            // expected
337        }
338
339        try {
340            control.getCandidateLocales("baseName", null);
341            fail("Should throw NullPointerException");
342        } catch (NullPointerException e) {
343            // expected
344        }
345    }
346
347    /**
348     * {@link java.util.ResourceBundle.Control#getFallbackLocale(java.lang.String, java.util.Locale)}.
349     */
350    @SuppressWarnings("nls")
351    public void test_getFallbackLocale_LStringLLocale() {
352        Locale defaultLocale = Locale.getDefault();
353        Locale testLocale = new Locale("TestLanguage", "TestCountry", "Var");
354        Locale.setDefault(testLocale);
355        assertSame(testLocale, control.getFallbackLocale("baseName",
356                Locale.ROOT));
357        assertSame(testLocale, control.getFallbackLocale("baseName", Locale.US));
358        assertSame(null, control.getFallbackLocale("baseName", testLocale));
359        try {
360            control.getFallbackLocale(null, Locale.US);
361            fail("Should throw NullPointerException");
362        } catch (NullPointerException e) {
363            // expected
364        }
365
366        try {
367            control.getFallbackLocale("baseName", null);
368            fail("Should throw NullPointerException");
369        } catch (NullPointerException e) {
370            // expected
371        }
372        // restore
373        Locale.setDefault(defaultLocale);
374    }
375
376    @SuppressWarnings("nls")
377    static File copyFile(final URL src) throws IOException {
378        String tail = src.getFile().split("hyts_resource")[1];
379        String tmpdir = System.getProperty("java.io.tmpdir");
380        if (null == tmpdir) {
381            return null;
382        }
383        String copyName = tmpdir + File.separator + "hyts_resource_copy" + tail;
384        File copy = new File(copyName);
385        if (copy.exists()) {
386            copy.delete();
387        }
388        copy.createNewFile();
389        copy.deleteOnExit();
390
391        Reader in = new InputStreamReader(src.openStream());
392        Writer out = new FileWriter(copy);
393        int c;
394        while ((c = in.read()) != -1) {
395            out.write(c);
396        }
397        in.close();
398        out.close();
399        return copy;
400    }
401
402    static class SubRBStaticPrivate extends ListResourceBundle {
403        private SubRBStaticPrivate() {
404            super();
405        }
406
407        @Override
408        protected Object[][] getContents() {
409            return null;
410        }
411    }
412
413    /*
414     * change the value in the .properties file
415     */
416    @SuppressWarnings("nls")
417    static void changeProperties(File file) throws FileNotFoundException {
418        String newValue = "property=changedValue";
419        PrintWriter writer = new PrintWriter(file);
420        writer.write(newValue);
421        writer.flush();
422        writer.close();
423        Scanner scanner = new Scanner(file);
424        assertEquals(newValue, scanner.nextLine());
425        scanner.close();
426    }
427
428    /**
429     * {@link java.util.ResourceBundle.Control#getTimeToLive(java.lang.String, java.util.Locale)}.
430     */
431    @SuppressWarnings("nls")
432    public void test_getTimeToLive_LStringLLocale() {
433        assertEquals(TTL_NO_EXPIRATION_CONTROL, control.getTimeToLive(
434                "baseName", Locale.US));
435        try {
436            control.getTimeToLive(null, Locale.US);
437            fail("Should throw NullPointerException");
438        } catch (NullPointerException e) {
439            // expected
440        }
441        try {
442            control.getTimeToLive("baseName", null);
443            fail("Should throw NullPointerException");
444        } catch (NullPointerException e) {
445            // expected
446        }
447    }
448
449    /**
450     * @throws Exception
451     * {@link java.util.ResourceBundle.Control#needsReload(java.lang.String, java.util.Locale, java.lang.String, java.lang.ClassLoader, java.util.ResourceBundle, long)}.
452     */
453    @SuppressWarnings("nls")
454    public void test_needsReload_LStringLLocaleLStringLClassLoaderResourceBundleJ()
455            throws Exception {
456        String className = "tests.support.Support_TestResource";
457        String propertiesName = Support_Resources.RESOURCE_PACKAGE_NAME
458                + ".hyts_resource";
459        String propertiesNameCopy = "hyts_resource_copy";
460        String CLASS = "java.class";
461        String PROPERTIES = "java.properties";
462        Locale frFR = new Locale("fr", "FR");
463        ClassLoader systemLoader = ClassLoader.getSystemClassLoader();
464        ClassLoader URLLoader = systemLoader;
465        ResourceBundle bundle = null;
466        long time = 0L;
467        final URL srcFile = URLLoader.getResource(control.toResourceName(
468                control.toBundleName(propertiesName, frFR), "properties"));
469        assertNotNull(srcFile);
470        final File copyFile = copyFile(srcFile);
471
472        // 1. format = "java.properties"
473        if (null != URLLoader.getResourceAsStream(copyFile.toURL().toString())) {
474            Thread.sleep(1000);
475            bundle = control.newBundle(propertiesNameCopy, frFR, PROPERTIES,
476                    URLLoader, false);
477            time = System.currentTimeMillis();
478            assertTrue(bundle.getClass() == PropertyResourceBundle.class);
479            assertEquals("fr_FR_resource", bundle.getString("property"));
480            assertFalse(control.needsReload(propertiesNameCopy, frFR,
481                    PROPERTIES, URLLoader, bundle, time));
482            // change the file
483            Thread.sleep(2000);
484            changeProperties(copyFile);
485            assertTrue(control.needsReload(propertiesNameCopy, frFR,
486                    PROPERTIES, URLLoader, bundle, time));
487            // detect again
488            assertTrue(control.needsReload(propertiesNameCopy, frFR,
489                    PROPERTIES, URLLoader, bundle, time));
490            // long long ago
491            assertTrue(control.needsReload(propertiesNameCopy, frFR,
492                    PROPERTIES, URLLoader, bundle, 2006L));
493            // other loader
494            assertFalse(control.needsReload(propertiesNameCopy, frFR,
495                    PROPERTIES, systemLoader, bundle, time));
496            // other bundle
497            ResourceBundle otherBundle = control.newBundle(propertiesName,
498                    Locale.ROOT, PROPERTIES, systemLoader, false);
499            assertEquals("parent", otherBundle.getString("property"));
500            assertTrue(control.needsReload(propertiesNameCopy, frFR,
501                    PROPERTIES, URLLoader, otherBundle, time));
502            otherBundle = control.newBundle(propertiesName, Locale.ROOT,
503                    PROPERTIES, URLLoader, false);
504            assertEquals("resource", otherBundle.getString("property"));
505            assertTrue(control.needsReload(propertiesNameCopy, frFR,
506                    PROPERTIES, URLLoader, otherBundle, time));
507            // other time
508            assertFalse(control.needsReload(propertiesNameCopy, frFR,
509                    PROPERTIES, URLLoader, bundle, System.currentTimeMillis()));
510        } else {
511            System.err
512                    .println("Can not find the test file, some code of this test 'test_needsReload_LStringLLocaleLStringLClassLoaderResourceBundleJ' did not run.");
513
514        }
515
516        // 2. format = "java.class"
517        bundle = control.newBundle(className, frFR, CLASS, systemLoader, false);
518        time = System.currentTimeMillis();
519        assertEquals("frFRValue3", bundle.getString("parent3"));
520        assertFalse(control.needsReload(className, frFR, CLASS, systemLoader,
521                bundle, time));
522        // exceptions
523        control.needsReload(propertiesName, frFR, PROPERTIES, URLLoader,
524                bundle, time);
525        try {
526            control
527                    .needsReload(null, frFR, PROPERTIES, URLLoader, bundle,
528                            time);
529            fail("Should throw NullPointerException");
530        } catch (NullPointerException e) {
531            // expected
532        }
533        try {
534            control.needsReload(propertiesName, null, PROPERTIES, URLLoader,
535                    bundle, time);
536            fail("Should throw NullPointerException");
537        } catch (NullPointerException e) {
538            // expected
539        }
540        try {
541            control.needsReload(propertiesName, frFR, null, URLLoader, bundle,
542                    time);
543            fail("Should throw NullPointerException");
544        } catch (NullPointerException e) {
545            // expected
546        }
547        try {
548            control.needsReload(propertiesName, frFR, PROPERTIES, null, bundle,
549                    time);
550            fail("Should throw NullPointerException");
551        } catch (NullPointerException e) {
552            // expected
553        }
554        try {
555            control.needsReload(propertiesName, frFR, PROPERTIES, URLLoader,
556                    null, time);
557            fail("Should throw NullPointerException");
558        } catch (NullPointerException e) {
559            // expected
560        }
561    }
562
563    /**
564     * {@link java.util.ResourceBundle.Control#toBundleName(java.lang.String, java.util.Locale)}.
565     */
566    @SuppressWarnings("nls")
567    public void test_toBundleName_LStringLLocale() {
568        assertEquals("baseName_one_TWO_three", control.toBundleName("baseName",
569                new Locale("one", "two", "three")));
570        assertEquals("baseName_one_TWO", control.toBundleName("baseName",
571                new Locale("one", "two")));
572        assertEquals("baseName_one__three", control.toBundleName("baseName",
573                new Locale("one", "", "three")));
574        assertEquals("baseName__TWO_three", control.toBundleName("baseName",
575                new Locale("", "two", "three")));
576        assertEquals("baseName_one", control.toBundleName("baseName",
577                new Locale("one", "", "")));
578        assertEquals("baseName___three", control.toBundleName("baseName",
579                new Locale("", "", "three")));
580        assertEquals("baseName__TWO", control.toBundleName("baseName",
581                new Locale("", "two", "")));
582        assertEquals("baseName", control.toBundleName("baseName", new Locale(
583                "", "", "")));
584        assertEquals("baseName", control.toBundleName("baseName", Locale.ROOT));
585        assertEquals("_one_TWO_three", control.toBundleName("", new Locale(
586                "one", "two", "three")));
587        assertEquals("", control.toBundleName("", Locale.ROOT));
588
589        assertEquals("does.not.exists_one_TWO_three", control.toBundleName(
590                "does.not.exists", new Locale("one", "two", "three")));
591        assertEquals("does/not/exists_one_TWO_three", control.toBundleName(
592                "does/not/exists", new Locale("one", "two", "three")));
593        assertEquals("does_not_exists__one_TWO_three", control.toBundleName(
594                "does_not_exists_", new Locale("one", "two", "three")));
595
596        assertEquals("...", control.toBundleName("...", Locale.ROOT));
597        assertEquals("s/./\\//g", control
598                .toBundleName("s/./\\//g", Locale.ROOT));
599        assertEquals("123_one", control.toBundleName("123", new Locale("one")));
600
601        try {
602            control.toBundleName(null, Locale.US);
603            fail("Should throw NullPointerException");
604        } catch (NullPointerException e) {
605            // expected
606        }
607
608        try {
609            control.toBundleName("baseName", null);
610            fail("Should throw NullPointerException");
611        } catch (NullPointerException e) {
612            // expected
613        }
614    }
615
616    /**
617     * {@link java.util.ResourceBundle.Control#toResourceName(java.lang.String, java.lang.String)}.
618     */
619    @SuppressWarnings("nls")
620    public void test_toResourceNameLStringLString() {
621        assertEquals("does/not/exists_language_country.someSuffix", control
622                .toResourceName("does.not.exists_language_country",
623                        "someSuffix"));
624        assertEquals("does/not/exists_language_country.someSuffix", control
625                .toResourceName("does/not/exists_language_country",
626                        "someSuffix"));
627        assertEquals("does///not//exists_language/country.someSuffix", control
628                .toResourceName("does...not..exists_language.country",
629                        "someSuffix"));
630        assertEquals("does\\not\\exists_language_country.someSuffix", control
631                .toResourceName("does\\not\\exists_language_country",
632                        "someSuffix"));
633        assertEquals("does/not/exists_language_country/.someSuffix", control
634                .toResourceName("does.not.exists_language_country.",
635                        "someSuffix"));
636        assertEquals("does/not/exists_language_country../someSuffix", control
637                .toResourceName("does.not.exists_language_country",
638                        "./someSuffix"));
639
640        assertEquals("///.//", control.toResourceName("...", "//"));
641        assertEquals("///...", control.toResourceName("///", ".."));
642        assertEquals("123...", control.toResourceName("123", ".."));
643        assertEquals("base.", control.toResourceName("base", ""));
644        assertEquals(".suffix", control.toResourceName("", "suffix"));
645        assertEquals(".", control.toResourceName("", ""));
646
647        try {
648            control.toResourceName(null, "suffix");
649            fail("Should throw NullPointerException");
650        } catch (NullPointerException e) {
651            // expected
652        }
653
654        try {
655            control.toResourceName("bundleName", null);
656            fail("Should throw NullPointerException");
657        } catch (NullPointerException e) {
658            // expected
659        }
660
661    }
662
663    /**
664     * @throws java.lang.Exception
665     */
666    @Override
667    protected void tearDown() throws Exception {
668        super.tearDown();
669    }
670
671    /**
672     * @throws java.lang.Exception
673     */
674    @Override
675    protected void setUp() throws Exception {
676        super.setUp();
677        controlP = Control.getControl(FORMAT_PROPERTIES);
678        controlC = Control.getControl(FORMAT_CLASS);
679        control = Control.getControl(FORMAT_DEFAULT);
680    }
681
682}
683