chromium/ui/views/layout/layout_manager_unittest.cc

// 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/views/layout/layout_manager.h"

#include <memory>

#include "testing/gtest/include/gtest/gtest.h"
#include "ui/views/test/test_layout_manager.h"
#include "ui/views/test/test_views.h"
#include "ui/views/view.h"

namespace views {

TEST(LayoutManagerTest, SetVisibleInvalidatesLayout) {
  auto host = std::make_unique<View>();
  View* child = host->AddChildView(std::make_unique<View>());
  test::TestLayoutManager* layout_manager =
      host->SetLayoutManager(std::make_unique<test::TestLayoutManager>());
  child->SetVisible(false);
  EXPECT_EQ(1, layout_manager->invalidate_count());
  child->SetVisible(true);
  EXPECT_EQ(2, layout_manager->invalidate_count());
}

TEST(LayoutManagerTest, SetVisibleUnchangedDoesNotInvalidateLayout) {
  auto host = std::make_unique<View>();
  View* child = host->AddChildView(std::make_unique<View>());
  test::TestLayoutManager* layout_manager =
      host->SetLayoutManager(std::make_unique<test::TestLayoutManager>());
  child->SetVisible(true);
  EXPECT_EQ(0, layout_manager->invalidate_count());
  child->SetVisible(false);
  EXPECT_EQ(1, layout_manager->invalidate_count());
  child->SetVisible(false);
  EXPECT_EQ(1, layout_manager->invalidate_count());
}

}  // namespace views