diff options
author | akalin@chromium.org <akalin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-15 09:35:42 +0000 |
---|---|---|
committer | akalin@chromium.org <akalin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-15 09:35:42 +0000 |
commit | c1c32c85357f14756247b04b8b5ae41b05bf2e16 (patch) | |
tree | 58f25f64e1fa592e8daf276ef69901cd2218f929 /sync/js/sync_js_controller_unittest.cc | |
parent | 63ee33bde2ec8471a70f0f0ec6a1962dd07fc8ab (diff) | |
download | chromium_src-c1c32c85357f14756247b04b8b5ae41b05bf2e16.zip chromium_src-c1c32c85357f14756247b04b8b5ae41b05bf2e16.tar.gz chromium_src-c1c32c85357f14756247b04b8b5ae41b05bf2e16.tar.bz2 |
[Sync] Move 'sync' target to sync/
Also move related test files.
Move WriteNode::UpdateEntryWithEncryption to nigori_util.h.
Clean up defines and dependencies. In particular, get rid of SYNC_ENGINE_VERSION_STRING and hard-code the string in the single place it's used.
Rename data_encryption.* to data_encryption_win.* and add a pragma for crypt32.lib.
Clean up exit-time constructor warnings in sync{able,er}_unittest.cc.
Remove some unused files.
BUG=117585
TEST=
TBR=jhawkins@chromium.org
Review URL: https://chromiumcodereview.appspot.com/9699057
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@126872 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'sync/js/sync_js_controller_unittest.cc')
-rw-r--r-- | sync/js/sync_js_controller_unittest.cc | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/sync/js/sync_js_controller_unittest.cc b/sync/js/sync_js_controller_unittest.cc new file mode 100644 index 0000000..10a982d --- /dev/null +++ b/sync/js/sync_js_controller_unittest.cc @@ -0,0 +1,126 @@ +// 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. + +#include "sync/js/sync_js_controller.h" + +#include "base/message_loop.h" +#include "base/values.h" +#include "sync/js/js_arg_list.h" +#include "sync/js/js_event_details.h" +#include "sync/js/js_test_util.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace browser_sync { +namespace { + +using ::testing::_; +using ::testing::InSequence; +using ::testing::Mock; +using ::testing::StrictMock; + +class SyncJsControllerTest : public testing::Test { + protected: + void PumpLoop() { + message_loop_.RunAllPending(); + } + + private: + MessageLoop message_loop_; +}; + +TEST_F(SyncJsControllerTest, Messages) { + InSequence dummy; + // |mock_backend| needs to outlive |sync_js_controller|. + StrictMock<MockJsBackend> mock_backend; + SyncJsController sync_js_controller; + + ListValue arg_list1, arg_list2; + arg_list1.Append(Value::CreateBooleanValue(false)); + arg_list2.Append(Value::CreateIntegerValue(5)); + JsArgList args1(&arg_list1), args2(&arg_list2); + + // TODO(akalin): Write matchers for WeakHandle and use them here + // instead of _. + EXPECT_CALL(mock_backend, SetJsEventHandler(_)); + EXPECT_CALL(mock_backend, ProcessJsMessage("test1", HasArgs(args2), _)); + EXPECT_CALL(mock_backend, ProcessJsMessage("test2", HasArgs(args1), _)); + + sync_js_controller.AttachJsBackend(mock_backend.AsWeakHandle()); + sync_js_controller.ProcessJsMessage("test1", args2, + WeakHandle<JsReplyHandler>()); + sync_js_controller.ProcessJsMessage("test2", args1, + WeakHandle<JsReplyHandler>()); + PumpLoop(); + + // Let destructor of |sync_js_controller| call RemoveBackend(). +} + +TEST_F(SyncJsControllerTest, QueuedMessages) { + // |mock_backend| needs to outlive |sync_js_controller|. + StrictMock<MockJsBackend> mock_backend; + SyncJsController sync_js_controller; + + ListValue arg_list1, arg_list2; + arg_list1.Append(Value::CreateBooleanValue(false)); + arg_list2.Append(Value::CreateIntegerValue(5)); + JsArgList args1(&arg_list1), args2(&arg_list2); + + // Should queue messages. + sync_js_controller.ProcessJsMessage("test1", args2, + WeakHandle<JsReplyHandler>()); + sync_js_controller.ProcessJsMessage("test2", args1, + WeakHandle<JsReplyHandler>()); + + Mock::VerifyAndClearExpectations(&mock_backend); + + // TODO(akalin): Write matchers for WeakHandle and use them here + // instead of _. + EXPECT_CALL(mock_backend, SetJsEventHandler(_)); + EXPECT_CALL(mock_backend, ProcessJsMessage("test1", HasArgs(args2), _)); + EXPECT_CALL(mock_backend, ProcessJsMessage("test2", HasArgs(args1), _)); + + // Should call the queued messages. + sync_js_controller.AttachJsBackend(mock_backend.AsWeakHandle()); + PumpLoop(); + + // Should do nothing. + sync_js_controller.AttachJsBackend(WeakHandle<JsBackend>()); + PumpLoop(); + + // Should also do nothing. + sync_js_controller.AttachJsBackend(WeakHandle<JsBackend>()); + PumpLoop(); +} + +TEST_F(SyncJsControllerTest, Events) { + InSequence dummy; + SyncJsController sync_js_controller; + + DictionaryValue details_dict1, details_dict2; + details_dict1.SetString("foo", "bar"); + details_dict2.SetInteger("baz", 5); + JsEventDetails details1(&details_dict1), details2(&details_dict2); + + StrictMock<MockJsEventHandler> event_handler1, event_handler2; + EXPECT_CALL(event_handler1, HandleJsEvent("event", HasDetails(details1))); + EXPECT_CALL(event_handler2, HandleJsEvent("event", HasDetails(details1))); + EXPECT_CALL(event_handler1, + HandleJsEvent("anotherevent", HasDetails(details2))); + EXPECT_CALL(event_handler2, + HandleJsEvent("anotherevent", HasDetails(details2))); + + sync_js_controller.AddJsEventHandler(&event_handler1); + sync_js_controller.AddJsEventHandler(&event_handler2); + sync_js_controller.HandleJsEvent("event", details1); + sync_js_controller.HandleJsEvent("anotherevent", details2); + sync_js_controller.RemoveJsEventHandler(&event_handler1); + sync_js_controller.RemoveJsEventHandler(&event_handler2); + sync_js_controller.HandleJsEvent("droppedevent", details2); + + PumpLoop(); +} + +} // namespace +} // namespace browser_sync |