js_test_util.h revision 5821806d5e7f356e8fa4b058a389a808ea183019
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 SYNC_JS_JS_TEST_UTIL_H_
6#define SYNC_JS_JS_TEST_UTIL_H_
7
8#include <ostream>
9#include <string>
10
11#include "base/memory/weak_ptr.h"
12#include "sync/internal_api/public/util/weak_handle.h"
13#include "sync/js/js_backend.h"
14#include "sync/js/js_controller.h"
15#include "sync/js/js_event_handler.h"
16#include "sync/js/js_reply_handler.h"
17#include "testing/gmock/include/gmock/gmock.h"
18
19namespace base {
20class DictionaryValue;
21class ListValue;
22}
23
24namespace syncer {
25
26class JsArgList;
27class JsEventDetails;
28
29// Defined for googletest.  Equivalent to "*os << args.ToString()".
30void PrintTo(const JsArgList& args, ::std::ostream* os);
31void PrintTo(const JsEventDetails& details, ::std::ostream* os);
32
33// A gmock matcher for JsArgList.  Use like:
34//
35//   EXPECT_CALL(mock, HandleJsReply("foo", HasArgs(expected_args)));
36::testing::Matcher<const JsArgList&> HasArgs(const JsArgList& expected_args);
37
38// Like HasArgs() but takes a ListValue instead.
39::testing::Matcher<const JsArgList&> HasArgsAsList(
40    const base::ListValue& expected_args);
41
42// A gmock matcher for JsEventDetails.  Use like:
43//
44//   EXPECT_CALL(mock, HandleJsEvent("foo", HasArgs(expected_details)));
45::testing::Matcher<const JsEventDetails&> HasDetails(
46    const JsEventDetails& expected_details);
47
48// Like HasDetails() but takes a DictionaryValue instead.
49::testing::Matcher<const JsEventDetails&> HasDetailsAsDictionary(
50    const base::DictionaryValue& expected_details);
51
52// Mocks.
53
54class MockJsBackend : public JsBackend,
55                      public base::SupportsWeakPtr<MockJsBackend> {
56 public:
57  MockJsBackend();
58  virtual ~MockJsBackend();
59
60  WeakHandle<JsBackend> AsWeakHandle();
61
62  MOCK_METHOD1(SetJsEventHandler, void(const WeakHandle<JsEventHandler>&));
63  MOCK_METHOD3(ProcessJsMessage, void(const ::std::string&, const JsArgList&,
64                                    const WeakHandle<JsReplyHandler>&));
65};
66
67class MockJsController : public JsController,
68                         public base::SupportsWeakPtr<MockJsController> {
69 public:
70  MockJsController();
71  virtual ~MockJsController();
72
73  MOCK_METHOD1(AddJsEventHandler, void(JsEventHandler*));
74  MOCK_METHOD1(RemoveJsEventHandler, void(JsEventHandler*));
75  MOCK_METHOD3(ProcessJsMessage,
76               void(const ::std::string&, const JsArgList&,
77                    const WeakHandle<JsReplyHandler>&));
78};
79
80class MockJsEventHandler
81    : public JsEventHandler,
82      public base::SupportsWeakPtr<MockJsEventHandler> {
83 public:
84  MockJsEventHandler();
85  virtual ~MockJsEventHandler();
86
87  WeakHandle<JsEventHandler> AsWeakHandle();
88
89  MOCK_METHOD2(HandleJsEvent,
90               void(const ::std::string&, const JsEventDetails&));
91};
92
93class MockJsReplyHandler
94    : public JsReplyHandler,
95      public base::SupportsWeakPtr<MockJsReplyHandler> {
96 public:
97  MockJsReplyHandler();
98  virtual ~MockJsReplyHandler();
99
100  WeakHandle<JsReplyHandler> AsWeakHandle();
101
102  MOCK_METHOD2(HandleJsReply,
103               void(const ::std::string&, const JsArgList&));
104};
105
106}  // namespace syncer
107
108#endif  // SYNC_JS_JS_TEST_UTIL_H_
109