summaryrefslogtreecommitdiffstats
path: root/sync/js/sync_js_controller_unittest.cc
diff options
context:
space:
mode:
authorakalin@chromium.org <akalin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-15 09:35:42 +0000
committerakalin@chromium.org <akalin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-15 09:35:42 +0000
commitc1c32c85357f14756247b04b8b5ae41b05bf2e16 (patch)
tree58f25f64e1fa592e8daf276ef69901cd2218f929 /sync/js/sync_js_controller_unittest.cc
parent63ee33bde2ec8471a70f0f0ec6a1962dd07fc8ab (diff)
downloadchromium_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.cc126
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