Author: pedro
Date: Wed Jun 15 18:27:48 2011
New Revision: 1136142

URL: http://svn.apache.org/viewvc?rev=1136142&view=rev
Log:
preventing one locale from get iterated twice
Issue: WICKET-3799

Added:
    
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/util/resource/locator/ResourceNameIteratorTest.java
Modified:
    
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/resource/locator/LocaleResourceNameIterator.java

Modified: 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/resource/locator/LocaleResourceNameIterator.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/resource/locator/LocaleResourceNameIterator.java?rev=1136142&r1=1136141&r2=1136142&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/resource/locator/LocaleResourceNameIterator.java
 (original)
+++ 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/util/resource/locator/LocaleResourceNameIterator.java
 Wed Jun 15 18:27:48 2011
@@ -98,37 +98,38 @@ public class LocaleResourceNameIterator 
                        return "";
                }
 
-               // 1. Apply Locale default toString() implementation. See 
Locale.
+               // Get language and country, either of which may be the empty 
string
+               final String language = locale.getLanguage();
+               final String country = locale.getCountry();
+               final String variant = locale.getVariant();
+
+               // 1. If variant are available
                if (state == 0)
                {
                        state++;
-                       return '_' + locale.toString();
+                       if (!Strings.isEmpty(variant))
+                       {
+                               return '_' + language + '_' + country + '_' + 
variant;
+                       }
                }
 
-               // Get language and country, either of which may be the empty 
string
-               final String language = locale.getLanguage();
-               final String country = locale.getCountry();
 
-               // 2. If country and language are available
+               // 2. If country available
                if (state == 1)
                {
                        state++;
 
-                       if (!Strings.isEmpty(language) && 
!Strings.isEmpty(country))
+                       if (!Strings.isEmpty(country))
                        {
-                               String newPath = '_' + language + '_' + country;
-                               if (locale.toString().equals(newPath) == false)
-                               {
-                                       return newPath;
-                               }
+                               return '_' + language + '_' + country;
                        }
                }
 
-               // 3. If language is available
+
+               // 4. If language is available
                if (state == 2)
                {
                        state++;
-
                        if (!Strings.isEmpty(language))
                        {
                                return '_' + language;

Added: 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/util/resource/locator/ResourceNameIteratorTest.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/test/java/org/apache/wicket/util/resource/locator/ResourceNameIteratorTest.java?rev=1136142&view=auto
==============================================================================
--- 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/util/resource/locator/ResourceNameIteratorTest.java
 (added)
+++ 
wicket/trunk/wicket-core/src/test/java/org/apache/wicket/util/resource/locator/ResourceNameIteratorTest.java
 Wed Jun 15 18:27:48 2011
@@ -0,0 +1,125 @@
+/*
+ * 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.wicket.util.resource.locator;
+
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Locale;
+
+import org.apache.wicket.WicketTestCase;
+
+
+/**
+ * @author Pedro Santos
+ */
+public class ResourceNameIteratorTest extends WicketTestCase
+{
+       /**
+        * Asserting no duplicated locale sufix get iterated
+        */
+       public void testLocaleResourceNameIterator()
+       {
+               Locale locale = new Locale("a", "b", "c");
+               LocaleResourceNameIterator iterator = new 
LocaleResourceNameIterator(locale, false);
+               HashSet<String> variations = new HashSet<String>();
+               while (iterator.hasNext())
+               {
+                       assertTrue(variations.add(iterator.next()));
+               }
+               assertEquals(4, variations.size());
+               assertTrue(variations.contains("_a_B_c"));
+               assertTrue(variations.contains("_a_B"));
+               assertTrue(variations.contains("_a"));
+               assertTrue(variations.contains(""));
+
+               locale = new Locale("a", "b");
+               iterator = new LocaleResourceNameIterator(locale, false);
+               variations = new HashSet<String>();
+               while (iterator.hasNext())
+               {
+                       assertTrue(variations.add(iterator.next()));
+               }
+               assertEquals(3, variations.size());
+               assertTrue(variations.contains("_a_B"));
+               assertTrue(variations.contains("_a"));
+               assertTrue(variations.contains(""));
+
+               locale = new Locale("a");
+               iterator = new LocaleResourceNameIterator(locale, false);
+               variations = new HashSet<String>();
+               while (iterator.hasNext())
+               {
+                       assertTrue(variations.add(iterator.next()));
+               }
+               assertEquals(2, variations.size());
+               assertTrue(variations.contains("_a"));
+               assertTrue(variations.contains(""));
+       }
+
+       /**
+        * 
+        */
+       public void testStyleAndVariationResourceNameIterator()
+       {
+               StyleAndVariationResourceNameIterator iterator = new 
StyleAndVariationResourceNameIterator(
+                       null, null);
+               assertTrue(iterator.hasNext());
+               iterator.next();
+               assertFalse(iterator.hasNext());
+
+               iterator = new StyleAndVariationResourceNameIterator("style", 
"variation");
+               assertTrue(iterator.hasNext());
+
+               iterator.next();
+               assertEquals("style", iterator.getStyle());
+               assertEquals("variation", iterator.getVariation());
+
+               iterator.next();
+               assertEquals("style", iterator.getStyle());
+               assertNull(iterator.getVariation());
+
+               iterator.next();
+               assertNull(iterator.getStyle());
+               assertEquals("variation", iterator.getVariation());
+
+               iterator.next();
+               assertNull(iterator.getStyle());
+               assertNull(iterator.getVariation());
+
+               assertFalse(iterator.hasNext());
+       }
+
+       /**
+        * 
+        */
+       public void testNoDuplicateVariations()
+       {
+               String path = "patch.extension";
+               String style = null;
+               String var = "var";
+               Locale locale = Locale.getDefault();
+               String ext = null;
+               boolean strict = false;
+               Iterator<String> iterator = new ResourceNameIterator(path, 
style, var, locale, ext, strict);
+               HashSet<String> variations = new HashSet<String>();
+               while (iterator.hasNext())
+               {
+                       assertTrue(variations.add(iterator.next()));
+               }
+               assertEquals(6, variations.size());
+       }
+}


Reply via email to