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

Side by Side Diff: chrome/browser/cocoa/table_row_nsimage_cache_unittest.mm

Issue 2781004: Improve table_row_nsimage_cache_unittest.mm to get 100% code coverage. (Closed) Base URL: http://src.chromium.org/git/chromium.git
Patch Set: '' Created 10 years, 6 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 unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/cocoa/table_row_nsimage_cache.h" 5 #include "chrome/browser/cocoa/table_row_nsimage_cache.h"
6 6
7 #include "testing/gmock/include/gmock/gmock.h"
8 #include "testing/gtest/include/gtest/gtest.h" 7 #include "testing/gtest/include/gtest/gtest.h"
9 8
10 namespace { 9 namespace {
11 10
12 using ::testing::Return; 11 class TestTable : public TableRowNSImageCache::Table {
12 public:
13 13
14 class MockTable : public TableRowNSImageCache::Table { 14 std::vector<SkBitmap>* rows() {
15 public: 15 return &rows_;
16 MOCK_CONST_METHOD0(RowCount, int()); 16 }
17 MOCK_CONST_METHOD1(GetIcon, SkBitmap(int)); 17
18 // TableRowNSImageCache::Table overrides.
19 virtual int RowCount() const {
20 return rows_.size();
21 }
22 virtual SkBitmap GetIcon(int index) const {
23 return rows_[index];
24 }
25
26 private:
27 std::vector<SkBitmap> rows_;
18 }; 28 };
19 29
20 TEST(TableRowNSImageCacheTest, Basics) { 30 SkBitmap MakeImage(int width, int height) {
21 SkBitmap first_bitmap; 31 SkBitmap image;
22 first_bitmap.setConfig(SkBitmap::kARGB_8888_Config, 40, 30); 32 image.setConfig(SkBitmap::kARGB_8888_Config, width, height);
23 first_bitmap.eraseRGB(255, 0, 0); 33 ASSERT_TRUE(image.allocPixels());
24 ASSERT_TRUE(first_bitmap.allocPixels()); 34 image.eraseRGB(255, 0, 0);
35 return image;
36 }
25 37
26 SkBitmap second_bitmap; 38 // Define this as a macro so that the original variable names can be used in
27 second_bitmap.setConfig(SkBitmap::kARGB_8888_Config, 20, 10); 39 // test output.
28 second_bitmap.eraseRGB(0, 255, 0); 40 #define COMPARE_SK_NS_IMG_SIZES((skia), (cocoa)) \
29 ASSERT_TRUE(second_bitmap.allocPixels()); 41 EXPECT_EQ(skia.width(), [cocoa size].width); \
42 EXPECT_EQ(skia.height(), [cocoa size].height);
30 43
31 MockTable table; 44 TEST(TableRowNSImageCacheTest, ModelChanged) {
32 45 TestTable table;
33 EXPECT_CALL(table, RowCount()).WillRepeatedly(Return(2)); 46 std::vector<SkBitmap>* rows = table.rows();
47 rows->push_back(MakeImage(10, 10));
48 rows->push_back(MakeImage(20, 20));
49 rows->push_back(MakeImage(30, 30));
34 TableRowNSImageCache cache(&table); 50 TableRowNSImageCache cache(&table);
35 51
36 // Check both images are only generated once 52 NSImage* image0 = cache.GetImageForRow(0);
37 EXPECT_CALL(table, GetIcon(0)).WillOnce(Return(first_bitmap)); 53 NSImage* image1 = cache.GetImageForRow(1);
38 NSImage* first_image = cache.GetImageForRow(0); 54 NSImage* image2 = cache.GetImageForRow(2);
39 EXPECT_EQ(40, [first_image size].width);
40 EXPECT_EQ(30, [first_image size].height);
41 EXPECT_EQ(first_image, cache.GetImageForRow(0));
42 55
43 EXPECT_CALL(table, GetIcon(1)).WillOnce(Return(second_bitmap)); 56 COMPARE_SK_NS_IMG_SIZES(rows->at(0), image0);
44 NSImage* second_image = cache.GetImageForRow(1); 57 COMPARE_SK_NS_IMG_SIZES(rows->at(1), image1);
45 EXPECT_EQ(20, [second_image size].width); 58 COMPARE_SK_NS_IMG_SIZES(rows->at(2), image2);
46 EXPECT_EQ(10, [second_image size].height);
47 EXPECT_EQ(second_image, cache.GetImageForRow(1));
48 59
49 // Check that invalidating the second icon only invalidates the second icon 60 rows->clear();
50 cache.OnItemsChanged(/* start =*/1, /* length =*/1);
51 EXPECT_EQ(first_image, cache.GetImageForRow(0));
52 61
53 EXPECT_CALL(table, GetIcon(1)).WillOnce(Return(first_bitmap)); 62 rows->push_back(MakeImage(15, 15));
54 NSImage* new_second_image = cache.GetImageForRow(1); 63 rows->push_back(MakeImage(25, 25));
55 EXPECT_EQ(40, [new_second_image size].width); 64 rows->push_back(MakeImage(35, 35));
56 EXPECT_EQ(30, [new_second_image size].height); 65 rows->push_back(MakeImage(45, 45));
57 EXPECT_EQ(new_second_image, cache.GetImageForRow(1)); 66
58 EXPECT_NE(new_second_image, second_image); 67 // Invalidate the entire model.
68 cache.OnModelChanged();
69
70 EXPECT_NE(image0, cache.GetImageForRow(0));
71 image0 = cache.GetImageForRow(0);
72
73 EXPECT_NE(image1, cache.GetImageForRow(1));
74 image1 = cache.GetImageForRow(1);
75
76 EXPECT_NE(image2, cache.GetImageForRow(2));
77 image2 = cache.GetImageForRow(2);
78
79 NSImage* image3 = cache.GetImageForRow(3);
80
81 COMPARE_SK_NS_IMG_SIZES(rows->at(0), image0);
82 COMPARE_SK_NS_IMG_SIZES(rows->at(1), image1);
83 COMPARE_SK_NS_IMG_SIZES(rows->at(2), image2);
84 COMPARE_SK_NS_IMG_SIZES(rows->at(3), image3);
85 }
86
87
88 TEST(TableRowNSImageCacheTest, ItemsChanged) {
89 TestTable table;
90 std::vector<SkBitmap>* rows = table.rows();
91 rows->push_back(MakeImage(10, 10));
92 rows->push_back(MakeImage(20, 20));
93 rows->push_back(MakeImage(30, 30));
94 TableRowNSImageCache cache(&table);
95
96 NSImage* image0 = cache.GetImageForRow(0);
97 NSImage* image1 = cache.GetImageForRow(1);
98 NSImage* image2 = cache.GetImageForRow(2);
99
100 COMPARE_SK_NS_IMG_SIZES(rows->at(0), image0);
101 COMPARE_SK_NS_IMG_SIZES(rows->at(1), image1);
102 COMPARE_SK_NS_IMG_SIZES(rows->at(2), image2);
103
104 // Update the middle image.
105 (*rows)[1] = MakeImage(25, 25);
106 cache.OnItemsChanged(/* start=*/1, /* count=*/1);
107
108 // Make sure the other items remained the same.
109 EXPECT_EQ(image0, cache.GetImageForRow(0));
110 EXPECT_EQ(image2, cache.GetImageForRow(2));
111
112 image1 = cache.GetImageForRow(1);
113 COMPARE_SK_NS_IMG_SIZES(rows->at(1), image1);
114
115 // Update more than one image.
116 (*rows)[0] = MakeImage(15, 15);
117 (*rows)[1] = MakeImage(27, 27)
118 EXPECT_EQ(3U, rows->size());
119 cache.OnItemsChanged(0, 2);
120
121 image0 = cache.GetImageForRow(0);
122 image1 = cache.GetImageForRow(1);
123
124 COMPARE_SK_NS_IMG_SIZES(rows->at(0), image0);
125 COMPARE_SK_NS_IMG_SIZES(rows->at(1), image1);
126 }
127
128
129 TEST(TableRowNSImageCacheTest, ItemsAdded) {
130 TestTable table;
131 std::vector<SkBitmap>* rows = table.rows();
132 rows->push_back(MakeImage(10, 10));
133 rows->push_back(MakeImage(20, 20));
134 TableRowNSImageCache cache(&table);
135
136 NSImage* image0 = cache.GetImageForRow(0);
137 NSImage* image1 = cache.GetImageForRow(1);
138
139 COMPARE_SK_NS_IMG_SIZES(rows->at(0), image0);
140 COMPARE_SK_NS_IMG_SIZES(rows->at(1), image1);
141
142 // Add an item to the end.
143 rows->push_back(MakeImage(30, 30));
144 cache.OnItemsAdded(2, 1);
145
146 // Make sure image 1 stayed the same.
147 EXPECT_EQ(image1, cache.GetImageForRow(1));
148 COMPARE_SK_NS_IMG_SIZES(rows->at(1), image1);
149
150 // Check that image 2 got added correctly.
151 NSImage* image2 = cache.GetImageForRow(2);
152 COMPARE_SK_NS_IMG_SIZES(rows->at(2), image2);
153
154 // Add two items to the begging.
155 rows->insert(rows->begin(), MakeImage(7, 7));
156 rows->insert(rows->begin(), MakeImage(3, 3));
157 cache.OnItemsAdded(0, 2);
158
159 NSImage* image00 = cache.GetImageForRow(0);
160 NSImage* image01 = cache.GetImageForRow(1);
161
162 COMPARE_SK_NS_IMG_SIZES(rows->at(0), image00);
163 COMPARE_SK_NS_IMG_SIZES(rows->at(1), image01);
164 }
165
166
167 TEST(TableRowNSImageCacheTest, ItemsRemoved) {
168 TestTable table;
169 std::vector<SkBitmap>* rows = table.rows();
170 rows->push_back(MakeImage(10, 10));
171 rows->push_back(MakeImage(20, 20));
172 rows->push_back(MakeImage(30, 30));
173 rows->push_back(MakeImage(40, 40));
174 rows->push_back(MakeImage(50, 50));
175 TableRowNSImageCache cache(&table);
176
177 NSImage* image0 = cache.GetImageForRow(0);
178 NSImage* image1 = cache.GetImageForRow(1);
179 NSImage* image2 = cache.GetImageForRow(2);
180 NSImage* image3 = cache.GetImageForRow(3);
181 NSImage* image4 = cache.GetImageForRow(4);
182
183 COMPARE_SK_NS_IMG_SIZES(rows->at(0), image0);
184 COMPARE_SK_NS_IMG_SIZES(rows->at(1), image1);
185 COMPARE_SK_NS_IMG_SIZES(rows->at(2), image2);
186 COMPARE_SK_NS_IMG_SIZES(rows->at(3), image3);
187 COMPARE_SK_NS_IMG_SIZES(rows->at(4), image4);
188
189 rows->erase(rows->begin() + 1, rows->begin() + 4); // [20x20, 50x50)
190 cache.OnItemsRemoved(1, 3);
191
192 image0 = cache.GetImageForRow(0);
193 image1 = cache.GetImageForRow(1);
194
195 COMPARE_SK_NS_IMG_SIZES(rows->at(0), image0);
196 COMPARE_SK_NS_IMG_SIZES(rows->at(1), image1);
59 } 197 }
60 198
61 } // namespace 199 } // namespace
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698