sync_file_system_test_util.h revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
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 CHROME_BROWSER_SYNC_FILE_SYSTEM_SYNC_FILE_SYSTEM_TEST_UTIL_H_
6#define CHROME_BROWSER_SYNC_FILE_SYSTEM_SYNC_FILE_SYSTEM_TEST_UTIL_H_
7
8#include "base/memory/ref_counted.h"
9#include "base/memory/scoped_ptr.h"
10#include "base/message_loop.h"
11
12namespace base {
13class RunLoop;
14class SingleThreadTaskRunner;
15class Thread;
16}
17
18namespace content {
19class TestBrowserThread;
20}
21
22namespace sync_file_system {
23
24template <typename R>
25void AssignAndQuit(base::RunLoop* run_loop, R* result_out, R result);
26
27template <typename R> base::Callback<void(R)>
28AssignAndQuitCallback(base::RunLoop* run_loop, R* result);
29
30// This sets up FILE, IO and UI browser threads for testing.
31// (UI thread is set to the current thread.)
32class MultiThreadTestHelper {
33 public:
34  MultiThreadTestHelper();
35  ~MultiThreadTestHelper();
36
37  void SetUp();
38  void TearDown();
39
40  MessageLoop* message_loop() { return &message_loop_; }
41
42  base::SingleThreadTaskRunner* ui_task_runner() {
43    return ui_task_runner_.get();
44  }
45
46  base::SingleThreadTaskRunner* file_task_runner() {
47    return file_task_runner_.get();
48  }
49
50  base::SingleThreadTaskRunner* io_task_runner() {
51    return io_task_runner_.get();
52  }
53
54 private:
55  MessageLoop message_loop_;
56  scoped_ptr<base::Thread> file_thread_;
57  scoped_ptr<base::Thread> io_thread_;
58
59  scoped_ptr<content::TestBrowserThread> browser_ui_thread_;
60  scoped_ptr<content::TestBrowserThread> browser_file_thread_;
61  scoped_ptr<content::TestBrowserThread> browser_io_thread_;
62
63  scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_;
64  scoped_refptr<base::SingleThreadTaskRunner> file_task_runner_;
65  scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_;
66};
67
68}  // namespace sync_file_system
69
70#endif  // CHROME_BROWSER_SYNC_FILE_SYSTEM_SYNC_FILE_SYSTEM_TEST_UTIL_H_
71