Chromium Code Reviews| Index: components/password_manager/core/browser/log_router_unittest.cc |
| diff --git a/components/password_manager/core/browser/log_router_unittest.cc b/components/password_manager/core/browser/log_router_unittest.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..e29600eddae090d0a0b9d2ee329a7667f6dc4775 |
| --- /dev/null |
| +++ b/components/password_manager/core/browser/log_router_unittest.cc |
| @@ -0,0 +1,127 @@ |
| +// Copyright 2014 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. |
| + |
| +#include "components/password_manager/core/browser/log_router.h" |
| + |
| +#include "components/password_manager/core/browser/password_manager_logger.h" |
| +#include "components/password_manager/core/browser/stub_password_manager_client.h" |
| +#include "testing/gmock/include/gmock/gmock.h" |
| +#include "testing/gtest/include/gtest/gtest.h" |
| + |
| +using testing::_; |
| + |
| +namespace password_manager { |
| + |
| +namespace { |
| + |
| +const char kTestText[] = "abcd1234"; |
| +const char kTestText2[] = "1234ABCD"; |
| +const char kTestText3[] = "8765efgh"; |
| +const char kTestText4[] = "8-6-EFGH"; |
| + |
| +class MockLogReceiver : public PasswordManagerLogger { |
| + public: |
| + MockLogReceiver() {} |
| + |
| + MOCK_METHOD1(LogSavePasswordProgress, void(const std::string&)); |
| +}; |
| + |
| +class MockPasswordManagerClient : public StubPasswordManagerClient { |
| + // TODO(vabr): This currently does not mock anything. Once |
| + // PasswordManagerClient starts to get notified about logging activity |
| + // changes, do: |
| + // 1) Use this mock to detect activity changes in the existing tests. |
| + // 2) Write unit tests for router-client interaction using this mock. |
| +}; |
| + |
| +} // namespace |
| + |
| +class LogRouterTest : public testing::Test { |
| + protected: |
| + testing::StrictMock<MockPasswordManagerClient> client_; |
| + testing::StrictMock<MockPasswordManagerClient> client2_; |
| + testing::StrictMock<MockLogReceiver> receiver_; |
| + testing::StrictMock<MockLogReceiver> receiver2_; |
| +}; |
| + |
| +TEST_F(LogRouterTest, ProcessLog_OneReceiver) { |
| + LogRouter router; |
| + |
| + // When inactive, logs should not have been accumulated. |
| + EXPECT_CALL(receiver_, LogSavePasswordProgress(kTestText)).Times(0); |
| + EXPECT_CALL(receiver2_, LogSavePasswordProgress(_)).Times(0); |
| + router.ProcessLog(kTestText); |
|
Ilya Sherman
2014/05/02 23:38:38
Please split this off to a ZeroReceivers test case
vabr (Chromium)
2014/05/06 13:16:30
I split that as suggested (+ modified to respect t
|
| + |
| + ASSERT_TRUE(router.RegisterReceiver(&receiver_)); |
| + |
| + // Check that only logs generated after activation are passed. |
|
Ilya Sherman
2014/05/02 23:38:38
Please test this in a separate test case as well.
vabr (Chromium)
2014/05/06 13:16:30
After CHECKing against calling ProcessLog without
|
| + EXPECT_CALL(receiver_, LogSavePasswordProgress(kTestText2)).Times(1); |
| + router.ProcessLog(kTestText2); |
| + |
| + ASSERT_TRUE(router.UnregisterReceiver(&receiver_)); |
| + EXPECT_CALL(receiver_, LogSavePasswordProgress(kTestText3)).Times(0); |
| + router.ProcessLog(kTestText3); |
| +} |
| + |
| +TEST_F(LogRouterTest, ProcessLog_TwoReceivers) { |
| + LogRouter router; |
| + |
| + ASSERT_TRUE(router.RegisterReceiver(&receiver_)); |
| + |
| + EXPECT_CALL(receiver_, LogSavePasswordProgress(kTestText)).Times(1); |
| + router.ProcessLog(kTestText); |
| + |
| + // Accumulated logs get passed on registration. |
| + EXPECT_CALL(receiver2_, LogSavePasswordProgress(kTestText)).Times(1); |
| + ASSERT_TRUE(router.RegisterReceiver(&receiver2_)); |
| + |
| + EXPECT_CALL(receiver_, LogSavePasswordProgress(kTestText2)).Times(1); |
| + EXPECT_CALL(receiver2_, LogSavePasswordProgress(kTestText2)).Times(1); |
| + router.ProcessLog(kTestText2); |
| + |
| + ASSERT_TRUE(router.UnregisterReceiver(&receiver2_)); |
| + |
| + EXPECT_CALL(receiver_, LogSavePasswordProgress(kTestText3)).Times(1); |
| + EXPECT_CALL(receiver2_, LogSavePasswordProgress(_)).Times(0); |
| + router.ProcessLog(kTestText3); |
| + |
| + ASSERT_TRUE(router.UnregisterReceiver(&receiver_)); |
| + EXPECT_CALL(receiver_, LogSavePasswordProgress(kTestText4)).Times(0); |
| + router.ProcessLog(kTestText4); |
| +} |
| + |
| +// The following tests cover cases of registration and unregistration not tested |
|
vabr (Chromium)
2014/05/06 13:16:30
I dropped all of the following tests, as the teste
|
| +// above. |
| + |
| +TEST_F(LogRouterTest, RegisterClient_Fail) { |
| + LogRouter router; |
| + EXPECT_TRUE(router.RegisterClient(&client_)); |
| + EXPECT_FALSE(router.RegisterClient(&client_)); |
| + EXPECT_TRUE(router.UnregisterClient(&client_)); |
| +} |
| + |
| +TEST_F(LogRouterTest, UnregisterClient_Fail) { |
| + LogRouter router; |
| + EXPECT_TRUE(router.RegisterClient(&client_)); |
| + EXPECT_FALSE(router.UnregisterClient(&client2_)); |
| + EXPECT_TRUE(router.UnregisterClient(&client_)); |
| + EXPECT_FALSE(router.UnregisterClient(&client_)); |
| +} |
| + |
| +TEST_F(LogRouterTest, RegisterReceiver_Fail) { |
| + LogRouter router; |
| + EXPECT_TRUE(router.RegisterReceiver(&receiver_)); |
| + EXPECT_FALSE(router.RegisterReceiver(&receiver_)); |
| + EXPECT_TRUE(router.UnregisterReceiver(&receiver_)); |
| +} |
| + |
| +TEST_F(LogRouterTest, UnregisterReceiver_Fail) { |
| + LogRouter router; |
| + EXPECT_TRUE(router.RegisterReceiver(&receiver_)); |
| + EXPECT_FALSE(router.UnregisterReceiver(&receiver2_)); |
| + EXPECT_TRUE(router.UnregisterReceiver(&receiver_)); |
| + EXPECT_FALSE(router.UnregisterReceiver(&receiver_)); |
| +} |
| + |
| +} // namespace password_manager |