diff --git a/src/main/java/org/json/Cookie.java b/src/main/java/org/json/Cookie.java
index 5da423a87..73e6c0f82 100644
--- a/src/main/java/org/json/Cookie.java
+++ b/src/main/java/org/json/Cookie.java
@@ -76,7 +76,9 @@ public static String escape(String string) {
* @param string The cookie specification string.
* @return A JSONObject containing "name", "value", and possibly other
* members.
- * @throws JSONException if a called function fails or a syntax error
+ * @throws JSONException If there is an error parsing the Cookie String.
+ * Cookie strings must have at least one '=' character and the 'name'
+ * portion of the cookie must not be blank.
*/
public static JSONObject toJSONObject(String string) throws JSONException {
String name;
diff --git a/src/test/java/org/json/junit/CookieTest.java b/src/test/java/org/json/junit/CookieTest.java
index 74756aadd..fc293910d 100644
--- a/src/test/java/org/json/junit/CookieTest.java
+++ b/src/test/java/org/json/junit/CookieTest.java
@@ -79,32 +79,46 @@ public void malFormedNameValueException() {
* Expects a JSONException.
*/
@Test
- public void malFormedAttributeException() {
+ public void booleanAttribute() {
String cookieStr = "this=Cookie;myAttribute";
+ JSONObject jo = Cookie.toJSONObject(cookieStr);
+ assertTrue("has key 'name'", jo.has("name"));
+ assertTrue("has key 'value'", jo.has("value"));
+ assertTrue("has key 'myAttribute'", jo.has("myAttribute"));
+ }
+
+ /**
+ * 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() {
+ String cookieStr = "";
try {
Cookie.toJSONObject(cookieStr);
fail("Expecting an exception");
} catch (JSONException e) {
assertEquals("Expecting an exception message",
- "Missing '=' in cookie parameter. at 23 [character 24 line 1]",
+ "Cookies must have a 'name'",
e.getMessage());
}
}
-
/**
- * Attempts to create a JSONObject from an empty cookie string.
+ *
+ * Attempts to create a JSONObject from an cookie string where the name is blank.
* Note: Cookie throws an exception, but CookieList does not.
* Expects a JSONException
*/
@Test
- public void emptyStringCookieException() {
- String cookieStr = "";
+ public void emptyNameCookieException() {
+ String cookieStr = " = value ";
try {
Cookie.toJSONObject(cookieStr);
fail("Expecting an exception");
} catch (JSONException e) {
assertEquals("Expecting an exception message",
- "Expected '=' and instead saw '' at 0 [character 1 line 1]",
+ "Cookies must have a 'name'",
e.getMessage());
}
}
@@ -149,8 +163,8 @@ public void multiPartCookie() {
}
/**
- * Cookie.toString() will omit the non-standard "thiswont=beIncluded"
- * attribute, but the attribute is still stored in the JSONObject.
+ * Cookie.toString() will emit the non-standard "thiswont=beIncluded"
+ * attribute, and the attribute is still stored in the JSONObject.
* This test confirms both behaviors.
*/
@Test
@@ -163,15 +177,15 @@ public void convertCookieToString() {
"thisWont=beIncluded;"+
"secure";
String expectedCookieStr =
- "{\"path\":\"/\","+
+ "{\"thisWont\":\"beIncluded\","+
+ "\"path\":\"/\","+
"\"expires\":\"Wed, 19-Mar-2014 17:53:53 GMT\","+
"\"domain\":\".yahoo.com\","+
"\"name\":\"PH\","+
"\"secure\":true,"+
"\"value\":\"deleted\"}";
// Add the nonstandard attribute to the expected cookie string
- String expectedDirectCompareCookieStr =
- expectedCookieStr.replaceAll("\\{", "\\{\"thisWont\":\"beIncluded\",");
+ String expectedDirectCompareCookieStr = expectedCookieStr;
// convert all strings into JSONObjects
JSONObject jsonObject = Cookie.toJSONObject(cookieStr);
JSONObject expectedJsonObject = new JSONObject(expectedCookieStr);