You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by te...@apache.org on 2007/06/12 00:07:07 UTC
svn commit: r546302 [2/2] - in
/harmony/enhanced/classlib/branches/java6/modules/luni/src:
main/java/java/net/ test/java/org/apache/harmony/luni/tests/java/net/
Added: harmony/enhanced/classlib/branches/java6/modules/luni/src/test/java/org/apache/harmony/luni/tests/java/net/HttpCookieTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/branches/java6/modules/luni/src/test/java/org/apache/harmony/luni/tests/java/net/HttpCookieTest.java?view=auto&rev=546302
==============================================================================
--- harmony/enhanced/classlib/branches/java6/modules/luni/src/test/java/org/apache/harmony/luni/tests/java/net/HttpCookieTest.java (added)
+++ harmony/enhanced/classlib/branches/java6/modules/luni/src/test/java/org/apache/harmony/luni/tests/java/net/HttpCookieTest.java Mon Jun 11 15:07:06 2007
@@ -0,0 +1,931 @@
+/*
+ * 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.luni.tests.java.net;
+
+import java.net.HttpCookie;
+import java.util.List;
+import java.util.Locale;
+
+import junit.framework.TestCase;
+
+public class HttpCookieTest extends TestCase {
+ private Locale locale;
+
+ /**
+ * @tests java.net.HttpCookie(String, String).
+ *
+ * @since 1.6
+ */
+ public void test_HttpCookie_LString_LString() {
+ assertNotNull(new HttpCookie("harmony_6", "test,sem"));
+ assertNotNull(new HttpCookie("harmony_6", null));
+ assertNotNull(new HttpCookie("harmony ", null));
+ assertEquals("harmony", new HttpCookie("harmony ", null).getName());
+
+ constructHttpCookie("", null);
+
+ String value = "value";
+ constructHttpCookie("", value);
+
+ constructHttpCookie("harmony,", value);
+ constructHttpCookie("harmony;", value);
+ constructHttpCookie("$harmony", value);
+ constructHttpCookie("n\tame", value);
+ constructHttpCookie("n\rame", value);
+ constructHttpCookie("n\r\name", value);
+ constructHttpCookie("Comment", value);
+ constructHttpCookie("CommentURL", value);
+ constructHttpCookie("Domain", value);
+ constructHttpCookie("Discard", value);
+ constructHttpCookie("Max-Age", value);
+ constructHttpCookie(" Path ", value);
+ constructHttpCookie("Port ", value);
+ constructHttpCookie("SeCure", value);
+ constructHttpCookie("VErsion", value);
+ constructHttpCookie("expires", value);
+ constructHttpCookie("na\u0085me", value);
+ constructHttpCookie("\u2028me", value);
+ constructHttpCookie("na\u2029me", value);
+
+ try {
+ new HttpCookie(null, value);
+ fail("Should throw NullPointerException");
+ } catch (NullPointerException e) {
+ // expected
+ }
+
+ try {
+ new HttpCookie("\u007f", value);
+ fail("Should throw IllegalArgumentException");
+ } catch (IllegalArgumentException e) {
+ // expected
+ }
+
+ HttpCookie cookie = new HttpCookie("harmony!", null);
+ assertEquals("harmony!", cookie.getName());
+
+ cookie = new HttpCookie("harmon$y", null);
+ assertEquals("harmon$y", cookie.getName());
+
+ }
+
+ private static void constructHttpCookie(String name, String value) {
+ try {
+ new HttpCookie(name, value);
+ fail("Should throw IllegalArgumentException");
+ } catch (IllegalArgumentException e) {
+ // expected
+ }
+ }
+
+ /**
+ * @tests java.net.HttpCookie#domainMatches(String, String).
+ *
+ * @since 1.6
+ */
+ public void test_DomainMatches() {
+
+ /*
+ * Rule 1: A host isn't in a domain (RFC 2965 sec. 3.3.2) if: The value
+ * for the Domain attribute contains no embedded dots, and the value is
+ * not .local.
+ */
+ boolean match = HttpCookie.domainMatches("hostname", "hostname");
+ assertFalse(match);
+
+ match = HttpCookie.domainMatches(".com", "test.com");
+ assertFalse(match);
+
+ match = HttpCookie.domainMatches(".com.", "test.com");
+ assertFalse(match);
+
+ // During comparison, host name is transformed to effective host name
+ // first.
+ match = HttpCookie.domainMatches(".local", "hostname");
+ assertTrue(match);
+
+ /*
+ * Rule 3: The request-host is a HDN (not IP address) and has the form
+ * HD, where D is the value of the Domain attribute, and H is a string
+ * that contains one or more dots.
+ */
+ match = HttpCookie.domainMatches(".c.d", "a.b.c.d");
+ assertFalse(match);
+
+ match = HttpCookie.domainMatches(".foo.com", "y.x.foo.com");
+ assertFalse(match);
+
+ match = HttpCookie.domainMatches(".foo.com", "x.foo.com");
+ assertTrue(match);
+
+ match = HttpCookie.domainMatches(".local", "hostname.local");
+ assertTrue(match);
+
+ match = HttpCookie.domainMatches(".ajax.com", "a.ajax.com");
+ assertTrue(match);
+
+ match = HttpCookie.domainMatches(".ajax.com", "a.AJAX.com");
+ assertTrue(match);
+
+ match = HttpCookie.domainMatches("...", "test...");
+ assertTrue(match);
+
+ match = HttpCookie.domainMatches(".ajax.com", "b.a.AJAX.com");
+ assertFalse(match);
+
+ match = HttpCookie.domainMatches(".a", "b.a");
+ assertFalse(match);
+
+ // when either parameter is null
+ match = HttpCookie.domainMatches(".ajax.com", null);
+ assertFalse(match);
+
+ match = HttpCookie.domainMatches(null, null);
+ assertFalse(match);
+
+ match = HttpCookie.domainMatches(null, "b.a.AJAX.com");
+ assertFalse(match);
+
+ // TODO RI bug? The effective hostname is hostname.local which is string
+ // equal with hostname.local. So they should be domain match.
+ match = HttpCookie.domainMatches("hostname.local", "hostname");
+ assertTrue(match);
+ }
+
+ /**
+ * @tests java.net.HttpCookie#getVersion(), setVersion(int).
+ *
+ * @since 1.6
+ */
+ public void test_Get_SetVersion() {
+ HttpCookie cookie = new HttpCookie("name", "value");
+ assertEquals(1, cookie.getVersion());
+ cookie.setVersion(0);
+ assertEquals(0, cookie.getVersion());
+ cookie.setVersion(1);
+ assertEquals(1, cookie.getVersion());
+
+ try {
+ cookie.setVersion(-1);
+ fail("should throw IllegalArgumentException");
+ } catch (IllegalArgumentException e) {
+ // expected
+ }
+
+ try {
+ cookie.setVersion(2);
+ fail("should throw IllegalArgumentException");
+ } catch (IllegalArgumentException e) {
+ // expected
+ }
+ }
+
+ /**
+ * @tests java.net.HttpCookie#getValue(), setValue(String)
+ *
+ * @since 1.6
+ */
+ public void test_Get_SetValue() {
+ HttpCookie cookie = new HttpCookie("name", "value");
+ assertEquals("value", cookie.getValue());
+ cookie.setValue("newValue");
+ assertEquals("newValue", cookie.getValue());
+
+ cookie.setValue(null);
+ assertNull(cookie.getValue());
+
+ cookie.setValue("na\u64DEme");
+ assertEquals("na\u64DEme", cookie.getValue());
+ cookie.setVersion(0);
+ cookie.setValue("{(new value, 11)}");
+ assertEquals("{(new value, 11)}", cookie.getValue());
+ }
+
+ /**
+ * @tests java.net.HttpCookie#getName()
+ *
+ * @since 1.6
+ */
+ public void test_GetName() {
+ HttpCookie cookie = new HttpCookie("testName", "value");
+ assertEquals("testName", cookie.getName());
+ }
+
+ /**
+ * @tests java.net.HttpCookie#getSecure(), setSecure(boolean)
+ *
+ * @since 1.6
+ */
+ public void test_Get_SetSecure() {
+ HttpCookie cookie = new HttpCookie("testName", "value");
+ assertFalse(cookie.getSecure());
+ cookie.setVersion(0);
+ assertFalse(cookie.getSecure());
+
+ cookie.setSecure(true);
+ assertTrue(cookie.getSecure());
+ cookie.setSecure(false);
+ cookie.setVersion(1);
+ assertFalse(cookie.getSecure());
+ }
+
+ /**
+ * @tests java.net.HttpCookie#getPath(), setPath(String)
+ *
+ * @since 1.6
+ */
+ public void test_Get_SetPath() {
+ HttpCookie cookie = new HttpCookie("name", "test new value");
+ assertNull(cookie.getPath());
+
+ cookie.setPath("{}() test,; 43!@");
+ assertEquals("{}() test,; 43!@", cookie.getPath());
+
+ cookie.setPath(" test");
+ assertEquals(" test", cookie.getPath());
+
+ cookie.setPath("\u63DF\u64DE");
+ cookie.setDomain("test");
+ assertEquals("\u63DF\u64DE", cookie.getPath());
+ }
+
+ /**
+ * @tests java.net.HttpCookie#getMaxAge(), setMaxAge(long)
+ *
+ * @since 1.6
+ */
+ public void test_Get_SetMaxAge() {
+ HttpCookie cookie = new HttpCookie("name", "test new value");
+ assertEquals(-1, cookie.getMaxAge());
+
+ cookie.setMaxAge(Long.MAX_VALUE);
+ assertEquals(Long.MAX_VALUE, cookie.getMaxAge());
+
+ cookie.setMaxAge(Long.MIN_VALUE);
+ cookie.setDiscard(false);
+ assertEquals(Long.MIN_VALUE, cookie.getMaxAge());
+ }
+
+ /**
+ * @tests java.net.HttpCookie#getDomain(), setDomain(String)
+ *
+ * @since 1.6
+ */
+ public void test_Get_SetDomain() {
+ HttpCookie cookie = new HttpCookie("name", "test new value");
+ assertNull(cookie.getDomain());
+
+ cookie.setDomain("a.b.d.c.com.");
+ assertEquals("a.b.d.c.com.", cookie.getDomain());
+
+ cookie.setDomain(" a.b.d.c.com. ");
+ assertEquals(" a.b.d.c.com. ", cookie.getDomain());
+
+ cookie.setPath("temp/subTemp");
+ cookie.setDomain("xy.foo.bar.de.edu");
+ assertEquals("xy.foo.bar.de.edu", cookie.getDomain());
+ }
+
+ /**
+ * @tests java.net.HttpCookie#getPortlist(), setPortlist(String)
+ *
+ * @since 1.6
+ */
+ public void test_Get_SetPortlist() {
+ HttpCookie cookie = new HttpCookie("cookieName", "cookieName value");
+ assertNull(cookie.getPortlist());
+
+ cookie.setPortlist("80,23,20");
+ assertEquals("80,23,20", cookie.getPortlist());
+ cookie.setPortlist("abcdefg1234567");
+ cookie.setValue("cookie value again");
+ assertEquals("abcdefg1234567", cookie.getPortlist());
+ }
+
+ /**
+ * @tests java.net.HttpCookie#getDiscard(), setDiscard(boolean)
+ *
+ * @since 1.6
+ */
+ public void test_Get_SetDiscard() {
+ HttpCookie cookie = new HttpCookie("cookie'sName",
+ "cookie's Test value");
+ assertFalse(cookie.getDiscard());
+
+ cookie.setDiscard(true);
+ assertTrue(cookie.getDiscard());
+ cookie.setDiscard(false);
+ cookie.setMaxAge(-1);
+ assertFalse(cookie.getDiscard());
+ }
+
+ /**
+ * @tests java.net.HttpCookie#getCommentURL(), setCommentURL(String)
+ *
+ * @since 1.6
+ */
+ public void test_Get_SetCommentURL() {
+ HttpCookie cookie = new HttpCookie("cookie'\"sName",
+ "cookie's Test value");
+ assertNull(cookie.getCommentURL());
+
+ cookie.setCommentURL("http://www.test.com");
+ assertEquals("http://www.test.com", cookie.getCommentURL());
+
+ cookie.setCommentURL("schema://harmony.test.org");
+ cookie.setComment("just a comment");
+ assertEquals("schema://harmony.test.org", cookie.getCommentURL());
+ }
+
+ /**
+ * @tests java.net.HttpCookie#getComment(), setComment(String)
+ *
+ * @since 1.6
+ */
+ public void test_Get_SetComment() {
+ HttpCookie cookie = new HttpCookie("cookie'\"sName?",
+ "cookie's Test??!@# value");
+ assertNull(cookie.getComment());
+
+ cookie.setComment("");
+ assertEquals("", cookie.getComment());
+
+ cookie.setComment("cookie''s @#$!&*()");
+ cookie.setVersion(0);
+ assertEquals("cookie''s @#$!&*()", cookie.getComment());
+ }
+
+ /**
+ * @tests java.net.HttpCookie#hasExpired()
+ *
+ * @since 1.6
+ */
+ public void test_HasExpired() {
+ HttpCookie cookie = new HttpCookie("cookie'\"sName123456",
+ "cookie's Test?()!@# value");
+ assertFalse(cookie.hasExpired());
+
+ cookie.setMaxAge(0);
+ assertTrue(cookie.hasExpired());
+
+ cookie.setMaxAge(Long.MAX_VALUE);
+ cookie.setVersion(0);
+ assertFalse(cookie.hasExpired());
+
+ cookie.setMaxAge(Long.MIN_VALUE);
+ cookie.setDiscard(false);
+ assertTrue(cookie.hasExpired());
+
+ cookie.setDiscard(true);
+ cookie.setMaxAge(-1);
+ assertFalse(cookie.hasExpired());
+ }
+
+ /**
+ * @tests java.net.HttpCookie#equals()
+ *
+ * @since 1.6
+ */
+ public void test_Equals() {
+ Object obj = new Object();
+ HttpCookie cookie = new HttpCookie("test", "testValue");
+ HttpCookie cookie2 = new HttpCookie("TesT", "TEstValue");
+
+ assertFalse(cookie.equals(obj));
+ assertFalse(cookie.equals(null));
+ assertTrue(cookie2.equals(cookie));
+ assertTrue(cookie.equals(cookie2));
+ assertTrue(cookie.equals(cookie));
+
+ cookie.setDomain(" test");
+ cookie2.setDomain("test");
+ assertFalse(cookie.equals(cookie2));
+ cookie.setDomain("TEST");
+ assertTrue(cookie.equals(cookie2));
+
+ cookie.setPath("temp\\e");
+ assertFalse(cookie.equals(cookie2));
+ cookie2.setPath("temp\\E");
+ assertFalse(cookie.equals(cookie2));
+
+ cookie.setDiscard(true);
+ cookie.setMaxAge(-1234);
+ cookie2.setPath("temp\\e");
+ assertTrue(cookie.equals(cookie2));
+ }
+
+ /**
+ * @tests java.net.HttpCookie#clone()
+ *
+ * @since 1.6
+ */
+ public void test_Clone() {
+ HttpCookie cookie = new HttpCookie("test", "testValue");
+ cookie.setMaxAge(33l);
+ cookie.setComment("test comment");
+ HttpCookie cloneCookie = (HttpCookie) cookie.clone();
+ assertNotSame(cloneCookie, cookie);
+ assertEquals("test", cloneCookie.getName());
+ assertEquals(33l, cloneCookie.getMaxAge());
+ assertEquals("test comment", cloneCookie.getComment());
+ }
+
+ /**
+ * @tests java.net.HttpCookie#toString()
+ *
+ * @since 1.6
+ */
+ public void test_ToString() {
+ HttpCookie cookie = new HttpCookie("test", "testValue");
+ cookie.setComment("ABCd");
+ cookie.setCommentURL("\u63DF");
+ cookie.setDomain(".B.com");
+ cookie.setDiscard(true);
+ cookie.setMaxAge(Integer.MAX_VALUE);
+ cookie.setPath("temp/22RuTh");
+ cookie.setPortlist("80.562Ab");
+ cookie.setSecure(true);
+ cookie.setVersion(1);
+
+ assertEquals(
+ "test=\"testValue\";$Path=\"temp/22RuTh\";$Domain=\".b.com\";$Port=\"80.562Ab\"",
+ cookie.toString());
+
+ cookie.setPath(null);
+ assertEquals(
+ "test=\"testValue\";$Domain=\".b.com\";$Port=\"80.562Ab\"",
+ cookie.toString());
+ cookie.setComment(null);
+ assertEquals(
+ "test=\"testValue\";$Domain=\".b.com\";$Port=\"80.562Ab\"",
+ cookie.toString());
+ cookie.setPortlist(null);
+ assertEquals("test=\"testValue\";$Domain=\".b.com\"", cookie.toString());
+ cookie.setDomain(null);
+ assertEquals("test=\"testValue\"", cookie.toString());
+
+ cookie.setVersion(0);
+ cookie.setPortlist("80,8000");
+ assertEquals("test=testValue", cookie.toString());
+ }
+
+ /**
+ * @tests java.net.HttpCookie#hashCode()
+ *
+ * @since 1.6
+ */
+ public void test_HashCode() {
+ HttpCookie cookie = new HttpCookie("nAmW_1", "value_1");
+ assertEquals(-1052814577, cookie.hashCode());
+
+ cookie.setDomain("a.b.c.de");
+ assertEquals(1222695220, cookie.hashCode());
+
+ cookie.setPath("3kmxiq;1");
+ assertEquals(-675006347, cookie.hashCode());
+ cookie.setPath("3KmxiQ;1");
+ assertEquals(989616181, cookie.hashCode());
+
+ cookie.setValue("Vw0,22_789");
+ assertEquals(989616181, cookie.hashCode());
+ cookie.setComment("comment");
+ assertEquals(989616181, cookie.hashCode());
+
+ cookie.setDomain("");
+ assertEquals(-1285893616, cookie.hashCode());
+ }
+
+ /**
+ * @tests java.net.HttpCookie#parse(String) for exception cases
+ *
+ * @since 1.6
+ */
+ public void test_Parse_exception() {
+ try {
+ HttpCookie.parse(null);
+ fail("Should throw NullPointerException");
+ } catch (NullPointerException e) {
+ // expected
+ }
+ /*
+ * Please note that Netscape draft specification does not fully conform
+ * to the HTTP header format. Netscape draft does not specify whether
+ * multiple cookies may be sent in one header. Hence, comma character
+ * may be present in unquoted cookie value or unquoted parameter value.
+ * Refer to <a
+ * href="http://jakarta.apache.org/commons/httpclient/apidocs/org/apache/commons/httpclient/cookie/NetscapeDraftSpec.html#parse(java.lang.String,%20int,%20java.lang.String,%20boolean,%20java.lang.String)">
+ * http://jakarta.apache.org/commons/httpclient/apidocs/org/apache/commons/httpclient/cookie/NetscapeDraftSpec.html#parse(java.lang.String,%20int,%20java.lang.String,%20boolean,%20java.lang.String)
+ * </a>
+ */
+ // violates the cookie specification's syntax
+ checkInvalidCookie("invalid cookie name");
+ checkInvalidCookie("Set-Cookie2:");
+ checkInvalidCookie("name");
+ checkInvalidCookie("$name=");
+ checkInvalidCookie("Set-Cookie2:$name=");
+ checkInvalidCookie("Set-Cookie:$");
+ checkInvalidCookie("Set-Cookie");
+ checkInvalidCookie("Set-Cookie2:test==wwlala;Discard;Patth=/temp");
+ checkInvalidCookie("Set-Cookie2:test==wwlala;Version=2");
+
+ // cookie name contains llegal characters
+ checkInvalidCookie("Set-Cookie:n,ame=");
+ checkInvalidCookie("Set-Cookie2:n\name=");
+ checkInvalidCookie("Set-Cookie2:n,ame=");
+ checkInvalidCookie("Set-Cookie2:n\tame=");
+ checkInvalidCookie("Set-Cookie2:n\rame=");
+ checkInvalidCookie("Set-Cookie2:n\r\name=");
+ checkInvalidCookie("Set-Cookie2:na\u0085me=");
+ checkInvalidCookie("Set-Cookie2:na\u2028me=");
+ checkInvalidCookie("Set-Cookie2:na\u2029me=");
+ checkInvalidCookie("Set-Cookie2:=");
+ checkInvalidCookie("Set-Cookie2:name=tes,t");
+
+ // 'CommentURL' is one of the tokens reserved, case-insensitive
+ checkInvalidCookie("Set-Cookie2:COmmentURL=\"lala\"");
+
+ // check value
+ checkInvalidCookie("Set-Cookie2:val,ue");
+ checkInvalidCookie("Set-Cookie2:name=test;comMent=sent,ence");
+ checkInvalidCookie("Set-Cookie2:name=test;comMentUrL=u,rl");
+ checkInvalidCookie("Set-Cookie2:name=test;Discard=fa,lse");
+ checkInvalidCookie("Set-Cookie2:name=test;Disc,ard");
+ checkInvalidCookie("Set-Cookie2:name=test;Domain=u,rl");
+ checkInvalidCookie("Set-Cookie2:name=test;Path=pa,th");
+ checkInvalidCookie("Set-Cookie2:name=test;Secure=se,cure");
+ checkInvalidCookie("Set-Cookie2:name=test;se,cure");
+ checkInvalidCookie("Set-Cookie2:name=test;Max-Age=se,cure");
+ checkInvalidCookie("Set-Cookie2:name=test;Max-Age=");
+ checkInvalidCookie("Set-Cookie2:name=test;Max-Age=max-age");
+ checkInvalidCookie("Set-Cookie2:name=test;Max-Age=1000.0");
+ checkInvalidCookie("Set-Cookie2:name=test;Version=trivail");
+ checkInvalidCookie("Set-Cookie2:name=test;vErsion=1000.0");
+ checkInvalidCookie("Set-Cookie2:name=test;vErsion=1000");
+ }
+
+ /**
+ * @tests java.net.HttpCookie#parse(String) for locales other than
+ * Locale.ENGLISH.
+ *
+ * @since 1.6
+ */
+ public void test_Parse_locale() {
+ Locale.setDefault(Locale.FRENCH);
+ List<HttpCookie> list = HttpCookie
+ .parse("Set-Cookie:name=test;expires=Thu, 30-Oct-2008 19:14:07 GMT;");
+ HttpCookie cookie = list.get(0);
+ assertEquals(0, cookie.getMaxAge());
+ assertTrue(cookie.hasExpired());
+
+ Locale.setDefault(Locale.GERMAN);
+ list = HttpCookie
+ .parse("Set-Cookie:name=test;expires=Sun, 30-Oct-2005 19:14:07 GMT;");
+ cookie = list.get(0);
+ assertEquals(0, cookie.getMaxAge());
+ assertTrue(cookie.hasExpired());
+
+ Locale.setDefault(Locale.KOREA);
+ list = HttpCookie
+ .parse("Set-Cookie:name=test;max-age=1234;expires=Sun, 30-Oct-2005 19:14:07 GMT;");
+ cookie = list.get(0);
+ assertEquals(0, cookie.getVersion());
+ assertEquals(1234, cookie.getMaxAge());
+ assertFalse(cookie.hasExpired());
+
+ Locale.setDefault(Locale.TAIWAN);
+ list = HttpCookie
+ .parse("Set-Cookie:name=test;expires=Sun, 30-Oct-2005 19:14:07 GMT;max-age=-12345;");
+ cookie = list.get(0);
+ assertEquals(0, cookie.getMaxAge());
+ assertTrue(cookie.hasExpired());
+
+ // Locale does not affect version 1 cookie.
+ Locale.setDefault(Locale.ITALIAN);
+ list = HttpCookie.parse("Set-Cookie2:name=test;max-age=1000");
+ cookie = list.get(0);
+ assertEquals(1000, cookie.getMaxAge());
+ assertFalse(cookie.hasExpired());
+ }
+
+ /**
+ * @tests java.net.HttpCookie#parse(String) for normal cases
+ *
+ * @since 1.6
+ */
+ public void test_Parse() {
+ List<HttpCookie> list = HttpCookie.parse("test=\"null\"");
+ HttpCookie cookie = list.get(0);
+ // when two '"' presents, the parser ignores it.
+ assertEquals("null", cookie.getValue());
+ assertNull(cookie.getComment());
+ assertNull(cookie.getCommentURL());
+ assertFalse(cookie.getDiscard());
+ assertNull(cookie.getDomain());
+ assertEquals(-1, cookie.getMaxAge());
+ assertNull(cookie.getPath());
+ assertNull(cookie.getPortlist());
+ assertFalse(cookie.getSecure());
+ // default version is 0
+ assertEquals(0, cookie.getVersion());
+
+ list = HttpCookie.parse("Set-cookie2:name=\"tes,t\"");
+ cookie = list.get(0);
+ // when two '"' presents, the parser ignores it.
+ assertEquals("tes,t", cookie.getValue());
+
+ // If cookie header = Set-Cookie2, version = 1
+ list = HttpCookie
+ .parse("Set-cookie2:test=null\";;Port=abde,82;Path=/temp;;;Discard;commentURl=http://harmonytest.org;Max-age=-10;");
+ cookie = list.get(0);
+ assertEquals("null\"", cookie.getValue());
+ assertEquals(1, cookie.getVersion());
+ assertEquals("/temp", cookie.getPath());
+ assertTrue(cookie.getDiscard());
+ assertEquals("http://harmonytest.org", cookie.getCommentURL());
+ assertEquals(-10l, cookie.getMaxAge());
+ assertTrue(cookie.hasExpired());
+ assertEquals("abde,82", cookie.getPortlist());
+ // Version 0 cookie
+ list = HttpCookie
+ .parse("Set-Cookie:name=tes,t;Comment=version1-cookie;Discard=false;commentURL=vers\nion1-cookie-url;Domain=x.y;");
+ cookie = list.get(0);
+ assertEquals(0, cookie.getVersion());
+ assertEquals("tes,t", cookie.getValue());
+ assertEquals("name", cookie.getName());
+ assertEquals("version1-cookie", cookie.getComment());
+ assertEquals("vers\nion1-cookie-url", cookie.getCommentURL());
+ assertEquals("x.y", cookie.getDomain());
+ assertTrue(cookie.getDiscard());
+
+ // Check value
+ checkValidValue("Set-Cookie:", "val,ue");
+ checkValidValue("Set-Cookie:", "val\nue");
+ checkValidValue("Set-Cookie:", "value=value");
+ checkValidValue("Set-Cookie2:", "val\nue");
+ checkValidValue("Set-Cookie2:", "val\u2029ue");
+ checkValidValue("Set-Cookie2:", "value=value");
+
+ // Check comment
+ // In RFC 2965 '=' is mandatory, but this is not the case in RI.
+ list = HttpCookie.parse("Set-Cookie:name=tes,t;Comment;");
+ cookie = list.get(0);
+ assertNull(cookie.getComment());
+
+ list = HttpCookie
+ .parse("Set-Cookie:name=tes,t;Comment=sentence;Comment=anotherSentence");
+ cookie = list.get(0);
+ assertEquals("sentence", cookie.getComment());
+
+ // Check CommentURL
+ list = HttpCookie
+ .parse("Set-Cookie:name=tes,t;Commenturl;commentuRL=(la,la)");
+ cookie = list.get(0);
+ assertEquals("(la,la)", cookie.getCommentURL());
+
+ // Check Domain
+ list = HttpCookie.parse("Set-Cookie:name=test;Domain=a_domain");
+ cookie = list.get(0);
+ assertEquals("a_domain", cookie.getDomain());
+
+ // Check Path
+ list = HttpCookie.parse("Set-Cookie:name=test;PaTh=pa$th");
+ cookie = list.get(0);
+ assertEquals("pa$th", cookie.getPath());
+
+ // Check Max-Age
+ list = HttpCookie.parse("Set-Cookie:name=test;Max-Age=1000");
+ cookie = list.get(0);
+ assertEquals(1000, cookie.getMaxAge());
+
+ list = HttpCookie.parse("Set-Cookie:name=test;Max-Age=-1000");
+ cookie = list.get(0);
+ assertEquals(-1000, cookie.getMaxAge());
+
+ // Check portlist
+ list = HttpCookie.parse("Set-Cookie:name=tes,t;port");
+ cookie = list.get(0);
+ assertEquals(null, cookie.getPortlist());
+
+ list = HttpCookie.parse("Set-Cookie:name=tes,t;port=");
+ cookie = list.get(0);
+ assertEquals("", cookie.getPortlist());
+
+ list = HttpCookie.parse("Set-Cookie:name=tes,t;port=123 345");
+ cookie = list.get(0);
+ assertEquals("123 345", cookie.getPortlist());
+
+ list = HttpCookie.parse("Set-Cookie:name=tes,t;port=123,345");
+ cookie = list.get(0);
+ assertEquals("123,345", cookie.getPortlist());
+
+ // Check Secure
+ list = HttpCookie.parse("Set-Cookie:name=test;secure");
+ cookie = list.get(0);
+ assertTrue(cookie.getSecure());
+
+ list = HttpCookie.parse("Set-Cookie:name=test;secure=fa");
+ cookie = list.get(0);
+ assertTrue(cookie.getSecure());
+ assertFalse(cookie.hasExpired());
+
+ list = HttpCookie.parse("Set-Cookie2:name=test;secure=false");
+ cookie = list.get(0);
+ assertTrue(cookie.getSecure());
+
+ // Check expire
+ list = HttpCookie.parse("Set-Cookie:name=test;expires=2006-10-23");
+ cookie = list.get(0);
+ assertEquals(0, cookie.getMaxAge());
+ assertTrue(cookie.hasExpired());
+
+ // Also recognize invalid date
+ list = HttpCookie
+ .parse("Set-Cookie:name=test;expires=Sun, 29-Feb-1999 19:14:07 GMT");
+ cookie = list.get(0);
+ assertTrue(cookie.getMaxAge() < 0);
+ assertTrue(cookie.hasExpired());
+
+ // Parse multiple cookies
+ list = HttpCookie
+ .parse("Set-Cookie2:name=test;,Set-Cookie2:name2=test2;comment=c234;");
+ cookie = list.get(0);
+ assertEquals("name", cookie.getName());
+ assertEquals(1, cookie.getVersion());
+ assertEquals("test", cookie.getValue());
+ cookie = list.get(1);
+ assertEquals(1, cookie.getVersion());
+ // From the second cookie, the "set-cookie2" header does not take effect
+ assertEquals("Set-Cookie2:name2", cookie.getName());
+ assertEquals("c234", cookie.getComment());
+
+ list = HttpCookie.parse("Set-Cookie2:name=test,name2=test2");
+ assertEquals(1, list.get(0).getVersion());
+ assertEquals(1, list.get(1).getVersion());
+
+ // Must begin with "set-cookie2" header
+ list = HttpCookie.parse("name=test,Set-Cookie2:name2=test2");
+ cookie = list.get(0);
+ assertEquals(1, list.size());
+
+ HttpCookie c = HttpCookie.parse(
+ "Set-cookie:NAME2=VALUE2;path=/t;domain=.b.c;version=1").get(0);
+ assertEquals(1, c.getVersion());
+
+ c = HttpCookie.parse(
+ "Set-cookie2:NAME2=VALUE2;path=/t;domain=.b.c;version=0")
+ .get(0);
+ assertEquals(1, c.getVersion());
+
+ list = HttpCookie.parse("Set-cookie:null=;Domain=null;Port=null");
+ cookie = list.get(0);
+
+ assertNotNull(cookie.getValue());
+ assertNotNull(cookie.getName());
+ assertNotNull(cookie.getDomain());
+ assertNotNull(cookie.getPortlist());
+
+ // Check CommentURL, RI's bug: 'a name' is not valid attribute name.
+ list = HttpCookie
+ .parse("Set-Cookie:a name=tes,t;Commenturl;commentuRL=(la,la);path=hello");
+ cookie = list.get(0);
+ assertEquals("(la,la)", cookie.getCommentURL());
+
+
+ list = HttpCookie
+ .parse("Set-Cookie:name=tes,t;Commenturl;commentuRL=(la,la);commentuRL=hello");
+ cookie = list.get(0);
+ assertEquals("(la,la)", cookie.getCommentURL());
+
+ list = HttpCookie
+ .parse("Set-Cookie:name=tes,t;Commenturl;commentuRL=(la,la); path =hello");
+ cookie = list.get(0);
+ assertEquals("(la,la)", cookie.getCommentURL());
+ assertEquals("hello", cookie.getPath());
+
+ list = HttpCookie
+ .parse("a Set-Cookie:name=tes,t;Commenturl;commentuRL=(la,la);path=hello");
+ cookie = list.get(0);
+ assertEquals("(la,la)", cookie.getCommentURL());
+
+
+ }
+
+ /**
+ * @tests java.net.HttpCookie#parse(String) for version conflict cases
+ *
+ * @since 1.6
+ */
+ public void test_Parse_versionConflict() {
+ // If attribute expires presents, cookie will be recognized as version
+ // 0. No matter header is Set-cookie or Set-cookie2
+ List<HttpCookie> list = HttpCookie
+ .parse("Set-Cookie2:name=;expires=;discard");
+ HttpCookie cookie = list.get(0);
+ assertEquals(0, cookie.getVersion());
+ assertTrue(cookie.getDiscard());
+
+ list = HttpCookie.parse("Set-Cookie: name=value;port=80");
+ cookie = list.get(0);
+ assertEquals(0, cookie.getVersion());
+ assertEquals("80", cookie.getPortlist());
+
+ // In Set-Cookie header, max-age does not take effect when expires
+ // exists.
+ list = HttpCookie
+ .parse("Set-Cookie:name=test;expires=Tue, 27-Jan-1998 19:14:07 GMT;Max-Age=1000");
+ cookie = list.get(0);
+ assertTrue(cookie.getMaxAge() < 0);
+ assertTrue(cookie.hasExpired());
+ assertFalse(cookie.getDiscard());
+ // Reverse sequence. max-age takes effect and decides the result of
+ // hasExpired() method.
+ list = HttpCookie
+ .parse("Set-Cookie:name=value;max-age=1000;expires=Tue, 17-Jan-1998 19:14:07 GMT;version=1");
+ cookie = list.get(0);
+ assertEquals(0, cookie.getVersion());
+ assertEquals(1000, cookie.getMaxAge());
+ assertFalse(cookie.hasExpired());
+
+ // expires decides the version. Not take Set-cookie header, version into
+ // consideration if expires exists.
+ list = HttpCookie
+ .parse("Set-Cookie2:name=value;max-age=1000;version=1;expires=Tue, 17-Jan-1998 19:07:14 GMT;");
+ cookie = list.get(0);
+ assertEquals(0, cookie.getVersion());
+ assertEquals(1000, cookie.getMaxAge());
+ assertFalse(cookie.hasExpired());
+
+ // expires does not cover other version 1 attributes.
+ list = HttpCookie
+ .parse("Set-Cookie2: name=value;expires=Sun, 27-Jan-2018 19:14:07 GMT;comment=mycomment;port=80,8080");
+ cookie = list.get(0);
+ assertEquals(0, cookie.getVersion());
+ assertEquals("80,8080", cookie.getPortlist());
+ assertEquals("mycomment", cookie.getComment());
+
+ // When expires does not exist, version takes effect.
+ list = HttpCookie.parse("Set-Cookie:name=test;Version=1");
+ cookie = list.get(0);
+ assertEquals(1, cookie.getVersion());
+ assertEquals(-1, cookie.getMaxAge());
+ list = HttpCookie.parse("Set-Cookie:name=test;vERsion=0;Version=1;versioN=0;vErsIon=1");
+ cookie = list.get(0);
+ assertEquals(1, cookie.getVersion());
+
+ // When expires does not exist, max-age takes effect.
+ list = HttpCookie.parse("Set-Cookie:name=test;Max-Age=11");
+ cookie = list.get(0);
+ assertEquals(1, cookie.getVersion());
+ assertEquals(11, cookie.getMaxAge());
+ // other version 1 attributes does not take effect
+ list = HttpCookie
+ .parse("Set-Cookie:name=test;comment=mycomment;commentURL=url;discard;domain=a.b.com;path=temp;port=79;secure");
+ cookie = list.get(0);
+ assertEquals(0, cookie.getVersion());
+ }
+
+ private void checkValidValue(String header, String value) {
+ List<HttpCookie> list = HttpCookie
+ .parse(header + "name=" + value + ";");
+ HttpCookie cookie = list.get(0);
+ assertEquals(value, cookie.getValue());
+ }
+
+ private void checkInvalidCookie(String header) {
+ try {
+ HttpCookie.parse(header);
+ fail("Should throw IllegalArgumentException");
+ } catch (IllegalArgumentException e) {
+ // expected
+ }
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ // version 0 cookie only takes effect on Locale.ENGLISH
+ locale = Locale.getDefault();
+ Locale.setDefault(Locale.ENGLISH);
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ Locale.setDefault(locale);
+ super.tearDown();
+ }
+
+}
Propchange: harmony/enhanced/classlib/branches/java6/modules/luni/src/test/java/org/apache/harmony/luni/tests/java/net/HttpCookieTest.java
------------------------------------------------------------------------------
svn:eol-style = native