Author: jdonnerstag
Date: Sat Dec 20 00:24:05 2008
New Revision: 728249

URL: http://svn.apache.org/viewvc?rev=728249&view=rev
Log:
wicket-1926: UrlValidator doesn't working when using a hostname in the url, 
e.g. http://localhost/test1

Modified:
    
wicket/trunk/wicket/src/main/java/org/apache/wicket/validation/validator/UrlValidator.java
    
wicket/trunk/wicket/src/test/java/org/apache/wicket/validation/validator/UrlValidatorTest.java

Modified: 
wicket/trunk/wicket/src/main/java/org/apache/wicket/validation/validator/UrlValidator.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/validation/validator/UrlValidator.java?rev=728249&r1=728248&r2=728249&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/main/java/org/apache/wicket/validation/validator/UrlValidator.java
 (original)
+++ 
wicket/trunk/wicket/src/main/java/org/apache/wicket/validation/validator/UrlValidator.java
 Sat Dec 20 00:24:05 2008
@@ -260,15 +260,13 @@
                }
 
                Matcher matchAsciiPat = 
Pattern.compile(LEGAL_ASCII_PATTERN).matcher(value);
-               Matcher matchUrlPat = 
Pattern.compile(URL_PATTERN).matcher(value);
-
-
                if (!matchAsciiPat.matches())
                {
                        return false;
                }
 
                // Check the whole url address structure
+               Matcher matchUrlPat = 
Pattern.compile(URL_PATTERN).matcher(value);
                if (!matchUrlPat.matches())
                {
                        return false;
@@ -363,7 +361,6 @@
                Matcher matchIPV4Pat = 
Pattern.compile(IP_V4_DOMAIN_PATTERN).matcher(hostIP);
                ipV4Address = matchIPV4Pat.matches();
 
-
                if (ipV4Address)
                {
                        // this is an IP address so check components
@@ -429,24 +426,22 @@
                                        segmentCount++;
                                }
                        }
-                       String topLevel = domainSegment[segmentCount - 1];
-                       if (topLevel.length() < 2 || topLevel.length() > 4)
-                       {
-                               return false;
-                       }
 
-                       // First letter of top level must be a alpha
-                       Matcher alphaMatcher = 
Pattern.compile(ALPHA_PATTERN).matcher(topLevel.substring(0, 1));
-
-                       if (!alphaMatcher.matches())
+                       if (segmentCount > 1)
                        {
-                               return false;
-                       }
+                               String topLevel = domainSegment[segmentCount - 
1];
+                               if (topLevel.length() < 2 || topLevel.length() 
> 4)
+                               {
+                                       return false;
+                               }
 
-                       // Make sure there's a host name preceding the 
authority.
-                       if (segmentCount < 2)
-                       {
-                               return false;
+                               // First letter of top level must be a alpha
+                               Matcher alphaMatcher = 
Pattern.compile(ALPHA_PATTERN).matcher(
+                                       topLevel.substring(0, 1));
+                               if (!alphaMatcher.matches())
+                               {
+                                       return false;
+                               }
                        }
                }
 

Modified: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/validation/validator/UrlValidatorTest.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/validation/validator/UrlValidatorTest.java?rev=728249&r1=728248&r2=728249&view=diff
==============================================================================
--- 
wicket/trunk/wicket/src/test/java/org/apache/wicket/validation/validator/UrlValidatorTest.java
 (original)
+++ 
wicket/trunk/wicket/src/test/java/org/apache/wicket/validation/validator/UrlValidatorTest.java
 Sat Dec 20 00:24:05 2008
@@ -25,12 +25,16 @@
  */
 public class UrlValidatorTest extends TestCase
 {
-
        private final boolean printStatus = false;
-       private final boolean printIndex = false;// print index that indicates 
current
-                                                                               
                // scheme,host,port,path,
 
+       private final boolean printIndex = false; // print index that indicates 
current
+       // scheme,host,port,path,
+
+       private final boolean printDebug = true;
 
+       /**
+        * 
+        */
        @Override
        protected void setUp()
        {
@@ -40,6 +44,9 @@
                }
        }
 
