You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2006/06/28 19:19:32 UTC

svn commit: r417820 - in /jakarta/httpcomponents/httpclient/trunk/src: java/org/apache/http/cookie/impl/ test/org/apache/http/cookie/impl/

Author: olegk
Date: Wed Jun 28 10:19:31 2006
New Revision: 417820

URL: http://svn.apache.org/viewvc?rev=417820&view=rev
Log:
* Made the browser compatibility and the RFC2109 cookie specs configurable. Configuration options can be passed as constructor parameters. 
* More test coverage 

Modified:
    jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/cookie/impl/BasicExpiresHandler.java
    jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/cookie/impl/BrowserCompatSpec.java
    jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/cookie/impl/RFC2109Spec.java
    jakarta/httpcomponents/httpclient/trunk/src/test/org/apache/http/cookie/impl/TestBrowserCompatSpec.java
    jakarta/httpcomponents/httpclient/trunk/src/test/org/apache/http/cookie/impl/TestCookieRFC2109Spec.java

Modified: jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/cookie/impl/BasicExpiresHandler.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/cookie/impl/BasicExpiresHandler.java?rev=417820&r1=417819&r2=417820&view=diff
==============================================================================
--- jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/cookie/impl/BasicExpiresHandler.java (original)
+++ jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/cookie/impl/BasicExpiresHandler.java Wed Jun 28 10:19:31 2006
@@ -43,7 +43,7 @@
         if (datepatterns == null) {
             throw new IllegalArgumentException("Array of date patterns may not be null");
         }
-        this.datepatterns = (String[]) datepatterns.clone();
+        this.datepatterns = datepatterns;
     }
 
     public void parse(final Cookie cookie, final String value) 

