| // 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 "testing/gmock/include/gmock/gmock.h" | 
 |  | 
 | namespace base { | 
 | class DictionaryValue; | 
 | class ListValue; | 
 | } | 
 |  | 
 | namespace syncer { | 
 |  | 
 | class JsEventDetails; | 
 |  | 
 | // Defined for googletest.  Equivalent to "*os << args.ToString()". | 
 | void PrintTo(const JsEventDetails& details, ::std::ostream* os); | 
 |  | 
 | // 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>&)); | 
 | }; | 
 |  | 
 | class MockJsController : public JsController, | 
 |                          public base::SupportsWeakPtr<MockJsController> { | 
 |  public: | 
 |   MockJsController(); | 
 |   virtual ~MockJsController(); | 
 |  | 
 |   MOCK_METHOD1(AddJsEventHandler, void(JsEventHandler*)); | 
 |   MOCK_METHOD1(RemoveJsEventHandler, void(JsEventHandler*)); | 
 | }; | 
 |  | 
 | class MockJsEventHandler | 
 |     : public JsEventHandler, | 
 |       public base::SupportsWeakPtr<MockJsEventHandler> { | 
 |  public: | 
 |   MockJsEventHandler(); | 
 |   virtual ~MockJsEventHandler(); | 
 |  | 
 |   WeakHandle<JsEventHandler> AsWeakHandle(); | 
 |  | 
 |   MOCK_METHOD2(HandleJsEvent, | 
 |                void(const ::std::string&, const JsEventDetails&)); | 
 | }; | 
 |  | 
 | }  // namespace syncer | 
 |  | 
 | #endif  // SYNC_JS_JS_TEST_UTIL_H_ |