// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "ui/gfx/skia_util.h"

#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/skia/include/core/SkBitmap.h"

namespace gfx {

TEST(SkiaUtilTest, BitmapsAreEqual) {
  SkBitmap a, b;
  EXPECT_TRUE(gfx::BitmapsAreEqual(a, b));  // Both bitmaps are null.

  a.allocN32Pixels(0, 0);
  EXPECT_FALSE(gfx::BitmapsAreEqual(a, b));  // isNull() differs.
  b.allocN32Pixels(10, 0);
  EXPECT_FALSE(gfx::BitmapsAreEqual(a, b));  // Dimensions differ.
  a.allocN32Pixels(0, 10);
  EXPECT_FALSE(gfx::BitmapsAreEqual(a, b));  // Dimensions still differ.
  b.allocN32Pixels(0, 10);
  EXPECT_TRUE(gfx::BitmapsAreEqual(a, b));  // Dimensions equal (but empty).
  a.allocN32Pixels(10, 10);
  EXPECT_FALSE(gfx::BitmapsAreEqual(a, b));  // Dimensions differ.
  b.allocN32Pixels(10, 10);
  EXPECT_TRUE(gfx::BitmapsAreEqual(a, b));  // Dimensions equal (non-empty).

  a.eraseColor(SK_ColorRED);
  EXPECT_FALSE(gfx::BitmapsAreEqual(a, b));  // Contents differ.
  b.eraseColor(SK_ColorGREEN);
  EXPECT_FALSE(gfx::BitmapsAreEqual(a, b));  // Contents still differ.
  b.eraseColor(SK_ColorRED);
  EXPECT_TRUE(gfx::BitmapsAreEqual(a, b));  // Contents equal.

  a.eraseColor(SK_ColorBLUE);
  EXPECT_FALSE(gfx::BitmapsAreEqual(a, b));  // Contents differ.
  b = a;
  EXPECT_TRUE(gfx::BitmapsAreEqual(a, b));  // Generation ids equal.

  a.reset();
  EXPECT_FALSE(gfx::BitmapsAreEqual(a, b));  // isNull() differs.
  b.reset();
  EXPECT_TRUE(gfx::BitmapsAreEqual(a, b));  // Both bitmaps are null.
}

}  // namespace gfx
