1// Copyright 2014 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 <string> 6 7#include "chrome/browser/image_holder.h" 8#include "testing/gtest/include/gtest/gtest.h" 9 10namespace { 11 12const char kIconUrl1[] = "http://www.google.com/icon1.jpg"; 13const char kIconUrl2[] = "http://www.google.com/icon2.jpg"; 14 15class TestDelegate : public chrome::ImageHolderDelegate { 16 public: 17 TestDelegate() : on_fetch_complete_called_(false) {} 18 virtual void OnFetchComplete() OVERRIDE { 19 on_fetch_complete_called_ = true; 20 } 21 bool on_fetch_complete_called_; 22}; 23 24} // namespace. 25 26namespace chrome { 27 28typedef testing::Test ImageHolderTest; 29 30TEST_F(ImageHolderTest, CreateBitmapFetcherTest) { 31 TestDelegate delegate; 32 ImageHolder image_holder(GURL(kIconUrl1), GURL(kIconUrl2), NULL, &delegate); 33 34 EXPECT_EQ(GURL(kIconUrl1), image_holder.fetchers_[0]->url()); 35 EXPECT_EQ(GURL(kIconUrl2), image_holder.fetchers_[1]->url()); 36 EXPECT_EQ(static_cast<unsigned int>(2), image_holder.fetchers_.size()); 37 38 // Adding a dup of an existing URL shouldn't change anything. 39 image_holder.CreateBitmapFetcher(GURL(kIconUrl2)); 40 EXPECT_EQ(GURL(kIconUrl1), image_holder.fetchers_[0]->url()); 41 EXPECT_EQ(GURL(kIconUrl2), image_holder.fetchers_[1]->url()); 42 EXPECT_EQ(static_cast<unsigned int>(2), image_holder.fetchers_.size()); 43} 44 45TEST_F(ImageHolderTest, OnFetchCompleteTest) { 46 TestDelegate delegate; 47 ImageHolder image_holder(GURL(kIconUrl1), GURL(), NULL, &delegate); 48 49 // Put a real bitmap into "bitmap". 2x2 bitmap of green 32 bit pixels. 50 SkBitmap bitmap; 51 bitmap.allocN32Pixels(2, 2); 52 bitmap.eraseColor(SK_ColorGREEN); 53 54 image_holder.OnFetchComplete(GURL(kIconUrl1), &bitmap); 55 56 // Expect that the app icon has some data in it. 57 EXPECT_FALSE(image_holder.low_dpi_image().IsEmpty()); 58 59 // Expect that we reported the fetch done to the delegate. 60 EXPECT_TRUE(delegate.on_fetch_complete_called_); 61} 62 63TEST_F(ImageHolderTest, IsFetchingDoneTest) { 64 TestDelegate delegate; 65 ImageHolder image_holder1(GURL(kIconUrl1), GURL(kIconUrl2), NULL, &delegate); 66 ImageHolder image_holder2(GURL(kIconUrl1), GURL(), NULL, &delegate); 67 ImageHolder image_holder3(GURL(), GURL(kIconUrl2), NULL, &delegate); 68 ImageHolder image_holder4(GURL(), GURL(), NULL, &delegate); 69 70 // Initially, image holder 4 with no URLs should report done, but no others. 71 EXPECT_FALSE(image_holder1.IsFetchingDone()); 72 EXPECT_FALSE(image_holder2.IsFetchingDone()); 73 EXPECT_FALSE(image_holder3.IsFetchingDone()); 74 EXPECT_TRUE(image_holder4.IsFetchingDone()); 75 76 // Put a real bitmap into "bitmap". 2x2 bitmap of green 32 bit pixels. 77 SkBitmap bitmap; 78 bitmap.allocN32Pixels(2, 2); 79 bitmap.eraseColor(SK_ColorGREEN); 80 81 // Add the first icon, and image holder 2 should now also report done. 82 image_holder1.OnFetchComplete(GURL(kIconUrl1), &bitmap); 83 image_holder2.OnFetchComplete(GURL(kIconUrl1), &bitmap); 84 image_holder3.OnFetchComplete(GURL(kIconUrl1), &bitmap); 85 image_holder4.OnFetchComplete(GURL(kIconUrl1), &bitmap); 86 EXPECT_FALSE(image_holder1.IsFetchingDone()); 87 EXPECT_TRUE(image_holder2.IsFetchingDone()); 88 EXPECT_FALSE(image_holder3.IsFetchingDone()); 89 EXPECT_TRUE(image_holder4.IsFetchingDone()); 90 91 // Add the second image, and now all 4 should report done. 92 image_holder1.OnFetchComplete(GURL(kIconUrl2), &bitmap); 93 image_holder2.OnFetchComplete(GURL(kIconUrl2), &bitmap); 94 image_holder3.OnFetchComplete(GURL(kIconUrl2), &bitmap); 95 image_holder4.OnFetchComplete(GURL(kIconUrl2), &bitmap); 96 EXPECT_TRUE(image_holder1.IsFetchingDone()); 97 EXPECT_TRUE(image_holder2.IsFetchingDone()); 98 EXPECT_TRUE(image_holder3.IsFetchingDone()); 99 EXPECT_TRUE(image_holder4.IsFetchingDone()); 100} 101 102} // namespace chrome. 103