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) 7ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "base/message_loop/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" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/aura/client/focus_client.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/env.h" 134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ui/aura/input_state_lookup.h" 144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ui/aura/test/env_test_helper.h" 156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "ui/aura/test/event_generator_delegate_aura.h" 168bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "ui/aura/test/test_focus_client.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/test/test_screen.h" 181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "ui/aura/test/test_window_tree_client.h" 19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/aura/window_event_dispatcher.h" 207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/base/ime/dummy_input_method.h" 211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "ui/base/ime/input_method_initializer.h" 22c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch#include "ui/compositor/compositor.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/compositor/layer_animator.h" 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/compositor/scoped_animation_duration_scale_mode.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/screen.h" 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(USE_X11) 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/aura/window_tree_host_x11.h" 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/base/x/x11_util.h" 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace aura { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace test { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)AuraTestHelper::AuraTestHelper(base::MessageLoopForUI* message_loop) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : setup_called_(false), 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) teardown_called_(false), 38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) owns_host_(false) { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(message_loop); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) message_loop_ = message_loop; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Disable animations during tests. 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) zero_duration_mode_.reset(new ui::ScopedAnimationDurationScaleMode( 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui::ScopedAnimationDurationScaleMode::ZERO_DURATION)); 4490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#if defined(USE_X11) 4590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) test::SetUseOverrideRedirectWindowByDefault(true); 4690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif 476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) InitializeAuraEventGeneratorDelegate(); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AuraTestHelper::~AuraTestHelper() { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(setup_called_) 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) << "AuraTestHelper::SetUp() never called."; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CHECK(teardown_called_) 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) << "AuraTestHelper::TearDown() never called."; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void AuraTestHelper::SetUp(ui::ContextFactory* context_factory) { 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setup_called_ = true; 59c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch 60010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) Env::CreateInstance(true); 61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Env::GetInstance()->set_context_factory(context_factory); 624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Unit tests generally don't want to query the system, rather use the state 634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // from RootWindow. 644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) EnvTestHelper(Env::GetInstance()).SetInputStateLookup( 654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_ptr<InputStateLookup>()); 664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ui::InitializeInputMethodForTesting(); 681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 696d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) gfx::Size host_size(800, 600); 706d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) test_screen_.reset(TestScreen::Create(host_size)); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Screen::SetScreenInstance(gfx::SCREEN_TYPE_NATIVE, test_screen_.get()); 72a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) host_.reset(test_screen_->CreateHostForPrimaryDisplay()); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 748bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) focus_client_.reset(new TestFocusClient); 75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) client::SetFocusClient(root_window(), focus_client_.get()); 76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) stacking_client_.reset(new TestWindowTreeClient(root_window())); 77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) capture_client_.reset(new client::DefaultCaptureClient(root_window())); 787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) test_input_method_.reset(new ui::DummyInputMethod); 79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) root_window()->SetProperty( 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) client::kRootWindowInputMethodKey, 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_input_method_.get()); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) root_window()->Show(); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ensure width != height so tests won't confuse them. 856d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) host()->SetBounds(gfx::Rect(host_size)); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AuraTestHelper::TearDown() { 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) teardown_called_ = true; 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_input_method_.reset(); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) stacking_client_.reset(); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) capture_client_.reset(); 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) focus_client_.reset(); 94f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) client::SetFocusClient(root_window(), NULL); 95a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) host_.reset(); 965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ui::GestureRecognizer::Reset(); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_screen_.reset(); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Screen::SetScreenInstance(gfx::SCREEN_TYPE_NATIVE, NULL); 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(USE_X11) 101cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ui::test::ResetXCursorCache(); 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ui::ShutdownInputMethodForTesting(); 1051e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Env::DeleteInstance(); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AuraTestHelper::RunAllPendingInMessageLoop() { 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(jbates) crbug.com/134753 Find quitters of this RunLoop and have them 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // use run_loop.QuitClosure(). 1125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::RunLoop run_loop; 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) run_loop.RunUntilIdle(); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace test 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace aura 118