Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8)

Unified Diff: ios/net/cookies/cookie_store_ios_persistent_unittest.mm

Issue 2667753007: Divide Cookie Store IOS tests into different files (Closed)
Patch Set: rename unittest helper to test util and other renamings Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ios/net/BUILD.gn ('k') | ios/net/cookies/cookie_store_ios_test_util.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ios/net/cookies/cookie_store_ios_persistent_unittest.mm
diff --git a/ios/net/cookies/cookie_store_ios_persistent_unittest.mm b/ios/net/cookies/cookie_store_ios_persistent_unittest.mm
new file mode 100644
index 0000000000000000000000000000000000000000..1a412110dea12fe62dcf9e603d6be43433c38271
--- /dev/null
+++ b/ios/net/cookies/cookie_store_ios_persistent_unittest.mm
@@ -0,0 +1,128 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "ios/net/cookies/cookie_store_ios_persistent.h"
+
+#import <Foundation/Foundation.h>
+
+#include <memory>
+
+#include "base/bind_helpers.h"
+#include "base/memory/ptr_util.h"
+#include "base/memory/ref_counted.h"
+#include "base/message_loop/message_loop.h"
+#include "base/run_loop.h"
+#import "ios/net/cookies/cookie_store_ios_test_util.h"
+#include "net/cookies/cookie_store_unittest.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace net {
+
+struct InactiveCookieStoreIOSTestTraits {
+ static std::unique_ptr<net::CookieStore> Create() {
+ return base::MakeUnique<CookieStoreIOSPersistent>(nullptr);
+ }
+
+ static const bool is_cookie_monster = false;
+ static const bool supports_http_only = false;
+ static const bool supports_non_dotted_domains = true;
+ static const bool preserves_trailing_dots = true;
+ static const bool filters_schemes = false;
+ static const bool has_path_prefix_bug = false;
+ static const int creation_time_granularity_in_ms = 0;
+ static const int enforces_prefixes = true;
+ static const bool enforce_strict_secure = false;
+
+ base::MessageLoop loop_;
+};
+
+INSTANTIATE_TYPED_TEST_CASE_P(InactiveCookieStoreIOS,
+ CookieStoreTest,
+ InactiveCookieStoreIOSTestTraits);
+
+namespace {
+
+// Test fixture to exercise net::CookieStoreIOSPersistent created with
+// TestPersistentCookieStore back-end and not synchronized with
+// NSHTTPCookieStorage.
+class CookieStoreIOSPersistentTest : public testing::Test {
+ public:
+ CookieStoreIOSPersistentTest()
+ : kTestCookieURL("http://foo.google.com/bar"),
+ backend_(new net::TestPersistentCookieStore),
+ store_(
+ base::MakeUnique<net::CookieStoreIOSPersistent>(backend_.get())) {
+ cookie_changed_callback_ = store_->AddCallbackForCookie(
+ kTestCookieURL, "abc",
+ base::Bind(&net::RecordCookieChanges, &cookies_changed_,
+ &cookies_removed_));
+ }
+
+ ~CookieStoreIOSPersistentTest() override {}
+
+ // Gets the cookies. |callback| will be called on completion.
+ void GetCookies(const net::CookieStore::GetCookiesCallback& callback) {
+ net::CookieOptions options;
+ options.set_include_httponly();
+ store_->GetCookiesWithOptionsAsync(kTestCookieURL, options, callback);
+ }
+
+ // Sets a cookie.
+ void SetCookie(const std::string& cookie_line) {
+ net::SetCookie(cookie_line, kTestCookieURL, store_.get());
+ }
+
+ private:
+ const GURL kTestCookieURL;
+
+ protected:
+ base::MessageLoop loop_;
+ scoped_refptr<net::TestPersistentCookieStore> backend_;
+ std::unique_ptr<net::CookieStoreIOS> store_;
+ std::unique_ptr<net::CookieStore::CookieChangedSubscription>
+ cookie_changed_callback_;
+ std::vector<net::CanonicalCookie> cookies_changed_;
+ std::vector<bool> cookies_removed_;
+};
+
+} // namespace
+
+TEST_F(CookieStoreIOSPersistentTest, SetCookieCallsHook) {
+ ClearCookies();
+ SetCookie("abc=def");
+ EXPECT_EQ(0U, cookies_changed_.size());
+ EXPECT_EQ(0U, cookies_removed_.size());
+ backend_->RunLoadedCallback();
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ(1U, cookies_changed_.size());
+ EXPECT_EQ(1U, cookies_removed_.size());
+ EXPECT_EQ("abc", cookies_changed_[0].Name());
+ EXPECT_EQ("def", cookies_changed_[0].Value());
+ EXPECT_FALSE(cookies_removed_[0]);
+
+ // Replacing an existing cookie is actually a two-phase delete + set
+ // operation, so we get an extra notification.
+ SetCookie("abc=ghi");
+ EXPECT_EQ(3U, cookies_changed_.size());
+ EXPECT_EQ(3U, cookies_removed_.size());
+ EXPECT_EQ("abc", cookies_changed_[1].Name());
+ EXPECT_EQ("def", cookies_changed_[1].Value());
+ EXPECT_TRUE(cookies_removed_[1]);
+ EXPECT_EQ("abc", cookies_changed_[2].Name());
+ EXPECT_EQ("ghi", cookies_changed_[2].Value());
+ EXPECT_FALSE(cookies_removed_[2]);
+}
+
+// Tests that cookies can be read before the backend is loaded.
+TEST_F(CookieStoreIOSPersistentTest, NotSynchronized) {
+ // Start fetching the cookie.
+ GetCookieCallback callback;
+ GetCookies(base::Bind(&GetCookieCallback::Run, base::Unretained(&callback)));
+ // Backend loading completes.
+ backend_->RunLoadedCallback();
+ EXPECT_TRUE(callback.did_run());
+ EXPECT_EQ("a=b", callback.cookie_line());
+}
+
+} // namespace net
« no previous file with comments | « ios/net/BUILD.gn ('k') | ios/net/cookies/cookie_store_ios_test_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698