1// Copyright 2013 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#ifndef ASH_TEST_ASH_TEST_HELPER_H_
6#define ASH_TEST_ASH_TEST_HELPER_H_
7
8#include "base/compiler_specific.h"
9#include "base/memory/scoped_ptr.h"
10
11namespace aura {
12class Window;
13}  // namespace aura
14
15namespace base {
16class MessageLoopForUI;
17}  // namespace base
18
19namespace ui {
20class ScopedAnimationDurationScaleMode;
21}  // namespace ui
22
23namespace views {
24class ViewsDelegate;
25}
26
27namespace ash {
28namespace test {
29
30class TestScreenshotDelegate;
31class TestShellDelegate;
32
33// A helper class that does common initialization required for Ash. Creates a
34// root window and an ash::Shell instance with a test delegate.
35class AshTestHelper {
36 public:
37  explicit AshTestHelper(base::MessageLoopForUI* message_loop);
38  ~AshTestHelper();
39
40  // Creates the ash::Shell and performs associated initialization.
41  // Set |start_session| to true if the user should log in before
42  // the test is run.
43  void SetUp(bool start_session);
44
45  // Destroys the ash::Shell and performs associated cleanup.
46  void TearDown();
47
48  // Returns a root Window. Usually this is the active root Window, but that
49  // method can return NULL sometimes, and in those cases, we fall back on the
50  // primary root Window.
51  aura::Window* CurrentContext();
52
53  void RunAllPendingInMessageLoop();
54
55  base::MessageLoopForUI* message_loop() { return message_loop_; }
56  TestShellDelegate* test_shell_delegate() { return test_shell_delegate_; }
57  void set_test_shell_delegate(TestShellDelegate* test_shell_delegate) {
58    test_shell_delegate_ = test_shell_delegate;
59  }
60  TestScreenshotDelegate* test_screenshot_delegate() {
61    return test_screenshot_delegate_;
62  }
63
64  // True if the running environment supports multiple displays,
65  // or false otherwise (e.g. win8 bot).
66  static bool SupportsMultipleDisplays();
67
68  // True if the running environment supports host window resize,
69  // or false otherwise (e.g. win8 bot).
70  static bool SupportsHostWindowResize();
71
72 private:
73  base::MessageLoopForUI* message_loop_;  // Not owned.
74  TestShellDelegate* test_shell_delegate_;  // Owned by ash::Shell.
75  scoped_ptr<ui::ScopedAnimationDurationScaleMode> zero_duration_mode_;
76
77  // Owned by ash::AcceleratorController
78  TestScreenshotDelegate* test_screenshot_delegate_;
79
80  scoped_ptr<views::ViewsDelegate> views_delegate_;
81
82  // Check if DBus Thread Manager was initialized here.
83  bool dbus_thread_manager_initialized_;
84
85  DISALLOW_COPY_AND_ASSIGN(AshTestHelper);
86};
87
88}  // namespace test
89}  // namespace ash
90
91#endif  // ASH_TEST_ASH_TEST_HELPER_H_
92