1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// found in the LICENSE file.
4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "athena/test/athena_test_base.h"
6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "athena/env/public/athena_env.h"
803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "athena/screen/public/screen_manager.h"
9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "athena/test/athena_test_helper.h"
1003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "ui/aura/client/window_tree_client.h"
116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "ui/aura/test/event_generator_delegate_aura.h"
1203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "ui/aura/window.h"
13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "ui/compositor/test/context_factories_for_test.h"
14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
15f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#if defined(USE_X11)
16f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "ui/aura/window_tree_host_x11.h"
17f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif
18f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace athena {
20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace test {
21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)AthenaTestBase::AthenaTestBase()
23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    : setup_called_(false), teardown_called_(false) {
24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)AthenaTestBase::~AthenaTestBase() {
27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  CHECK(setup_called_)
28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      << "You have overridden SetUp but never called super class's SetUp";
29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  CHECK(teardown_called_)
30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      << "You have overridden TearDown but never called super class's TearDown";
31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void AthenaTestBase::SetUp() {
34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  setup_called_ = true;
35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  testing::Test::SetUp();
36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // The ContextFactory must exist before any Compositors are created.
38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  bool enable_pixel_output = false;
39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  ui::ContextFactory* context_factory =
40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      ui::InitializeContextFactoryForTests(enable_pixel_output);
41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  helper_.reset(new AthenaTestHelper(&message_loop_));
43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#if defined(USE_X11)
44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  aura::test::SetUseOverrideRedirectWindowByDefault(true);
45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif
466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  aura::test::InitializeAuraEventGeneratorDelegate();
47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  helper_->SetUp(context_factory);
48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void AthenaTestBase::TearDown() {
511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  AthenaEnv::Get()->OnTerminating();
521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  teardown_called_ = true;
54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Flush the message loop because we have pending release tasks
56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // and these tasks if un-executed would upset Valgrind.
57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  RunAllPendingInMessageLoop();
58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  helper_->TearDown();
60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  ui::TerminateContextFactoryForTests();
61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  testing::Test::TearDown();
62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void AthenaTestBase::RunAllPendingInMessageLoop() {
65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  helper_->RunAllPendingInMessageLoop();
66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
6803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)scoped_ptr<aura::Window> AthenaTestBase::CreateTestWindow(
6903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    aura::WindowDelegate* delegate,
7003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    const gfx::Rect& bounds) {
7103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  scoped_ptr<aura::Window> window(new aura::Window(delegate));
7203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  window->SetType(ui::wm::WINDOW_TYPE_NORMAL);
7303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  window->Init(aura::WINDOW_LAYER_SOLID_COLOR);
7403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  aura::client::ParentWindowWithContext(
7503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)      window.get(), ScreenManager::Get()->GetContext(), bounds);
7603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  return window.Pass();
7703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}
7803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
79cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}  // namespace test
80cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}  // namespace athena
81