// 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 #include #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 HasArgs(const JsArgList& expected_args); // A gmock matcher for JsEventDetails. Use like: // // EXPECT_CALL(mock, HandleJsEvent("foo", HasArgs(expected_details))); ::testing::Matcher HasDetails( const JsEventDetails& expected_details); // Like HasDetails() but takes a DictionaryValue instead. ::testing::Matcher HasDetailsAsDictionary( const base::DictionaryValue& expected_details); // Mocks. class MockJsBackend : public JsBackend, public base::SupportsWeakPtr { public: MockJsBackend(); virtual ~MockJsBackend(); WeakHandle AsWeakHandle(); MOCK_METHOD1(SetJsEventHandler, void(const WeakHandle&)); MOCK_METHOD3(ProcessJsMessage, void(const ::std::string&, const JsArgList&, const WeakHandle&)); }; class MockJsController : public JsController, public base::SupportsWeakPtr { 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&)); }; class MockJsEventHandler : public JsEventHandler, public base::SupportsWeakPtr { public: MockJsEventHandler(); virtual ~MockJsEventHandler(); WeakHandle AsWeakHandle(); MOCK_METHOD2(HandleJsEvent, void(const ::std::string&, const JsEventDetails&)); }; class MockJsReplyHandler : public JsReplyHandler, public base::SupportsWeakPtr { public: MockJsReplyHandler(); virtual ~MockJsReplyHandler(); WeakHandle AsWeakHandle(); MOCK_METHOD2(HandleJsReply, void(const ::std::string&, const JsArgList&)); }; } // namespace syncer #endif // SYNC_JS_JS_TEST_UTIL_H_