| // Copyright 2018 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/aura_extra/window_position_in_root_monitor.h" |
| |
| #include "base/bind.h" |
| #include "base/callback.h" |
| #include "base/test/bind_test_util.h" |
| #include "ui/aura/test/aura_test_base.h" |
| #include "ui/aura/test/test_windows.h" |
| #include "ui/aura/window.h" |
| #include "ui/gfx/geometry/rect.h" |
| |
| namespace aura_extra { |
| |
| using WindowPositionInRootMonitorTest = aura::test::AuraTestBase; |
| |
| TEST_F(WindowPositionInRootMonitorTest, Basic) { |
| // Changing the position while not in a root should not notify the callback. |
| std::unique_ptr<aura::Window> w1( |
| aura::test::CreateTestWindowWithId(1, nullptr)); |
| w1->set_owned_by_parent(false); |
| bool monitor_notified = false; |
| WindowPositionInRootMonitor monitor( |
| w1.get(), base::BindLambdaForTesting([&] { monitor_notified = true; })); |
| w1->SetBounds(gfx::Rect(1, 2, 3, 4)); |
| EXPECT_FALSE(monitor_notified); |
| w1->SetBounds(gfx::Rect(11, 2, 3, 4)); |
| EXPECT_FALSE(monitor_notified); |
| |
| // Adding an ancestor that is not part of the root should not notify the |
| // callback. |
| std::unique_ptr<aura::Window> w2( |
| aura::test::CreateTestWindowWithId(2, nullptr)); |
| w2->set_owned_by_parent(false); |
| w2->AddChild(w1.get()); |
| EXPECT_FALSE(monitor_notified); |
| w2->SetBounds(gfx::Rect(21, 10, 20, 20)); |
| EXPECT_FALSE(monitor_notified); |
| |
| // Adding to the root should immediately notify. |
| root_window()->AddChild(w2.get()); |
| EXPECT_TRUE(monitor_notified); |
| monitor_notified = false; |
| |
| // Changing |w2|'s bounds show notify as |w2| is the parent and |w1| is in a |
| // root. |
| w2->SetBounds(gfx::Rect(22, 10, 20, 20)); |
| EXPECT_TRUE(monitor_notified); |
| monitor_notified = false; |
| |
| // Removing an ancestor, and changing the ancestors bounds should not notify. |
| root_window()->RemoveChild(w2.get()); |
| EXPECT_FALSE(monitor_notified); |
| w2->SetBounds(gfx::Rect(21, 22, 23, 24)); |
| EXPECT_FALSE(monitor_notified); |
| |
| // Add |w1| directly to the root, should immediately notify. |
| root_window()->AddChild(w1.get()); |
| EXPECT_TRUE(monitor_notified); |
| monitor_notified = false; |
| |
| // Changing |w1|s bounds should notify as in a root. |
| w1->SetBounds(gfx::Rect(101, 102, 12, 13)); |
| EXPECT_TRUE(monitor_notified); |
| monitor_notified = false; |
| |
| // Changing the size should not notify. |
| w1->SetBounds(gfx::Rect(101, 102, 121, 13)); |
| EXPECT_FALSE(monitor_notified); |
| } |
| |
| } // namespace aura_extra |