media_galleries_permission_unittest.cc revision c5cede9ae108bb15f6b7a8aea21c7e1fefa2834c
1// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5// These tests make sure MediaGalleriesPermission values are parsed correctly. 6 7#include "base/values.h" 8#include "extensions/common/permissions/api_permission.h" 9#include "extensions/common/permissions/media_galleries_permission.h" 10#include "extensions/common/permissions/media_galleries_permission_data.h" 11#include "extensions/common/permissions/permissions_info.h" 12#include "testing/gtest/include/gtest/gtest.h" 13 14using content::SocketPermissionRequest; 15using extensions::SocketPermissionData; 16 17namespace extensions { 18 19namespace { 20 21void CheckFromValue(APIPermission* permission, base::ListValue* value, 22 bool success_expected) { 23 std::string error; 24 std::vector<std::string> unhandled; 25 EXPECT_EQ(success_expected, permission->FromValue(value, &error, &unhandled)); 26 EXPECT_EQ(success_expected, error.empty()); 27 EXPECT_TRUE(unhandled.empty()); 28} 29 30TEST(MediaGalleriesPermissionTest, GoodValues) { 31 const APIPermissionInfo* permission_info = 32 PermissionsInfo::GetInstance()->GetByID(APIPermission::kMediaGalleries); 33 34 scoped_ptr<APIPermission> permission( 35 permission_info->CreateAPIPermission()); 36 37 // access_type + all_detected 38 scoped_ptr<base::ListValue> value(new base::ListValue()); 39 value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission); 40 value->AppendString(MediaGalleriesPermission::kReadPermission); 41 CheckFromValue(permission.get(), value.get(), true); 42 43 value.reset(new base::ListValue()); 44 value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission); 45 value->AppendString(MediaGalleriesPermission::kCopyToPermission); 46 value->AppendString(MediaGalleriesPermission::kReadPermission); 47 value->AppendString(MediaGalleriesPermission::kDeletePermission); 48 CheckFromValue(permission.get(), value.get(), true); 49 50 // all_detected 51 value.reset(new base::ListValue()); 52 value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission); 53 CheckFromValue(permission.get(), value.get(), true); 54 55 // access_type 56 value.reset(new base::ListValue()); 57 value->AppendString(MediaGalleriesPermission::kReadPermission); 58 CheckFromValue(permission.get(), value.get(), true); 59 60 value.reset(new base::ListValue()); 61 value->AppendString(MediaGalleriesPermission::kDeletePermission); 62 value->AppendString(MediaGalleriesPermission::kReadPermission); 63 CheckFromValue(permission.get(), value.get(), true); 64 65 value.reset(new base::ListValue()); 66 value->AppendString(MediaGalleriesPermission::kCopyToPermission); 67 value->AppendString(MediaGalleriesPermission::kDeletePermission); 68 value->AppendString(MediaGalleriesPermission::kReadPermission); 69 CheckFromValue(permission.get(), value.get(), true); 70 71 // Repeats do not make a difference. 72 value.reset(new base::ListValue()); 73 value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission); 74 value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission); 75 CheckFromValue(permission.get(), value.get(), true); 76 77 value.reset(new base::ListValue()); 78 value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission); 79 value->AppendString(MediaGalleriesPermission::kReadPermission); 80 value->AppendString(MediaGalleriesPermission::kReadPermission); 81 value->AppendString(MediaGalleriesPermission::kDeletePermission); 82 value->AppendString(MediaGalleriesPermission::kDeletePermission); 83 value->AppendString(MediaGalleriesPermission::kDeletePermission); 84 CheckFromValue(permission.get(), value.get(), true); 85} 86 87TEST(MediaGalleriesPermissionTest, BadValues) { 88 const APIPermissionInfo* permission_info = 89 PermissionsInfo::GetInstance()->GetByID(APIPermission::kMediaGalleries); 90 91 scoped_ptr<APIPermission> permission(permission_info->CreateAPIPermission()); 92 93 // Empty 94 scoped_ptr<base::ListValue> value(new base::ListValue()); 95 CheckFromValue(permission.get(), value.get(), false); 96 97 // copyTo and delete without read 98 value.reset(new base::ListValue()); 99 value->AppendString(MediaGalleriesPermission::kCopyToPermission); 100 CheckFromValue(permission.get(), value.get(), false); 101 102 value.reset(new base::ListValue()); 103 value->AppendString(MediaGalleriesPermission::kDeletePermission); 104 CheckFromValue(permission.get(), value.get(), false); 105 106 value.reset(new base::ListValue()); 107 value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission); 108 value->AppendString(MediaGalleriesPermission::kCopyToPermission); 109 value->AppendString(MediaGalleriesPermission::kDeletePermission); 110 CheckFromValue(permission.get(), value.get(), false); 111 112 // copyTo without delete 113 value.reset(new base::ListValue()); 114 value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission); 115 value->AppendString(MediaGalleriesPermission::kCopyToPermission); 116 value->AppendString(MediaGalleriesPermission::kReadPermission); 117 CheckFromValue(permission.get(), value.get(), false); 118 119 // Repeats do not make a difference. 120 value.reset(new base::ListValue()); 121 value->AppendString(MediaGalleriesPermission::kCopyToPermission); 122 value->AppendString(MediaGalleriesPermission::kCopyToPermission); 123 CheckFromValue(permission.get(), value.get(), false); 124 125 value.reset(new base::ListValue()); 126 value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission); 127 value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission); 128 value->AppendString(MediaGalleriesPermission::kCopyToPermission); 129 value->AppendString(MediaGalleriesPermission::kDeletePermission); 130 value->AppendString(MediaGalleriesPermission::kDeletePermission); 131 CheckFromValue(permission.get(), value.get(), false); 132} 133 134TEST(MediaGalleriesPermissionTest, UnknownValues) { 135 std::string error; 136 std::vector<std::string> unhandled; 137 const APIPermissionInfo* permission_info = 138 PermissionsInfo::GetInstance()->GetByID(APIPermission::kMediaGalleries); 139 140 scoped_ptr<APIPermission> permission(permission_info->CreateAPIPermission()); 141 142 // A good one and an unknown one. 143 scoped_ptr<base::ListValue> value(new base::ListValue()); 144 value->AppendString(MediaGalleriesPermission::kReadPermission); 145 value->AppendString("Unknown"); 146 EXPECT_TRUE(permission->FromValue(value.get(), &error, &unhandled)); 147 EXPECT_TRUE(error.empty()); 148 EXPECT_EQ(1U, unhandled.size()); 149 error.clear(); 150 unhandled.clear(); 151 152 // Multiple unknown permissions. 153 value.reset(new base::ListValue()); 154 value->AppendString("Unknown1"); 155 value->AppendString("Unknown2"); 156 EXPECT_TRUE(permission->FromValue(value.get(), &error, &unhandled)); 157 EXPECT_TRUE(error.empty()); 158 EXPECT_EQ(2U, unhandled.size()); 159 error.clear(); 160 unhandled.clear(); 161} 162 163TEST(MediaGalleriesPermissionTest, Equal) { 164 const APIPermissionInfo* permission_info = 165 PermissionsInfo::GetInstance()->GetByID(APIPermission::kMediaGalleries); 166 167 scoped_ptr<APIPermission> permission1( 168 permission_info->CreateAPIPermission()); 169 scoped_ptr<APIPermission> permission2( 170 permission_info->CreateAPIPermission()); 171 172 scoped_ptr<base::ListValue> value(new base::ListValue()); 173 value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission); 174 value->AppendString(MediaGalleriesPermission::kReadPermission); 175 ASSERT_TRUE(permission1->FromValue(value.get(), NULL, NULL)); 176 177 value.reset(new base::ListValue()); 178 value->AppendString(MediaGalleriesPermission::kReadPermission); 179 value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission); 180 ASSERT_TRUE(permission2->FromValue(value.get(), NULL, NULL)); 181 EXPECT_TRUE(permission1->Equal(permission2.get())); 182 183 value.reset(new base::ListValue()); 184 value->AppendString(MediaGalleriesPermission::kReadPermission); 185 value->AppendString(MediaGalleriesPermission::kReadPermission); 186 value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission); 187 ASSERT_TRUE(permission2->FromValue(value.get(), NULL, NULL)); 188 EXPECT_TRUE(permission1->Equal(permission2.get())); 189 190 value.reset(new base::ListValue()); 191 value->AppendString(MediaGalleriesPermission::kReadPermission); 192 value->AppendString(MediaGalleriesPermission::kDeletePermission); 193 ASSERT_TRUE(permission1->FromValue(value.get(), NULL, NULL)); 194 195 value.reset(new base::ListValue()); 196 value->AppendString(MediaGalleriesPermission::kDeletePermission); 197 value->AppendString(MediaGalleriesPermission::kReadPermission); 198 ASSERT_TRUE(permission2->FromValue(value.get(), NULL, NULL)); 199 EXPECT_TRUE(permission1->Equal(permission2.get())); 200 201 value.reset(new base::ListValue()); 202 value->AppendString(MediaGalleriesPermission::kReadPermission); 203 value->AppendString(MediaGalleriesPermission::kCopyToPermission); 204 value->AppendString(MediaGalleriesPermission::kDeletePermission); 205 ASSERT_TRUE(permission1->FromValue(value.get(), NULL, NULL)); 206 207 value.reset(new base::ListValue()); 208 value->AppendString(MediaGalleriesPermission::kDeletePermission); 209 value->AppendString(MediaGalleriesPermission::kCopyToPermission); 210 value->AppendString(MediaGalleriesPermission::kReadPermission); 211 ASSERT_TRUE(permission2->FromValue(value.get(), NULL, NULL)); 212 EXPECT_TRUE(permission1->Equal(permission2.get())); 213} 214 215TEST(MediaGalleriesPermissionTest, NotEqual) { 216 const APIPermissionInfo* permission_info = 217 PermissionsInfo::GetInstance()->GetByID(APIPermission::kMediaGalleries); 218 219 scoped_ptr<APIPermission> permission1( 220 permission_info->CreateAPIPermission()); 221 scoped_ptr<APIPermission> permission2( 222 permission_info->CreateAPIPermission()); 223 224 scoped_ptr<base::ListValue> value(new base::ListValue()); 225 value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission); 226 value->AppendString(MediaGalleriesPermission::kReadPermission); 227 ASSERT_TRUE(permission1->FromValue(value.get(), NULL, NULL)); 228 229 value.reset(new base::ListValue()); 230 value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission); 231 value->AppendString(MediaGalleriesPermission::kReadPermission); 232 value->AppendString(MediaGalleriesPermission::kDeletePermission); 233 value->AppendString(MediaGalleriesPermission::kCopyToPermission); 234 ASSERT_TRUE(permission2->FromValue(value.get(), NULL, NULL)); 235 EXPECT_FALSE(permission1->Equal(permission2.get())); 236} 237 238TEST(MediaGalleriesPermissionTest, ToFromValue) { 239 const APIPermissionInfo* permission_info = 240 PermissionsInfo::GetInstance()->GetByID(APIPermission::kMediaGalleries); 241 242 scoped_ptr<APIPermission> permission1( 243 permission_info->CreateAPIPermission()); 244 scoped_ptr<APIPermission> permission2( 245 permission_info->CreateAPIPermission()); 246 247 scoped_ptr<base::ListValue> value(new base::ListValue()); 248 value->AppendString(MediaGalleriesPermission::kAllAutoDetectedPermission); 249 value->AppendString(MediaGalleriesPermission::kReadPermission); 250 ASSERT_TRUE(permission1->FromValue(value.get(), NULL, NULL)); 251 252 scoped_ptr<base::Value> vtmp(permission1->ToValue()); 253 ASSERT_TRUE(vtmp); 254 ASSERT_TRUE(permission2->FromValue(vtmp.get(), NULL, NULL)); 255 EXPECT_TRUE(permission1->Equal(permission2.get())); 256 257 value.reset(new base::ListValue()); 258 value->AppendString(MediaGalleriesPermission::kReadPermission); 259 value->AppendString(MediaGalleriesPermission::kDeletePermission); 260 value->AppendString(MediaGalleriesPermission::kCopyToPermission); 261 ASSERT_TRUE(permission1->FromValue(value.get(), NULL, NULL)); 262 263 vtmp = permission1->ToValue(); 264 ASSERT_TRUE(vtmp); 265 ASSERT_TRUE(permission2->FromValue(vtmp.get(), NULL, NULL)); 266 EXPECT_TRUE(permission1->Equal(permission2.get())); 267 268 value.reset(new base::ListValue()); 269 value->AppendString(MediaGalleriesPermission::kReadPermission); 270 value->AppendString(MediaGalleriesPermission::kDeletePermission); 271 ASSERT_TRUE(permission1->FromValue(value.get(), NULL, NULL)); 272 273 vtmp = permission1->ToValue(); 274 ASSERT_TRUE(vtmp); 275 ASSERT_TRUE(permission2->FromValue(vtmp.get(), NULL, NULL)); 276 EXPECT_TRUE(permission1->Equal(permission2.get())); 277} 278 279} // namespace 280 281} // namespace extensions 282