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