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 CHROME_BROWSER_PROFILE_RESETTER_PROFILE_RESETTER_TEST_BASE_H_
6#define CHROME_BROWSER_PROFILE_RESETTER_PROFILE_RESETTER_TEST_BASE_H_
7
8#include "chrome/browser/profile_resetter/profile_resetter.h"
9#include "content/public/test/test_utils.h"
10#include "testing/gmock/include/gmock/gmock.h"
11
12// The ProfileResetterMockObject is used to block the thread until
13// ProfileResetter::Reset has completed:
14
15// ProfileResetterMockObject mock_object;
16// resetter_->Reset(ProfileResetter::ALL,
17//                  pointer,
18//                  base::Bind(&ProfileResetterMockObject::StopLoop,
19//                             base::Unretained(&mock_object)));
20// mock_object.RunLoop();
21class ProfileResetterMockObject {
22 public:
23  ProfileResetterMockObject();
24  ~ProfileResetterMockObject();
25
26  void RunLoop();
27  void StopLoop();
28
29 private:
30  MOCK_METHOD0(Callback, void(void));
31
32  scoped_refptr<content::MessageLoopRunner> runner_;
33
34  DISALLOW_COPY_AND_ASSIGN(ProfileResetterMockObject);
35};
36
37// Base class for all ProfileResetter unit tests.
38class ProfileResetterTestBase {
39 public:
40  ProfileResetterTestBase();
41  ~ProfileResetterTestBase();
42
43  void ResetAndWait(ProfileResetter::ResettableFlags resettable_flags);
44  void ResetAndWait(ProfileResetter::ResettableFlags resettable_flags,
45                    const std::string& prefs);
46 protected:
47  testing::StrictMock<ProfileResetterMockObject> mock_object_;
48  scoped_ptr<ProfileResetter> resetter_;
49
50 private:
51  DISALLOW_COPY_AND_ASSIGN(ProfileResetterTestBase);
52};
53
54#endif  // CHROME_BROWSER_PROFILE_RESETTER_PROFILE_RESETTER_TEST_BASE_H_
55