summaryrefslogtreecommitdiffstats
path: root/chrome/browser/cocoa/table_row_nsimage_cache_unittest.mm
blob: 1568b0401d61b0a072fb541cd0af8c0cce4c57f8 (plain)
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
// Copyright (c) 2010 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 "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 {
 public:
  MOCK_CONST_METHOD0(RowCount, int());
  MOCK_CONST_METHOD1(GetIcon, SkBitmap(int));
};

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 second_bitmap;
  second_bitmap.setConfig(SkBitmap::kARGB_8888_Config, 20, 10);
  second_bitmap.eraseRGB(0, 255, 0);
  ASSERT_TRUE(second_bitmap.allocPixels());

  MockTable table;

  EXPECT_CALL(table, RowCount()).WillRepeatedly(Return(2));
  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);
}

}  // namespace