1 package org.robolectric.shadows; 2 3 import static org.assertj.core.api.Assertions.assertThat; 4 5 import android.webkit.CookieManager; 6 import org.junit.Test; 7 import org.junit.runner.RunWith; 8 import org.robolectric.RobolectricTestRunner; 9 10 @RunWith(RobolectricTestRunner.class) 11 public class ShadowCookieManagerTest { 12 private final String url = "robolectric.org/"; 13 private final String httpUrl = "http://robolectric.org/"; 14 private final String httpsUrl = "https://robolectric.org/"; 15 private final CookieManager cookieManager = CookieManager.getInstance(); 16 17 @Test 18 public void shouldGetASingletonInstance() { 19 assertThat(CookieManager.getInstance()).isNotNull(); 20 assertThat(CookieManager.getInstance()).isSameAs(CookieManager.getInstance()); 21 } 22 23 @Test 24 public void shouldSetAndGetACookie() { 25 CookieManager cookieManager = CookieManager.getInstance(); 26 String url = "http://www.google.com"; 27 String value = "my cookie"; 28 cookieManager.setCookie(url, value); 29 assertThat(cookieManager.getCookie(url)).isEqualTo(value); 30 } 31 32 @Test 33 public void shouldGetCookieForUrl() { 34 CookieManager cookieManager = CookieManager.getInstance(); 35 String url1 = "http://www.google.com"; 36 String value1 = "my cookie"; 37 cookieManager.setCookie(url1, value1); 38 39 String url2 = "http://www.hotbot.com"; 40 String value2 = "some special value: thing"; 41 cookieManager.setCookie(url2, value2); 42 43 assertThat(cookieManager.getCookie("http://www.google.com")).isEqualTo(value1); 44 assertThat(cookieManager.getCookie(url2)).isEqualTo(value2); 45 } 46 47 @Test 48 public void shouldGetCookieForHostInDomain() { 49 CookieManager cookieManager = CookieManager.getInstance(); 50 String value1 = "my cookie"; 51 cookieManager.setCookie("foo.com/this%20is%20a%20test", value1); 52 53 assertThat(cookieManager.getCookie(".foo.com")).isEqualTo(value1); 54 } 55 56 @Test 57 public void shouldNotGetCookieForHostNotInDomain() { 58 CookieManager cookieManager = CookieManager.getInstance(); 59 String value1 = "my cookie"; 60 cookieManager.setCookie("bar.foo.com/this%20is%20a%20test", value1); 61 62 assertThat(cookieManager.getCookie(".bar.com")).isNull(); 63 } 64 65 @Test 66 public void shouldGetCookieForHostInSubDomain() { 67 CookieManager cookieManager = CookieManager.getInstance(); 68 String value1 = "my cookie"; 69 cookieManager.setCookie("host.in.subdomain.bar.com", value1); 70 71 assertThat(cookieManager.getCookie(".bar.com")).isEqualTo(value1); 72 } 73 74 @Test 75 public void shouldGetCookieForHostInDomainDefinedWithProtocol() { 76 CookieManager cookieManager = CookieManager.getInstance(); 77 String value1 = "my cookie"; 78 cookieManager.setCookie("qutz.com/", value1); 79 80 assertThat(cookieManager.getCookie("http://.qutz.com")).isEqualTo(value1); 81 } 82 83 @Test 84 public void shouldRecordAcceptCookie() { 85 CookieManager cookieManager = CookieManager.getInstance(); 86 cookieManager.setCookie("foo", "bar"); 87 cookieManager.setCookie("baz", "qux"); 88 assertThat(cookieManager.getCookie("foo")).isNotNull(); 89 cookieManager.removeAllCookie(); 90 assertThat(cookieManager.getCookie("foo")).isNull(); 91 assertThat(cookieManager.getCookie("baz")).isNull(); 92 } 93 94 @Test 95 public void shouldHaveCookieWhenCookieIsSet() { 96 cookieManager.setCookie(url, "name=value; Expires=Wed, 09 Jun 2021 10:18:14 GMT"); 97 assertThat(cookieManager.hasCookies()).isEqualTo(true); 98 } 99 100 @Test 101 public void shouldNotHaveCookieWhenCookieIsNotSet() { 102 assertThat(cookieManager.hasCookies()).isEqualTo(false); 103 } 104 105 @Test 106 public void shouldGetNullWhenCookieIsNotPresent() { 107 assertThat(cookieManager.getCookie(url)).isNull(); 108 } 109 110 @Test 111 public void shouldGetNullWhenCookieIsNotPresentInUrl() { 112 cookieManager.setCookie(httpUrl, "name=value; Expires=Wed, 11 Jul 2035 08:12:26 GMT"); 113 assertThat(cookieManager.getCookie("http://google.com")).isNull(); 114 } 115 116 @Test 117 public void shouldSetAndGetOneCookie() { 118 cookieManager.setCookie(httpUrl, "name=value; Expires=Wed, 11 Jul 2035 08:12:26 GMT"); 119 assertThat(cookieManager.getCookie(httpUrl)).isEqualTo("name=value"); 120 } 121 122 @Test 123 public void shouldSetWithHttpAndGetWithoutHttp() { 124 cookieManager.setCookie(httpUrl, "name=value; Expires=Wed, 11 Jul 2035 08:12:26 GMT"); 125 assertThat(cookieManager.getCookie(url)).isEqualTo("name=value"); 126 } 127 128 @Test 129 public void shouldSetWithHttpAndGetWithHttps() { 130 cookieManager.setCookie(httpUrl, "name=value; Expires=Wed, 11 Jul 2035 08:12:26 GMT"); 131 assertThat(cookieManager.getCookie(httpsUrl)).isEqualTo("name=value"); 132 } 133 134 @Test 135 public void shouldSetTwoCookies() { 136 cookieManager.setCookie(url, "name=value; Expires=Wed, 09 Jun 2021 10:18:14 GMT"); 137 cookieManager.setCookie(url, "name2=value2; Expires=Wed, 09 Jun 2021 10:18:14 GMT"); 138 assertThat(cookieManager.getCookie(url)).isEqualTo("name=value; name2=value2"); 139 } 140 141 @Test 142 public void shouldSetCookieWithInvalidExpiesValue() { 143 cookieManager.setCookie(httpUrl, "name=value; Expires=3234asdfasdf10:18:14 GMT"); 144 assertThat(cookieManager.getCookie(url)).isEqualTo("name=value"); 145 } 146 147 @Test 148 public void shouldSetCookieWithoutValue() { 149 cookieManager.setCookie(httpUrl, "name="); 150 assertThat(cookieManager.getCookie(url)).isEqualTo("name="); 151 } 152 153 @Test 154 public void shouldSetCookieWithNameOnly() { 155 cookieManager.setCookie(httpUrl, "name"); 156 assertThat(cookieManager.getCookie(url)).isEqualTo("name"); 157 } 158 159 @Test 160 public void testSetAndGetCookieWhenAcceptCookieIsFalse() { 161 cookieManager.setAcceptCookie(false); 162 cookieManager.setCookie(httpUrl, "name=value; Expires=3234asdfasdf10:18:14 GMT"); 163 assertThat(cookieManager.getCookie(url)).isEqualTo("name=value"); 164 assertThat(cookieManager.acceptCookie()).isEqualTo(false); 165 } 166 167 @Test 168 public void shouldRemoveAllCookie() { 169 cookieManager.setCookie(url, "name=value; Expires=Wed, 09 Jun 2021 10:18:14 GMT"); 170 cookieManager.setCookie(url, "name2=value2;"); 171 cookieManager.removeAllCookie(); 172 assertThat(cookieManager.getCookie(url)).isNull(); 173 } 174 175 @Test 176 public void shouldRemoveExpiredCookie() { 177 cookieManager.setCookie(url, "name=value; Expires=Wed, 11 Jul 2035 10:18:14 GMT"); 178 cookieManager.setCookie(url, "name2=value2; Expires=Wed, 13 Jul 2011 10:18:14 GMT"); 179 cookieManager.removeExpiredCookie(); 180 assertThat(cookieManager.getCookie(url)).isEqualTo("name=value"); 181 } 182 183 @Test 184 public void shouldRemoveSessionCookie() { 185 cookieManager.setCookie(url, "name=value; Expires=Wed, 09 Jun 2021 10:18:14 GMT"); 186 cookieManager.setCookie(url, "name2=value2;"); 187 cookieManager.removeSessionCookie(); 188 assertThat(cookieManager.getCookie(url)).isEqualTo("name=value"); 189 } 190 191 @Test 192 public void shouldIgnoreCookiesSetInThePast() { 193 cookieManager.setCookie(url, "name=value; Expires=Wed, 09-Jun-2000 10:18:14 GMT"); 194 195 String url2 = "http://android.com"; 196 cookieManager.setCookie(url2, "name2=value2; Expires=Wed, 09 Jun 2000 10:18:14 GMT"); 197 198 assertThat(cookieManager.getCookie(url)).isNull(); 199 assertThat(cookieManager.getCookie(url2)).isNull(); 200 } 201 202 @Test 203 public void shouldRespectSecureCookies() { 204 cookieManager.setCookie(httpsUrl, "name1=value1;secure"); 205 cookieManager.setCookie(httpUrl, "name2=value2;"); 206 207 String cookie = cookieManager.getCookie(httpUrl); 208 assertThat(cookie.contains("name2=value2")).isTrue(); 209 assertThat(cookie.contains("name1=value1")).isFalse(); 210 } 211 212 @Test 213 public void shouldIgnoreEmptyURLs() { 214 assertThat(cookieManager.getCookie("")).isNull(); 215 } 216 } 217