1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
// Copyright 2015 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 "ios/chrome/browser/favicon/large_icon_cache.h"
#include "base/macros.h"
#include "components/favicon_base/fallback_icon_style.h"
#include "components/favicon_base/favicon_types.h"
#include "skia/ext/skia_utils_ios.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/gfx/codec/png_codec.h"
namespace {
const char kDummyUrl[] = "http://www.example.com";
const char kDummyUrl2[] = "http://www.example2.com";
const SkColor kTestColor = SK_ColorRED;
favicon_base::FaviconRawBitmapResult CreateTestBitmap(int w,
int h,
SkColor color) {
favicon_base::FaviconRawBitmapResult result;
result.expired = false;
// Create bitmap and fill with |color|.
scoped_refptr<base::RefCountedBytes> data(new base::RefCountedBytes());
SkBitmap bitmap;
bitmap.allocN32Pixels(w, h);
bitmap.eraseColor(color);
gfx::PNGCodec::EncodeBGRASkBitmap(bitmap, false, &data->data());
result.bitmap_data = data;
result.pixel_size = gfx::Size(w, h);
result.icon_url = GURL(kDummyUrl);
result.icon_type = favicon_base::TOUCH_ICON;
CHECK(result.is_valid());
return result;
}
class LargeIconCacheTest : public testing::Test {
public:
LargeIconCacheTest() {
expected_fallback_icon_style_.reset(new favicon_base::FallbackIconStyle());
expected_fallback_icon_style_->background_color = kTestColor;
expected_bitmap_ = CreateTestBitmap(24, 24, kTestColor);
large_icon_cache_.reset(new LargeIconCache);
}
~LargeIconCacheTest() override {}
protected:
scoped_ptr<LargeIconCache> large_icon_cache_;
favicon_base::FaviconRawBitmapResult expected_bitmap_;
scoped_ptr<favicon_base::FallbackIconStyle> expected_fallback_icon_style_;
bool is_callback_invoked_;
private:
DISALLOW_COPY_AND_ASSIGN(LargeIconCacheTest);
};
TEST_F(LargeIconCacheTest, EmptyCache) {
scoped_ptr<LargeIconCache> large_icon_cache(new LargeIconCache);
EXPECT_EQ(nullptr, large_icon_cache->GetCachedResult(GURL(kDummyUrl)));
}
TEST_F(LargeIconCacheTest, RetreiveItem) {
scoped_ptr<favicon_base::LargeIconResult> expected_result1;
scoped_ptr<favicon_base::LargeIconResult> expected_result2;
expected_result1.reset(new favicon_base::LargeIconResult(expected_bitmap_));
expected_result2.reset(new favicon_base::LargeIconResult(
new favicon_base::FallbackIconStyle(*expected_fallback_icon_style_)));
large_icon_cache_->SetCachedResult(GURL(kDummyUrl), *expected_result1);
large_icon_cache_->SetCachedResult(GURL(kDummyUrl2), *expected_result2);
scoped_ptr<favicon_base::LargeIconResult> result1 =
large_icon_cache_->GetCachedResult(GURL(kDummyUrl));
EXPECT_EQ(true, result1->bitmap.is_valid());
EXPECT_EQ(expected_result1->bitmap.pixel_size, result1->bitmap.pixel_size);
scoped_ptr<favicon_base::LargeIconResult> result2 =
large_icon_cache_->GetCachedResult(GURL(kDummyUrl2));
EXPECT_EQ(false, result2->bitmap.is_valid());
EXPECT_EQ(expected_result2->fallback_icon_style->background_color,
result2->fallback_icon_style->background_color);
// Test overwriting kDummyUrl.
large_icon_cache_->SetCachedResult(GURL(kDummyUrl), *expected_result2);
scoped_ptr<favicon_base::LargeIconResult> result3 =
large_icon_cache_->GetCachedResult(GURL(kDummyUrl2));
EXPECT_EQ(false, result3->bitmap.is_valid());
EXPECT_EQ(expected_result2->fallback_icon_style->background_color,
result3->fallback_icon_style->background_color);
}
} // namespace
|