| // Copyright 2019 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 "chrome/browser/chromeos/throttle_observer.h" |
| |
| #include "base/bind.h" |
| #include "base/memory/weak_ptr.h" |
| #include "base/template_util.h" |
| #include "base/test/task_environment.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace chromeos { |
| |
| class ThrottleObserverTest |
| : public testing::Test, |
| public base::SupportsWeakPtr<ThrottleObserverTest> { |
| public: |
| ThrottleObserverTest() { |
| observer_.StartObserving( |
| nullptr /* content::BrowserContext* */, |
| base::BindRepeating(&ThrottleObserverTest::OnObserverStateChanged, |
| AsWeakPtr())); |
| } |
| |
| void OnObserverStateChanged() { notify_count_++; } |
| |
| protected: |
| ThrottleObserver* observer() { return &observer_; } |
| size_t notify_count() const { return notify_count_; } |
| |
| private: |
| ThrottleObserver observer_{ThrottleObserver::PriorityLevel::LOW, |
| "TestObserver"}; |
| size_t notify_count_{0}; |
| |
| DISALLOW_COPY_AND_ASSIGN(ThrottleObserverTest); |
| }; |
| |
| // Tests that ThrottleObserver can be constructed and destructed. |
| TEST_F(ThrottleObserverTest, TestConstructDestruct) {} |
| |
| // Tests that ThrottleObserver notifies observers only when its 'active' |
| // state changes |
| TEST_F(ThrottleObserverTest, TestSetActive) { |
| EXPECT_EQ(0U, notify_count()); |
| EXPECT_FALSE(observer()->active()); |
| |
| observer()->SetActive(true); |
| EXPECT_TRUE(observer()->active()); |
| EXPECT_EQ(1U, notify_count()); |
| |
| observer()->SetActive(true); |
| EXPECT_TRUE(observer()->active()); |
| EXPECT_EQ(1U, notify_count()); |
| |
| observer()->SetActive(false); |
| EXPECT_FALSE(observer()->active()); |
| EXPECT_EQ(2U, notify_count()); |
| } |
| |
| } // namespace chromeos |