harmony-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ton...@apache.org
Subject svn commit: r548951 - /harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/tests/api/java/util/ControlTest.java
Date Wed, 20 Jun 2007 06:33:24 GMT
Author: tonywu
Date: Tue Jun 19 23:33:23 2007
New Revision: 548951

URL: http://svn.apache.org/viewvc?view=rev&rev=548951
Log:
Add missing class ControlTest for HARMONY-4209

Added:
    harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/tests/api/java/util/ControlTest.java
  (with props)

Added: harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/tests/api/java/util/ControlTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/tests/api/java/util/ControlTest.java?view=auto&rev=548951
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/tests/api/java/util/ControlTest.java
(added)
+++ harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/tests/api/java/util/ControlTest.java
Tue Jun 19 23:33:23 2007
@@ -0,0 +1,900 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package tests.api.java.util;
+
+import static java.util.ResourceBundle.Control.FORMAT_CLASS;
+import static java.util.ResourceBundle.Control.FORMAT_DEFAULT;
+import static java.util.ResourceBundle.Control.FORMAT_PROPERTIES;
+import static java.util.ResourceBundle.Control.TTL_DONT_CACHE;
+import static java.util.ResourceBundle.Control.TTL_NO_EXPIRATION_CONTROL;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.PrintWriter;
+import java.io.Reader;
+import java.io.Writer;
+import java.lang.reflect.Member;
+import java.net.URL;
+import java.security.Permission;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.ListResourceBundle;
+import java.util.Locale;
+import java.util.PropertyResourceBundle;
+import java.util.ResourceBundle;
+import java.util.Scanner;
+import java.util.ResourceBundle.Control;
+
+import junit.framework.TestCase;
+import tests.support.resource.Support_Resources;
+
+/**
+ * Test cases for java.util.ResourceBundle.Control
+ * 
+ * @since 1.6
+ */
+public class ControlTest extends TestCase {
+
+    /**
+     * Control with format:FORMAT_PROPERTIES
+     */
+    private Control controlP;
+
+    /**
+     * Control with format:FORMAT_CLASS
+     */
+    private Control controlC;
+
+    /**
+     * Control with format:FORMAT_DEFAULT
+     */
+    private Control control;
+
+    /**
+     * @tests {@link java.util.ResourceBundle.Control#Control()}.
+     */
+    @SuppressWarnings("nls")
+    public void test_Constructor() {
+
+        class SubControl extends Control {
+            SubControl() {
+                super();
+            }
+        }
+        Control subControl = new SubControl();
+        assertEquals(FORMAT_DEFAULT, subControl.getFormats(""));
+        assertFalse(control.equals(subControl));
+    }
+
+    /**
+     * Test for all the public constants.
+     * 
+     * @tests {@link java.util.ResourceBundle.Control#FORMAT_CLASS}
+     * @tests {@link java.util.ResourceBundle.Control#FORMAT_DEFAULT}
+     * @tests {@link java.util.ResourceBundle.Control#FORMAT_PROPERTIES}
+     * @tests {@link java.util.ResourceBundle.Control#TTL_DONT_CACHE}
+     * @tests {@link java.util.ResourceBundle.Control#TTL_NO_EXPIRATION_CONTROL}
+     */
+    @SuppressWarnings("nls")
+    public void test_Constants() {
+        List<String> list = FORMAT_CLASS;
+        assertEquals(1, list.size());
+        assertEquals("java.class", list.get(0));
+        list = FORMAT_PROPERTIES;
+        assertEquals(1, list.size());
+        assertEquals("java.properties", list.get(0));
+        list = FORMAT_DEFAULT;
+        assertEquals(2, list.size());
+        assertEquals("java.class", list.get(0));
+        assertEquals("java.properties", list.get(1));
+        try {
+            FORMAT_CLASS.add("");
+            fail("Should throw UnsupportedOperationException");
+        } catch (UnsupportedOperationException e) {
+            // expected
+        }
+        try {
+            FORMAT_DEFAULT.add("");
+            fail("Should throw UnsupportedOperationException");
+        } catch (UnsupportedOperationException e) {
+            // expected
+        }
+        try {
+            FORMAT_PROPERTIES.add("");
+            fail("Should throw UnsupportedOperationException");
+        } catch (UnsupportedOperationException e) {
+            // expected
+        }
+        Class<?> unmodifiableListClass = Collections.unmodifiableList(
+                new ArrayList<String>()).getClass();
+        assertEquals(FORMAT_CLASS.getClass(), unmodifiableListClass);
+        assertEquals(FORMAT_DEFAULT.getClass(), unmodifiableListClass);
+        assertEquals(FORMAT_PROPERTIES.getClass(), unmodifiableListClass);
+        assertEquals(-1L, TTL_DONT_CACHE);
+        assertEquals(-2L, TTL_NO_EXPIRATION_CONTROL);
+    }
+
+    /**
+     * @tests {@link java.util.ResourceBundle.Control#getControl(java.util.List)}.
+     */
+    @SuppressWarnings("nls")
+    public void test_getControl_LList() {
+        // singleton
+        assertSame(control, Control.getControl(FORMAT_DEFAULT));
+        assertSame(controlC, Control.getControl(FORMAT_CLASS));
+        assertSame(controlP, Control.getControl(FORMAT_PROPERTIES));
+
+        // class
+        assertTrue(control.getClass() == Control.class);
+        assertTrue(controlC.getClass() != Control.class);
+        assertTrue(controlP.getClass() != Control.class);
+
+        // formats: need not same, just need equal
+        List<String> list = new ArrayList<String>(FORMAT_CLASS);
+        assertSame(controlC, Control.getControl(list));
+        // can add
+        list.add(FORMAT_PROPERTIES.get(0));
+        assertSame(control, Control.getControl(list));
+
+        // exceptions
+        try {
+            Control.getControl(null);
+            fail("Should throw NullPointerException");
+        } catch (NullPointerException e) {
+            // expected
+        }
+        list = new ArrayList<String>();
+        try {
+            Control.getControl(list);
+            fail("Should throw IllegalArgumentException");
+        } catch (IllegalArgumentException e) {
+            // expected
+        }
+        list = new ArrayList<String>(FORMAT_CLASS);
+        // java.class -> JAVA.CLASS
+        list.set(0, list.get(0).toUpperCase());
+        try {
+            Control.getControl(list);
+            fail("Should throw IllegalArgumentException");
+        } catch (IllegalArgumentException e) {
+            // expected
+        }
+        list = new ArrayList<String>(FORMAT_CLASS);
+        list.add("");
+        try {
+            Control.getControl(list);
+            fail("Should throw IllegalArgumentException");
+        } catch (IllegalArgumentException e) {
+            // expected
+        }
+    }
+
+    /**
+     * @tests {@link java.util.ResourceBundle.Control#getNoFallbackControl(java.util.List)}.
+     */
+    @SuppressWarnings("nls")
+    public void test_getNoFallbackControl_LList() {
+        assertNotSame(control, Control.getNoFallbackControl(FORMAT_DEFAULT));
+        assertNotSame(controlC, Control.getNoFallbackControl(FORMAT_CLASS));
+        assertNotSame(controlP, Control.getNoFallbackControl(FORMAT_PROPERTIES));
+        controlP = Control.getNoFallbackControl(FORMAT_PROPERTIES);
+        controlC = Control.getNoFallbackControl(FORMAT_CLASS);
+        control = Control.getNoFallbackControl(FORMAT_DEFAULT);
+        // singleton
+        assertSame(control, Control.getNoFallbackControl(FORMAT_DEFAULT));
+        assertSame(controlC, Control.getNoFallbackControl(FORMAT_CLASS));
+        assertSame(controlP, Control.getNoFallbackControl(FORMAT_PROPERTIES));
+
+        // class
+        assertTrue(control.getClass() != Control.class);
+        assertTrue(controlC.getClass() != Control.class);
+        assertTrue(controlP.getClass() != Control.class);
+
+        // format
+        assertEquals(FORMAT_CLASS, controlC.getFormats(""));
+        assertEquals(FORMAT_DEFAULT, control.getFormats(""));
+        assertEquals(FORMAT_PROPERTIES, controlP.getFormats(""));
+
+        // no fall back locale
+        Locale defaultLocale = Locale.getDefault();
+        Locale.setDefault(new Locale("TestLanguage", "TestCountry", "Var"));
+        assertNull(control.getFallbackLocale("message", Locale.US));
+        try {
+            control.getFallbackLocale("message", null);
+            fail("Should throw NullPointerException");
+        } catch (NullPointerException e) {
+            // expected
+        }
+        try {
+            control.getFallbackLocale(null, Locale.US);
+            fail("Should throw NullPointerException");
+        } catch (NullPointerException e) {
+            // expected
+        }
+        Locale.setDefault(defaultLocale);
+
+        // formats: need not same, just need equal
+        List<String> list = new ArrayList<String>(FORMAT_CLASS);
+        assertSame(controlC, Control.getNoFallbackControl(list));
+        // can add
+        list.add(FORMAT_PROPERTIES.get(0));
+        assertSame(control, Control.getNoFallbackControl(list));
+
+        // exceptions
+        try {
+            Control.getNoFallbackControl(null);
+            fail("Should throw NullPointerException");
+        } catch (NullPointerException e) {
+            // expected
+        }
+        list = new ArrayList<String>();
+        try {
+            Control.getNoFallbackControl(list);
+            fail("Should throw IllegalArgumentException");
+        } catch (IllegalArgumentException e) {
+            // expected
+        }
+        list = new ArrayList<String>(FORMAT_CLASS);
+        // java.class -> JAVA.CLASS
+        list.set(0, list.get(0).toUpperCase());
+        try {
+            Control.getNoFallbackControl(list);
+            fail("Should throw IllegalArgumentException");
+        } catch (IllegalArgumentException e) {
+            // expected
+        }
+        list = new ArrayList<String>(FORMAT_CLASS);
+        list.add("");
+        try {
+            Control.getNoFallbackControl(list);
+            fail("Should throw IllegalArgumentException");
+        } catch (IllegalArgumentException e) {
+            // expected
+        }
+    }
+
+    /**
+     * @tests {@link java.util.ResourceBundle.Control#getFormats(java.lang.String)}.
+     */
+    @SuppressWarnings("nls")
+    public void test_getFormats_LString() {
+        assertEquals(FORMAT_DEFAULT, control.getFormats(""));
+        assertEquals(FORMAT_PROPERTIES, controlP.getFormats(""));
+        assertEquals(FORMAT_CLASS, controlC.getFormats(""));
+        try {
+            controlC.getFormats(null);
+            fail("Should throw NullPointerException");
+        } catch (NullPointerException e) {
+            // expected
+        }
+    }
+
+    /**
+     * @tests {@link java.util.ResourceBundle.Control#getCandidateLocales(java.lang.String,
java.util.Locale)}.
+     */
+    @SuppressWarnings("nls")
+    public void test_getCandidateLocales_LStringLLocale() {
+        // the ResourceBundle for this baseName and Locale does not exists
+        List<Locale> result = control.getCandidateLocales("baseName",
+                new Locale("one", "two", "three"));
+        assertEquals(4, result.size());
+        Locale locale = result.get(0);
+        assertEquals("one", locale.getLanguage());
+        assertEquals("TWO", locale.getCountry());
+        assertEquals("three", locale.getVariant());
+        assertEquals(new Locale("one", "TWO"), result.get(1));
+        assertEquals(new Locale("one"), result.get(2));
+        assertSame(Locale.ROOT, result.get(3));
+        // ArrayList is not immutable
+        assertTrue(ArrayList.class == result.getClass());
+
+        result = control.getCandidateLocales("baseName", new Locale("one",
+                "two", ""));
+        assertEquals(new Locale("one", "TWO"), result.get(0));
+        assertEquals(new Locale("one"), result.get(1));
+        assertSame(Locale.ROOT, result.get(2));
+
+        result = control.getCandidateLocales("baseName", new Locale("one", "",
+                "three"));
+        assertEquals(new Locale("one", "", "three"), result.get(0));
+        assertEquals(new Locale("one"), result.get(1));
+        assertSame(Locale.ROOT, result.get(2));
+
+        result = control.getCandidateLocales("baseName", new Locale("", "two",
+                "three"));
+        assertEquals(new Locale("", "TWO", "three"), result.get(0));
+        assertEquals(new Locale("", "TWO"), result.get(1));
+        assertSame(Locale.ROOT, result.get(2));
+
+        result = control.getCandidateLocales("baseName", new Locale("", "",
+                "three"));
+        assertEquals(new Locale("", "", "three"), result.get(0));
+        assertSame(Locale.ROOT, result.get(1));
+
+        result = control.getCandidateLocales("baseName", new Locale("", "two",
+                ""));
+        assertEquals(new Locale("", "TWO"), result.get(0));
+        assertSame(Locale.ROOT, result.get(1));
+
+        result = control.getCandidateLocales("baseName", Locale.ROOT);
+        assertSame(Locale.ROOT, result.get(0));
+
+        try {
+            control.getCandidateLocales(null, Locale.US);
+            fail("Should throw NullPointerException");
+        } catch (NullPointerException e) {
+            // expected
+        }
+
+        try {
+            control.getCandidateLocales("baseName", null);
+            fail("Should throw NullPointerException");
+        } catch (NullPointerException e) {
+            // expected
+        }
+    }
+
+    /**
+     * @tests {@link java.util.ResourceBundle.Control#getFallbackLocale(java.lang.String,
java.util.Locale)}.
+     */
+    @SuppressWarnings("nls")
+    public void test_getFallbackLocale_LStringLLocale() {
+        Locale defaultLocale = Locale.getDefault();
+        Locale testLocale = new Locale("TestLanguage", "TestCountry", "Var");
+        Locale.setDefault(testLocale);
+        assertSame(testLocale, control.getFallbackLocale("baseName",
+                Locale.ROOT));
+        assertSame(testLocale, control.getFallbackLocale("baseName", Locale.US));
+        assertSame(null, control.getFallbackLocale("baseName", testLocale));
+        try {
+            control.getFallbackLocale(null, Locale.US);
+            fail("Should throw NullPointerException");
+        } catch (NullPointerException e) {
+            // expected
+        }
+
+        try {
+            control.getFallbackLocale("baseName", null);
+            fail("Should throw NullPointerException");
+        } catch (NullPointerException e) {
+            // expected
+        }
+        // restore
+        Locale.setDefault(defaultLocale);
+    }
+
+    /**
+     * @throws Exception
+     * @tests {@link java.util.ResourceBundle.Control#newBundle(java.lang.String, java.util.Locale,
java.lang.String, java.lang.ClassLoader, boolean)}.
+     */
+    @SuppressWarnings("nls")
+    public void test_newBundle_LStringLLocaleLStringLClassLoaderZ()
+            throws Exception {
+        Locale defLocale = Locale.getDefault();
+        Locale.setDefault(new Locale("en", "US"));
+        SecurityManager sm = System.getSecurityManager();
+        try {
+            newBundleTester();
+            System.setSecurityManager(new CanSetSM());
+            newBundleTester();
+        } finally {
+            System.setSecurityManager(sm);
+            Locale.setDefault(defLocale);
+        }
+    }
+
+    @SuppressWarnings("nls")
+    private void newBundleTester() throws IllegalAccessException,
+            InstantiationException, IOException, FileNotFoundException {
+        String className = "tests.support.Support_TestResource";
+        String propertiesName = Support_Resources.RESOURCE_PACKAGE_NAME
+                + ".hyts_resource";
+        String propertiesNameCopy = "hyts_resource_copy";
+        String CLASS = "java.class";
+        String PROPERTIES = "java.properties";
+        Locale frFR = new Locale("fr", "FR");
+        // the locale does not exist, but its parent does
+        Locale enUSVAR = new Locale("en", "US", "VAR");
+        ClassLoader URLLoader = ResourceBundleTest.getURLClassLoader();
+        ClassLoader systemLoader = ClassLoader.getSystemClassLoader();
+        ResourceBundle bundle = null;
+        final URL srcFile = URLLoader.getResource(control
+                .toResourceName(control.toBundleName(propertiesName,
+                        Locale.ROOT), "properties"));
+        final File copyFile = copyFile(srcFile);
+
+        // 1. with format of "java.class"
+        bundle = control.newBundle(className, frFR, CLASS, systemLoader, false);
+        assertEquals("frFRChildValue1", bundle.getString("child1"));
+
+        bundle = control.newBundle(className, frFR, CLASS, systemLoader, true);
+        assertEquals("frFRChildValue1", bundle.getString("child1"));
+
+        bundle = control.newBundle(className, Locale.ROOT, CLASS, systemLoader,
+                false);
+        assertEquals("parentValue1", bundle.getString("parent1"));
+
+        assertNull(control.newBundle(className, frFR, CLASS, URLLoader, false));
+        assertNull(control.newBundle(className, enUSVAR, CLASS, systemLoader,
+                false));
+        assertNull(control.newBundle("wrongName", frFR, CLASS, systemLoader,
+                false));
+        assertNull(control.newBundle(className, Locale.ROOT, PROPERTIES,
+                systemLoader, false));
+
+        // 2. with format of "java.properties"
+        // if copy file exists, run the "changing" test
+        if (null != URLLoader
+                .getResourceAsStream("hyts_resource_copy.properties")) {
+            ResourceBundle.clearCache(URLLoader);
+            bundle = control.newBundle(propertiesNameCopy, Locale.ROOT,
+                    PROPERTIES, URLLoader, false);
+            assertTrue(bundle.getClass() == PropertyResourceBundle.class);
+            assertEquals("resource", bundle.getString("property"));
+            // change the file
+            changeProperties(copyFile);
+            assertEquals("resource", bundle.getString("property"));
+            bundle = control.newBundle(propertiesNameCopy, Locale.ROOT,
+                    PROPERTIES, URLLoader, false);
+            assertEquals("changedValue", bundle.getString("property"));
+            bundle = control.newBundle(propertiesNameCopy, Locale.ROOT,
+                    PROPERTIES, URLLoader, true);
+            assertEquals("changedValue", bundle.getString("property"));
+        } else {
+            System.err
+                    .println("Can not find the test file, some code of this test 'newBundleTester'
did not run.");
+        }
+
+        // class loader
+        bundle = control.newBundle(propertiesName, Locale.ROOT, PROPERTIES,
+                URLLoader, true);
+        assertEquals("resource", bundle.getString("property"));
+        bundle = control.newBundle(propertiesName, Locale.ROOT, PROPERTIES,
+                systemLoader, true);
+        assertEquals("parent", bundle.getString("property"));
+
+        // locale
+        bundle = control.newBundle(propertiesName, frFR, PROPERTIES, URLLoader,
+                false);
+        assertEquals("fr_FR_resource", bundle.getString("property"));
+        assertNull(control.newBundle(propertiesName, frFR, PROPERTIES,
+                systemLoader, false));
+        assertNull(control.newBundle(propertiesName, enUSVAR, PROPERTIES,
+                systemLoader, true));
+        assertNull(control.newBundle(propertiesName, enUSVAR, PROPERTIES,
+                URLLoader, true));
+        assertNull(control.newBundle("wrongName", frFR, PROPERTIES, URLLoader,
+                false));
+
+        // exceptions
+        try {
+            control.newBundle(null, frFR, PROPERTIES, URLLoader, false);
+            fail("Should throw NullPointerException");
+        } catch (NullPointerException e) {
+            // expected
+        }
+        try {
+            control.newBundle(propertiesName, null, PROPERTIES, URLLoader,
+                    false);
+            fail("Should throw NullPointerException");
+        } catch (NullPointerException e) {
+            // expected
+        }
+        try {
+            control.newBundle(propertiesName, frFR, null, URLLoader, false);
+            fail("Should throw NullPointerException");
+        } catch (NullPointerException e) {
+            // expected
+        }
+        try {
+            control.newBundle(propertiesName, frFR, PROPERTIES, null, false);
+            fail("Should throw NullPointerException");
+        } catch (NullPointerException e) {
+            // expected
+        }
+        // null is returned by toBundleName method
+        try {
+            new Control() {
+                @Override
+                public String toBundleName(@SuppressWarnings("unused")
+                String baseName, @SuppressWarnings("unused")
+                Locale locale) {
+                    return null;
+                }
+            }.newBundle(propertiesName, frFR, PROPERTIES, URLLoader, false);
+            fail("Should throw NullPointerException");
+        } catch (NullPointerException e) {
+            // expected
+        }
+        try {
+            control.newBundle(propertiesName, frFR, "JAVA.CLASS", URLLoader,
+                    false);
+            fail("Should throw IllegalArgumentException");
+        } catch (IllegalArgumentException e) {
+            // expected
+        }
+        try {
+            control.newBundle(this.getClass().getName(), Locale.ROOT, CLASS,
+                    systemLoader, false);
+            fail("Should throw ClassCastException");
+        } catch (ClassCastException e) {
+            // expected
+        }
+        try {
+            control.newBundle(SubRBStaticPrivate.class.getName(), Locale.ROOT,
+                    CLASS, systemLoader, false);
+            fail("Should throw IllegalAccessException");
+        } catch (IllegalAccessException e) {
+            // expected
+        }
+        class SubRBNonStaticPrivate extends ListResourceBundle {
+            private SubRBNonStaticPrivate() {
+                super();
+            }
+
+            @Override
+            protected Object[][] getContents() {
+                return null;
+            }
+        }
+        class SubRBNonStaticPublic extends ListResourceBundle {
+            public SubRBNonStaticPublic() {
+                super();
+            }
+
+            @Override
+            protected Object[][] getContents() {
+                return null;
+            }
+        }
+        SecurityManager sm = System.getSecurityManager();
+        System.setSecurityManager(new NoCreationSM());
+        control.newBundle(propertiesName, frFR, PROPERTIES, URLLoader, false);
+    }
+
+    @SuppressWarnings("nls")
+    static File copyFile(final URL src) throws IOException {
+        String tail = src.getFile().split("hyts_resource")[1];
+        String tmpdir = System.getProperty("java.io.tmpdir");
+        if (null == tmpdir) {
+            return null;
+        }
+        String copyName = tmpdir + File.separator + "hyts_resource_copy" + tail;
+        File copy = new File(copyName);
+        if (copy.exists()) {
+            copy.delete();
+        }
+        copy.createNewFile();
+        copy.deleteOnExit();
+
+        Reader in = new InputStreamReader(src.openStream());
+        Writer out = new FileWriter(copy);
+        int c;
+        while ((c = in.read()) != -1) {
+            out.write(c);
+        }
+        in.close();
+        out.close();
+        return copy;
+    }
+
+    static class SubRBStaticPrivate extends ListResourceBundle {
+        private SubRBStaticPrivate() {
+            super();
+        }
+
+        @Override
+        protected Object[][] getContents() {
+            return null;
+        }
+    }
+
+    static class CanSetSM extends SecurityManager {
+        @SuppressWarnings("nls")
+        @Override
+        public void checkPermission(Permission permission) {
+            if (permission instanceof RuntimePermission) {
+                if ("setSecurityManager".equals(permission.getName())) {
+                    return;
+                }
+            }
+        }
+    }
+
+    static class NoCreationSM extends CanSetSM {
+        @Override
+        public void checkMemberAccess(Class<?> cls, int type) {
+            if (type == Member.PUBLIC) {
+                throw new SecurityException();
+            }
+        }
+    }
+
+    /*
+     * change the value in the .properties file
+     */
+    @SuppressWarnings("nls")
+    static void changeProperties(File file) throws FileNotFoundException {
+        String newValue = "property=changedValue";
+        PrintWriter writer = new PrintWriter(file);
+        writer.write(newValue);
+        writer.flush();
+        writer.close();
+        Scanner scanner = new Scanner(file);
+        assertEquals(newValue, scanner.nextLine());
+        scanner.close();
+    }
+
+    /**
+     * @tests {@link java.util.ResourceBundle.Control#getTimeToLive(java.lang.String, java.util.Locale)}.
+     */
+    @SuppressWarnings("nls")
+    public void test_getTimeToLive_LStringLLocale() {
+        assertEquals(TTL_NO_EXPIRATION_CONTROL, control.getTimeToLive(
+                "baseName", Locale.US));
+        try {
+            control.getTimeToLive(null, Locale.US);
+            fail("Should throw NullPointerException");
+        } catch (NullPointerException e) {
+            // expected
+        }
+        try {
+            control.getTimeToLive("baseName", null);
+            fail("Should throw NullPointerException");
+        } catch (NullPointerException e) {
+            // expected
+        }
+    }
+
+    /**
+     * @throws Exception
+     * @tests {@link java.util.ResourceBundle.Control#needsReload(java.lang.String, java.util.Locale,
java.lang.String, java.lang.ClassLoader, java.util.ResourceBundle, long)}.
+     */
+    @SuppressWarnings("nls")
+    public void test_needsReload_LStringLLocaleLStringLClassLoaderResourceBundleJ()
+            throws Exception {
+        String className = "tests.support.Support_TestResource";
+        String propertiesName = Support_Resources.RESOURCE_PACKAGE_NAME
+                + ".hyts_resource";
+        String propertiesNameCopy = "hyts_resource_copy";
+        String CLASS = "java.class";
+        String PROPERTIES = "java.properties";
+        Locale frFR = new Locale("fr", "FR");
+        ClassLoader URLLoader = ResourceBundleTest.getURLClassLoader();
+        ClassLoader systemLoader = ClassLoader.getSystemClassLoader();
+        ResourceBundle bundle = null;
+        long time = 0L;
+        final URL srcFile = URLLoader.getResource(control.toResourceName(
+                control.toBundleName(propertiesName, frFR), "properties"));
+        final File copyFile = copyFile(srcFile);
+
+        // 1. format = "java.properties"
+        if (null != URLLoader
+                .getResourceAsStream("hyts_resource_copy_fr_FR.properties")) {
+            Thread.sleep(1000);
+            bundle = control.newBundle(propertiesNameCopy, frFR, PROPERTIES,
+                    URLLoader, false);
+            time = System.currentTimeMillis();
+            assertTrue(bundle.getClass() == PropertyResourceBundle.class);
+            assertEquals("fr_FR_resource", bundle.getString("property"));
+            assertFalse(control.needsReload(propertiesNameCopy, frFR,
+                    PROPERTIES, URLLoader, bundle, time));
+            // change the file
+            Thread.sleep(2000);
+            changeProperties(copyFile);
+            assertTrue(control.needsReload(propertiesNameCopy, frFR,
+                    PROPERTIES, URLLoader, bundle, time));
+            // detect again
+            assertTrue(control.needsReload(propertiesNameCopy, frFR,
+                    PROPERTIES, URLLoader, bundle, time));
+            // long long ago
+            assertTrue(control.needsReload(propertiesNameCopy, frFR,
+                    PROPERTIES, URLLoader, bundle, 2006L));
+            // other loader
+            assertFalse(control.needsReload(propertiesNameCopy, frFR,
+                    PROPERTIES, systemLoader, bundle, time));
+            // other bundle
+            ResourceBundle otherBundle = control.newBundle(propertiesName,
+                    Locale.ROOT, PROPERTIES, systemLoader, false);
+            assertEquals("parent", otherBundle.getString("property"));
+            assertTrue(control.needsReload(propertiesNameCopy, frFR,
+                    PROPERTIES, URLLoader, otherBundle, time));
+            otherBundle = control.newBundle(propertiesName, Locale.ROOT,
+                    PROPERTIES, URLLoader, false);
+            assertEquals("resource", otherBundle.getString("property"));
+            assertTrue(control.needsReload(propertiesNameCopy, frFR,
+                    PROPERTIES, URLLoader, otherBundle, time));
+            // other time
+            assertFalse(control.needsReload(propertiesNameCopy, frFR,
+                    PROPERTIES, URLLoader, bundle, System.currentTimeMillis()));
+        } else {
+            System.err
+                    .println("Can not find the test file, some code of this test 'test_needsReload_LStringLLocaleLStringLClassLoaderResourceBundleJ'
did not run.");
+
+        }
+
+        // 2. format = "java.class"
+        bundle = control.newBundle(className, frFR, CLASS, systemLoader, false);
+        time = System.currentTimeMillis();
+        assertEquals("frFRValue3", bundle.getString("parent3"));
+        assertFalse(control.needsReload(className, frFR, CLASS, systemLoader,
+                bundle, time));
+        // exceptions
+        control.needsReload(propertiesName, frFR, PROPERTIES, URLLoader,
+                bundle, time);
+        try {
+            control
+                    .needsReload(null, frFR, PROPERTIES, URLLoader, bundle,
+                            time);
+            fail("Should throw NullPointerException");
+        } catch (NullPointerException e) {
+            // expected
+        }
+        try {
+            control.needsReload(propertiesName, null, PROPERTIES, URLLoader,
+                    bundle, time);
+            fail("Should throw NullPointerException");
+        } catch (NullPointerException e) {
+            // expected
+        }
+        try {
+            control.needsReload(propertiesName, frFR, null, URLLoader, bundle,
+                    time);
+            fail("Should throw NullPointerException");
+        } catch (NullPointerException e) {
+            // expected
+        }
+        try {
+            control.needsReload(propertiesName, frFR, PROPERTIES, null, bundle,
+                    time);
+            fail("Should throw NullPointerException");
+        } catch (NullPointerException e) {
+            // expected
+        }
+        try {
+            control.needsReload(propertiesName, frFR, PROPERTIES, URLLoader,
+                    null, time);
+            fail("Should throw NullPointerException");
+        } catch (NullPointerException e) {
+            // expected
+        }
+    }
+
+    /**
+     * @tests {@link java.util.ResourceBundle.Control#toBundleName(java.lang.String, java.util.Locale)}.
+     */
+    @SuppressWarnings("nls")
+    public void test_toBundleName_LStringLLocale() {
+        assertEquals("baseName_one_TWO_three", control.toBundleName("baseName",
+                new Locale("one", "two", "three")));
+        assertEquals("baseName_one_TWO", control.toBundleName("baseName",
+                new Locale("one", "two")));
+        assertEquals("baseName_one__three", control.toBundleName("baseName",
+                new Locale("one", "", "three")));
+        assertEquals("baseName__TWO_three", control.toBundleName("baseName",
+                new Locale("", "two", "three")));
+        assertEquals("baseName_one", control.toBundleName("baseName",
+                new Locale("one", "", "")));
+        assertEquals("baseName___three", control.toBundleName("baseName",
+                new Locale("", "", "three")));
+        assertEquals("baseName__TWO", control.toBundleName("baseName",
+                new Locale("", "two", "")));
+        assertEquals("baseName", control.toBundleName("baseName", new Locale(
+                "", "", "")));
+        assertEquals("baseName", control.toBundleName("baseName", Locale.ROOT));
+        assertEquals("_one_TWO_three", control.toBundleName("", new Locale(
+                "one", "two", "three")));
+        assertEquals("", control.toBundleName("", Locale.ROOT));
+
+        assertEquals("does.not.exists_one_TWO_three", control.toBundleName(
+                "does.not.exists", new Locale("one", "two", "three")));
+        assertEquals("does/not/exists_one_TWO_three", control.toBundleName(
+                "does/not/exists", new Locale("one", "two", "three")));
+        assertEquals("does_not_exists__one_TWO_three", control.toBundleName(
+                "does_not_exists_", new Locale("one", "two", "three")));
+
+        assertEquals("...", control.toBundleName("...", Locale.ROOT));
+        assertEquals("s/./\\//g", control
+                .toBundleName("s/./\\//g", Locale.ROOT));
+        assertEquals("123_one", control.toBundleName("123", new Locale("one")));
+
+        try {
+            control.toBundleName(null, Locale.US);
+            fail("Should throw NullPointerException");
+        } catch (NullPointerException e) {
+            // expected
+        }
+
+        try {
+            control.toBundleName("baseName", null);
+            fail("Should throw NullPointerException");
+        } catch (NullPointerException e) {
+            // expected
+        }
+    }
+
+    /**
+     * @tests {@link java.util.ResourceBundle.Control#toResourceName(java.lang.String, java.lang.String)}.
+     */
+    @SuppressWarnings("nls")
+    public void test_toResourceNameLStringLString() {
+        assertEquals("does/not/exists_language_country.someSuffix", control
+                .toResourceName("does.not.exists_language_country",
+                        "someSuffix"));
+        assertEquals("does/not/exists_language_country.someSuffix", control
+                .toResourceName("does/not/exists_language_country",
+                        "someSuffix"));
+        assertEquals("does///not//exists_language/country.someSuffix", control
+                .toResourceName("does...not..exists_language.country",
+                        "someSuffix"));
+        assertEquals("does\\not\\exists_language_country.someSuffix", control
+                .toResourceName("does\\not\\exists_language_country",
+                        "someSuffix"));
+        assertEquals("does/not/exists_language_country/.someSuffix", control
+                .toResourceName("does.not.exists_language_country.",
+                        "someSuffix"));
+        assertEquals("does/not/exists_language_country../someSuffix", control
+                .toResourceName("does.not.exists_language_country",
+                        "./someSuffix"));
+
+        assertEquals("///.//", control.toResourceName("...", "//"));
+        assertEquals("///...", control.toResourceName("///", ".."));
+        assertEquals("123...", control.toResourceName("123", ".."));
+        assertEquals("base.", control.toResourceName("base", ""));
+        assertEquals(".suffix", control.toResourceName("", "suffix"));
+        assertEquals(".", control.toResourceName("", ""));
+
+        try {
+            control.toResourceName(null, "suffix");
+            fail("Should throw NullPointerException");
+        } catch (NullPointerException e) {
+            // expected
+        }
+
+        try {
+            control.toResourceName("bundleName", null);
+            fail("Should throw NullPointerException");
+        } catch (NullPointerException e) {
+            // expected
+        }
+
+    }
+
+    /**
+     * @throws java.lang.Exception
+     */
+    @Override
+    protected void tearDown() throws Exception {
+        super.tearDown();
+    }
+
+    /**
+     * @throws java.lang.Exception
+     */
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        controlP = Control.getControl(FORMAT_PROPERTIES);
+        controlC = Control.getControl(FORMAT_CLASS);
+        control = Control.getControl(FORMAT_DEFAULT);
+    }
+
+}

Propchange: harmony/enhanced/classlib/branches/java6/modules/luni/src/test/api/common/tests/api/java/util/ControlTest.java
------------------------------------------------------------------------------
    svn:eol-style = native



Mime
View raw message