summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrsesek@chromium.org <rsesek@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-06-14 15:56:05 +0000
committerrsesek@chromium.org <rsesek@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-06-14 15:56:05 +0000
commit3ef0ee03cfbfd4735da93e6a535142d0a401baf5 (patch)
treeb5129a189a242e83b067053f1de022cd9edf9e05
parent911d6d1aa87281af55448edb2fe9e5b8c4503ddb (diff)
downloadchromium_src-3ef0ee03cfbfd4735da93e6a535142d0a401baf5.zip
chromium_src-3ef0ee03cfbfd4735da93e6a535142d0a401baf5.tar.gz
chromium_src-3ef0ee03cfbfd4735da93e6a535142d0a401baf5.tar.bz2
Improve table_row_nsimage_cache_unittest.mm to get 100% code coverage.
BUG=32129 TEST=Covered by unit tests. Review URL: http://codereview.chromium.org/2781004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@49688 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/cocoa/table_row_nsimage_cache_unittest.mm218
1 files changed, 178 insertions, 40 deletions
diff --git a/chrome/browser/cocoa/table_row_nsimage_cache_unittest.mm b/chrome/browser/cocoa/table_row_nsimage_cache_unittest.mm
index 1568b04..271534a 100644
--- a/chrome/browser/cocoa/table_row_nsimage_cache_unittest.mm
+++ b/chrome/browser/cocoa/table_row_nsimage_cache_unittest.mm
@@ -4,58 +4,196 @@
#include "chrome/browser/cocoa/table_row_nsimage_cache.h"
-#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace {
-using ::testing::Return;
-
-class MockTable : public TableRowNSImageCache::Table {
+class TestTable : public TableRowNSImageCache::Table {
public:
- MOCK_CONST_METHOD0(RowCount, int());
- MOCK_CONST_METHOD1(GetIcon, SkBitmap(int));
+
+ std::vector<SkBitmap>* rows() {
+ return &rows_;
+ }
+
+ // TableRowNSImageCache::Table overrides.
+ virtual int RowCount() const {
+ return rows_.size();
+ }
+ virtual SkBitmap GetIcon(int index) const {
+ return rows_[index];
+ }
+
+ private:
+ std::vector<SkBitmap> rows_;
};
-TEST(TableRowNSImageCacheTest, Basics) {
- SkBitmap first_bitmap;
- first_bitmap.setConfig(SkBitmap::kARGB_8888_Config, 40, 30);
- first_bitmap.eraseRGB(255, 0, 0);
- ASSERT_TRUE(first_bitmap.allocPixels());
+SkBitmap MakeImage(int width, int height) {
+ SkBitmap image;
+ image.setConfig(SkBitmap::kARGB_8888_Config, width, height);
+ EXPECT_TRUE(image.allocPixels());
+ image.eraseRGB(255, 0, 0);
+ return image;
+}
+
+// Define this as a macro so that the original variable names can be used in
+// test output.
+#define COMPARE_SK_NS_IMG_SIZES(skia, cocoa) \
+ EXPECT_EQ(skia.width(), [cocoa size].width); \
+ EXPECT_EQ(skia.height(), [cocoa size].height);
+
+TEST(TableRowNSImageCacheTest, ModelChanged) {
+ TestTable table;
+ std::vector<SkBitmap>* rows = table.rows();
+ rows->push_back(MakeImage(10, 10));
+ rows->push_back(MakeImage(20, 20));
+ rows->push_back(MakeImage(30, 30));
+ TableRowNSImageCache cache(&table);
+
+ NSImage* image0 = cache.GetImageForRow(0);
+ NSImage* image1 = cache.GetImageForRow(1);
+ NSImage* image2 = cache.GetImageForRow(2);
+
+ COMPARE_SK_NS_IMG_SIZES(rows->at(0), image0);
+ COMPARE_SK_NS_IMG_SIZES(rows->at(1), image1);
+ COMPARE_SK_NS_IMG_SIZES(rows->at(2), image2);
+
+ rows->clear();
+
+ rows->push_back(MakeImage(15, 15));
+ rows->push_back(MakeImage(25, 25));
+ rows->push_back(MakeImage(35, 35));
+ rows->push_back(MakeImage(45, 45));
+
+ // Invalidate the entire model.
+ cache.OnModelChanged();
+
+ EXPECT_NE(image0, cache.GetImageForRow(0));
+ image0 = cache.GetImageForRow(0);
+
+ EXPECT_NE(image1, cache.GetImageForRow(1));
+ image1 = cache.GetImageForRow(1);
+
+ EXPECT_NE(image2, cache.GetImageForRow(2));
+ image2 = cache.GetImageForRow(2);
+
+ NSImage* image3 = cache.GetImageForRow(3);
+
+ COMPARE_SK_NS_IMG_SIZES(rows->at(0), image0);
+ COMPARE_SK_NS_IMG_SIZES(rows->at(1), image1);
+ COMPARE_SK_NS_IMG_SIZES(rows->at(2), image2);
+ COMPARE_SK_NS_IMG_SIZES(rows->at(3), image3);
+}
+
+
+TEST(TableRowNSImageCacheTest, ItemsChanged) {
+ TestTable table;
+ std::vector<SkBitmap>* rows = table.rows();
+ rows->push_back(MakeImage(10, 10));
+ rows->push_back(MakeImage(20, 20));
+ rows->push_back(MakeImage(30, 30));
+ TableRowNSImageCache cache(&table);
+
+ NSImage* image0 = cache.GetImageForRow(0);
+ NSImage* image1 = cache.GetImageForRow(1);
+ NSImage* image2 = cache.GetImageForRow(2);
- SkBitmap second_bitmap;
- second_bitmap.setConfig(SkBitmap::kARGB_8888_Config, 20, 10);
- second_bitmap.eraseRGB(0, 255, 0);
- ASSERT_TRUE(second_bitmap.allocPixels());
+ COMPARE_SK_NS_IMG_SIZES(rows->at(0), image0);
+ COMPARE_SK_NS_IMG_SIZES(rows->at(1), image1);
+ COMPARE_SK_NS_IMG_SIZES(rows->at(2), image2);
- MockTable table;
+ // Update the middle image.
+ (*rows)[1] = MakeImage(25, 25);
+ cache.OnItemsChanged(/* start=*/1, /* count=*/1);
- EXPECT_CALL(table, RowCount()).WillRepeatedly(Return(2));
+ // Make sure the other items remained the same.
+ EXPECT_EQ(image0, cache.GetImageForRow(0));
+ EXPECT_EQ(image2, cache.GetImageForRow(2));
+
+ image1 = cache.GetImageForRow(1);
+ COMPARE_SK_NS_IMG_SIZES(rows->at(1), image1);
+
+ // Update more than one image.
+ (*rows)[0] = MakeImage(15, 15);
+ (*rows)[1] = MakeImage(27, 27);
+ EXPECT_EQ(3U, rows->size());
+ cache.OnItemsChanged(0, 2);
+
+ image0 = cache.GetImageForRow(0);
+ image1 = cache.GetImageForRow(1);
+
+ COMPARE_SK_NS_IMG_SIZES(rows->at(0), image0);
+ COMPARE_SK_NS_IMG_SIZES(rows->at(1), image1);
+}
+
+
+TEST(TableRowNSImageCacheTest, ItemsAdded) {
+ TestTable table;
+ std::vector<SkBitmap>* rows = table.rows();
+ rows->push_back(MakeImage(10, 10));
+ rows->push_back(MakeImage(20, 20));
TableRowNSImageCache cache(&table);
- // Check both images are only generated once
- EXPECT_CALL(table, GetIcon(0)).WillOnce(Return(first_bitmap));
- NSImage* first_image = cache.GetImageForRow(0);
- EXPECT_EQ(40, [first_image size].width);
- EXPECT_EQ(30, [first_image size].height);
- EXPECT_EQ(first_image, cache.GetImageForRow(0));
-
- EXPECT_CALL(table, GetIcon(1)).WillOnce(Return(second_bitmap));
- NSImage* second_image = cache.GetImageForRow(1);
- EXPECT_EQ(20, [second_image size].width);
- EXPECT_EQ(10, [second_image size].height);
- EXPECT_EQ(second_image, cache.GetImageForRow(1));
-
- // Check that invalidating the second icon only invalidates the second icon
- cache.OnItemsChanged(/* start =*/1, /* length =*/1);
- EXPECT_EQ(first_image, cache.GetImageForRow(0));
-
- EXPECT_CALL(table, GetIcon(1)).WillOnce(Return(first_bitmap));
- NSImage* new_second_image = cache.GetImageForRow(1);
- EXPECT_EQ(40, [new_second_image size].width);
- EXPECT_EQ(30, [new_second_image size].height);
- EXPECT_EQ(new_second_image, cache.GetImageForRow(1));
- EXPECT_NE(new_second_image, second_image);
+ NSImage* image0 = cache.GetImageForRow(0);
+ NSImage* image1 = cache.GetImageForRow(1);
+
+ COMPARE_SK_NS_IMG_SIZES(rows->at(0), image0);
+ COMPARE_SK_NS_IMG_SIZES(rows->at(1), image1);
+
+ // Add an item to the end.
+ rows->push_back(MakeImage(30, 30));
+ cache.OnItemsAdded(2, 1);
+
+ // Make sure image 1 stayed the same.
+ EXPECT_EQ(image1, cache.GetImageForRow(1));
+ COMPARE_SK_NS_IMG_SIZES(rows->at(1), image1);
+
+ // Check that image 2 got added correctly.
+ NSImage* image2 = cache.GetImageForRow(2);
+ COMPARE_SK_NS_IMG_SIZES(rows->at(2), image2);
+
+ // Add two items to the begging.
+ rows->insert(rows->begin(), MakeImage(7, 7));
+ rows->insert(rows->begin(), MakeImage(3, 3));
+ cache.OnItemsAdded(0, 2);
+
+ NSImage* image00 = cache.GetImageForRow(0);
+ NSImage* image01 = cache.GetImageForRow(1);
+
+ COMPARE_SK_NS_IMG_SIZES(rows->at(0), image00);
+ COMPARE_SK_NS_IMG_SIZES(rows->at(1), image01);
+}
+
+
+TEST(TableRowNSImageCacheTest, ItemsRemoved) {
+ TestTable table;
+ std::vector<SkBitmap>* rows = table.rows();
+ rows->push_back(MakeImage(10, 10));
+ rows->push_back(MakeImage(20, 20));
+ rows->push_back(MakeImage(30, 30));
+ rows->push_back(MakeImage(40, 40));
+ rows->push_back(MakeImage(50, 50));
+ TableRowNSImageCache cache(&table);
+
+ NSImage* image0 = cache.GetImageForRow(0);
+ NSImage* image1 = cache.GetImageForRow(1);
+ NSImage* image2 = cache.GetImageForRow(2);
+ NSImage* image3 = cache.GetImageForRow(3);
+ NSImage* image4 = cache.GetImageForRow(4);
+
+ COMPARE_SK_NS_IMG_SIZES(rows->at(0), image0);
+ COMPARE_SK_NS_IMG_SIZES(rows->at(1), image1);
+ COMPARE_SK_NS_IMG_SIZES(rows->at(2), image2);
+ COMPARE_SK_NS_IMG_SIZES(rows->at(3), image3);
+ COMPARE_SK_NS_IMG_SIZES(rows->at(4), image4);
+
+ rows->erase(rows->begin() + 1, rows->begin() + 4); // [20x20, 50x50)
+ cache.OnItemsRemoved(1, 3);
+
+ image0 = cache.GetImageForRow(0);
+ image1 = cache.GetImageForRow(1);
+
+ COMPARE_SK_NS_IMG_SIZES(rows->at(0), image0);
+ COMPARE_SK_NS_IMG_SIZES(rows->at(1), image1);
}
} // namespace