OSDN Git Service

original
[gb-231r1-is01/GB_2.3_IS01.git] / cts / tests / tests / webkit / src / android / webkit / cts / CookieManagerTest.java
diff --git a/cts/tests/tests/webkit/src/android/webkit/cts/CookieManagerTest.java b/cts/tests/tests/webkit/src/android/webkit/cts/CookieManagerTest.java
new file mode 100644 (file)
index 0000000..ca1b76f
--- /dev/null
@@ -0,0 +1,289 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.webkit.cts;
+
+import dalvik.annotation.TestLevel;
+import dalvik.annotation.TestTargetClass;
+import dalvik.annotation.TestTargetNew;
+import dalvik.annotation.TestTargets;
+import dalvik.annotation.ToBeFixed;
+
+import android.test.ActivityInstrumentationTestCase2;
+import android.view.animation.cts.DelayedCheck;
+import android.webkit.CookieManager;
+import android.webkit.CookieSyncManager;
+import android.webkit.WebChromeClient;
+import android.webkit.WebView;
+
+import java.util.Date;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+@TestTargetClass(android.webkit.CookieManager.class)
+public class CookieManagerTest extends
+        ActivityInstrumentationTestCase2<CookieSyncManagerStubActivity> {
+
+    private static final int TEST_DELAY = 5000;
+
+    private WebView mWebView;
+    private CookieManager mCookieManager;
+
+    public CookieManagerTest() {
+        super("com.android.cts.stub", CookieSyncManagerStubActivity.class);
+    }
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        mWebView = getActivity().getWebView();
+
+        // Set a web chrome client in order to receive progress updates.
+        mWebView.setWebChromeClient(new WebChromeClient());
+
+        mCookieManager = CookieManager.getInstance();
+        assertNotNull(mCookieManager);
+    }
+
+    @TestTargetNew(
+        level = TestLevel.COMPLETE,
+        method = "getInstance",
+        args = {}
+    )
+    public void testGetInstance() {
+        CookieManager c1 = CookieManager.getInstance();
+        CookieManager c2 = CookieManager.getInstance();
+
+        assertSame(c1, c2);
+    }
+
+    @TestTargetNew(
+        level = TestLevel.NOT_FEASIBLE,
+        method = "clone",
+        notes = "clone() is protected and CookieManager cannot be subclassed",
+        args = {}
+    )
+    public void testClone() {
+    }
+
+    @TestTargets({
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "setAcceptCookie",
+            args = {boolean.class}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "acceptCookie",
+            args = {}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "setCookie",
+            args = {String.class, String.class}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "getCookie",
+            args = {String.class}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "removeAllCookie",
+            args = {}
+        )
+    })
+    public void testAcceptCookie() throws Exception {
+        mCookieManager.setAcceptCookie(false);
+        assertFalse(mCookieManager.acceptCookie());
+        assertFalse(mCookieManager.hasCookies());
+
+        CtsTestServer server = new CtsTestServer(getActivity(), false);
+        String url = server.getCookieUrl("conquest.html");
+        loadUrl(url);
+        assertEquals(null, mWebView.getTitle()); // no cookies passed
+        Thread.sleep(TEST_DELAY);
+        assertNull(mCookieManager.getCookie(url));
+
+        mCookieManager.setAcceptCookie(true);
+        assertTrue(mCookieManager.acceptCookie());
+
+        url = server.getCookieUrl("war.html");
+        loadUrl(url);
+        assertEquals(null, mWebView.getTitle()); // no cookies passed
+        waitForCookie(url);
+        String cookie = mCookieManager.getCookie(url);
+        assertNotNull(cookie);
+        // 'count' value of the returned cookie is 0
+        final Pattern pat = Pattern.compile("count=(\\d+)");
+        Matcher m = pat.matcher(cookie);
+        assertTrue(m.matches());
+        assertEquals("0", m.group(1));
+
+        url = server.getCookieUrl("famine.html");
+        loadUrl(url);
+        assertEquals("count=0", mWebView.getTitle()); // outgoing cookie
+        waitForCookie(url);
+        cookie = mCookieManager.getCookie(url);
+        assertNotNull(cookie);
+        m = pat.matcher(cookie);
+        assertTrue(m.matches());
+        assertEquals("1", m.group(1)); // value got incremented
+
+        url = server.getCookieUrl("death.html");
+        mCookieManager.setCookie(url, "count=41");
+        loadUrl(url);
+        assertEquals("count=41", mWebView.getTitle()); // outgoing cookie
+        waitForCookie(url);
+        cookie = mCookieManager.getCookie(url);
+        assertNotNull(cookie);
+        m = pat.matcher(cookie);
+        assertTrue(m.matches());
+        assertEquals("42", m.group(1)); // value got incremented
+
+        // clean up all cookies
+        mCookieManager.removeAllCookie();
+    }
+
+    @TestTargets({
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "hasCookies",
+            args = {}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "removeAllCookie",
+            args = {}
+        )
+    })
+    @ToBeFixed(explanation = "CookieManager.hasCookies() should also count cookies in RAM cache")
+    public void testCookieManager() {
+        // enable cookie
+        mCookieManager.setAcceptCookie(true);
+        assertTrue(mCookieManager.acceptCookie());
+
+        // first there should be no cookie stored
+        assertFalse(mCookieManager.hasCookies());
+
+        String url = "http://www.example.com";
+        String cookie = "name=test";
+        mCookieManager.setCookie(url, cookie);
+        assertEquals(cookie, mCookieManager.getCookie(url));
+
+        // sync cookie from RAM to FLASH, because hasCookies() only counts FLASH cookies
+        CookieSyncManager.getInstance().sync();
+        new DelayedCheck(TEST_DELAY) {
+            @Override
+            protected boolean check() {
+                return mCookieManager.hasCookies();
+            }
+        }.run();
+
+        // clean up all cookies
+        mCookieManager.removeAllCookie();
+        new DelayedCheck(TEST_DELAY) {
+            @Override
+            protected boolean check() {
+                return !mCookieManager.hasCookies();
+            }
+        }.run();
+    }
+
+    @TestTargets({
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "removeSessionCookie",
+            args = {}
+        ),
+        @TestTargetNew(
+            level = TestLevel.COMPLETE,
+            method = "removeExpiredCookie",
+            args = {}
+        )
+    })
+    @SuppressWarnings("deprecation")
+    public void testRemoveCookies() throws InterruptedException {
+        // enable cookie
+        mCookieManager.setAcceptCookie(true);
+        assertTrue(mCookieManager.acceptCookie());
+        assertFalse(mCookieManager.hasCookies());
+
+        final String url = "http://www.example.com";
+        final String cookie1 = "cookie1=peter";
+        final String cookie2 = "cookie2=sue";
+        final String cookie3 = "cookie3=marc";
+
+        mCookieManager.setCookie(url, cookie1); // session cookie
+
+        Date date = new Date();
+        date.setTime(date.getTime() + 1000 * 600);
+        String value2 = cookie2 + "; expires=" + date.toGMTString();
+        mCookieManager.setCookie(url, value2); // expires in 10min
+
+        long expiration = 3000;
+        date = new Date();
+        date.setTime(date.getTime() + expiration);
+        String value3 = cookie3 + "; expires=" + date.toGMTString();
+        mCookieManager.setCookie(url, value3); // expires in 3s
+
+        String allCookies = mCookieManager.getCookie(url);
+        assertTrue(allCookies.contains(cookie1));
+        assertTrue(allCookies.contains(cookie2));
+        assertTrue(allCookies.contains(cookie3));
+
+        mCookieManager.removeSessionCookie();
+        new DelayedCheck(TEST_DELAY) {
+            protected boolean check() {
+                String c = mCookieManager.getCookie(url);
+                return !c.contains(cookie1) && c.contains(cookie2) && c.contains(cookie3);
+            }
+        }.run();
+
+        Thread.sleep(expiration + 1000); // wait for cookie to expire
+        mCookieManager.removeExpiredCookie();
+        new DelayedCheck(TEST_DELAY) {
+            protected boolean check() {
+                String c = mCookieManager.getCookie(url);
+                return !c.contains(cookie1) && c.contains(cookie2) && !c.contains(cookie3);
+            }
+        }.run();
+
+        mCookieManager.removeAllCookie();
+        new DelayedCheck(TEST_DELAY) {
+            protected boolean check() {
+                return mCookieManager.getCookie(url) == null;
+            }
+        }.run();
+    }
+
+    private void loadUrl(String url) {
+        mWebView.loadUrl(url);
+        new DelayedCheck(TEST_DELAY) {
+            protected boolean check() {
+                return mWebView.getProgress() == 100;
+            }
+        }.run();
+    }
+
+    private void waitForCookie(final String url) {
+        new DelayedCheck(TEST_DELAY) {
+            protected boolean check() {
+                return mCookieManager.getCookie(url) != null;
+            }
+        }.run();
+    }
+}