Chromium Code Reviews| Index: ui/views/widget/native_widget_aura_unittest.cc |
| diff --git a/ui/views/widget/native_widget_aura_unittest.cc b/ui/views/widget/native_widget_aura_unittest.cc |
| index 24df6585b1c872b146de2727c8ea5cad0e902d7b..435b8e75c976d2bc342ba84c2db3507eec8899f2 100644 |
| --- a/ui/views/widget/native_widget_aura_unittest.cc |
| +++ b/ui/views/widget/native_widget_aura_unittest.cc |
| @@ -15,6 +15,7 @@ |
| #include "ui/aura/layout_manager.h" |
| #include "ui/aura/test/aura_test_base.h" |
| #include "ui/aura/window.h" |
| +#include "ui/aura/window_observer.h" |
| #include "ui/aura/window_tree_host.h" |
| #include "ui/events/event.h" |
| #include "ui/events/event_utils.h" |
| @@ -150,6 +151,72 @@ TEST_F(NativeWidgetAuraTest, CreateMinimized) { |
| widget->CloseNow(); |
| } |
| +// A WindowObserver that counts kShowStateKey property changes. |
| +class TestWindowObserver : public aura::WindowObserver { |
| + public: |
| + TestWindowObserver(gfx::NativeWindow window) : window_(window) { |
|
sky
2016/04/25 15:01:18
explicit
varkha
2016/04/25 15:56:57
Done.
|
| + window_->AddObserver(this); |
| + } |
| + ~TestWindowObserver() override { |
| + window_->RemoveObserver(this); |
| + } |
| + |
| + // aura::WindowObserver: |
| + void OnWindowPropertyChanged(aura::Window* window, |
| + const void* key, |
| + intptr_t old) override { |
| + if (key != aura::client::kShowStateKey) |
| + return; |
| + count_++; |
| + state_ = window_->GetProperty(aura::client::kShowStateKey); |
| + } |
| + |
| + int count() const { return count_; } |
| + ui::WindowShowState state() const { return state_; } |
| + void Reset() { count_ = 0; } |
| + |
| + private: |
| + gfx::NativeWindow window_; |
| + int count_ = 0; |
| + ui::WindowShowState state_ = ui::WindowShowState::SHOW_STATE_DEFAULT; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(TestWindowObserver); |
| +}; |
| + |
| +// Tests that window transitions from normal to minimized and back do not |
| +// involve extra show state transitions. |
| +TEST_F(NativeWidgetAuraTest, ToggleState) { |
| + Widget::InitParams params(Widget::InitParams::TYPE_WINDOW); |
| + params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
| + params.parent = NULL; |
|
sky
2016/04/25 15:01:18
nullptr
varkha
2016/04/25 15:56:57
Done. Here and elsewhere in this file.
|
| + params.context = root_window(); |
| + params.show_state = ui::SHOW_STATE_NORMAL; |
| + params.bounds.SetRect(0, 0, 1024, 800); |
| + std::unique_ptr<Widget> widget(new Widget()); |
|
sky
2016/04/25 15:01:18
nit: no need for a unique_ptr here, declare widget
varkha
2016/04/25 15:56:57
Done.
|
| + widget->Init(params); |
| + std::unique_ptr<TestWindowObserver> observer( |
| + new TestWindowObserver(widget->GetNativeWindow())); |
| + widget->Show(); |
| + EXPECT_FALSE(widget->IsMinimized()); |
| + EXPECT_EQ(0, observer->count()); |
| + EXPECT_EQ(ui::WindowShowState::SHOW_STATE_DEFAULT, observer->state()); |
| + |
| + widget->Minimize(); |
| + EXPECT_TRUE(widget->IsMinimized()); |
| + EXPECT_EQ(1, observer->count()); |
| + EXPECT_EQ(ui::WindowShowState::SHOW_STATE_MINIMIZED, observer->state()); |
| + observer->Reset(); |
| + |
| + widget->Show(); |
| + widget->Restore(); |
| + EXPECT_EQ(1, observer->count()); |
| + EXPECT_EQ(ui::WindowShowState::SHOW_STATE_NORMAL, observer->state()); |
| + |
| + observer.reset(); |
| + EXPECT_FALSE(widget->IsMinimized()); |
| + widget->CloseNow(); |
| +} |
| + |
| class TestLayoutManagerBase : public aura::LayoutManager { |
| public: |
| TestLayoutManagerBase() {} |