aura_test_helper.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/test/aura_test_helper.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/message_loop.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/run_loop.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/client/aura_constants.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/client/default_capture_client.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/env.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/focus_manager.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/display_manager.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/root_window.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/single_display_manager.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/test/test_activation_client.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/test/test_screen.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/test/test_stacking_client.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/ui_controls_aura.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/test/dummy_input_method.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/compositor/layer_animator.h"
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/screen.h"
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/ui_controls/ui_controls.h"
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace aura {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace test {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AuraTestHelper::AuraTestHelper(MessageLoopForUI* message_loop)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : setup_called_(false),
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      teardown_called_(false),
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      owns_root_window_(false) {
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(message_loop);
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  message_loop_ = message_loop;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Disable animations during tests.
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ui::LayerAnimator::set_disable_animations_for_test(true);
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AuraTestHelper::~AuraTestHelper() {
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHECK(setup_called_)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << "You have overridden SetUp but never called super class's SetUp";
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHECK(teardown_called_)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << "You have overridden TearDown but never called super class's TearDown";
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AuraTestHelper::SetUp() {
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  setup_called_ = true;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Env::GetInstance()->SetDisplayManager(new SingleDisplayManager);
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  root_window_.reset(aura::DisplayManager::CreateRootWindowForPrimaryDisplay());
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  test_screen_.reset(new aura::TestScreen(root_window_.get()));
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Screen::SetScreenInstance(gfx::SCREEN_TYPE_NATIVE, test_screen_.get());
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ui_controls::InstallUIControlsAura(CreateUIControlsAura(root_window_.get()));
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  focus_manager_.reset(new FocusManager);
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  root_window_->set_focus_manager(focus_manager_.get());
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  stacking_client_.reset(new TestStackingClient(root_window_.get()));
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  test_activation_client_.reset(
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      new test::TestActivationClient(root_window_.get()));
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  capture_client_.reset(new client::DefaultCaptureClient(root_window_.get()));
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  test_input_method_.reset(new ui::test::DummyInputMethod);
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  root_window_->SetProperty(
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      aura::client::kRootWindowInputMethodKey,
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      test_input_method_.get());
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  root_window_->Show();
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Ensure width != height so tests won't confuse them.
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  root_window_->SetHostSize(gfx::Size(800, 600));
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AuraTestHelper::TearDown() {
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  teardown_called_ = true;
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  test_input_method_.reset();
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  stacking_client_.reset();
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  test_activation_client_.reset();
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  capture_client_.reset();
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  focus_manager_.reset();
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  root_window_.reset();
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  test_screen_.reset();
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Screen::SetScreenInstance(gfx::SCREEN_TYPE_NATIVE, NULL);
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  aura::Env::DeleteInstance();
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AuraTestHelper::RunAllPendingInMessageLoop() {
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_MACOSX)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(jbates) crbug.com/134753 Find quitters of this RunLoop and have them
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  //              use run_loop.QuitClosure().
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::RunLoop run_loop(Env::GetInstance()->GetDispatcher());
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  run_loop.RunUntilIdle();
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace test
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace aura
93