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_base.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
71e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "ui/aura/client/window_tree_client.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/aura/test/aura_test_helper.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/aura/test/test_window_delegate.h"
10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/aura/window.h"
117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "ui/base/ime/input_method_initializer.h"
12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/compositor/test/context_factories_for_test.h"
135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/events/event_dispatcher.h"
14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/events/event_processor.h"
1568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "ui/events/gestures/gesture_configuration.h"
16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace aura {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace test {
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)AuraTestBase::AuraTestBase()
21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    : setup_called_(false),
22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      teardown_called_(false) {
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AuraTestBase::~AuraTestBase() {
26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  CHECK(setup_called_)
27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      << "You have overridden SetUp but never called super class's SetUp";
28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  CHECK(teardown_called_)
29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      << "You have overridden TearDown but never called super class's TearDown";
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AuraTestBase::SetUp() {
33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  setup_called_ = true;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  testing::Test::SetUp();
357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  ui::InitializeInputMethodForTesting();
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Changing the parameters for gesture recognition shouldn't cause
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // tests to fail, so we use a separate set of parameters for unit
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // testing.
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ui::GestureConfiguration::set_long_press_time_in_seconds(1.0);
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ui::GestureConfiguration::set_semi_long_press_time_in_seconds(0.4);
421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  ui::GestureConfiguration::set_show_press_delay_in_ms(5);
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ui::GestureConfiguration::set_max_distance_for_two_finger_tap_in_pixels(300);
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ui::GestureConfiguration::set_max_seconds_between_double_click(0.7);
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ui::GestureConfiguration::
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      set_max_separation_for_gesture_touches_in_pixels(150);
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ui::GestureConfiguration::
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      set_max_touch_down_duration_in_seconds_for_click(0.8);
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ui::GestureConfiguration::set_max_touch_move_in_pixels_for_click(5);
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ui::GestureConfiguration::set_max_distance_between_taps_for_double_tap(20);
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ui::GestureConfiguration::set_min_distance_for_pinch_scroll_in_pixels(20);
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ui::GestureConfiguration::set_min_pinch_update_distance_in_pixels(5);
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ui::GestureConfiguration::set_default_radius(0);
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ui::GestureConfiguration::set_fling_velocity_cap(15000.0f);
550529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  ui::GestureConfiguration::set_min_swipe_speed(10);
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
57a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // The ContextFactory must exist before any Compositors are created.
58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  bool enable_pixel_output = false;
59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  ui::ContextFactory* context_factory =
60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      ui::InitializeContextFactoryForTests(enable_pixel_output);
61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper_.reset(new AuraTestHelper(&message_loop_));
63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  helper_->SetUp(context_factory);
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AuraTestBase::TearDown() {
67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  teardown_called_ = true;
68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Flush the message loop because we have pending release tasks
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // and these tasks if un-executed would upset Valgrind.
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RunAllPendingInMessageLoop();
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper_->TearDown();
74a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  ui::TerminateContextFactoryForTests();
757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  ui::ShutdownInputMethodForTesting();
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  testing::Test::TearDown();
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)Window* AuraTestBase::CreateNormalWindow(int id, Window* parent,
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                         WindowDelegate* delegate) {
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Window* window = new Window(
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      delegate ? delegate :
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      test::TestWindowDelegate::CreateSelfDestroyingDelegate());
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  window->set_id(id);
855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  window->Init(aura::WINDOW_LAYER_TEXTURED);
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  parent->AddChild(window);
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  window->SetBounds(gfx::Rect(0, 0, 100, 100));
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  window->Show();
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return window;
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void AuraTestBase::RunAllPendingInMessageLoop() {
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  helper_->RunAllPendingInMessageLoop();
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
961e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void AuraTestBase::ParentWindow(Window* window) {
971e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  client::ParentWindowWithContext(window, root_window(), gfx::Rect());
981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool AuraTestBase::DispatchEventUsingWindowDispatcher(ui::Event* event) {
101a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  ui::EventDispatchDetails details =
102a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      event_processor()->OnEventFromSource(event);
1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  CHECK(!details.dispatcher_destroyed);
1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return event->handled();
1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace test
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace aura
109