Modified: jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/cookie/impl/BrowserCompatSpec.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/cookie/impl/BrowserCompatSpec.java?rev=417820&r1=417819&r2=417820&view=diff
==============================================================================
--- jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/cookie/impl/BrowserCompatSpec.java (original)
+++ jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/cookie/impl/BrowserCompatSpec.java Wed Jun 28 10:19:31 2006
@@ -49,8 +49,8 @@
  */
 public class BrowserCompatSpec extends CookieSpecBase {
     
-    /** Valid date patterns */
-    private String[] datepatterns = new String[] {
+    /** Valid date patterns used per default */
+    private static final String[] DATE_PATTERNS = new String[] {
             DateUtils.PATTERN_RFC1123,
             DateUtils.PATTERN_RFC1036,
             DateUtils.PATTERN_ASCTIME,
@@ -67,9 +67,16 @@
             "EEE, dd-MM-yyyy HH:mm:ss z",                
         };
 
+    private final String[] datepatterns; 
+    
     /** Default constructor */
-    public BrowserCompatSpec() {
+    public BrowserCompatSpec(final String[] datepatterns) {
         super();
+        if (datepatterns != null) {
+            this.datepatterns = (String [])datepatterns.clone();
+        } else {
+            this.datepatterns = DATE_PATTERNS;
+        }
         registerAttribHandler("path", new BasicPathHandler());
         registerAttribHandler("domain", new BasicDomainHandler());
         registerAttribHandler("max-age", new BasicMaxAgeHandler());
@@ -78,6 +85,11 @@
         registerAttribHandler("expires", new BasicExpiresHandler(this.datepatterns));
     }
 
+    /** Default constructor */
+    public BrowserCompatSpec() {
+        this(null);
+    }
+    
     public Cookie[] parse(final Header header, final CookieOrigin origin) 
             throws MalformedCookieException {
         if (header == null) {

Modified: jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/cookie/impl/RFC2109Spec.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/cookie/impl/RFC2109Spec.java?rev=417820&r1=417819&r2=417820&view=diff
==============================================================================
--- jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/cookie/impl/RFC2109Spec.java (original)
+++ jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/cookie/impl/RFC2109Spec.java Wed Jun 28 10:19:31 2006
@@ -61,28 +61,36 @@
 
     private final static CookiePathComparator PATH_COMPARATOR = new CookiePathComparator(); 
     
-    private boolean oneHeader = false;
+    private final static String[] DATE_PATTERNS = {
+        DateUtils.PATTERN_RFC1123,
+        DateUtils.PATTERN_RFC1036,
+        DateUtils.PATTERN_ASCTIME 
+    }; 
+    
+    private final String[] datepatterns; 
+    private final boolean oneHeader;
     
     /** Default constructor */
-    public RFC2109Spec(boolean oneHeader) {
+    public RFC2109Spec(final String[] datepatterns, boolean oneHeader) {
         super();
+        if (datepatterns != null) {
+            this.datepatterns = (String [])datepatterns.clone();
+        } else {
+            this.datepatterns = DATE_PATTERNS;
+        }
+        this.oneHeader = oneHeader;
         registerAttribHandler("version", new RFC2109VersionHandler());
         registerAttribHandler("path", new BasicPathHandler());
         registerAttribHandler("domain", new RFC2109DomainHandler());
         registerAttribHandler("max-age", new BasicMaxAgeHandler());
         registerAttribHandler("secure", new BasicSecureHandler());
         registerAttribHandler("comment", new BasicCommentHandler());
-        registerAttribHandler("expires", new BasicExpiresHandler(
-                new String[] {
-                        DateUtils.PATTERN_RFC1123,
-                        DateUtils.PATTERN_RFC1036,
-                        DateUtils.PATTERN_ASCTIME}));
-        this.oneHeader = oneHeader;
+        registerAttribHandler("expires", new BasicExpiresHandler(this.datepatterns));
     }
 
     /** Default constructor */
     public RFC2109Spec() {
-        this(false);
+        this(null, false);
     }
     
     public Cookie[] parse(final Header header, final CookieOrigin origin) 

Modified: jakarta/httpcomponents/httpclient/trunk/src/test/org/apache/http/cookie/impl/TestBrowserCompatSpec.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpclient/trunk/src/test/org/apache/http/cookie/impl/TestBrowserCompatSpec.java?rev=417820&r1=417819&r2=417820&view=diff
==============================================================================
--- jakarta/httpcomponents/httpclient/trunk/src/test/org/apache/http/cookie/impl/TestBrowserCompatSpec.java (original)
+++ jakarta/httpcomponents/httpclient/trunk/src/test/org/apache/http/cookie/impl/TestBrowserCompatSpec.java Wed Jun 28 10:19:31 2006
@@ -35,6 +35,7 @@
 import org.apache.http.cookie.CookieOrigin;
 import org.apache.http.cookie.CookieSpec;
 import org.apache.http.cookie.MalformedCookieException;
+import org.apache.http.util.DateUtils;
 
 import junit.framework.Test;
 import junit.framework.TestCase;
@@ -65,6 +66,12 @@
         return new TestSuite(TestBrowserCompatSpec.class);
     }
 
+    public void testConstructor() throws Exception {
+        new BrowserCompatSpec();
+        new BrowserCompatSpec(null);
+        new BrowserCompatSpec(new String[] { DateUtils.PATTERN_RFC1036 });
+    }
+    
     /**
      * Tests whether domain attribute check is case-insensitive.
      */

Modified: jakarta/httpcomponents/httpclient/trunk/src/test/org/apache/http/cookie/impl/TestCookieRFC2109Spec.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpclient/trunk/src/test/org/apache/http/cookie/impl/TestCookieRFC2109Spec.java?rev=417820&r1=417819&r2=417820&view=diff
==============================================================================
--- jakarta/httpcomponents/httpclient/trunk/src/test/org/apache/http/cookie/impl/TestCookieRFC2109Spec.java (original)
+++ jakarta/httpcomponents/httpclient/trunk/src/test/org/apache/http/cookie/impl/TestCookieRFC2109Spec.java Wed Jun 28 10:19:31 2006
@@ -33,6 +33,7 @@
 import org.apache.http.cookie.CookieOrigin;
 import org.apache.http.cookie.CookieSpec;
 import org.apache.http.cookie.MalformedCookieException;
+import org.apache.http.util.DateUtils;
 
 import junit.framework.Test;
 import junit.framework.TestCase;
@@ -60,6 +61,12 @@
         return new TestSuite(TestCookieRFC2109Spec.class);
     }
 
+    public void testConstructor() throws Exception {
+        new RFC2109Spec();
+        new RFC2109Spec(null, false);
+        new RFC2109Spec(new String[] { DateUtils.PATTERN_RFC1036 }, false);
+    }
+    
     public void testParseVersion() throws Exception {
         Header header = new Header("Set-Cookie","cookie-name=cookie-value; version=1");
 
@@ -288,7 +295,7 @@
      * Tests RFC 2109 compiant cookie formatting.
      */
     public void testRFC2109CookieFormatting() throws Exception {
-        CookieSpec cookiespec = new RFC2109Spec(false);
+        CookieSpec cookiespec = new RFC2109Spec(null, false);
         Header header = new Header("Set-Cookie", 
             "name=\"value\"; version=\"1\"; path=\"/\"; domain=\".mydomain.com\"");
         CookieOrigin origin = new CookieOrigin("myhost.mydomain.com", 80, "/", false);
@@ -312,7 +319,7 @@
     }
 
     public void testRFC2109CookiesFormatting() throws Exception {
-        CookieSpec cookiespec = new RFC2109Spec(true);
+        CookieSpec cookiespec = new RFC2109Spec(null, true);
         Header header = new Header("Set-Cookie", 
             "name1=value1; path=/; domain=.mydomain.com, " + 
             "name2=\"value2\"; version=\"1\"; path=\"/\"; domain=\".mydomain.com\"");
@@ -390,6 +397,30 @@
         assertNotNull(headers);
         assertEquals(1, headers.length);
         assertEquals("$Version=0; name=", headers[0].getValue());
+    }
+
+    public void testCookieOrderingByPath() {
+        Cookie c1 = new Cookie("name1", "value1");
+        c1.setPath("/a/b/c");
+        c1.setPathAttributeSpecified(true);
+        Cookie c2 = new Cookie("name2", "value2");
+        c2.setPath("/a/b");
+        c2.setPathAttributeSpecified(true);
+        Cookie c3 = new Cookie("name3", "value3");
+        c3.setPath("/a");
+        c3.setPathAttributeSpecified(true);
+        Cookie c4 = new Cookie("name4", "value4");
+        c4.setPath("/");
+        c4.setPathAttributeSpecified(true);
+
+        CookieSpec cookiespec = new RFC2109Spec(null, true);
+        Header[] headers = cookiespec.formatCookies(new Cookie[] { c2, c4, c1, c3 });
+        assertNotNull(headers);
+        assertEquals(1, headers.length);
+        assertEquals("$Version=0; name1=value1; $Path=/a/b/c; " +
+                "name2=value2; $Path=/a/b; " +
+                "name3=value3; $Path=/a; " +
+                "name4=value4; $Path=/", headers[0].getValue());
     }
 
     public void testInvalidInput() throws Exception {