diff options
Diffstat (limited to 'harmony-tests/src/test/java/org/apache/harmony/tests/java/util/ControlTest.java')
-rw-r--r-- | harmony-tests/src/test/java/org/apache/harmony/tests/java/util/ControlTest.java | 682 |
1 files changed, 682 insertions, 0 deletions
diff --git a/harmony-tests/src/test/java/org/apache/harmony/tests/java/util/ControlTest.java b/harmony-tests/src/test/java/org/apache/harmony/tests/java/util/ControlTest.java new file mode 100644 index 0000000..d0b236d --- /dev/null +++ b/harmony-tests/src/test/java/org/apache/harmony/tests/java/util/ControlTest.java @@ -0,0 +1,682 @@ +/* + * 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 org.apache.harmony.tests.java.util; + +import junit.framework.TestCase; +import tests.support.resource.Support_Resources; +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.net.URL; +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.ResourceBundle.Control; +import java.util.Scanner; +import static java.util.ResourceBundle.Control.*; + +/** + * 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; + + /** + * {@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. + * + * {@link java.util.ResourceBundle.Control#FORMAT_CLASS} + * {@link java.util.ResourceBundle.Control#FORMAT_DEFAULT} + * {@link java.util.ResourceBundle.Control#FORMAT_PROPERTIES} + * {@link java.util.ResourceBundle.Control#TTL_DONT_CACHE} + * {@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); + } + + /** + * {@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 + } + } + + /** + * {@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 + } + } + + /** + * {@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 + } + } + + /** + * {@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 + } + } + + /** + * {@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); + } + + @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; + } + } + + /* + * 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(); + } + + /** + * {@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 + * {@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 systemLoader = ClassLoader.getSystemClassLoader(); + ClassLoader URLLoader = systemLoader; + ResourceBundle bundle = null; + long time = 0L; + final URL srcFile = URLLoader.getResource(control.toResourceName( + control.toBundleName(propertiesName, frFR), "properties")); + assertNotNull(srcFile); + final File copyFile = copyFile(srcFile); + + // 1. format = "java.properties" + if (null != URLLoader.getResourceAsStream(copyFile.toURL().toString())) { + 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 + } + } + + /** + * {@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 + } + } + + /** + * {@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); + } + +} |