    1   /*
    2    * $Id: TestPropertyMessageResources.java 480549 2006-11-29 12:16:15Z niallp $
    3    *
    4    * Licensed to the Apache Software Foundation (ASF) under one
    5    * or more contributor license agreements.  See the NOTICE file
    6    * distributed with this work for additional information
    7    * regarding copyright ownership.  The ASF licenses this file
    8    * to you under the Apache License, Version 2.0 (the
    9    * "License"); you may not use this file except in compliance
    10   * with the License.  You may obtain a copy of the License at
    11   *
    12   *  http://www.apache.org/licenses/LICENSE-2.0
    13   *
    14   * Unless required by applicable law or agreed to in writing,
    15   * software distributed under the License is distributed on an
    16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    17   * KIND, either express or implied.  See the License for the
    18   * specific language governing permissions and limitations
    19   * under the License.
    20   */
    21  package org.apache.struts.util;
    22
    23  import junit.framework.Test;
    24  import junit.framework.TestSuite;
    25  import junit.framework.TestCase;
    26
    27  import java.util.Locale;
    28  import org.apache.struts.config.MessageResourcesConfig;
    29
    30  /**
    31   * Unit tests for PropertyMessageResources.
    32   *
    33   * @version $Revision: 480549 $
    34   */
    35  public class TestPropertyMessageResources extends TestCase {
    36
    37
    38      private static final String FOO_RESOURCES = "org.apache.struts.util.Foo";
    39
    40      private Locale defaultLocale;
    41
    42      // ----------------------------------------------------------------- Basics
    43      public TestPropertyMessageResources(String name) {
    44          super(name);
    45      }
    46
    47      public static void main(String[] args) {
    48          junit.awtui.TestRunner.main(new String[] {
    49                  TestPropertyMessageResources.class.getName()
    50              });
    51      }
    52
    53      public static Test suite() {
    54          return (new TestSuite(TestPropertyMessageResources.class));
    55      }
    56
    57      // ----------------------------------------------------- Setup and Teardown
    58      public void setUp() {
    59          // cache the default locale
    60          defaultLocale = Locale.getDefault();
    61      }
    62
    63      public void tearDown() {
    64          // restore the default locale
    65          Locale.setDefault(defaultLocale);
    66      }
    67
    68      // ------------------------------------------------------- Individual Tests
    69
    70      /**
    71       * Test Struts default PropertyMessageResources behaviour
    72       */
    73      public void testDefaultMode() {
    74
    75          Locale.setDefault(Locale.US);
    76
    77          // Create message resources - default Struts Behaviour
    78  //        MessageResources resources = createMessageResources(FOO_RESOURCES, true, "DEFAULT");
    79          MessageResources resources = createMessageResources(FOO_RESOURCES, true, null);
    80
    81          // Test language (& default) only keys
    82          assertEquals("key.lang FRANCE",  "LANG default", resources.getMessage(Locale.FRANCE,  "key.lang")); // no cached en_US
    83          assertEquals("key.lang English", "LANG en",      resources.getMessage(Locale.ENGLISH, "key.lang"));
    84          assertEquals("key.lang US",      "LANG en",      resources.getMessage(Locale.US,      "key.lang"));
    85          assertEquals("key.lang ITALY",   "LANG en",      resources.getMessage(Locale.ITALY,   "key.lang")); // cached en_US
    86          assertEquals("key.lang German",  "LANG de",      resources.getMessage(Locale.GERMAN,  "key.lang"));
    87          assertEquals("key.lang GERMANY", "LANG de",      resources.getMessage(Locale.GERMANY, "key.lang"));
    88
    89          // Test country (& default) only keys
    90          assertEquals("key.country FRANCE",  "COUNTRY en_US", resources.getMessage(Locale.FRANCE,  "key.country"));
    91          assertEquals("key.country English", "COUNTRY en_US", resources.getMessage(Locale.ENGLISH, "key.country"));
    92          assertEquals("key.country US",      "COUNTRY en_US", resources.getMessage(Locale.US,      "key.country"));
    93          assertEquals("key.country ITALY",   "COUNTRY en_US", resources.getMessage(Locale.ITALY,   "key.country"));
    94          assertEquals("key.country German",  "COUNTRY en_US", resources.getMessage(Locale.GERMAN,  "key.country"));
    95          assertEquals("key.country GERMANY", "COUNTRY de_DE", resources.getMessage(Locale.GERMANY, "key.country"));
    96
    97          // Test Unique Keys with wrong Locale
    98          assertEquals("Wrong Locale en only",    null,         resources.getMessage(Locale.GERMAN,  "key.en"));
    99          assertEquals("Wrong Locale en_US only", "en_US only", resources.getMessage(Locale.GERMANY, "key.en_US"));
    100
    101         // Run tests with common expected results
    102         commonTests(resources);
    103     }
    104
    105     /**
    106      * Test JSTL compatible PropertyMessageResources behaviour
    107      */
    108     public void testJstlMode() {
    109
    110         Locale.setDefault(Locale.US);
    111
    112         // Create message resources - default Struts Behaviour
    113         MessageResources resources = createMessageResources(FOO_RESOURCES, true, "JSTL");
    114
    115         // Test language (& default) only keys
    116         assertEquals("key.lang FRANCE",  "LANG default", resources.getMessage(Locale.FRANCE,  "key.lang"));
    117         assertEquals("key.lang English", "LANG en",      resources.getMessage(Locale.ENGLISH, "key.lang"));
    118         assertEquals("key.lang US",      "LANG en",      resources.getMessage(Locale.US,      "key.lang"));
    119         assertEquals("key.lang ITALY",   "LANG default", resources.getMessage(Locale.ITALY,   "key.lang"));
    120         assertEquals("key.lang German",  "LANG de",      resources.getMessage(Locale.GERMAN,  "key.lang"));
    121         assertEquals("key.lang GERMANY", "LANG de",      resources.getMessage(Locale.GERMANY, "key.lang"));
    122
    123         // Test country (& default) only keys
    124         assertEquals("key.country FRANCE",  "COUNTRY default", resources.getMessage(Locale.FRANCE,  "key.country"));
    125         assertEquals("key.country English", "COUNTRY default", resources.getMessage(Locale.ENGLISH, "key.country"));
    126         assertEquals("key.country US",      "COUNTRY en_US",   resources.getMessage(Locale.US,      "key.country"));
    127         assertEquals("key.country ITALY",   "COUNTRY default", resources.getMessage(Locale.ITALY,   "key.country"));
    128         assertEquals("key.country German",  "COUNTRY default", resources.getMessage(Locale.GERMAN,  "key.country"));
    129         assertEquals("key.country GERMANY", "COUNTRY de_DE",   resources.getMessage(Locale.GERMANY, "key.country"));
    130
    131         // Test Unique Keys with wrong Locale
    132         assertEquals("Wrong Locale en only",    null, resources.getMessage(Locale.GERMAN,  "key.en"));
    133         assertEquals("Wrong Locale en_US only", null, resources.getMessage(Locale.GERMANY, "key.en_US"));
    134
    135         // Run tests with common expected results
    136         commonTests(resources);
    137
    138     }
    139
    140     /**
    141      * Test "PropertyResourceBundle" compatible PropertyMessageResources behaviour
    142      */
    143     public void testResourceBundleMode() {
    144
    145         Locale.setDefault(Locale.US);
    146
    147         // Create message resources - default Struts Behaviour
    148         MessageResources resources = createMessageResources(FOO_RESOURCES, true, "RESOURCE");
    149
    150         // Test language (& default) only keys
    151         assertEquals("key.lang FRANCE",  "LANG en",      resources.getMessage(Locale.FRANCE,  "key.lang"));
    152         assertEquals("key.lang English", "LANG en",      resources.getMessage(Locale.ENGLISH, "key.lang"));
    153         assertEquals("key.lang US",      "LANG en",      resources.getMessage(Locale.US,      "key.lang"));
    154         assertEquals("key.lang ITALY",   "LANG en",      resources.getMessage(Locale.ITALY,   "key.lang"));
    155         assertEquals("key.lang German",  "LANG de",      resources.getMessage(Locale.GERMAN,  "key.lang"));
    156         assertEquals("key.lang GERMANY", "LANG de",      resources.getMessage(Locale.GERMANY, "key.lang"));
    157
    158         // Test country (& default) only keys
    159         assertEquals("key.country FRANCE",  "COUNTRY en_US", resources.getMessage(Locale.FRANCE,  "key.country"));
    160         assertEquals("key.country English", "COUNTRY en_US", resources.getMessage(Locale.ENGLISH, "key.country"));
    161         assertEquals("key.country US",      "COUNTRY en_US", resources.getMessage(Locale.US,      "key.country"));
    162         assertEquals("key.country ITALY",   "COUNTRY en_US", resources.getMessage(Locale.ITALY,   "key.country"));
    163         assertEquals("key.country German",  "COUNTRY en_US", resources.getMessage(Locale.GERMAN,  "key.country"));
    164         assertEquals("key.country GERMANY", "COUNTRY de_DE", resources.getMessage(Locale.GERMANY, "key.country"));
    165
    166         // Test Unique Keys with wrong Locale
    167         assertEquals("Wrong Locale en only",    "en only",    resources.getMessage(Locale.GERMAN,  "key.en"));
    168         assertEquals("Wrong Locale en_US only", "en_US only", resources.getMessage(Locale.GERMANY, "key.en_US"));
    169
    170         // Run tests with common expected results
    171         commonTests(resources);
    172     }
    173
    174     /**
    175      * Tests with common expected results
    176      */
    177     public void commonTests(MessageResources resources) {
    178
    179         // Test "null" Locale
    180         assertEquals("null Locale",  "ALL default", resources.getMessage((Locale)null,  "key.all"));
    181
    182         // Test Default only key with all Locales
    183         assertEquals("Check default en",    "default only", resources.getMessage(Locale.ENGLISH, "key.default"));
    184         assertEquals("Check default en_US", "default only", resources.getMessage(Locale.US,      "key.default"));
    185         assertEquals("Check default de",    "default only", resources.getMessage(Locale.GERMAN,  "key.default"));
    186         assertEquals("Check default de_DE", "default only", resources.getMessage(Locale.GERMANY, "key.default"));
    187
    188         // Test key in all locales
    189         assertEquals("Check ALL en",        "ALL en",       resources.getMessage(Locale.ENGLISH, "key.all"));
    190         assertEquals("Check ALL en_US",     "ALL en_US",    resources.getMessage(Locale.US,      "key.all"));
    191         assertEquals("Check ALL de",        "ALL de",       resources.getMessage(Locale.GERMAN,  "key.all"));
    192         assertEquals("Check ALL de_DE",     "ALL de_DE",    resources.getMessage(Locale.GERMANY, "key.all"));
    193
    194         // Test key unique to each locale
    195         assertEquals("Check en only",       "en only",      resources.getMessage(Locale.ENGLISH, "key.en"));
    196         assertEquals("Check en_US only",    "en_US only",   resources.getMessage(Locale.US,      "key.en_US"));
    197         assertEquals("Check de only",       "de only",      resources.getMessage(Locale.GERMAN,  "key.de"));
    198         assertEquals("Check de_DE only",    "de_DE only",   resources.getMessage(Locale.GERMANY, "key.de_DE"));
    199
    200         // Test unique keys with incorrect Locale
    201         assertEquals("Missing default",     null,           resources.getMessage(Locale.ENGLISH, "missing"));
    202         assertEquals("Missing de only",     null,           resources.getMessage(Locale.US,      "key.de"));
    203         assertEquals("Missing de_DE only",  null,           resources.getMessage(Locale.US,      "key.de_DE"));
    204     }
    205
    206     /**
    207      * Create the PropertyMessageResources.
    208      */
    209     private MessageResources createMessageResources(String file, boolean returnNull, String mode) {
    210         MessageResourcesConfig config = new MessageResourcesConfig();
    211         config.setNull(returnNull);
    212         if (mode != null) {
    213             config.setProperty("mode", mode);
    214         }
    215         PropertyMessageResourcesFactory factory = new PropertyMessageResourcesFactory();
    216         factory.setConfig(config);
    217         factory.setReturnNull(returnNull);
    218         return factory.createResources(file);
    219     }
    220 }