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

#include "ui/keyboard/notification_manager.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace keyboard {
namespace {

class NotificationManagerTest : public testing::Test {
 public:
  NotificationManagerTest() {}
  ~NotificationManagerTest() override {}
};

}  // namespace

TEST_F(NotificationManagerTest, DoesItConsolidate) {
  NotificationManager manager;

  ASSERT_TRUE(manager.ShouldSendAvailabilityNotification(false));
  ASSERT_FALSE(manager.ShouldSendAvailabilityNotification(false));
  ASSERT_TRUE(manager.ShouldSendAvailabilityNotification(true));
  ASSERT_TRUE(manager.ShouldSendAvailabilityNotification(false));
  ASSERT_FALSE(manager.ShouldSendAvailabilityNotification(false));

  ASSERT_TRUE(
      manager.ShouldSendVisualBoundsNotification(gfx::Rect(10, 10, 10, 10)));
  ASSERT_FALSE(
      manager.ShouldSendVisualBoundsNotification(gfx::Rect(10, 10, 10, 10)));
  ASSERT_TRUE(
      manager.ShouldSendVisualBoundsNotification(gfx::Rect(10, 10, 20, 20)));

  // This is technically empty
  ASSERT_TRUE(
      manager.ShouldSendVisualBoundsNotification(gfx::Rect(0, 0, 0, 100)));

  // This is still empty
  ASSERT_FALSE(
      manager.ShouldSendVisualBoundsNotification(gfx::Rect(0, 0, 100, 0)));

  // Occluded bounds...

  // Start the field with an empty value
  ASSERT_TRUE(
      manager.ShouldSendOccludedBoundsNotification(gfx::Rect(0, 0, 0, 0)));

  // Still empty
  ASSERT_FALSE(
      manager.ShouldSendOccludedBoundsNotification(gfx::Rect(0, 0, 10, 0)));

  ASSERT_TRUE(
      manager.ShouldSendOccludedBoundsNotification(gfx::Rect(0, 0, 10, 10)));

  // Different bounds, same size
  ASSERT_TRUE(
      manager.ShouldSendOccludedBoundsNotification(gfx::Rect(30, 30, 10, 10)));
}

}  // namespace keyboard