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