diff --git a/CookieTest.java b/CookieTest.java index c96bd72..9104b60 100644 --- a/CookieTest.java +++ b/CookieTest.java @@ -10,61 +10,88 @@ import org.junit.Test; /** * HTTP cookie specification: RFC6265 - * + *

* At its most basic, a cookie is a name=value pair. The value may be subdivided * into other cookies, but that is not tested here. The cookie may also include * certain named attributes, delimited by semicolons. - * + *

* The Cookie.toString() method emits certain attributes if present: expires, * domain, path, secure. All but secure are name-value pairs. Other attributes * are not included in the toString() output. - * + *

* A JSON-Java encoded cookie escapes '+', '%', '=', ';' with %hh values. */ public class CookieTest { + /** + * Attempts to create a JSONObject from a null string. + * Expects a NullPointerException. + */ @Test(expected=NullPointerException.class) public void nullCookieException() { - /** - * Attempts to create a JSONObject from a null string - */ String cookieStr = null; Cookie.toJSONObject(cookieStr); } - @Test(expected=JSONException.class) + /** + * Attempts to create a JSONObject from a cookie string with + * no '=' char. + * Expects a JSONException. + */ + @Test public void malFormedNameValueException() { - /** - * Attempts to create a JSONObject from a malformed cookie string - */ String cookieStr = "thisCookieHasNoEqualsChar"; - Cookie.toJSONObject(cookieStr); + try { + Cookie.toJSONObject(cookieStr); + assertTrue("Expecting an exception", false); + } catch (JSONException e) { + assertTrue("Expecting an exception message", + e.getMessage().startsWith("Expected '=' and instead saw '") + && e.getMessage().endsWith("' at 27 [character 28 line 1]")); + } } - @Test(expected=JSONException.class) + /** + * Attempts to create a JSONObject from a cookie string + * with embedded ';' char. + * Expects a JSONException. + */ + @Test public void malFormedAttributeException() { - /** - * Attempts to create a JSONObject from a malformed cookie string - */ String cookieStr = "this=Cookie;myAttribute"; - Cookie.toJSONObject(cookieStr); + try { + Cookie.toJSONObject(cookieStr); + assertTrue("Expecting an exception", false); + } catch (JSONException e) { + assertTrue("Expecting an exception message", + "Missing '=' in cookie parameter. at 25 [character 26 line 1]". + equals(e.getMessage())); + } } - @Test(expected=JSONException.class) + /** + * Attempts to create a JSONObject from an empty cookie string.
+ * Note: Cookie throws an exception, but CookieList does not.
+ * Expects a JSONException + */ + @Test public void emptyStringCookieException() { - /** - * Attempts to create a JSONObject from an empty cookie string - * Note: Cookie throws an exception, but CookieList does not - */ String cookieStr = ""; - Cookie.toJSONObject(cookieStr); + try { + Cookie.toJSONObject(cookieStr); + assertTrue("Expecting an exception", false); + } catch (JSONException e) { + assertTrue("Expecting an exception message", + e.getMessage().startsWith("Expected '=' and instead saw '") && + e.getMessage().endsWith("' at 2 [character 3 line 1]")); + } } + /** + * Cookie from a simple name/value pair with no delimiter + */ @Test public void simpleCookie() { - /** - * The simplest cookie is a name/value pair with no delimiter - */ String cookieStr = "SID=31d4d96e407aad42"; String expectedCookieStr = "{\"name\":\"SID\",\"value\":\"31d4d96e407aad42\"}"; JSONObject jsonObject = Cookie.toJSONObject(cookieStr); @@ -72,13 +99,13 @@ public class CookieTest { Util.compareActualVsExpectedJsonObjects(jsonObject,expectedJsonObject); } + /** + * Store a cookie with all of the supported attributes in a + * JSONObject. The secure attribute, which has no value, is treated + * as a boolean. + */ @Test public void multiPartCookie() { - /** - * Store a cookie with all of the supported attributes in a - * JSONObject. The secure attribute, which has no value, is treated - * as a boolean. - */ String cookieStr = "PH=deleted; "+ " expires=Wed, 19-Mar-2014 17:53:53 GMT;"+ @@ -99,13 +126,13 @@ public class CookieTest { Util.compareActualVsExpectedJsonObjects(jsonObject,expectedJsonObject); } + /** + * Cookie.toString() will omit the non-standard "thiswont=beIncluded" + * attribute, but the attribute is still stored in the JSONObject. + * This test confirms both behaviors. + */ @Test public void convertCookieToString() { - /** - * ToString() will omit the non-standard "thiswont=beIncluded" - * attribute, but the attribute is still stored in the JSONObject. - * This test confirms both behaviors. - */ String cookieStr = "PH=deleted; "+ " expires=Wed, 19-Mar-2014 17:53:53 GMT;"+ @@ -138,14 +165,14 @@ public class CookieTest { Util.compareActualVsExpectedJsonObjects(finalJsonObject,expectedJsonObject); } + /** + * A string may be URL-encoded when converting to JSONObject. + * If found, '+' is converted to ' ', and %hh hex strings are converted + * to their ascii char equivalents. This test confirms the decoding + * behavior. + */ @Test public void convertEncodedCookieToString() { - /** - * A string may be URL-encoded when converting to JSONObject. - * If found, '+' is converted to ' ', and %hh hex strings are converted - * to their ascii char equivalents. This test confirms the decoding - * behavior. - */ String cookieStr = "PH=deleted; "+ " expires=Wed,+19-Mar-2014+17:53:53+GMT;"+ @@ -167,14 +194,14 @@ public class CookieTest { Util.compareActualVsExpectedJsonObjects(finalJsonObject,expectedJsonObject); } + /** + * A public API method performs a URL encoding for selected chars + * in a string. Control chars, '+', '%', '=', ';' are all encoded + * as %hh hex strings. The string is also trimmed. + * This test confirms that behavior. + */ @Test public void escapeString() { - /** - * A public API method performs a URL encoding for selected chars - * in a string. Control chars, '+', '%', '=', ';' are all encoded - * as %hh hex strings. The string is also trimmed. - * This test confirms that behavior. - */ String str = " +%\r\n\t\b%=;;; "; String expectedStr = "%2b%25%0d%0a%09%08%25%3d%3b%3b%3b"; String actualStr = Cookie.escape(str); @@ -182,14 +209,14 @@ public class CookieTest { " expected: " +expectedStr, expectedStr.equals(actualStr)); } + /** + * A public API method performs URL decoding for strings. + * '+' is converted to space and %hh hex strings are converted to + * their ascii equivalent values. The string is not trimmed. + * This test confirms that behavior. + */ @Test public void unescapeString() { - /** - * A public API method performs URL decoding for strings. - * '+' is converted to space and %hh hex strings are converted to - * their ascii equivalent values. The string is not trimmed. - * This test confirms that behavior. - */ String str = " +%2b%25%0d%0a%09%08%25%3d%3b%3b%3b+ "; String expectedStr = " +%\r\n\t\b%=;;; "; String actualStr = Cookie.unescape(str);