+       /**
+        * 
+        */
        @Override
        protected void tearDown()
        {
@@ -91,7 +98,6 @@
                {
                        System.out.println();
                }
-
        }
 
        /**
@@ -107,6 +113,17 @@
                UrlValidator urlVal = new UrlValidator(null, options);
                assertTrue(urlVal.isValid("http://www.google.com";));
                assertTrue(urlVal.isValid("http://www.google.com/";));
+
+               // some of the following combinations can not be properly 
modeled with the
+               // ResultPair
+               assertTrue(urlVal.isValid("http://localhost";));
+               assertTrue(urlVal.isValid("http://localhost/";));
+               assertTrue(urlVal.isValid("http://localhost:8080";));
+               assertTrue(urlVal.isValid("http://localhost/test1";));
+               assertTrue(urlVal.isValid("http://localhost/test1/";));
+               assertTrue(urlVal.isValid("http://localhost?action=view";));
+               
assertTrue(urlVal.isValid("http://localhost/test1?action=view";));
+
                int statusPerLine = 60;
                int printed = 0;
                if (printIndex)
@@ -115,6 +132,7 @@
                }
                do
                {
+                       String output = "";
                        StringBuffer testBuffer = new StringBuffer();
                        boolean expected = true;
                        for (int testPartsIndexIndex = 0; testPartsIndexIndex < 
testPartsIndex.length; ++testPartsIndexIndex)
@@ -123,9 +141,17 @@
                                ResultPair[] part = 
(ResultPair[])testObjects[testPartsIndexIndex];
                                testBuffer.append(part[index].item);
                                expected &= part[index].valid;
+                               if (printDebug)
+                               {
+                                       output += "" + part[index].valid + ":";
+                               }
                        }
                        String url = testBuffer.toString();
                        boolean result = urlVal.isValid(url);
+                       if (printDebug && (expected != result))
+                       {
+                               System.out.println(output + " - " + expected + 
" - " + url);
+                       }
                        assertEquals(url, expected, result);
                        if (printStatus)
                        {
@@ -179,6 +205,12 @@
                
assertTrue(UrlValidator.isValid("http://tech.yahoo.com/rc/desktops/102;_ylt=Ao8yevQHlZ4On0O3ZJGXLEQFLZA5";));
        }
 
+       /**
+        * 
+        * @param testPartsIndex
+        * @param testParts
+        * @return
+        */
        static boolean incrementTestPartsIndex(int[] testPartsIndex, Object[] 
testParts)
        {
                boolean carry = true; // add 1 to lowest order part.
@@ -208,6 +240,10 @@
                return (!maxIndex);
        }
 
+       /**
+        * 
+        * @return
+        */
        private String testPartsIndextoString()
        {
                StringBuffer carryMsg = new StringBuffer("{");
@@ -255,7 +291,11 @@
                        new ResultPair("1.2.3", false), new 
ResultPair(".1.2.3.4", false),
                        new ResultPair("go.a", false), new ResultPair("go.a1a", 
true),
                        new ResultPair("go.1aa", false), new ResultPair("aaa.", 
false),
-                       new ResultPair(".aaa", false), new ResultPair("aaa", 
false), new ResultPair("", false) };
+                       new ResultPair(".aaa", false), new ResultPair("aaa", 
true)
+       /*
+        * , new ResultPair("", false) In combination with "http:/" + "/test1" 
the expected result is
+        * true
+        */};
        ResultPair[] testUrlPort = { new ResultPair(":80", true), new 
ResultPair(":65535", true),
                        new ResultPair(":0", true), new ResultPair("", true), 
new ResultPair(":-1", false),
                        new ResultPair(":65636", true), new ResultPair(":65a", 
false) };


Reply via email to