106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch// Copyright (c) 2009 The Chromium Authors. All rights reserved. 206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch// Use of this source code is governed by a BSD-style license that can be 306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch// found in the LICENSE file. 406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch 506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch#include "chrome/common/thumbnail_score.h" 606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch#include "testing/gtest/include/gtest/gtest.h" 706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch 806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch// Tests that the different types of thumbnails are compared properly. 906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen MurdochTEST(ThumbnailScoreTest, ShouldReplaceThumbnailWithType) { 1006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch base::Time now = base::Time::Now(); 1106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch 1206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch ThumbnailScore nothing_good(0.5, false, false, now); 1306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch ThumbnailScore not_at_top(0.5, false, true, now); 1406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch ThumbnailScore bad_clipping(0.5, true, false, now); 1506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch ThumbnailScore life_is_awesome(0.5, true, true, now); 1606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch 1706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch EXPECT_TRUE(ShouldReplaceThumbnailWith(nothing_good, not_at_top)); 1806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch EXPECT_TRUE(ShouldReplaceThumbnailWith(nothing_good, bad_clipping)); 1906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch EXPECT_TRUE(ShouldReplaceThumbnailWith(nothing_good, life_is_awesome)); 2006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch EXPECT_TRUE(ShouldReplaceThumbnailWith(not_at_top, bad_clipping)); 2106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch EXPECT_TRUE(ShouldReplaceThumbnailWith(not_at_top, life_is_awesome)); 2206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch EXPECT_TRUE(ShouldReplaceThumbnailWith(bad_clipping, life_is_awesome)); 2306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch} 2406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch 2506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch// Tests that we'll replace old thumbnails will crappier but newer ones. 2606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen MurdochTEST(ThumbnailScoreTest, ShouldReplaceThumbnailWithTime) { 2706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch // Use a really long time for the difference so we aren't sensitive to the 2806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch // degrading schedule. 2906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch base::Time now = base::Time::Now(); 3006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch base::Time last_year = now - base::TimeDelta::FromDays(365); 3106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch 3206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch ThumbnailScore oldie_but_goodie(0.1, true, true, last_year); 3306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch ThumbnailScore newie_but_crappie(0.9, true, true, now); 3406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch 3506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch EXPECT_TRUE(ShouldReplaceThumbnailWith(oldie_but_goodie, newie_but_crappie)); 3606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch} 3706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch 3806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch// Having many redirects should age the thumbnail. 3906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen MurdochTEST(ThumbnailScoreTest, RedirectCount) { 4006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch base::Time now = base::Time::Now(); 4106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch 4206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch ThumbnailScore no_redirects(0.5, true, true, now); 4306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch no_redirects.redirect_hops_from_dest = 0; 4406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch ThumbnailScore some_redirects(0.5, true, true, now); 4506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch some_redirects.redirect_hops_from_dest = 1; 4606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch 4706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch EXPECT_TRUE(ShouldReplaceThumbnailWith(some_redirects, no_redirects)); 4806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch 4906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch // This one has a lot of redirects but a better score. It should still be 5006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch // rejected. 5106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch ThumbnailScore lotsa_redirects(0.4, true, true, now); 5206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch lotsa_redirects.redirect_hops_from_dest = 4; 5306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch EXPECT_FALSE(ShouldReplaceThumbnailWith(no_redirects, lotsa_redirects)); 5406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch} 5572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 5672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTEST(ThumbnailScoreTest, ShouldConsiderUpdating) { 5772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ThumbnailScore score; 5872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // By default, the score is 1.0, meaning very boring, thus we should 5972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // generate a new thumbnail. 6072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_DOUBLE_EQ(1.0, score.boring_score); 6172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_TRUE(score.ShouldConsiderUpdating()); 6272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 6372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Make it very interesting, but this is not enough. 6472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen score.boring_score = 0.0; 6572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_TRUE(score.ShouldConsiderUpdating()); 6672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 6772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // good_clipping is important, but sill not enough. 6872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen score.good_clipping = true; 6972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_TRUE(score.ShouldConsiderUpdating()); 7072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 7172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // at_top is important. Finally, the thumbnail is new and interesting enough. 7272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen score.at_top = true; 7372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_FALSE(score.ShouldConsiderUpdating()); 7472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 7572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Make it old. Then, it's no longer new enough. 7672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen score.time_at_snapshot -= ThumbnailScore::kUpdateThumbnailTime; 7772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen EXPECT_TRUE(score.ShouldConsiderUpdating()); 7872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 79