| Index: components/favicon/core/large_icon_service_unittest.cc
|
| diff --git a/components/favicon/core/large_icon_service_unittest.cc b/components/favicon/core/large_icon_service_unittest.cc
|
| index e3bc5f9c5607166ac290dbe40bf4dcfc75f9bbcb..7e0b7dce22f8fe4b62c1afa9432d1e814f285379 100644
|
| --- a/components/favicon/core/large_icon_service_unittest.cc
|
| +++ b/components/favicon/core/large_icon_service_unittest.cc
|
| @@ -15,9 +15,10 @@
|
| #include "base/task/cancelable_task_tracker.h"
|
| #include "base/threading/thread_task_runner_handle.h"
|
| #include "components/favicon/core/favicon_client.h"
|
| -#include "components/favicon/core/favicon_service.h"
|
| +#include "components/favicon/core/test/mock_favicon_service.h"
|
| #include "components/favicon_base/fallback_icon_style.h"
|
| #include "components/favicon_base/favicon_types.h"
|
| +#include "testing/gmock/include/gmock/gmock.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| #include "third_party/skia/include/core/SkBitmap.h"
|
| #include "third_party/skia/include/core/SkColor.h"
|
| @@ -29,9 +30,10 @@
|
| namespace favicon {
|
| namespace {
|
|
|
| +using testing::_;
|
| +
|
| const char kDummyUrl[] = "http://www.example.com";
|
| const char kDummyIconUrl[] = "http://www.example.com/touch_icon.png";
|
| -
|
| const SkColor kTestColor = SK_ColorRED;
|
|
|
| favicon_base::FaviconRawBitmapResult CreateTestBitmap(
|
| @@ -54,71 +56,16 @@ favicon_base::FaviconRawBitmapResult CreateTestBitmap(
|
| return result;
|
| }
|
|
|
| -// A mock FaviconService that emits pre-programmed response.
|
| -class MockFaviconService : public FaviconService {
|
| - public:
|
| - MockFaviconService() : FaviconService(nullptr, nullptr) {
|
| - }
|
| -
|
| - ~MockFaviconService() override {
|
| - }
|
| -
|
| - base::CancelableTaskTracker::TaskId GetLargestRawFaviconForPageURL(
|
| - const GURL& page_url,
|
| - const std::vector<int>& icon_types,
|
| - int minimum_size_in_pixels,
|
| - const favicon_base::FaviconRawBitmapCallback& callback,
|
| - base::CancelableTaskTracker* tracker) override {
|
| - favicon_base::FaviconRawBitmapResult mock_result =
|
| - mock_result_queue_.front();
|
| - mock_result_queue_.pop_front();
|
| - return tracker->PostTask(base::ThreadTaskRunnerHandle::Get().get(),
|
| - FROM_HERE, base::Bind(callback, mock_result));
|
| - }
|
| -
|
| - void InjectResult(const favicon_base::FaviconRawBitmapResult& mock_result) {
|
| - mock_result_queue_.push_back(mock_result);
|
| - }
|
| -
|
| - bool HasUnusedResults() {
|
| - return !mock_result_queue_.empty();
|
| - }
|
| -
|
| - private:
|
| - std::deque<favicon_base::FaviconRawBitmapResult> mock_result_queue_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(MockFaviconService);
|
| -};
|
| -
|
| -// This class provides access to LargeIconService internals, using the current
|
| -// thread's task runner for testing.
|
| -class TestLargeIconService : public LargeIconService {
|
| - public:
|
| - explicit TestLargeIconService(MockFaviconService* mock_favicon_service)
|
| - : LargeIconService(mock_favicon_service,
|
| - base::ThreadTaskRunnerHandle::Get()) {}
|
| - ~TestLargeIconService() override {
|
| - }
|
| -
|
| - private:
|
| - DISALLOW_COPY_AND_ASSIGN(TestLargeIconService);
|
| -};
|
| -
|
| class LargeIconServiceTest : public testing::Test {
|
| public:
|
| - LargeIconServiceTest() : is_callback_invoked_(false) {
|
| - }
|
| + LargeIconServiceTest()
|
| + : large_icon_service_(&mock_favicon_service_,
|
| + base::ThreadTaskRunnerHandle::Get()),
|
| + is_callback_invoked_(false) {}
|
|
|
| ~LargeIconServiceTest() override {
|
| }
|
|
|
| - void SetUp() override {
|
| - testing::Test::SetUp();
|
| - mock_favicon_service_.reset(new MockFaviconService());
|
| - large_icon_service_.reset(
|
| - new TestLargeIconService(mock_favicon_service_.get()));
|
| - }
|
| -
|
| void ResultCallback(const favicon_base::LargeIconResult& result) {
|
| is_callback_invoked_ = true;
|
|
|
| @@ -135,15 +82,21 @@ class LargeIconServiceTest : public testing::Test {
|
| EXPECT_EQ(*expected_fallback_icon_style_,
|
| *result.fallback_icon_style);
|
| }
|
| - // Ensure all mock results have been consumed.
|
| - EXPECT_FALSE(mock_favicon_service_->HasUnusedResults());
|
| + }
|
| +
|
| + void InjectMockResult(
|
| + const GURL& page_url,
|
| + const favicon_base::FaviconRawBitmapResult& mock_result) {
|
| + EXPECT_CALL(mock_favicon_service_,
|
| + GetLargestRawFaviconForPageURL(page_url, _, _, _, _))
|
| + .WillOnce(PostReply<5>(mock_result));
|
| }
|
|
|
| protected:
|
| base::MessageLoopForIO loop_;
|
|
|
| - std::unique_ptr<MockFaviconService> mock_favicon_service_;
|
| - std::unique_ptr<TestLargeIconService> large_icon_service_;
|
| + testing::StrictMock<MockFaviconService> mock_favicon_service_;
|
| + LargeIconService large_icon_service_;
|
| base::CancelableTaskTracker cancelable_task_tracker_;
|
|
|
| favicon_base::FaviconRawBitmapResult expected_bitmap_;
|
| @@ -157,9 +110,9 @@ class LargeIconServiceTest : public testing::Test {
|
| };
|
|
|
| TEST_F(LargeIconServiceTest, SameSize) {
|
| - mock_favicon_service_->InjectResult(CreateTestBitmap(24, 24, kTestColor));
|
| + InjectMockResult(GURL(kDummyUrl), CreateTestBitmap(24, 24, kTestColor));
|
| expected_bitmap_ = CreateTestBitmap(24, 24, kTestColor);
|
| - large_icon_service_->GetLargeIconOrFallbackStyle(
|
| + large_icon_service_.GetLargeIconOrFallbackStyle(
|
| GURL(kDummyUrl),
|
| 24, // |min_source_size_in_pixel|
|
| 24, // |desired_size_in_pixel|
|
| @@ -170,12 +123,10 @@ TEST_F(LargeIconServiceTest, SameSize) {
|
| }
|
|
|
| TEST_F(LargeIconServiceTest, ScaleDown) {
|
| - mock_favicon_service_->InjectResult(CreateTestBitmap(32, 32, kTestColor));
|
| + InjectMockResult(GURL(kDummyUrl), CreateTestBitmap(32, 32, kTestColor));
|
| expected_bitmap_ = CreateTestBitmap(24, 24, kTestColor);
|
| - large_icon_service_->GetLargeIconOrFallbackStyle(
|
| - GURL(kDummyUrl),
|
| - 24,
|
| - 24,
|
| + large_icon_service_.GetLargeIconOrFallbackStyle(
|
| + GURL(kDummyUrl), 24, 24,
|
| base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)),
|
| &cancelable_task_tracker_);
|
| base::RunLoop().RunUntilIdle();
|
| @@ -183,9 +134,9 @@ TEST_F(LargeIconServiceTest, ScaleDown) {
|
| }
|
|
|
| TEST_F(LargeIconServiceTest, ScaleUp) {
|
| - mock_favicon_service_->InjectResult(CreateTestBitmap(16, 16, kTestColor));
|
| + InjectMockResult(GURL(kDummyUrl), CreateTestBitmap(16, 16, kTestColor));
|
| expected_bitmap_ = CreateTestBitmap(24, 24, kTestColor);
|
| - large_icon_service_->GetLargeIconOrFallbackStyle(
|
| + large_icon_service_.GetLargeIconOrFallbackStyle(
|
| GURL(kDummyUrl),
|
| 14, // Lowered requirement so stored bitmap is admitted.
|
| 24,
|
| @@ -197,12 +148,10 @@ TEST_F(LargeIconServiceTest, ScaleUp) {
|
|
|
| // |desired_size_in_pixel| == 0 means retrieve original image without scaling.
|
| TEST_F(LargeIconServiceTest, NoScale) {
|
| - mock_favicon_service_->InjectResult(CreateTestBitmap(24, 24, kTestColor));
|
| + InjectMockResult(GURL(kDummyUrl), CreateTestBitmap(24, 24, kTestColor));
|
| expected_bitmap_ = CreateTestBitmap(24, 24, kTestColor);
|
| - large_icon_service_->GetLargeIconOrFallbackStyle(
|
| - GURL(kDummyUrl),
|
| - 16,
|
| - 0,
|
| + large_icon_service_.GetLargeIconOrFallbackStyle(
|
| + GURL(kDummyUrl), 16, 0,
|
| base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)),
|
| &cancelable_task_tracker_);
|
| base::RunLoop().RunUntilIdle();
|
| @@ -210,14 +159,12 @@ TEST_F(LargeIconServiceTest, NoScale) {
|
| }
|
|
|
| TEST_F(LargeIconServiceTest, FallbackSinceIconTooSmall) {
|
| - mock_favicon_service_->InjectResult(CreateTestBitmap(16, 16, kTestColor));
|
| + InjectMockResult(GURL(kDummyUrl), CreateTestBitmap(16, 16, kTestColor));
|
| expected_fallback_icon_style_.reset(new favicon_base::FallbackIconStyle);
|
| expected_fallback_icon_style_->background_color = kTestColor;
|
| expected_fallback_icon_style_->is_default_background_color = false;
|
| - large_icon_service_->GetLargeIconOrFallbackStyle(
|
| - GURL(kDummyUrl),
|
| - 24,
|
| - 24,
|
| + large_icon_service_.GetLargeIconOrFallbackStyle(
|
| + GURL(kDummyUrl), 24, 24,
|
| base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)),
|
| &cancelable_task_tracker_);
|
| base::RunLoop().RunUntilIdle();
|
| @@ -225,14 +172,12 @@ TEST_F(LargeIconServiceTest, FallbackSinceIconTooSmall) {
|
| }
|
|
|
| TEST_F(LargeIconServiceTest, FallbackSinceIconNotSquare) {
|
| - mock_favicon_service_->InjectResult(CreateTestBitmap(24, 32, kTestColor));
|
| + InjectMockResult(GURL(kDummyUrl), CreateTestBitmap(24, 32, kTestColor));
|
| expected_fallback_icon_style_.reset(new favicon_base::FallbackIconStyle);
|
| expected_fallback_icon_style_->background_color = kTestColor;
|
| expected_fallback_icon_style_->is_default_background_color = false;
|
| - large_icon_service_->GetLargeIconOrFallbackStyle(
|
| - GURL(kDummyUrl),
|
| - 24,
|
| - 24,
|
| + large_icon_service_.GetLargeIconOrFallbackStyle(
|
| + GURL(kDummyUrl), 24, 24,
|
| base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)),
|
| &cancelable_task_tracker_);
|
| base::RunLoop().RunUntilIdle();
|
| @@ -240,13 +185,11 @@ TEST_F(LargeIconServiceTest, FallbackSinceIconNotSquare) {
|
| }
|
|
|
| TEST_F(LargeIconServiceTest, FallbackSinceIconMissing) {
|
| - mock_favicon_service_->InjectResult(favicon_base::FaviconRawBitmapResult());
|
| + InjectMockResult(GURL(kDummyUrl), favicon_base::FaviconRawBitmapResult());
|
| // Expect default fallback style, including background.
|
| expected_fallback_icon_style_.reset(new favicon_base::FallbackIconStyle);
|
| - large_icon_service_->GetLargeIconOrFallbackStyle(
|
| - GURL(kDummyUrl),
|
| - 24,
|
| - 24,
|
| + large_icon_service_.GetLargeIconOrFallbackStyle(
|
| + GURL(kDummyUrl), 24, 24,
|
| base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)),
|
| &cancelable_task_tracker_);
|
| base::RunLoop().RunUntilIdle();
|
| @@ -254,13 +197,11 @@ TEST_F(LargeIconServiceTest, FallbackSinceIconMissing) {
|
| }
|
|
|
| TEST_F(LargeIconServiceTest, FallbackSinceIconMissingNoScale) {
|
| - mock_favicon_service_->InjectResult(favicon_base::FaviconRawBitmapResult());
|
| + InjectMockResult(GURL(kDummyUrl), favicon_base::FaviconRawBitmapResult());
|
| // Expect default fallback style, including background.
|
| expected_fallback_icon_style_.reset(new favicon_base::FallbackIconStyle);
|
| - large_icon_service_->GetLargeIconOrFallbackStyle(
|
| - GURL(kDummyUrl),
|
| - 24,
|
| - 0,
|
| + large_icon_service_.GetLargeIconOrFallbackStyle(
|
| + GURL(kDummyUrl), 24, 0,
|
| base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)),
|
| &cancelable_task_tracker_);
|
| base::RunLoop().RunUntilIdle();
|
| @@ -270,14 +211,12 @@ TEST_F(LargeIconServiceTest, FallbackSinceIconMissingNoScale) {
|
| // Oddball case where we demand a high resolution icon to scale down. Generates
|
| // fallback even though an icon with the final size is available.
|
| TEST_F(LargeIconServiceTest, FallbackSinceTooPicky) {
|
| - mock_favicon_service_->InjectResult(CreateTestBitmap(24, 24, kTestColor));
|
| + InjectMockResult(GURL(kDummyUrl), CreateTestBitmap(24, 24, kTestColor));
|
| expected_fallback_icon_style_.reset(new favicon_base::FallbackIconStyle);
|
| expected_fallback_icon_style_->background_color = kTestColor;
|
| expected_fallback_icon_style_->is_default_background_color = false;
|
| - large_icon_service_->GetLargeIconOrFallbackStyle(
|
| - GURL(kDummyUrl),
|
| - 32,
|
| - 24,
|
| + large_icon_service_.GetLargeIconOrFallbackStyle(
|
| + GURL(kDummyUrl), 32, 24,
|
| base::Bind(&LargeIconServiceTest::ResultCallback, base::Unretained(this)),
|
| &cancelable_task_tracker_);
|
| base::RunLoop().RunUntilIdle();
|
|
|