Chromium Code Reviews| Index: athena/wm/window_list_provider_impl_unittest.cc |
| diff --git a/athena/wm/window_list_provider_impl_unittest.cc b/athena/wm/window_list_provider_impl_unittest.cc |
| index 3419b2ed22c8d82d0da945560663073ffdac04ed..1ad9e38a964534a62b8c9f2e0d778eed58494b8b 100644 |
| --- a/athena/wm/window_list_provider_impl_unittest.cc |
| +++ b/athena/wm/window_list_provider_impl_unittest.cc |
| @@ -6,10 +6,14 @@ |
| #include <algorithm> |
| +#include "athena/screen/public/screen_manager.h" |
| #include "athena/test/base/athena_test_base.h" |
| #include "athena/wm/public/window_list_provider_observer.h" |
| +#include "athena/wm/public/window_manager.h" |
| +#include "ui/aura/client/window_tree_client.h" |
| #include "ui/aura/test/test_window_delegate.h" |
| #include "ui/aura/window.h" |
| +#include "ui/wm/core/window_util.h" |
| namespace athena { |
| @@ -21,11 +25,26 @@ bool AreWindowListsEqual(const aura::Window::Windows& one, |
| std::equal(one.begin(), one.end(), two.begin()); |
| } |
| -scoped_ptr<aura::Window> CreateWindow(aura::WindowDelegate* delegate, |
| +scoped_ptr<aura::Window> CreateWindow(aura::Window* parent, |
| + aura::WindowDelegate* delegate, |
| ui::wm::WindowType window_type) { |
| scoped_ptr<aura::Window> window(new aura::Window(delegate)); |
| window->SetType(window_type); |
| window->Init(aura::WINDOW_LAYER_SOLID_COLOR); |
| + if (parent) |
| + parent->AddChild(window.get()); |
| + return window.Pass(); |
| +} |
| + |
| +scoped_ptr<aura::Window> CreateTransientWindow(aura::Window* transient_parent, |
| + aura::WindowDelegate* delegate, |
| + ui::wm::WindowType window_type) { |
| + scoped_ptr<aura::Window> window(new aura::Window(delegate)); |
| + window->SetType(window_type); |
| + window->Init(aura::WINDOW_LAYER_SOLID_COLOR); |
| + wm::AddTransientChild(transient_parent, window.get()); |
| + aura::client::ParentWindowWithContext( |
| + window.get(), ScreenManager::Get()->GetContext(), gfx::Rect()); |
| return window.Pass(); |
| } |
| @@ -94,24 +113,27 @@ typedef test::AthenaTestBase WindowListProviderImplTest; |
| TEST_F(WindowListProviderImplTest, StackingOrder) { |
| aura::test::TestWindowDelegate delegate; |
| scoped_ptr<aura::Window> container(new aura::Window(&delegate)); |
| + scoped_ptr<WindowListProvider> list_provider( |
| + new WindowListProviderImpl(container.get())); |
| + |
| scoped_ptr<aura::Window> first = |
| - CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL); |
| + CreateWindow(container.get(), &delegate, ui::wm::WINDOW_TYPE_NORMAL); |
| scoped_ptr<aura::Window> second = |
| - CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL); |
| + CreateWindow(container.get(), &delegate, ui::wm::WINDOW_TYPE_NORMAL); |
| scoped_ptr<aura::Window> third = |
| - CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL); |
| - container->AddChild(first.get()); |
| - container->AddChild(second.get()); |
| - container->AddChild(third.get()); |
| + CreateWindow(container.get(), &delegate, ui::wm::WINDOW_TYPE_NORMAL); |
| + |
| + EXPECT_EQ(3u, container->children().size()); |
| + EXPECT_EQ(container->children().size(), |
| + list_provider->GetWindowList().size()); |
| - scoped_ptr<WindowListProvider> list_provider( |
| - new WindowListProviderImpl(container.get())); |
| EXPECT_TRUE(AreWindowListsEqual(container->children(), |
| list_provider->GetWindowList())); |
| container->StackChildAtTop(first.get()); |
| EXPECT_TRUE(AreWindowListsEqual(container->children(), |
| list_provider->GetWindowList())); |
| + EXPECT_EQ(3u, container->children().size()); |
| EXPECT_EQ(first.get(), container->children().back()); |
| } |
| @@ -119,21 +141,17 @@ TEST_F(WindowListProviderImplTest, StackingOrder) { |
| TEST_F(WindowListProviderImplTest, ListContainsOnlyNormalWindows) { |
| aura::test::TestWindowDelegate delegate; |
| scoped_ptr<aura::Window> container(new aura::Window(&delegate)); |
| + scoped_ptr<WindowListProvider> list_provider( |
| + new WindowListProviderImpl(container.get())); |
| + |
| scoped_ptr<aura::Window> first = |
| - CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL); |
| + CreateWindow(container.get(), &delegate, ui::wm::WINDOW_TYPE_NORMAL); |
| scoped_ptr<aura::Window> second = |
| - CreateWindow(&delegate, ui::wm::WINDOW_TYPE_POPUP); |
| + CreateWindow(container.get(), &delegate, ui::wm::WINDOW_TYPE_POPUP); |
| scoped_ptr<aura::Window> third = |
| - CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL); |
| + CreateWindow(container.get(), &delegate, ui::wm::WINDOW_TYPE_NORMAL); |
| scoped_ptr<aura::Window> fourth = |
| - CreateWindow(&delegate, ui::wm::WINDOW_TYPE_MENU); |
| - container->AddChild(first.get()); |
| - container->AddChild(second.get()); |
| - container->AddChild(third.get()); |
| - container->AddChild(fourth.get()); |
| - |
| - scoped_ptr<WindowListProvider> list_provider( |
| - new WindowListProviderImpl(container.get())); |
| + CreateWindow(container.get(), &delegate, ui::wm::WINDOW_TYPE_MENU); |
| const aura::Window::Windows& list = list_provider->GetWindowList(); |
| EXPECT_EQ(list.end(), std::find(list.begin(), list.end(), second.get())); |
| @@ -146,16 +164,15 @@ TEST_F(WindowListProviderImplTest, ListContainsOnlyNormalWindows) { |
| TEST_F(WindowListProviderImplTest, SimpleChecks) { |
| aura::test::TestWindowDelegate delegate; |
| scoped_ptr<aura::Window> container(new aura::Window(&delegate)); |
| + scoped_ptr<WindowListProviderImpl> list_provider( |
| + new WindowListProviderImpl(container.get())); |
| scoped_ptr<aura::Window> normal_window = |
| - CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL); |
| + CreateWindow(NULL, &delegate, ui::wm::WINDOW_TYPE_NORMAL); |
| scoped_ptr<aura::Window> popup_window = |
| - CreateWindow(&delegate, ui::wm::WINDOW_TYPE_POPUP); |
| + CreateWindow(NULL, &delegate, ui::wm::WINDOW_TYPE_POPUP); |
| scoped_ptr<aura::Window> menu_window = |
| - CreateWindow(&delegate, ui::wm::WINDOW_TYPE_MENU); |
| - |
| - scoped_ptr<WindowListProvider> list_provider( |
| - new WindowListProviderImpl(container.get())); |
| + CreateWindow(NULL, &delegate, ui::wm::WINDOW_TYPE_MENU); |
| // Check which windows are valid and which are not. |
| EXPECT_TRUE(list_provider->IsValidWindow(normal_window.get())); |
| @@ -176,19 +193,18 @@ TEST_F(WindowListProviderImplTest, SimpleChecks) { |
| TEST_F(WindowListProviderImplTest, TestWindowOrderingFunctions) { |
| aura::test::TestWindowDelegate delegate; |
| scoped_ptr<aura::Window> container(new aura::Window(&delegate)); |
| - |
| - scoped_ptr<aura::Window> window1 = |
| - CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL); |
| - scoped_ptr<aura::Window> window2 = |
| - CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL); |
| - scoped_ptr<aura::Window> window3 = |
| - CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL); |
| - |
| scoped_ptr<WindowListProvider> list_provider( |
| new WindowListProviderImpl(container.get())); |
| scoped_ptr<WindowListObserver> observer( |
| new WindowListObserver(list_provider.get())); |
| + scoped_ptr<aura::Window> window1 = |
| + CreateWindow(NULL, &delegate, ui::wm::WINDOW_TYPE_NORMAL); |
| + scoped_ptr<aura::Window> window2 = |
| + CreateWindow(NULL, &delegate, ui::wm::WINDOW_TYPE_NORMAL); |
| + scoped_ptr<aura::Window> window3 = |
| + CreateWindow(NULL, &delegate, ui::wm::WINDOW_TYPE_NORMAL); |
| + |
| EXPECT_FALSE(list_provider->IsWindowInList(window1.get())); |
| EXPECT_FALSE(list_provider->IsWindowInList(window2.get())); |
| EXPECT_FALSE(list_provider->IsWindowInList(window3.get())); |
| @@ -244,26 +260,20 @@ TEST_F(WindowListProviderImplTest, TestWindowOrderingFunctions) { |
| TEST_F(WindowListProviderImplTest, TestWindowRemovalNotification) { |
| aura::test::TestWindowDelegate delegate; |
| scoped_ptr<aura::Window> container(new aura::Window(&delegate)); |
| + scoped_ptr<WindowListProvider> list_provider( |
| + new WindowListProviderImpl(container.get())); |
| + scoped_ptr<WindowListObserver> observer( |
| + new WindowListObserver(list_provider.get())); |
| scoped_ptr<aura::Window> window1 = |
| - CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL); |
| + CreateWindow(container.get(), &delegate, ui::wm::WINDOW_TYPE_NORMAL); |
| scoped_ptr<aura::Window> window2 = |
| - CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL); |
| + CreateWindow(container.get(), &delegate, ui::wm::WINDOW_TYPE_NORMAL); |
| scoped_ptr<aura::Window> window3 = |
| - CreateWindow(&delegate, ui::wm::WINDOW_TYPE_NORMAL); |
| + CreateWindow(container.get(), &delegate, ui::wm::WINDOW_TYPE_NORMAL); |
| scoped_ptr<aura::Window> window4 = |
| - CreateWindow(&delegate, ui::wm::WINDOW_TYPE_POPUP); |
| + CreateWindow(container.get(), &delegate, ui::wm::WINDOW_TYPE_POPUP); |
| - scoped_ptr<WindowListProvider> list_provider( |
| - new WindowListProviderImpl(container.get())); |
| - scoped_ptr<WindowListObserver> observer( |
| - new WindowListObserver(list_provider.get())); |
| - |
| - // Add the windows. |
| - container->AddChild(window1.get()); |
| - container->AddChild(window2.get()); |
| - container->AddChild(window3.get()); |
| - container->AddChild(window4.get()); |
| // The popup-window (window4) should not be included in the window-list. |
| ASSERT_EQ(3U, list_provider->GetWindowList().size()); |
| EXPECT_EQ(0, observer->window_removal_calls()); |
| @@ -287,4 +297,63 @@ TEST_F(WindowListProviderImplTest, TestWindowRemovalNotification) { |
| EXPECT_EQ(3, observer->window_removal_calls()); |
| } |
| +// That transient windows are handled property. |
|
Mr4D (OOO till 08-26)
2014/10/08 15:32:29
Test that ..
?
oshima
2014/10/08 19:05:30
Done.
|
| +TEST_F(WindowListProviderImplTest, TransientWindows) { |
| + aura::test::TestWindowDelegate delegate; |
| + delegate.set_can_focus(true); |
| + |
| + WindowListProvider* list_provider = |
| + WindowManager::Get()->GetWindowListProvider(); |
| + |
| + scoped_ptr<WindowListObserver> observer( |
| + new WindowListObserver(list_provider)); |
| + scoped_ptr<aura::Window> w1 = CreateTestWindow(&delegate, gfx::Rect()); |
| + w1->Show(); |
| + scoped_ptr<aura::Window> w2 = CreateTestWindow(&delegate, gfx::Rect()); |
| + w2->Show(); |
| + scoped_ptr<aura::Window> t1 = |
| + CreateTransientWindow(w1.get(), &delegate, ui::wm::WINDOW_TYPE_NORMAL); |
| + t1->Show(); |
| + |
| + EXPECT_EQ(2u, list_provider->GetWindowList().size()); |
| + |
| + // Activation should honor transient relations. |
| + wm::ActivateWindow(w2.get()); |
| + EXPECT_EQ(w1.get(), list_provider->GetWindowList()[0]); |
| + EXPECT_EQ(w2.get(), list_provider->GetWindowList()[1]); |
| + |
| + EXPECT_EQ(w1.get(), w1->parent()->children()[0]); |
| + EXPECT_EQ(t1.get(), w1->parent()->children()[1]); |
| + EXPECT_EQ(w2.get(), w1->parent()->children()[2]); |
| + |
| + wm::ActivateWindow(w1.get()); |
| + EXPECT_EQ(w2.get(), w1->parent()->children()[0]); |
| + EXPECT_EQ(w1.get(), w1->parent()->children()[1]); |
| + EXPECT_EQ(t1.get(), w1->parent()->children()[2]); |
| + |
| + // Manual operations should honor transient relations too. |
| + // TODO(oshima): moving the active window back should activate the top window. |
| + list_provider->StackWindowBehindTo(w1.get(), w2.get()); |
| + EXPECT_EQ(w1.get(), w1->parent()->children()[0]); |
| + EXPECT_EQ(t1.get(), w1->parent()->children()[1]); |
| + EXPECT_EQ(w2.get(), w1->parent()->children()[2]); |
| + |
| + list_provider->StackWindowFrontOf(w1.get(), w2.get()); |
| + EXPECT_EQ(w2.get(), w1->parent()->children()[0]); |
| + EXPECT_EQ(w1.get(), w1->parent()->children()[1]); |
| + EXPECT_EQ(t1.get(), w1->parent()->children()[2]); |
| + |
| + // Transient windows should follow the transient parent's |
| + // visibility. |
| + EXPECT_TRUE(t1->IsVisible()); |
| + w1->Hide(); |
| + EXPECT_FALSE(t1->IsVisible()); |
| + w1->Show(); |
| + EXPECT_TRUE(t1->IsVisible()); |
| + |
| + // Resetting transient window won't notify the observer. |
| + t1.reset(); |
| + EXPECT_EQ(0, observer->window_removal_calls()); |
| +} |
| + |
| } // namespace athena |