| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "chrome/browser/ui/cocoa/table_row_nsimage_cache.h" | |
| 6 | |
| 7 #include "testing/gtest/include/gtest/gtest.h" | |
| 8 #include "third_party/skia/include/core/SkBitmap.h" | |
| 9 #include "ui/gfx/image/image_skia.h" | |
| 10 | |
| 11 namespace { | |
| 12 | |
| 13 class TestTable : public TableRowNSImageCache::Table { | |
| 14 public: | |
| 15 | |
| 16 std::vector<SkBitmap>* rows() { | |
| 17 return &rows_; | |
| 18 } | |
| 19 | |
| 20 // TableRowNSImageCache::Table overrides. | |
| 21 int RowCount() const override { return rows_.size(); } | |
| 22 gfx::ImageSkia GetIcon(int index) const override { | |
| 23 return gfx::ImageSkia::CreateFrom1xBitmap(rows_[index]); | |
| 24 } | |
| 25 | |
| 26 private: | |
| 27 std::vector<SkBitmap> rows_; | |
| 28 }; | |
| 29 | |
| 30 SkBitmap MakeImage(int width, int height) { | |
| 31 SkBitmap image; | |
| 32 image.allocN32Pixels(width, height); | |
| 33 image.eraseARGB(255, 255, 0, 0); | |
| 34 return image; | |
| 35 } | |
| 36 | |
| 37 // Define this as a macro so that the original variable names can be used in | |
| 38 // test output. | |
| 39 #define COMPARE_SK_NS_IMG_SIZES(skia, cocoa) \ | |
| 40 EXPECT_EQ(skia.width(), [cocoa size].width); \ | |
| 41 EXPECT_EQ(skia.height(), [cocoa size].height); | |
| 42 | |
| 43 TEST(TableRowNSImageCacheTest, ModelChanged) { | |
| 44 TestTable table; | |
| 45 std::vector<SkBitmap>* rows = table.rows(); | |
| 46 rows->push_back(MakeImage(10, 10)); | |
| 47 rows->push_back(MakeImage(20, 20)); | |
| 48 rows->push_back(MakeImage(30, 30)); | |
| 49 TableRowNSImageCache cache(&table); | |
| 50 | |
| 51 NSImage* image0 = cache.GetImageForRow(0); | |
| 52 NSImage* image1 = cache.GetImageForRow(1); | |
| 53 NSImage* image2 = cache.GetImageForRow(2); | |
| 54 | |
| 55 COMPARE_SK_NS_IMG_SIZES(rows->at(0), image0); | |
| 56 COMPARE_SK_NS_IMG_SIZES(rows->at(1), image1); | |
| 57 COMPARE_SK_NS_IMG_SIZES(rows->at(2), image2); | |
| 58 | |
| 59 rows->clear(); | |
| 60 | |
| 61 rows->push_back(MakeImage(15, 15)); | |
| 62 rows->push_back(MakeImage(25, 25)); | |
| 63 rows->push_back(MakeImage(35, 35)); | |
| 64 rows->push_back(MakeImage(45, 45)); | |
| 65 | |
| 66 // Invalidate the entire model. | |
| 67 cache.OnModelChanged(); | |
| 68 | |
| 69 EXPECT_NE(image0, cache.GetImageForRow(0)); | |
| 70 image0 = cache.GetImageForRow(0); | |
| 71 | |
| 72 EXPECT_NE(image1, cache.GetImageForRow(1)); | |
| 73 image1 = cache.GetImageForRow(1); | |
| 74 | |
| 75 EXPECT_NE(image2, cache.GetImageForRow(2)); | |
| 76 image2 = cache.GetImageForRow(2); | |
| 77 | |
| 78 NSImage* image3 = cache.GetImageForRow(3); | |
| 79 | |
| 80 COMPARE_SK_NS_IMG_SIZES(rows->at(0), image0); | |
| 81 COMPARE_SK_NS_IMG_SIZES(rows->at(1), image1); | |
| 82 COMPARE_SK_NS_IMG_SIZES(rows->at(2), image2); | |
| 83 COMPARE_SK_NS_IMG_SIZES(rows->at(3), image3); | |
| 84 } | |
| 85 | |
| 86 | |
| 87 TEST(TableRowNSImageCacheTest, ItemsChanged) { | |
| 88 TestTable table; | |
| 89 std::vector<SkBitmap>* rows = table.rows(); | |
| 90 rows->push_back(MakeImage(10, 10)); | |
| 91 rows->push_back(MakeImage(20, 20)); | |
| 92 rows->push_back(MakeImage(30, 30)); | |
| 93 TableRowNSImageCache cache(&table); | |
| 94 | |
| 95 NSImage* image0 = cache.GetImageForRow(0); | |
| 96 NSImage* image1 = cache.GetImageForRow(1); | |
| 97 NSImage* image2 = cache.GetImageForRow(2); | |
| 98 | |
| 99 COMPARE_SK_NS_IMG_SIZES(rows->at(0), image0); | |
| 100 COMPARE_SK_NS_IMG_SIZES(rows->at(1), image1); | |
| 101 COMPARE_SK_NS_IMG_SIZES(rows->at(2), image2); | |
| 102 | |
| 103 // Update the middle image. | |
| 104 (*rows)[1] = MakeImage(25, 25); | |
| 105 cache.OnItemsChanged(/* start=*/1, /* count=*/1); | |
| 106 | |
| 107 // Make sure the other items remained the same. | |
| 108 EXPECT_EQ(image0, cache.GetImageForRow(0)); | |
| 109 EXPECT_EQ(image2, cache.GetImageForRow(2)); | |
| 110 | |
| 111 image1 = cache.GetImageForRow(1); | |
| 112 COMPARE_SK_NS_IMG_SIZES(rows->at(1), image1); | |
| 113 | |
| 114 // Update more than one image. | |
| 115 (*rows)[0] = MakeImage(15, 15); | |
| 116 (*rows)[1] = MakeImage(27, 27); | |
| 117 EXPECT_EQ(3U, rows->size()); | |
| 118 cache.OnItemsChanged(0, 2); | |
| 119 | |
| 120 image0 = cache.GetImageForRow(0); | |
| 121 image1 = cache.GetImageForRow(1); | |
| 122 | |
| 123 COMPARE_SK_NS_IMG_SIZES(rows->at(0), image0); | |
| 124 COMPARE_SK_NS_IMG_SIZES(rows->at(1), image1); | |
| 125 } | |
| 126 | |
| 127 | |
| 128 TEST(TableRowNSImageCacheTest, ItemsAdded) { | |
| 129 TestTable table; | |
| 130 std::vector<SkBitmap>* rows = table.rows(); | |
| 131 rows->push_back(MakeImage(10, 10)); | |
| 132 rows->push_back(MakeImage(20, 20)); | |
| 133 TableRowNSImageCache cache(&table); | |
| 134 | |
| 135 NSImage* image0 = cache.GetImageForRow(0); | |
| 136 NSImage* image1 = cache.GetImageForRow(1); | |
| 137 | |
| 138 COMPARE_SK_NS_IMG_SIZES(rows->at(0), image0); | |
| 139 COMPARE_SK_NS_IMG_SIZES(rows->at(1), image1); | |
| 140 | |
| 141 // Add an item to the end. | |
| 142 rows->push_back(MakeImage(30, 30)); | |
| 143 cache.OnItemsAdded(2, 1); | |
| 144 | |
| 145 // Make sure image 1 stayed the same. | |
| 146 EXPECT_EQ(image1, cache.GetImageForRow(1)); | |
| 147 COMPARE_SK_NS_IMG_SIZES(rows->at(1), image1); | |
| 148 | |
| 149 // Check that image 2 got added correctly. | |
| 150 NSImage* image2 = cache.GetImageForRow(2); | |
| 151 COMPARE_SK_NS_IMG_SIZES(rows->at(2), image2); | |
| 152 | |
| 153 // Add two items to the begging. | |
| 154 rows->insert(rows->begin(), MakeImage(7, 7)); | |
| 155 rows->insert(rows->begin(), MakeImage(3, 3)); | |
| 156 cache.OnItemsAdded(0, 2); | |
| 157 | |
| 158 NSImage* image00 = cache.GetImageForRow(0); | |
| 159 NSImage* image01 = cache.GetImageForRow(1); | |
| 160 | |
| 161 COMPARE_SK_NS_IMG_SIZES(rows->at(0), image00); | |
| 162 COMPARE_SK_NS_IMG_SIZES(rows->at(1), image01); | |
| 163 } | |
| 164 | |
| 165 | |
| 166 TEST(TableRowNSImageCacheTest, ItemsRemoved) { | |
| 167 TestTable table; | |
| 168 std::vector<SkBitmap>* rows = table.rows(); | |
| 169 rows->push_back(MakeImage(10, 10)); | |
| 170 rows->push_back(MakeImage(20, 20)); | |
| 171 rows->push_back(MakeImage(30, 30)); | |
| 172 rows->push_back(MakeImage(40, 40)); | |
| 173 rows->push_back(MakeImage(50, 50)); | |
| 174 TableRowNSImageCache cache(&table); | |
| 175 | |
| 176 NSImage* image0 = cache.GetImageForRow(0); | |
| 177 NSImage* image1 = cache.GetImageForRow(1); | |
| 178 NSImage* image2 = cache.GetImageForRow(2); | |
| 179 NSImage* image3 = cache.GetImageForRow(3); | |
| 180 NSImage* image4 = cache.GetImageForRow(4); | |
| 181 | |
| 182 COMPARE_SK_NS_IMG_SIZES(rows->at(0), image0); | |
| 183 COMPARE_SK_NS_IMG_SIZES(rows->at(1), image1); | |
| 184 COMPARE_SK_NS_IMG_SIZES(rows->at(2), image2); | |
| 185 COMPARE_SK_NS_IMG_SIZES(rows->at(3), image3); | |
| 186 COMPARE_SK_NS_IMG_SIZES(rows->at(4), image4); | |
| 187 | |
| 188 rows->erase(rows->begin() + 1, rows->begin() + 4); // [20x20, 50x50) | |
| 189 cache.OnItemsRemoved(1, 3); | |
| 190 | |
| 191 image0 = cache.GetImageForRow(0); | |
| 192 image1 = cache.GetImageForRow(1); | |
| 193 | |
| 194 COMPARE_SK_NS_IMG_SIZES(rows->at(0), image0); | |
| 195 COMPARE_SK_NS_IMG_SIZES(rows->at(1), image1); | |
| 196 } | |
| 197 | |
| 198 } // namespace | |
| OLD | NEW |