Patch by:jlanbanca
Review by:ecc
Fixes Issue #1573:
getCookie/getCookieNames returns the wrong values if the last cookie is removed.  The needsRefresh method returns false when the doc.cookies variable is an empty string, which means that the cache becomes stale and does not refresh after removing the last cookie. Fixed both issues and added unit tests for them.


git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@1588 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/user/client/Cookies.java b/user/src/com/google/gwt/user/client/Cookies.java
index 5017a05..829b1f0 100644
--- a/user/src/com/google/gwt/user/client/Cookies.java
+++ b/user/src/com/google/gwt/user/client/Cookies.java
@@ -65,7 +65,7 @@
    * @param name the name of the cookie to be removed
    */
   public static native void removeCookie(String name) /*-{
-    $doc.cookie = name + "='';expires='Fri, 02-Jan-1970 00:00:00 GMT'"; 
+    $doc.cookie = name + "=;expires=Fri, 02-Jan-1970 00:00:00 GMT"; 
   }-*/;
 
   /**
@@ -138,7 +138,7 @@
     var docCookie = $doc.cookie;
         
     // Check to see if cached cookies need to be invalidated.
-    if (docCookie != '' && docCookie != @com.google.gwt.user.client.Cookies::rawCookies) {  
+    if (docCookie != @com.google.gwt.user.client.Cookies::rawCookies) {  
       @com.google.gwt.user.client.Cookies::rawCookies = docCookie;
       return true;
     } else {
diff --git a/user/test/com/google/gwt/user/client/CookieTest.java b/user/test/com/google/gwt/user/client/CookieTest.java
index c6a5a3f..15be1a7 100644
--- a/user/test/com/google/gwt/user/client/CookieTest.java
+++ b/user/test/com/google/gwt/user/client/CookieTest.java
@@ -17,6 +17,7 @@
 
 import com.google.gwt.junit.client.GWTTestCase;
 
+import java.util.Collection;
 import java.util.Date;
 
 /**
@@ -53,6 +54,8 @@
     assertEquals(Cookies.getCookie("notpresent"), null);
   }
   
+  
+  
   /*
    * Test that the cookie will expire correctly after a set amount of time,
    * but does not expire before that time. 
@@ -86,4 +89,49 @@
     timer.schedule(5010);
     delayTestFinish(6 * 1000);
   }
+  
+  /**
+   * Test that removing cookies works correctly.
+   */
+  public void testRemoveCookie() {
+    // First clear all cookies
+    clearCookies();
+    
+    // Set a few cookies
+    Cookies.setCookie("test1", "value1");
+    Cookies.setCookie("test2", "value2");
+    Cookies.setCookie("test3", "value3");
+    Collection<String> cookies = Cookies.getCookieNames();
+    assertEquals(3, cookies.size());
+    
+    // Remove a cookie
+    Cookies.removeCookie("test2");
+    assertEquals("value1", Cookies.getCookie("test1"));
+    assertEquals(null, Cookies.getCookie("test2"));
+    assertEquals("value3", Cookies.getCookie("test3"));
+
+    // Remove another cookie
+    Cookies.removeCookie("test1");
+    assertEquals(null, Cookies.getCookie("test1"));
+    assertEquals(null, Cookies.getCookie("test2"));
+    assertEquals("value3", Cookies.getCookie("test3"));
+
+    // Remove last cookie
+    Cookies.removeCookie("test3");
+    assertEquals(null, Cookies.getCookie("test1"));
+    assertEquals(null, Cookies.getCookie("test2"));
+    assertEquals(null, Cookies.getCookie("test3"));
+    cookies = Cookies.getCookieNames();
+    assertEquals(0, cookies.size());
+  }
+  
+  /**
+   * Clear out all existing cookies.
+   */
+  private void clearCookies() { 
+    Collection<String> cookies = Cookies.getCookieNames();
+    for (String cookie : cookies) {
+      Cookies.removeCookie(cookie);
+    }
+  }
 }