Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / ui / gfx / image / image_skia_unittest.cc
index e3e93c7..b178a04 100644 (file)
@@ -423,6 +423,20 @@ TEST_F(ImageSkiaTest, Unscaled) {
   EXPECT_FALSE(image_skia.GetRepresentation(2.0f).unscaled());
 }
 
+namespace {
+
+std::vector<float> GetSortedScaleFactors(const gfx::ImageSkia& image) {
+  const std::vector<ImageSkiaRep>& image_reps = image.image_reps();
+  std::vector<float> scale_factors;
+  for (size_t i = 0; i < image_reps.size(); ++i) {
+    scale_factors.push_back(image_reps[i].scale());
+  }
+  std::sort(scale_factors.begin(), scale_factors.end());
+  return scale_factors;
+}
+
+}  // namespace
+
 TEST_F(ImageSkiaTest, ArbitraryScaleFactor) {
   // Do not test if the ImageSkia doesn't support arbitrary scale factors.
   if (!ImageSkia::IsDSFScalingInImageSkiaEnabled())
@@ -437,11 +451,7 @@ TEST_F(ImageSkiaTest, ArbitraryScaleFactor) {
   std::vector<ImageSkiaRep> image_reps = image.image_reps();
   EXPECT_EQ(2u, image_reps.size());
 
-  std::vector<float> scale_factors;
-  for (size_t i = 0; i < image_reps.size(); ++i) {
-    scale_factors.push_back(image_reps[i].scale());
-  }
-  std::sort(scale_factors.begin(), scale_factors.end());
+  std::vector<float> scale_factors = GetSortedScaleFactors(image);
   EXPECT_EQ(1.5f, scale_factors[0]);
   EXPECT_EQ(2.0f, scale_factors[1]);
 
@@ -452,45 +462,57 @@ TEST_F(ImageSkiaTest, ArbitraryScaleFactor) {
   image_reps = image.image_reps();
   EXPECT_EQ(3u, image_reps.size());
 
-  scale_factors.clear();
-  for (size_t i = 0; i < image_reps.size(); ++i) {
-    scale_factors.push_back(image_reps[i].scale());
-  }
-  std::sort(scale_factors.begin(), scale_factors.end());
+  scale_factors = GetSortedScaleFactors(image);
   EXPECT_EQ(1.5f, scale_factors[0]);
   EXPECT_EQ(1.75f, scale_factors[1]);
   EXPECT_EQ(2.0f, scale_factors[2]);
 
-  // 1.25 is falled back to 1.0.
+  // Requesting 1.25 scale factor also falls back to 2.0f and rescale.
+  // However, the image already has the 2.0f data, so it won't fetch again.
   image.GetRepresentation(1.25f);
+  EXPECT_EQ(0.0f, source->GetLastRequestedScaleAndReset());
+  image_reps = image.image_reps();
+  EXPECT_EQ(4u, image_reps.size());
+  scale_factors = GetSortedScaleFactors(image);
+  EXPECT_EQ(1.25f, scale_factors[0]);
+  EXPECT_EQ(1.5f, scale_factors[1]);
+  EXPECT_EQ(1.75f, scale_factors[2]);
+  EXPECT_EQ(2.0f, scale_factors[3]);
+
+  // 1.20 is falled back to 1.0.
+  image.GetRepresentation(1.20f);
   EXPECT_EQ(1.0f, source->GetLastRequestedScaleAndReset());
   image_reps = image.image_reps();
-  EXPECT_EQ(5u, image_reps.size());
+  EXPECT_EQ(6u, image_reps.size());
+  scale_factors = GetSortedScaleFactors(image);
+  EXPECT_EQ(1.0f, scale_factors[0]);
+  EXPECT_EQ(1.2f, scale_factors[1]);
+  EXPECT_EQ(1.25f, scale_factors[2]);
+  EXPECT_EQ(1.5f, scale_factors[3]);
+  EXPECT_EQ(1.75f, scale_factors[4]);
+  EXPECT_EQ(2.0f, scale_factors[5]);
 
   // Scale factor less than 1.0f will be falled back to 1.0f
   image.GetRepresentation(0.75f);
   EXPECT_EQ(0.0f, source->GetLastRequestedScaleAndReset());
   image_reps = image.image_reps();
-  EXPECT_EQ(6u, image_reps.size());
+  EXPECT_EQ(7u, image_reps.size());
 
-  scale_factors.clear();
-  for (size_t i = 0; i < image_reps.size(); ++i) {
-    scale_factors.push_back(image_reps[i].scale());
-  }
-  std::sort(scale_factors.begin(), scale_factors.end());
+  scale_factors = GetSortedScaleFactors(image);
   EXPECT_EQ(0.75f, scale_factors[0]);
   EXPECT_EQ(1.0f, scale_factors[1]);
-  EXPECT_EQ(1.25f, scale_factors[2]);
-  EXPECT_EQ(1.5f, scale_factors[3]);
-  EXPECT_EQ(1.75f, scale_factors[4]);
-  EXPECT_EQ(2.0f, scale_factors[5]);
+  EXPECT_EQ(1.2f, scale_factors[2]);
+  EXPECT_EQ(1.25f, scale_factors[3]);
+  EXPECT_EQ(1.5f, scale_factors[4]);
+  EXPECT_EQ(1.75f, scale_factors[5]);
+  EXPECT_EQ(2.0f, scale_factors[6]);
 
   // Scale factor greater than 2.0f is falled back to 2.0f because it's not
   // supported.
   image.GetRepresentation(3.0f);
   EXPECT_EQ(0.0f, source->GetLastRequestedScaleAndReset());
   image_reps = image.image_reps();
-  EXPECT_EQ(7u, image_reps.size());
+  EXPECT_EQ(8u, image_reps.size());
 }
 
 TEST_F(ImageSkiaTest, ArbitraryScaleFactorWithMissingResource) {