1// Copyright (c) 2012 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 UI_VIEWS_TEST_VIEWS_TEST_BASE_H_
6#define UI_VIEWS_TEST_VIEWS_TEST_BASE_H_
7
8#include "base/memory/scoped_ptr.h"
9#include "base/message_loop/message_loop.h"
10#include "testing/gtest/include/gtest/gtest.h"
11#include "ui/views/test/test_views_delegate.h"
12
13#if defined(OS_WIN)
14#include "ui/base/win/scoped_ole_initializer.h"
15#endif
16
17namespace aura {
18namespace test {
19class AuraTestHelper;
20}
21}
22
23namespace views {
24
25// A base class for views unit test. It creates a message loop necessary
26// to drive UI events and takes care of OLE initialization for windows.
27class ViewsTestBase : public testing::Test {
28 public:
29  ViewsTestBase();
30  virtual ~ViewsTestBase();
31
32  // testing::Test:
33  virtual void SetUp() OVERRIDE;
34  virtual void TearDown() OVERRIDE;
35
36  void RunPendingMessages();
37
38  // Creates a widget of |type| with any platform specific data for use in
39  // cross-platform tests.
40  Widget::InitParams CreateParams(Widget::InitParams::Type type);
41
42 protected:
43  TestViewsDelegate& views_delegate() const { return *views_delegate_.get(); }
44
45  void set_views_delegate(TestViewsDelegate* views_delegate) {
46    views_delegate_.reset(views_delegate);
47  }
48
49  base::MessageLoopForUI* message_loop() { return &message_loop_; }
50
51  // Returns a context view. In aura builds, this will be the
52  // RootWindow. Everywhere else, NULL.
53  gfx::NativeView GetContext();
54
55 private:
56  base::MessageLoopForUI message_loop_;
57  scoped_ptr<TestViewsDelegate> views_delegate_;
58#if defined(USE_AURA)
59  scoped_ptr<aura::test::AuraTestHelper> aura_test_helper_;
60#endif
61  bool setup_called_;
62  bool teardown_called_;
63
64#if defined(OS_WIN)
65  ui::ScopedOleInitializer ole_initializer_;
66#endif
67
68  DISALLOW_COPY_AND_ASSIGN(ViewsTestBase);
69};
70
71}  // namespace views
72
73#endif  // UI_VIEWS_TEST_VIEWS_TEST_BASE_H_
74