1// Copyright (c) 2011 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_JS_TEST_UTIL_H_
6#define CHROME_BROWSER_SYNC_JS_TEST_UTIL_H_
7#pragma once
8
9#include <ostream>
10#include <string>
11
12#include "chrome/browser/sync/js_backend.h"
13#include "chrome/browser/sync/js_frontend.h"
14#include "chrome/browser/sync/js_event_handler.h"
15#include "chrome/browser/sync/js_event_router.h"
16#include "testing/gmock/include/gmock/gmock.h"
17
18class ListValue;
19
20namespace browser_sync {
21
22class JsArgList;
23
24// Defined for googletest.  Equivalent to "*os << args.ToString()".
25void PrintTo(const JsArgList& args, ::std::ostream* os);
26
27// A matcher for gmock.  Use like:
28//
29//   EXPECT_CALL(mock, ProcessMessage("foo", HasArgs(args))).Times(1);
30::testing::Matcher<const JsArgList&> HasArgs(const JsArgList& expected_args);
31
32// Like HasArgs() but takes a ListValue instead.
33::testing::Matcher<const JsArgList&> HasArgsAsList(
34    const ListValue& expected_args);
35
36// Mocks.
37
38class MockJsBackend : public JsBackend {
39 public:
40  MockJsBackend();
41  ~MockJsBackend();
42
43  MOCK_METHOD1(SetParentJsEventRouter, void(JsEventRouter*));
44  MOCK_METHOD0(RemoveParentJsEventRouter, void());
45  MOCK_CONST_METHOD0(GetParentJsEventRouter, const JsEventRouter*());
46  MOCK_METHOD3(ProcessMessage, void(const ::std::string&, const JsArgList&,
47                                    const JsEventHandler*));
48};
49
50class MockJsFrontend : public JsFrontend {
51 public:
52  MockJsFrontend();
53  ~MockJsFrontend();
54
55  MOCK_METHOD1(AddHandler, void(JsEventHandler*));
56  MOCK_METHOD1(RemoveHandler, void(JsEventHandler*));
57  MOCK_METHOD3(ProcessMessage,
58               void(const ::std::string&, const JsArgList&,
59                    const JsEventHandler*));
60};
61
62class MockJsEventHandler : public JsEventHandler {
63 public:
64  MockJsEventHandler();
65  ~MockJsEventHandler();
66
67  MOCK_METHOD2(HandleJsEvent, void(const ::std::string&, const JsArgList&));
68};
69
70class MockJsEventRouter : public JsEventRouter {
71 public:
72  MockJsEventRouter();
73  ~MockJsEventRouter();
74
75  MOCK_METHOD3(RouteJsEvent,
76               void(const ::std::string&, const JsArgList&,
77                    const JsEventHandler*));
78};
79
80}  // namespace browser_sync
81
82#endif  // CHROME_BROWSER_SYNC_JS_TEST_UTIL_H_
83