// Copyright (c) 2011 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 CHROME_BROWSER_SYNC_JS_TEST_UTIL_H_ #define CHROME_BROWSER_SYNC_JS_TEST_UTIL_H_ #pragma once #include <ostream> #include <string> #include "chrome/browser/sync/js_backend.h" #include "chrome/browser/sync/js_frontend.h" #include "chrome/browser/sync/js_event_handler.h" #include "chrome/browser/sync/js_event_router.h" #include "testing/gmock/include/gmock/gmock.h" class ListValue; namespace browser_sync { class JsArgList; // Defined for googletest. Equivalent to "*os << args.ToString()". void PrintTo(const JsArgList& args, ::std::ostream* os); // A matcher for gmock. Use like: // // EXPECT_CALL(mock, ProcessMessage("foo", HasArgs(args))).Times(1); ::testing::Matcher<const JsArgList&> HasArgs(const JsArgList& expected_args); // Like HasArgs() but takes a ListValue instead. ::testing::Matcher<const JsArgList&> HasArgsAsList( const ListValue& expected_args); // Mocks. class MockJsBackend : public JsBackend { public: MockJsBackend(); ~MockJsBackend(); MOCK_METHOD1(SetParentJsEventRouter, void(JsEventRouter*)); MOCK_METHOD0(RemoveParentJsEventRouter, void()); MOCK_CONST_METHOD0(GetParentJsEventRouter, const JsEventRouter*()); MOCK_METHOD3(ProcessMessage, void(const ::std::string&, const JsArgList&, const JsEventHandler*)); }; class MockJsFrontend : public JsFrontend { public: MockJsFrontend(); ~MockJsFrontend(); MOCK_METHOD1(AddHandler, void(JsEventHandler*)); MOCK_METHOD1(RemoveHandler, void(JsEventHandler*)); MOCK_METHOD3(ProcessMessage, void(const ::std::string&, const JsArgList&, const JsEventHandler*)); }; class MockJsEventHandler : public JsEventHandler { public: MockJsEventHandler(); ~MockJsEventHandler(); MOCK_METHOD2(HandleJsEvent, void(const ::std::string&, const JsArgList&)); }; class MockJsEventRouter : public JsEventRouter { public: MockJsEventRouter(); ~MockJsEventRouter(); MOCK_METHOD3(RouteJsEvent, void(const ::std::string&, const JsArgList&, const JsEventHandler*)); }; } // namespace browser_sync #endif // CHROME_BROWSER_SYNC_JS_TEST_UTIL_H_