| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef SYNC_JS_JS_TEST_UTIL_H_ |
| #define SYNC_JS_JS_TEST_UTIL_H_ |
| |
| #include <ostream> |
| #include <string> |
| |
| #include "base/memory/weak_ptr.h" |
| #include "sync/internal_api/public/util/weak_handle.h" |
| #include "sync/js/js_backend.h" |
| #include "sync/js/js_controller.h" |
| #include "sync/js/js_event_handler.h" |
| #include "sync/js/js_reply_handler.h" |
| #include "testing/gmock/include/gmock/gmock.h" |
| |
| namespace base { |
| class DictionaryValue; |
| class ListValue; |
| } |
| |
| namespace syncer { |
| |
| class JsArgList; |
| class JsEventDetails; |
| |
| // Defined for googletest. Equivalent to "*os << args.ToString()". |
| void PrintTo(const JsArgList& args, ::std::ostream* os); |
| void PrintTo(const JsEventDetails& details, ::std::ostream* os); |
| |
| // A gmock matcher for JsArgList. Use like: |
| // |
| // EXPECT_CALL(mock, HandleJsReply("foo", HasArgs(expected_args))); |
| ::testing::Matcher<const JsArgList&> HasArgs(const JsArgList& expected_args); |
| |
| // Like HasArgs() but takes a ListValue instead. |
| ::testing::Matcher<const JsArgList&> HasArgsAsList( |
| const base::ListValue& expected_args); |
| |
| // A gmock matcher for JsEventDetails. Use like: |
| // |
| // EXPECT_CALL(mock, HandleJsEvent("foo", HasArgs(expected_details))); |
| ::testing::Matcher<const JsEventDetails&> HasDetails( |
| const JsEventDetails& expected_details); |
| |
| // Like HasDetails() but takes a DictionaryValue instead. |
| ::testing::Matcher<const JsEventDetails&> HasDetailsAsDictionary( |
| const base::DictionaryValue& expected_details); |
| |
| // Mocks. |
| |
| class MockJsBackend : public JsBackend, |
| public base::SupportsWeakPtr<MockJsBackend> { |
| public: |
| MockJsBackend(); |
| virtual ~MockJsBackend(); |
| |
| WeakHandle<JsBackend> AsWeakHandle(); |
| |
| MOCK_METHOD1(SetJsEventHandler, void(const WeakHandle<JsEventHandler>&)); |
| MOCK_METHOD3(ProcessJsMessage, void(const ::std::string&, const JsArgList&, |
| const WeakHandle<JsReplyHandler>&)); |
| }; |
| |
| class MockJsController : public JsController, |
| public base::SupportsWeakPtr<MockJsController> { |
| public: |
| MockJsController(); |
| virtual ~MockJsController(); |
| |
| MOCK_METHOD1(AddJsEventHandler, void(JsEventHandler*)); |
| MOCK_METHOD1(RemoveJsEventHandler, void(JsEventHandler*)); |
| MOCK_METHOD3(ProcessJsMessage, |
| void(const ::std::string&, const JsArgList&, |
| const WeakHandle<JsReplyHandler>&)); |
| }; |
| |
| class MockJsEventHandler |
| : public JsEventHandler, |
| public base::SupportsWeakPtr<MockJsEventHandler> { |
| public: |
| MockJsEventHandler(); |
| virtual ~MockJsEventHandler(); |
| |
| WeakHandle<JsEventHandler> AsWeakHandle(); |
| |
| MOCK_METHOD2(HandleJsEvent, |
| void(const ::std::string&, const JsEventDetails&)); |
| }; |
| |
| class MockJsReplyHandler |
| : public JsReplyHandler, |
| public base::SupportsWeakPtr<MockJsReplyHandler> { |
| public: |
| MockJsReplyHandler(); |
| virtual ~MockJsReplyHandler(); |
| |
| WeakHandle<JsReplyHandler> AsWeakHandle(); |
| |
| MOCK_METHOD2(HandleJsReply, |
| void(const ::std::string&, const JsArgList&)); |
| }; |
| |
| } // namespace syncer |
| |
| #endif // SYNC_JS_JS_TEST_UTIL_H_ |