Home | History | Annotate | Download | only in common
      1 // Copyright (c) 2011 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/common/thumbnail_score.h"
      6 #include "testing/gtest/include/gtest/gtest.h"
      7 
      8 // Tests that the different types of thumbnails are compared properly.
      9 TEST(ThumbnailScoreTest, ShouldReplaceThumbnailWithType) {
     10   base::Time now = base::Time::Now();
     11 
     12   ThumbnailScore nothing_good(0.5, false, false, now);
     13   ThumbnailScore not_at_top(0.5, false, true, now);
     14   ThumbnailScore bad_clipping(0.5, true, false, now);
     15   ThumbnailScore life_is_awesome(0.5, true, true, now);
     16 
     17   EXPECT_TRUE(ShouldReplaceThumbnailWith(nothing_good, not_at_top));
     18   EXPECT_TRUE(ShouldReplaceThumbnailWith(nothing_good, bad_clipping));
     19   EXPECT_TRUE(ShouldReplaceThumbnailWith(nothing_good, life_is_awesome));
     20   EXPECT_TRUE(ShouldReplaceThumbnailWith(not_at_top, bad_clipping));
     21   EXPECT_TRUE(ShouldReplaceThumbnailWith(not_at_top, life_is_awesome));
     22   EXPECT_TRUE(ShouldReplaceThumbnailWith(bad_clipping, life_is_awesome));
     23 }
     24 
     25 // Tests that we'll replace old thumbnails will crappier but newer ones.
     26 TEST(ThumbnailScoreTest, ShouldReplaceThumbnailWithTime) {
     27   // Use a really long time for the difference so we aren't sensitive to the
     28   // degrading schedule.
     29   base::Time now = base::Time::Now();
     30   base::Time last_year = now - base::TimeDelta::FromDays(365);
     31 
     32   ThumbnailScore oldie_but_goodie(0.1, true, true, last_year);
     33   ThumbnailScore newie_but_crappie(0.9, true, true, now);
     34 
     35   EXPECT_TRUE(ShouldReplaceThumbnailWith(oldie_but_goodie, newie_but_crappie));
     36 }
     37 
     38 // Having many redirects should age the thumbnail.
     39 TEST(ThumbnailScoreTest, RedirectCount) {
     40   base::Time now = base::Time::Now();
     41 
     42   ThumbnailScore no_redirects(0.5, true, true, now);
     43   no_redirects.redirect_hops_from_dest = 0;
     44   ThumbnailScore some_redirects(0.5, true, true, now);
     45   some_redirects.redirect_hops_from_dest = 1;
     46 
     47   EXPECT_TRUE(ShouldReplaceThumbnailWith(some_redirects, no_redirects));
     48 
     49   // This one has a lot of redirects but a better score. It should still be
     50   // rejected.
     51   ThumbnailScore lotsa_redirects(0.4, true, true, now);
     52   lotsa_redirects.redirect_hops_from_dest = 4;
     53   EXPECT_FALSE(ShouldReplaceThumbnailWith(no_redirects, lotsa_redirects));
     54 }
     55 
     56 TEST(ThumbnailScoreTest, ShouldConsiderUpdating) {
     57   ThumbnailScore score;
     58   // By default, the score is low, thus we should generate a new thumbnail.
     59   EXPECT_TRUE(score.ShouldConsiderUpdating());
     60 
     61   // Make it very interesting, but this is not enough.
     62   score.boring_score = 0.0;
     63   EXPECT_TRUE(score.ShouldConsiderUpdating());
     64 
     65   // good_clipping is important, but sill not enough.
     66   score.good_clipping = true;
     67   EXPECT_TRUE(score.ShouldConsiderUpdating());
     68 
     69   // at_top is important, but still not enough.
     70   score.at_top = true;
     71   EXPECT_TRUE(score.ShouldConsiderUpdating());
     72 
     73   // load_completed is important. Finally, the thumbnail is new and
     74   // interesting enough.
     75   score.load_completed = true;
     76   EXPECT_FALSE(score.ShouldConsiderUpdating());
     77 
     78   // Make it very boring, but it won't change the result. The boring score
     79   // isn't used for judging whether we should update or not. See comments
     80   // at boring_score in thumbnail_score.h for why.
     81   score.boring_score = 1.0;
     82   EXPECT_FALSE(score.ShouldConsiderUpdating());
     83 
     84   // Make it old. Then, it's no longer new enough.
     85   score.time_at_snapshot -=
     86       base::TimeDelta::FromDays(ThumbnailScore::kUpdateThumbnailTimeDays);
     87   EXPECT_TRUE(score.ShouldConsiderUpdating());
     88 }
     89