mru_window_tracker_unittest.cc revision cedac228d2dd51db4b79ea1e72c7f249408ee061
14e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 24e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 34e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// found in the LICENSE file. 44e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 54e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ash/shell.h" 64e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ash/test/ash_test_base.h" 7a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "ash/test/test_shelf_delegate.h" 84e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ash/wm/mru_window_tracker.h" 94e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ash/wm/window_state.h" 104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ash/wm/window_util.h" 114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/compiler_specific.h" 124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ui/aura/test/test_window_delegate.h" 134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ui/aura/window.h" 14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/views/widget/widget.h" 154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace ash { 174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class MruWindowTrackerTest : public test::AshTestBase { 194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) public: 204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) MruWindowTrackerTest() {} 214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual ~MruWindowTrackerTest() {} 224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) aura::Window* CreateWindow() { 244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return CreateTestWindowInShellWithBounds(gfx::Rect(0, 0, 400, 400)); 254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ash::MruWindowTracker* mru_window_tracker() { 284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return Shell::GetInstance()->mru_window_tracker(); 294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) } 304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) private: 324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(MruWindowTrackerTest); 334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}; 344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Basic test that the activation order is tracked. 364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TEST_F(MruWindowTrackerTest, Basic) { 374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_ptr<aura::Window> w1(CreateWindow()); 384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_ptr<aura::Window> w2(CreateWindow()); 394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_ptr<aura::Window> w3(CreateWindow()); 404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) wm::ActivateWindow(w3.get()); 414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) wm::ActivateWindow(w2.get()); 424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) wm::ActivateWindow(w1.get()); 434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) MruWindowTracker::WindowList window_list = 454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) mru_window_tracker()->BuildMruWindowList(); 464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(w1.get(), window_list[0]); 474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(w2.get(), window_list[1]); 484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(w3.get(), window_list[2]); 494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Test that minimized windows are considered least recently used (but kept in 524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// correct relative order). 534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)TEST_F(MruWindowTrackerTest, MinimizedWindowsAreLru) { 544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_ptr<aura::Window> w1(CreateWindow()); 554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_ptr<aura::Window> w2(CreateWindow()); 564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_ptr<aura::Window> w3(CreateWindow()); 574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_ptr<aura::Window> w4(CreateWindow()); 584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_ptr<aura::Window> w5(CreateWindow()); 594e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_ptr<aura::Window> w6(CreateWindow()); 604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) wm::ActivateWindow(w6.get()); 614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) wm::ActivateWindow(w5.get()); 624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) wm::ActivateWindow(w4.get()); 634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) wm::ActivateWindow(w3.get()); 644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) wm::ActivateWindow(w2.get()); 654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) wm::ActivateWindow(w1.get()); 664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) wm::GetWindowState(w1.get())->Minimize(); 684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) wm::GetWindowState(w4.get())->Minimize(); 694e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) wm::GetWindowState(w5.get())->Minimize(); 704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Expect the relative order of minimized windows to remain the same, but all 724e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // minimized windows to be at the end of the list. 734e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) MruWindowTracker::WindowList window_list = 744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) mru_window_tracker()->BuildMruWindowList(); 754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(w2.get(), window_list[0]); 764e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(w3.get(), window_list[1]); 774e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(w6.get(), window_list[2]); 784e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(w1.get(), window_list[3]); 794e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(w4.get(), window_list[4]); 804e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EXPECT_EQ(w5.get(), window_list[5]); 814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} // namespace ash 84