diff options
Diffstat (limited to 'athena/screen/screen_manager_unittest.cc')
-rw-r--r-- | athena/screen/screen_manager_unittest.cc | 88 |
1 files changed, 87 insertions, 1 deletions
diff --git a/athena/screen/screen_manager_unittest.cc b/athena/screen/screen_manager_unittest.cc index dd634ba44a..15588d34e4 100644 --- a/athena/screen/screen_manager_unittest.cc +++ b/athena/screen/screen_manager_unittest.cc @@ -15,7 +15,8 @@ #include "ui/events/test/event_generator.h" #include "ui/wm/core/window_util.h" -typedef athena::test::AthenaTestBase ScreenManagerTest; +using ScreenManagerTest = athena::test::AthenaTestBase; +using AthenaFocusRuleTest = athena::test::AthenaTestBase; namespace athena { namespace { @@ -163,6 +164,91 @@ TEST_F(ScreenManagerTest, DefaultContainer) { parent->AddChild(original_default); } +TEST_F(AthenaFocusRuleTest, FocusTravarsalFromSameContainer) { + ScreenManager::ContainerParams params("contaier", kTestZOrderPriority); + params.can_activate_children = true; + scoped_ptr<aura::Window> + container(ScreenManager::Get()->CreateContainer(params)); + + scoped_ptr<aura::Window> w1(CreateWindow( + container.get(), nullptr, gfx::Rect(0, 0, 100, 100))); + wm::ActivateWindow(w1.get()); + EXPECT_TRUE(wm::IsActiveWindow(w1.get())); + + scoped_ptr<aura::Window> w2(CreateWindow( + container.get(), nullptr, gfx::Rect(0, 0, 100, 100))); + EXPECT_TRUE(wm::IsActiveWindow(w1.get())); + + container->RemoveChild(w1.get()); + EXPECT_TRUE(wm::IsActiveWindow(w2.get())); +} + +TEST_F(AthenaFocusRuleTest, FocusTravarsalFromOtherContainer) { + ScreenManager::ContainerParams params2("contaier2", kTestZOrderPriority + 1); + params2.can_activate_children = true; + scoped_ptr<aura::Window> + container2(ScreenManager::Get()->CreateContainer(params2)); + scoped_ptr<aura::Window> w2(CreateWindow( + container2.get(), nullptr, gfx::Rect(0, 0, 100, 100))); + wm::ActivateWindow(w2.get()); + EXPECT_TRUE(wm::IsActiveWindow(w2.get())); + + ScreenManager::ContainerParams params1("contaier1", kTestZOrderPriority); + params1.can_activate_children = true; + scoped_ptr<aura::Window> + container1(ScreenManager::Get()->CreateContainer(params1)); + ScreenManager::ContainerParams params3("contaier3", kTestZOrderPriority + 2); + params3.can_activate_children = true; + scoped_ptr<aura::Window> + container3(ScreenManager::Get()->CreateContainer(params3)); + scoped_ptr<aura::Window> w1(CreateWindow( + container1.get(), nullptr, gfx::Rect(0, 0, 100, 100))); + scoped_ptr<aura::Window> w3(CreateWindow( + container3.get(), nullptr, gfx::Rect(0, 0, 100, 100))); + + EXPECT_TRUE(wm::IsActiveWindow(w2.get())); + + container2->RemoveChild(w2.get()); + // Focus moves to a window in the front contaier. + EXPECT_TRUE(wm::IsActiveWindow(w3.get())); + + container3->RemoveChild(w3.get()); + // Focus moves to a window in the back contaier. + EXPECT_TRUE(wm::IsActiveWindow(w1.get())); +} + +TEST_F(AthenaFocusRuleTest, FocusTravarsalFromEventBlockedContainer) { + ScreenManager::ContainerParams params1("contaier1", kTestZOrderPriority + 1); + params1.can_activate_children = true; + scoped_ptr<aura::Window> + container1(ScreenManager::Get()->CreateContainer(params1)); + + ScreenManager::ContainerParams params2("contaier2", kTestZOrderPriority + 2); + params2.can_activate_children = true; + params2.block_events = true; + scoped_ptr<aura::Window> + container2(ScreenManager::Get()->CreateContainer(params2)); + + scoped_ptr<aura::Window> w1(CreateWindow( + container1.get(), nullptr, gfx::Rect(0, 0, 100, 100))); + scoped_ptr<aura::Window> w2(CreateWindow( + container2.get(), nullptr, gfx::Rect(0, 0, 100, 100))); + + wm::ActivateWindow(w2.get()); + EXPECT_TRUE(wm::IsActiveWindow(w2.get())); + + // Confirm that w1 can't get the focus. + wm::ActivateWindow(w1.get()); + EXPECT_FALSE(wm::IsActiveWindow(w1.get())); + EXPECT_TRUE(wm::IsActiveWindow(w2.get())); + + container2->Hide(); + w2.reset(); + container2.reset(); + + EXPECT_TRUE(wm::IsActiveWindow(w1.get())); +} + namespace { class ScreenManagerTargeterTest |