package org.robolectric.shadows;
import android.webkit.CookieManager;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.TestRunners;
import static org.assertj.core.api.Assertions.assertThat;
@RunWith(TestRunners.MultiApiSelfTest.class)
public class ShadowCookieManagerTest {
private final String url = "robolectric.org/";
private final String httpUrl = "http://robolectric.org/";
private final String httpsUrl = "https://robolectric.org/";
private final CookieManager cookieManager = CookieManager.getInstance();
@Test
public void shouldGetASingletonInstance() {
assertThat(CookieManager.getInstance()).isNotNull();
assertThat(CookieManager.getInstance()).isSameAs(CookieManager.getInstance());
}
@Test
public void shouldSetAndGetACookie() {
CookieManager cookieManager = CookieManager.getInstance();
String url = "http://www.google.com";
String value = "my cookie";
cookieManager.setCookie(url, value);
assertThat(cookieManager.getCookie(url)).isEqualTo(value);
}
@Test
public void shouldGetCookieForUrl() {
CookieManager cookieManager = CookieManager.getInstance();
String url1 = "http://www.google.com";
String value1 = "my cookie";
cookieManager.setCookie(url1, value1);
String url2 = "http://www.hotbot.com";
String value2 = "some special value: thing";
cookieManager.setCookie(url2, value2);
assertThat(cookieManager.getCookie("http://www.google.com")).isEqualTo(value1);
assertThat(cookieManager.getCookie(url2)).isEqualTo(value2);
}
@Test
public void shouldGetCookieForHostInDomain() {
CookieManager cookieManager = CookieManager.getInstance();
String value1 = "my cookie";
cookieManager.setCookie("foo.com/this%20is%20a%20test", value1);
assertThat(cookieManager.getCookie(".foo.com")).isEqualTo(value1);
}
@Test
public void shouldNotGetCookieForHostNotInDomain() {
CookieManager cookieManager = CookieManager.getInstance();
String value1 = "my cookie";
cookieManager.setCookie("bar.foo.com/this%20is%20a%20test", value1);
assertThat(cookieManager.getCookie(".bar.com")).isNull();
}
@Test
public void shouldGetCookieForHostInSubDomain() {
CookieManager cookieManager = CookieManager.getInstance();
String value1 = "my cookie";
cookieManager.setCookie("host.in.subdomain.bar.com", value1);
assertThat(cookieManager.getCookie(".bar.com")).isEqualTo(value1);
}
@Test
public void shouldGetCookieForHostInDomainDefinedWithProtocol() {
CookieManager cookieManager = CookieManager.getInstance();
String value1 = "my cookie";
cookieManager.setCookie("qutz.com/", value1);
assertThat(cookieManager.getCookie("http://.qutz.com")).isEqualTo(value1);
}
@Test
public void shouldRecordAcceptCookie() {
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setCookie("foo", "bar");
cookieManager.setCookie("baz", "qux");
assertThat(cookieManager.getCookie("foo")).isNotNull();
cookieManager.removeAllCookie();
assertThat(cookieManager.getCookie("foo")).isNull();
assertThat(cookieManager.getCookie("baz")).isNull();
}
@Test
public void shouldHaveCookieWhenCookieIsSet() {
cookieManager.setCookie(url, "name=value; Expires=Wed, 09 Jun 2021 10:18:14 GMT");
assertThat(cookieManager.hasCookies()).isEqualTo(true);
}
@Test
public void shouldNotHaveCookieWhenCookieIsNotSet() {
assertThat(cookieManager.hasCookies()).isEqualTo(false);
}
@Test
public void shouldGetNullWhenCookieIsNotPresent() {
assertThat(cookieManager.getCookie(url)).isNull();
}
@Test
public void shouldGetNullWhenCookieIsNotPresentInUrl() {
cookieManager.setCookie(httpUrl, "name=value; Expires=Wed, 11 Jul 2035 08:12:26 GMT");
assertThat(cookieManager.getCookie("http://google.com")).isNull();
}
@Test
public void shouldSetAndGetOneCookie() {
cookieManager.setCookie(httpUrl, "name=value; Expires=Wed, 11 Jul 2035 08:12:26 GMT");
assertThat(cookieManager.getCookie(httpUrl)).isEqualTo("name=value");
}
@Test
public void shouldSetWithHttpAndGetWithoutHttp() {
cookieManager.setCookie(httpUrl, "name=value; Expires=Wed, 11 Jul 2035 08:12:26 GMT");
assertThat(cookieManager.getCookie(url)).isEqualTo("name=value");
}
@Test
public void shouldSetWithHttpAndGetWithHttps() {
cookieManager.setCookie(httpUrl, "name=value; Expires=Wed, 11 Jul 2035 08:12:26 GMT");
assertThat(cookieManager.getCookie(httpsUrl)).isEqualTo("name=value");
}
@Test
public void shouldSetTwoCookies() {
cookieManager.setCookie(url, "name=value; Expires=Wed, 09 Jun 2021 10:18:14 GMT");
cookieManager.setCookie(url, "name2=value2; Expires=Wed, 09 Jun 2021 10:18:14 GMT");
assertThat(cookieManager.getCookie(url)).isEqualTo("name=value; name2=value2");
}
@Test
public void shouldSetCookieWithInvalidExpiesValue() {
cookieManager.setCookie(httpUrl, "name=value; Expires=3234asdfasdf10:18:14 GMT");
assertThat(cookieManager.getCookie(url)).isEqualTo("name=value");
}
@Test
public void shouldSetCookieWithoutValue() {
cookieManager.setCookie(httpUrl, "name=");
assertThat(cookieManager.getCookie(url)).isEqualTo("name=");
}
@Test
public void shouldSetCookieWithNameOnly() {
cookieManager.setCookie(httpUrl, "name");
assertThat(cookieManager.getCookie(url)).isEqualTo("name");
}
@Test
public void testSetAndGetCookieWhenAcceptCookieIsFalse() {
cookieManager.setAcceptCookie(false);
cookieManager.setCookie(httpUrl, "name=value; Expires=3234asdfasdf10:18:14 GMT");
assertThat(cookieManager.getCookie(url)).isEqualTo("name=value");
assertThat(cookieManager.acceptCookie()).isEqualTo(false);
}
@Test
public void shouldRemoveAllCookie() {
cookieManager.setCookie(url, "name=value; Expires=Wed, 09 Jun 2021 10:18:14 GMT");
cookieManager.setCookie(url, "name2=value2;");
cookieManager.removeAllCookie();
assertThat(cookieManager.getCookie(url)).isNull();
}
@Test
public void shouldRemoveExpiredCookie() {
cookieManager.setCookie(url, "name=value; Expires=Wed, 11 Jul 2035 10:18:14 GMT");
cookieManager.setCookie(url, "name2=value2; Expires=Wed, 13 Jul 2011 10:18:14 GMT");
cookieManager.removeExpiredCookie();
assertThat(cookieManager.getCookie(url)).isEqualTo("name=value");
}
@Test
public void shouldRemoveSessionCookie() {
cookieManager.setCookie(url, "name=value; Expires=Wed, 09 Jun 2021 10:18:14 GMT");
cookieManager.setCookie(url, "name2=value2;");
cookieManager.removeSessionCookie();
assertThat(cookieManager.getCookie(url)).isEqualTo("name=value");
}
@Test
public void shouldIgnoreCookiesSetInThePast() {
cookieManager.setCookie(url, "name=value; Expires=Wed, 09-Jun-2000 10:18:14 GMT");
String url2 = "http://android.com";
cookieManager.setCookie(url2, "name2=value2; Expires=Wed, 09 Jun 2000 10:18:14 GMT");
assertThat(cookieManager.getCookie(url)).isNull();
assertThat(cookieManager.getCookie(url2)).isNull();
}
@Test
public void shouldRespectSecureCookies() {
cookieManager.setCookie(httpsUrl, "name1=value1;secure");
cookieManager.setCookie(httpUrl, "name2=value2;");
String cookie = cookieManager.getCookie(httpUrl);
assertThat(cookie.contains("name2=value2")).isTrue();
assertThat(cookie.contains("name1=value1")).isFalse();
}
@Test
public void shouldIgnoreEmptyURLs() {
assertThat(cookieManager.getCookie("")).isNull();
}
}