Skip to content

Commit

Permalink
Updates Cookie class to be a more generic in attribute parsing and emit.
Browse files Browse the repository at this point in the history
This is so the library can age better as new attributes are added to RFC
revisions.
  • Loading branch information
John J. Aylward committed May 26, 2020
1 parent 956bdfa commit 9c08482
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 13 deletions.
4 changes: 3 additions & 1 deletion src/main/java/org/json/Cookie.java
Expand Up @@ -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;
Expand Down
38 changes: 26 additions & 12 deletions src/test/java/org/json/junit/CookieTest.java
Expand Up @@ -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.<br>
* Note: Cookie throws an exception, but CookieList does not.<br>
* 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.<br>
*
* Attempts to create a JSONObject from an cookie string where the name is blank.<br>
* Note: Cookie throws an exception, but CookieList does not.<br>
* 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());
}
}
Expand Down Expand Up @@ -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
Expand All @@ -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);
Expand Down

0 comments on commit 9c08482

Please sign in to comment.