Chromium Code Reviews| Index: ash/wm/workspace/workspace_layout_manager_unittest.cc |
| diff --git a/ash/wm/workspace/workspace_layout_manager_unittest.cc b/ash/wm/workspace/workspace_layout_manager_unittest.cc |
| index 4302f1dc44f9bdb6093f59bc2a286b2d743ff77a..602a3697a255a9399f166227ca6b7b3452b027bf 100644 |
| --- a/ash/wm/workspace/workspace_layout_manager_unittest.cc |
| +++ b/ash/wm/workspace/workspace_layout_manager_unittest.cc |
| @@ -11,6 +11,7 @@ |
| #include "ash/shelf/shelf_layout_manager.h" |
| #include "ash/shelf/shelf_widget.h" |
| #include "ash/shell.h" |
| +#include "ash/shell_observer.h" |
| #include "ash/test/ash_test_base.h" |
| #include "ash/wm/window_state.h" |
| #include "ash/wm/window_util.h" |
| @@ -47,6 +48,38 @@ class MaximizeDelegateView : public views::WidgetDelegateView { |
| DISALLOW_COPY_AND_ASSIGN(MaximizeDelegateView); |
| }; |
| +class TestShellObserver : public ShellObserver { |
| + public: |
| + TestShellObserver() : call_count_(0), |
| + is_fullscreen_(false) { |
| + Shell::GetInstance()->AddShellObserver(this); |
| + } |
| + |
| + virtual ~TestShellObserver() { |
| + Shell::GetInstance()->RemoveShellObserver(this); |
| + } |
| + |
| + virtual void OnFullscreenStateChanged(bool is_fullscreen, |
| + aura::Window* root_window) OVERRIDE { |
| + call_count_++; |
| + is_fullscreen_ = is_fullscreen; |
| + } |
| + |
| + int call_count() const { |
| + return call_count_; |
| + } |
| + |
| + bool is_fullscreen() const { |
| + return is_fullscreen_; |
| + } |
| + |
| + private: |
| + int call_count_; |
| + bool is_fullscreen_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(TestShellObserver); |
| +}; |
| + |
| } // namespace |
| typedef test::AshTestBase WorkspaceLayoutManagerTest; |
| @@ -407,4 +440,33 @@ TEST_F(WorkspaceLayoutManagerTest, SizeToWorkArea) { |
| window->bounds().ToString()); |
| } |
| +TEST_F(WorkspaceLayoutManagerTest, NotifyFullscreenChanges) { |
| + TestShellObserver observer; |
| + scoped_ptr<aura::Window> window1( |
| + CreateTestWindowInShellWithBounds(gfx::Rect(1, 2, 30, 40))); |
| + scoped_ptr<aura::Window> window2( |
| + CreateTestWindowInShellWithBounds(gfx::Rect(1, 2, 30, 40))); |
| + wm::WindowState* window_state1 = wm::GetWindowState(window1.get()); |
| + wm::WindowState* window_state2 = wm::GetWindowState(window2.get()); |
| + window_state2->Activate(); |
| + |
| + window_state2->ToggleFullscreen(); |
| + EXPECT_EQ(1, observer.call_count()); |
| + EXPECT_TRUE(observer.is_fullscreen()); |
| + |
| + // When window1 moves to the front the fullscreen state should change. |
| + window_state1->Activate(); |
| + EXPECT_EQ(2, observer.call_count()); |
| + EXPECT_FALSE(observer.is_fullscreen()); |
| + |
| + // It should change back if window2 becomes active again. |
| + window_state2->Activate(); |
| + EXPECT_EQ(3, observer.call_count()); |
| + EXPECT_TRUE(observer.is_fullscreen()); |
| + |
| + window_state2->ToggleFullscreen(); |
| + EXPECT_EQ(4, observer.call_count()); |
| + EXPECT_FALSE(observer.is_fullscreen()); |
|
pkotwicz
2013/12/05 20:50:10
For the sake of completeness, you should also test
flackr
2013/12/05 21:39:16
There was actually nothing fired on window removed
|
| +} |
| + |
| } // namespace ash |