Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3890)

Unified Diff: chrome/browser/extensions/api/signedin_devices/signedin_devices_api_unittest.cc

Issue 22706006: Implementation of the DeviceInfo get API. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: For try runs Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/api/signedin_devices/signedin_devices_api_unittest.cc
diff --git a/chrome/browser/extensions/api/signedin_devices/signedin_devices_api_unittest.cc b/chrome/browser/extensions/api/signedin_devices/signedin_devices_api_unittest.cc
index ab21083c9325732f7427b211a22664af52bfd1e6..8936680f06ba7bfeaccf8e3a298a21b901525f81 100644
--- a/chrome/browser/extensions/api/signedin_devices/signedin_devices_api_unittest.cc
+++ b/chrome/browser/extensions/api/signedin_devices/signedin_devices_api_unittest.cc
@@ -8,12 +8,19 @@
#include "base/guid.h"
#include "base/message_loop/message_loop.h"
+#include "base/prefs/pref_service.h"
+#include "base/values.h"
#include "chrome/browser/extensions/api/signedin_devices/signedin_devices_api.h"
+#include "chrome/browser/extensions/extension_function_test_utils.h"
#include "chrome/browser/extensions/test_extension_prefs.h"
+#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/sync/glue/device_info.h"
+#include "chrome/browser/sync/profile_sync_service_factory.h"
#include "chrome/browser/sync/profile_sync_service_mock.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_manifest_constants.h"
+#include "chrome/common/pref_names.h"
+#include "chrome/test/base/browser_with_test_window_test.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -24,6 +31,8 @@ using testing::Return;
namespace extensions {
+namespace utils = extension_function_test_utils;
+
TEST(SignedinDevicesAPITest, GetSignedInDevices) {
ProfileSyncServiceMock pss_mock;
base::MessageLoop message_loop_;
@@ -49,10 +58,10 @@ TEST(SignedinDevicesAPITest, GetSignedInDevices) {
devices.push_back(&device_info1);
devices.push_back(&device_info2);
- EXPECT_CALL(pss_mock, GetAllSignedInDevicesMock()).
+ EXPECT_CALL(pss_mock, GetAllSignedinDevicesMock()).
WillOnce(Return(&devices));
- ScopedVector<DeviceInfo> output1 = GetAllSignedInDevices(
+ ScopedVector<DeviceInfo> output1 = GetAllSignedinDevices(
extension_test.get()->id(),
&pss_mock,
extension_prefs.prefs());
@@ -77,10 +86,10 @@ TEST(SignedinDevicesAPITest, GetSignedInDevices) {
devices.push_back(&device_info3);
- EXPECT_CALL(pss_mock, GetAllSignedInDevicesMock()).
+ EXPECT_CALL(pss_mock, GetAllSignedinDevicesMock()).
WillOnce(Return(&devices));
- ScopedVector<DeviceInfo> output2 = GetAllSignedInDevices(
+ ScopedVector<DeviceInfo> output2 = GetAllSignedinDevices(
extension_test.get()->id(),
&pss_mock,
extension_prefs.prefs());
@@ -98,4 +107,127 @@ TEST(SignedinDevicesAPITest, GetSignedInDevices) {
output2.weak_clear();
}
+class ProfileSyncServiceMockForExtensionTests:
+ public ProfileSyncServiceMock {
+ public:
+ ProfileSyncServiceMockForExtensionTests() {}
+ ~ProfileSyncServiceMockForExtensionTests() {}
+ MOCK_METHOD0(Shutdown, void());
+};
+
+BrowserContextKeyedService* CreateProfileSyncServiceMock(
+ content::BrowserContext* profile) {
+ return new ProfileSyncServiceMockForExtensionTests();
+}
+
+class ExtensionSignedinDevicesTest : public BrowserWithTestWindowTest {
+ public:
+ virtual void SetUp() {
+ BrowserWithTestWindowTest::SetUp();
+
+ ProfileSyncServiceFactory::GetInstance()->SetTestingFactory(
+ profile(), CreateProfileSyncServiceMock);
+
+ extension_ = utils::CreateEmptyExtensionWithLocation(
+ extensions::Manifest::UNPACKED);
+
+ }
+
+ base::Value* RunFunctionWithExtension(
+ UIThreadExtensionFunction* function,
+ const std::string& args) {
+ scoped_refptr<UIThreadExtensionFunction> delete_function(function);
+ function->set_extension(extension_.get());
+ return utils::RunFunctionAndReturnSingleResult(function, args, browser());
+ }
+
+ base::ListValue* RunFunctionAndReturnList(
+ UIThreadExtensionFunction* function,
+ const std::string& args) {
+ base::Value* result = RunFunctionWithExtension(function, args);
+ return result ? utils::ToList(result) : NULL;
+ }
+
+ protected:
+ scoped_refptr<extensions::Extension> extension_;
+};
+
+DeviceInfo* CreateDeviceInfo(const DeviceInfo& device_info) {
+ return new DeviceInfo(device_info.guid(),
+ device_info.client_name(),
+ device_info.chrome_version(),
+ device_info.sync_user_agent(),
+ device_info.device_type());
+}
+
+std::string GetPublicId(const base::DictionaryValue* dictionary) {
+ std::string public_id;
+ if (!dictionary->GetString("id", &public_id)) {
+ ADD_FAILURE() << "Not able to find public id in the dictionary";
+ }
+
+ return public_id;
+}
+
+void VerifyDictionaryWithDeviceInfo(const base::DictionaryValue* actual_value,
+ DeviceInfo* device_info) {
+ std::string public_id = GetPublicId(actual_value);
+ device_info->set_public_id(public_id);
+
+ scoped_ptr<base::DictionaryValue> expected_value(device_info->ToValue());
+ EXPECT_TRUE(expected_value->Equals(actual_value));
+}
+
+base::DictionaryValue* GetDictionaryFromList(int index,
+ base::ListValue* value) {
+ base::DictionaryValue* dictionary;
+ if (!value->GetDictionary(index, &dictionary)) {
+ ADD_FAILURE() << "Expected a list of dictionaries";
+ return NULL;
+ }
+ return dictionary;
+}
+
+TEST_F(ExtensionSignedinDevicesTest, GetAll) {
+ ProfileSyncServiceMockForExtensionTests* pss_mock =
+ static_cast<ProfileSyncServiceMockForExtensionTests*>(
+ ProfileSyncServiceFactory::GetForProfile(profile()));
+
+ DeviceInfo device_info1(
+ base::GenerateGUID(),
+ "abc Device", "XYZ v1", "XYZ SyncAgent v1",
+ sync_pb::SyncEnums_DeviceType_TYPE_LINUX);
+
+ DeviceInfo device_info2(
+ base::GenerateGUID(),
+ "def Device", "XYZ v2", "XYZ SyncAgent v2",
+ sync_pb::SyncEnums_DeviceType_TYPE_LINUX);
+
+ std::vector<DeviceInfo*> devices;
+ devices.push_back(CreateDeviceInfo(device_info1));
+ devices.push_back(CreateDeviceInfo(device_info2));
+
+ EXPECT_CALL(*pss_mock, GetAllSignedinDevicesMock()).
+ WillOnce(Return(&devices));
+
+ EXPECT_CALL(*pss_mock, Shutdown());
+
+ scoped_ptr<base::ListValue> result(RunFunctionAndReturnList(
+ new SignedinDevicesGetFunction(), "[null]"));
+
+ // Ensure dictionary matches device info.
+ VerifyDictionaryWithDeviceInfo(GetDictionaryFromList(0, result.get()),
+ &device_info1);
+ VerifyDictionaryWithDeviceInfo(GetDictionaryFromList(1, result.get()),
+ &device_info2);
+
+ // Ensure public ids are set and unique.
+ std::string public_id1 = GetPublicId(GetDictionaryFromList(0, result.get()));
+ std::string public_id2 = GetPublicId(GetDictionaryFromList(1, result.get()));
+
+ EXPECT_FALSE(public_id1.empty());
+ EXPECT_FALSE(public_id2.empty());
+ EXPECT_NE(public_id1, public_id2);
+}
+
} // namespace extensions
« no previous file with comments | « chrome/browser/extensions/api/signedin_devices/signedin_devices_api.cc ('k') | chrome/browser/sync/glue/device_info.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698