| 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
|
|
|