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

Side by Side Diff: extensions/common/features/simple_feature_unittest.cc

Issue 1010973013: Refactor Uses of std::set to std::vector in SimpleFeature (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove Unsigned From Checks with STLCount Created 5 years, 9 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "extensions/common/features/simple_feature.h" 5 #include "extensions/common/features/simple_feature.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/stl_util.h"
10 #include "base/values.h" 11 #include "base/values.h"
11 #include "extensions/common/manifest.h" 12 #include "extensions/common/manifest.h"
12 #include "extensions/common/value_builder.h" 13 #include "extensions/common/value_builder.h"
13 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
14 15
15 namespace extensions { 16 namespace extensions {
16 17
17 namespace { 18 namespace {
18 19
19 struct IsAvailableTestData { 20 struct IsAvailableTestData {
20 std::string extension_id; 21 std::string extension_id;
21 Manifest::Type extension_type; 22 Manifest::Type extension_type;
22 Manifest::Location location; 23 Manifest::Location location;
23 Feature::Platform platform; 24 Feature::Platform platform;
24 int manifest_version; 25 int manifest_version;
25 Feature::AvailabilityResult expected_result; 26 Feature::AvailabilityResult expected_result;
26 }; 27 };
27 28
28 bool LocationIsAvailable(SimpleFeature::Location feature_location,
29 Manifest::Location manifest_location) {
30 SimpleFeature feature;
31 feature.set_location(feature_location);
32 Feature::AvailabilityResult availability_result =
33 feature.IsAvailableToManifest(std::string(),
34 Manifest::TYPE_UNKNOWN,
35 manifest_location,
36 -1,
37 Feature::UNSPECIFIED_PLATFORM).result();
38 return availability_result == Feature::IS_AVAILABLE;
39 }
40
41 class ScopedCommandLineSwitch { 29 class ScopedCommandLineSwitch {
42 public: 30 public:
43 explicit ScopedCommandLineSwitch(const std::string& arg) 31 explicit ScopedCommandLineSwitch(const std::string& arg)
44 : original_command_line_(*base::CommandLine::ForCurrentProcess()) { 32 : original_command_line_(*base::CommandLine::ForCurrentProcess()) {
45 base::CommandLine::ForCurrentProcess()->AppendSwitch(arg); 33 base::CommandLine::ForCurrentProcess()->AppendSwitch(arg);
46 } 34 }
47 35
48 ~ScopedCommandLineSwitch() { 36 ~ScopedCommandLineSwitch() {
49 *base::CommandLine::ForCurrentProcess() = original_command_line_; 37 *base::CommandLine::ForCurrentProcess() = original_command_line_;
50 } 38 }
51 39
52 private: 40 private:
53 base::CommandLine original_command_line_; 41 base::CommandLine original_command_line_;
54 }; 42 };
55 43
56 } // namespace 44 } // namespace
57 45
58 TEST(SimpleFeatureTest, IsAvailableNullCase) { 46 class SimpleFeatureTest : public testing::Test {
47 protected:
48 bool LocationIsAvailable(SimpleFeature::Location feature_location,
49 Manifest::Location manifest_location) {
50 SimpleFeature feature;
51 feature.set_location(feature_location);
52 Feature::AvailabilityResult availability_result =
53 feature.IsAvailableToManifest(std::string(),
54 Manifest::TYPE_UNKNOWN,
55 manifest_location,
56 -1,
57 Feature::UNSPECIFIED_PLATFORM).result();
58 return availability_result == Feature::IS_AVAILABLE;
59 }
60 };
61
62 TEST_F(SimpleFeatureTest, IsAvailableNullCase) {
59 const IsAvailableTestData tests[] = { 63 const IsAvailableTestData tests[] = {
60 {"", Manifest::TYPE_UNKNOWN, Manifest::INVALID_LOCATION, 64 {"", Manifest::TYPE_UNKNOWN, Manifest::INVALID_LOCATION,
61 Feature::UNSPECIFIED_PLATFORM, -1, Feature::IS_AVAILABLE}, 65 Feature::UNSPECIFIED_PLATFORM, -1, Feature::IS_AVAILABLE},
62 {"random-extension", Manifest::TYPE_UNKNOWN, Manifest::INVALID_LOCATION, 66 {"random-extension", Manifest::TYPE_UNKNOWN, Manifest::INVALID_LOCATION,
63 Feature::UNSPECIFIED_PLATFORM, -1, Feature::IS_AVAILABLE}, 67 Feature::UNSPECIFIED_PLATFORM, -1, Feature::IS_AVAILABLE},
64 {"", Manifest::TYPE_LEGACY_PACKAGED_APP, Manifest::INVALID_LOCATION, 68 {"", Manifest::TYPE_LEGACY_PACKAGED_APP, Manifest::INVALID_LOCATION,
65 Feature::UNSPECIFIED_PLATFORM, -1, Feature::IS_AVAILABLE}, 69 Feature::UNSPECIFIED_PLATFORM, -1, Feature::IS_AVAILABLE},
66 {"", Manifest::TYPE_UNKNOWN, Manifest::INVALID_LOCATION, 70 {"", Manifest::TYPE_UNKNOWN, Manifest::INVALID_LOCATION,
67 Feature::UNSPECIFIED_PLATFORM, -1, Feature::IS_AVAILABLE}, 71 Feature::UNSPECIFIED_PLATFORM, -1, Feature::IS_AVAILABLE},
68 {"", Manifest::TYPE_UNKNOWN, Manifest::COMPONENT, 72 {"", Manifest::TYPE_UNKNOWN, Manifest::COMPONENT,
69 Feature::UNSPECIFIED_PLATFORM, -1, Feature::IS_AVAILABLE}, 73 Feature::UNSPECIFIED_PLATFORM, -1, Feature::IS_AVAILABLE},
70 {"", Manifest::TYPE_UNKNOWN, Manifest::INVALID_LOCATION, 74 {"", Manifest::TYPE_UNKNOWN, Manifest::INVALID_LOCATION,
71 Feature::CHROMEOS_PLATFORM, -1, Feature::IS_AVAILABLE}, 75 Feature::CHROMEOS_PLATFORM, -1, Feature::IS_AVAILABLE},
72 {"", Manifest::TYPE_UNKNOWN, Manifest::INVALID_LOCATION, 76 {"", Manifest::TYPE_UNKNOWN, Manifest::INVALID_LOCATION,
73 Feature::UNSPECIFIED_PLATFORM, 25, Feature::IS_AVAILABLE}}; 77 Feature::UNSPECIFIED_PLATFORM, 25, Feature::IS_AVAILABLE}};
74 78
75 SimpleFeature feature; 79 SimpleFeature feature;
76 for (size_t i = 0; i < arraysize(tests); ++i) { 80 for (size_t i = 0; i < arraysize(tests); ++i) {
77 const IsAvailableTestData& test = tests[i]; 81 const IsAvailableTestData& test = tests[i];
78 EXPECT_EQ(test.expected_result, 82 EXPECT_EQ(test.expected_result,
79 feature.IsAvailableToManifest(test.extension_id, 83 feature.IsAvailableToManifest(test.extension_id,
80 test.extension_type, 84 test.extension_type,
81 test.location, 85 test.location,
82 test.manifest_version, 86 test.manifest_version,
83 test.platform).result()); 87 test.platform).result());
84 } 88 }
85 } 89 }
86 90
87 TEST(SimpleFeatureTest, Whitelist) { 91 TEST_F(SimpleFeatureTest, Whitelist) {
88 const std::string kIdFoo("fooabbbbccccddddeeeeffffgggghhhh"); 92 const std::string kIdFoo("fooabbbbccccddddeeeeffffgggghhhh");
89 const std::string kIdBar("barabbbbccccddddeeeeffffgggghhhh"); 93 const std::string kIdBar("barabbbbccccddddeeeeffffgggghhhh");
90 const std::string kIdBaz("bazabbbbccccddddeeeeffffgggghhhh"); 94 const std::string kIdBaz("bazabbbbccccddddeeeeffffgggghhhh");
91 SimpleFeature feature; 95 SimpleFeature feature;
92 feature.whitelist()->insert(kIdFoo); 96 feature.whitelist()->push_back(kIdFoo);
93 feature.whitelist()->insert(kIdBar); 97 feature.whitelist()->push_back(kIdBar);
94 98
95 EXPECT_EQ( 99 EXPECT_EQ(
96 Feature::IS_AVAILABLE, 100 Feature::IS_AVAILABLE,
97 feature.IsAvailableToManifest(kIdFoo, 101 feature.IsAvailableToManifest(kIdFoo,
98 Manifest::TYPE_UNKNOWN, 102 Manifest::TYPE_UNKNOWN,
99 Manifest::INVALID_LOCATION, 103 Manifest::INVALID_LOCATION,
100 -1, 104 -1,
101 Feature::UNSPECIFIED_PLATFORM).result()); 105 Feature::UNSPECIFIED_PLATFORM).result());
102 EXPECT_EQ( 106 EXPECT_EQ(
103 Feature::IS_AVAILABLE, 107 Feature::IS_AVAILABLE,
(...skipping 11 matching lines...) Expand all
115 -1, 119 -1,
116 Feature::UNSPECIFIED_PLATFORM).result()); 120 Feature::UNSPECIFIED_PLATFORM).result());
117 EXPECT_EQ( 121 EXPECT_EQ(
118 Feature::NOT_FOUND_IN_WHITELIST, 122 Feature::NOT_FOUND_IN_WHITELIST,
119 feature.IsAvailableToManifest(std::string(), 123 feature.IsAvailableToManifest(std::string(),
120 Manifest::TYPE_UNKNOWN, 124 Manifest::TYPE_UNKNOWN,
121 Manifest::INVALID_LOCATION, 125 Manifest::INVALID_LOCATION,
122 -1, 126 -1,
123 Feature::UNSPECIFIED_PLATFORM).result()); 127 Feature::UNSPECIFIED_PLATFORM).result());
124 128
125 feature.extension_types()->insert(Manifest::TYPE_LEGACY_PACKAGED_APP); 129 feature.extension_types()->push_back(Manifest::TYPE_LEGACY_PACKAGED_APP);
126 EXPECT_EQ( 130 EXPECT_EQ(
127 Feature::NOT_FOUND_IN_WHITELIST, 131 Feature::NOT_FOUND_IN_WHITELIST,
128 feature.IsAvailableToManifest(kIdBaz, 132 feature.IsAvailableToManifest(kIdBaz,
129 Manifest::TYPE_LEGACY_PACKAGED_APP, 133 Manifest::TYPE_LEGACY_PACKAGED_APP,
130 Manifest::INVALID_LOCATION, 134 Manifest::INVALID_LOCATION,
131 -1, 135 -1,
132 Feature::UNSPECIFIED_PLATFORM).result()); 136 Feature::UNSPECIFIED_PLATFORM).result());
133 } 137 }
134 138
135 TEST(SimpleFeatureTest, HashedIdWhitelist) { 139 TEST_F(SimpleFeatureTest, HashedIdWhitelist) {
136 // echo -n "fooabbbbccccddddeeeeffffgggghhhh" | 140 // echo -n "fooabbbbccccddddeeeeffffgggghhhh" |
137 // sha1sum | tr '[:lower:]' '[:upper:]' 141 // sha1sum | tr '[:lower:]' '[:upper:]'
138 const std::string kIdFoo("fooabbbbccccddddeeeeffffgggghhhh"); 142 const std::string kIdFoo("fooabbbbccccddddeeeeffffgggghhhh");
139 const std::string kIdFooHashed("55BC7228A0D502A2A48C9BB16B07062A01E62897"); 143 const std::string kIdFooHashed("55BC7228A0D502A2A48C9BB16B07062A01E62897");
140 SimpleFeature feature; 144 SimpleFeature feature;
141 145
142 feature.whitelist()->insert(kIdFooHashed); 146 feature.whitelist()->push_back(kIdFooHashed);
143 147
144 EXPECT_EQ( 148 EXPECT_EQ(
145 Feature::IS_AVAILABLE, 149 Feature::IS_AVAILABLE,
146 feature.IsAvailableToManifest(kIdFoo, 150 feature.IsAvailableToManifest(kIdFoo,
147 Manifest::TYPE_UNKNOWN, 151 Manifest::TYPE_UNKNOWN,
148 Manifest::INVALID_LOCATION, 152 Manifest::INVALID_LOCATION,
149 -1, 153 -1,
150 Feature::UNSPECIFIED_PLATFORM).result()); 154 Feature::UNSPECIFIED_PLATFORM).result());
151 EXPECT_NE( 155 EXPECT_NE(
152 Feature::IS_AVAILABLE, 156 Feature::IS_AVAILABLE,
(...skipping 11 matching lines...) Expand all
164 Feature::UNSPECIFIED_PLATFORM).result()); 168 Feature::UNSPECIFIED_PLATFORM).result());
165 EXPECT_EQ( 169 EXPECT_EQ(
166 Feature::NOT_FOUND_IN_WHITELIST, 170 Feature::NOT_FOUND_IN_WHITELIST,
167 feature.IsAvailableToManifest("tooshortforanextensionid", 171 feature.IsAvailableToManifest("tooshortforanextensionid",
168 Manifest::TYPE_UNKNOWN, 172 Manifest::TYPE_UNKNOWN,
169 Manifest::INVALID_LOCATION, 173 Manifest::INVALID_LOCATION,
170 -1, 174 -1,
171 Feature::UNSPECIFIED_PLATFORM).result()); 175 Feature::UNSPECIFIED_PLATFORM).result());
172 } 176 }
173 177
174 TEST(SimpleFeatureTest, Blacklist) { 178 TEST_F(SimpleFeatureTest, Blacklist) {
175 const std::string kIdFoo("fooabbbbccccddddeeeeffffgggghhhh"); 179 const std::string kIdFoo("fooabbbbccccddddeeeeffffgggghhhh");
176 const std::string kIdBar("barabbbbccccddddeeeeffffgggghhhh"); 180 const std::string kIdBar("barabbbbccccddddeeeeffffgggghhhh");
177 const std::string kIdBaz("bazabbbbccccddddeeeeffffgggghhhh"); 181 const std::string kIdBaz("bazabbbbccccddddeeeeffffgggghhhh");
178 SimpleFeature feature; 182 SimpleFeature feature;
179 feature.blacklist()->insert(kIdFoo); 183 feature.blacklist()->push_back(kIdFoo);
180 feature.blacklist()->insert(kIdBar); 184 feature.blacklist()->push_back(kIdBar);
181 185
182 EXPECT_EQ( 186 EXPECT_EQ(
183 Feature::FOUND_IN_BLACKLIST, 187 Feature::FOUND_IN_BLACKLIST,
184 feature.IsAvailableToManifest(kIdFoo, 188 feature.IsAvailableToManifest(kIdFoo,
185 Manifest::TYPE_UNKNOWN, 189 Manifest::TYPE_UNKNOWN,
186 Manifest::INVALID_LOCATION, 190 Manifest::INVALID_LOCATION,
187 -1, 191 -1,
188 Feature::UNSPECIFIED_PLATFORM).result()); 192 Feature::UNSPECIFIED_PLATFORM).result());
189 EXPECT_EQ( 193 EXPECT_EQ(
190 Feature::FOUND_IN_BLACKLIST, 194 Feature::FOUND_IN_BLACKLIST,
(...skipping 12 matching lines...) Expand all
203 Feature::UNSPECIFIED_PLATFORM).result()); 207 Feature::UNSPECIFIED_PLATFORM).result());
204 EXPECT_EQ( 208 EXPECT_EQ(
205 Feature::IS_AVAILABLE, 209 Feature::IS_AVAILABLE,
206 feature.IsAvailableToManifest(std::string(), 210 feature.IsAvailableToManifest(std::string(),
207 Manifest::TYPE_UNKNOWN, 211 Manifest::TYPE_UNKNOWN,
208 Manifest::INVALID_LOCATION, 212 Manifest::INVALID_LOCATION,
209 -1, 213 -1,
210 Feature::UNSPECIFIED_PLATFORM).result()); 214 Feature::UNSPECIFIED_PLATFORM).result());
211 } 215 }
212 216
213 TEST(SimpleFeatureTest, HashedIdBlacklist) { 217 TEST_F(SimpleFeatureTest, HashedIdBlacklist) {
214 // echo -n "fooabbbbccccddddeeeeffffgggghhhh" | 218 // echo -n "fooabbbbccccddddeeeeffffgggghhhh" |
215 // sha1sum | tr '[:lower:]' '[:upper:]' 219 // sha1sum | tr '[:lower:]' '[:upper:]'
216 const std::string kIdFoo("fooabbbbccccddddeeeeffffgggghhhh"); 220 const std::string kIdFoo("fooabbbbccccddddeeeeffffgggghhhh");
217 const std::string kIdFooHashed("55BC7228A0D502A2A48C9BB16B07062A01E62897"); 221 const std::string kIdFooHashed("55BC7228A0D502A2A48C9BB16B07062A01E62897");
218 SimpleFeature feature; 222 SimpleFeature feature;
219 223
220 feature.blacklist()->insert(kIdFooHashed); 224 feature.blacklist()->push_back(kIdFooHashed);
221 225
222 EXPECT_EQ( 226 EXPECT_EQ(
223 Feature::FOUND_IN_BLACKLIST, 227 Feature::FOUND_IN_BLACKLIST,
224 feature.IsAvailableToManifest(kIdFoo, 228 feature.IsAvailableToManifest(kIdFoo,
225 Manifest::TYPE_UNKNOWN, 229 Manifest::TYPE_UNKNOWN,
226 Manifest::INVALID_LOCATION, 230 Manifest::INVALID_LOCATION,
227 -1, 231 -1,
228 Feature::UNSPECIFIED_PLATFORM).result()); 232 Feature::UNSPECIFIED_PLATFORM).result());
229 EXPECT_NE( 233 EXPECT_NE(
230 Feature::FOUND_IN_BLACKLIST, 234 Feature::FOUND_IN_BLACKLIST,
(...skipping 11 matching lines...) Expand all
242 Feature::UNSPECIFIED_PLATFORM).result()); 246 Feature::UNSPECIFIED_PLATFORM).result());
243 EXPECT_EQ( 247 EXPECT_EQ(
244 Feature::IS_AVAILABLE, 248 Feature::IS_AVAILABLE,
245 feature.IsAvailableToManifest("tooshortforanextensionid", 249 feature.IsAvailableToManifest("tooshortforanextensionid",
246 Manifest::TYPE_UNKNOWN, 250 Manifest::TYPE_UNKNOWN,
247 Manifest::INVALID_LOCATION, 251 Manifest::INVALID_LOCATION,
248 -1, 252 -1,
249 Feature::UNSPECIFIED_PLATFORM).result()); 253 Feature::UNSPECIFIED_PLATFORM).result());
250 } 254 }
251 255
252 TEST(SimpleFeatureTest, PackageType) { 256 TEST_F(SimpleFeatureTest, PackageType) {
253 SimpleFeature feature; 257 SimpleFeature feature;
254 feature.extension_types()->insert(Manifest::TYPE_EXTENSION); 258 feature.extension_types()->push_back(Manifest::TYPE_EXTENSION);
255 feature.extension_types()->insert(Manifest::TYPE_LEGACY_PACKAGED_APP); 259 feature.extension_types()->push_back(Manifest::TYPE_LEGACY_PACKAGED_APP);
256 260
257 EXPECT_EQ( 261 EXPECT_EQ(
258 Feature::IS_AVAILABLE, 262 Feature::IS_AVAILABLE,
259 feature.IsAvailableToManifest(std::string(), 263 feature.IsAvailableToManifest(std::string(),
260 Manifest::TYPE_EXTENSION, 264 Manifest::TYPE_EXTENSION,
261 Manifest::INVALID_LOCATION, 265 Manifest::INVALID_LOCATION,
262 -1, 266 -1,
263 Feature::UNSPECIFIED_PLATFORM).result()); 267 Feature::UNSPECIFIED_PLATFORM).result());
264 EXPECT_EQ( 268 EXPECT_EQ(
265 Feature::IS_AVAILABLE, 269 Feature::IS_AVAILABLE,
(...skipping 12 matching lines...) Expand all
278 Feature::UNSPECIFIED_PLATFORM).result()); 282 Feature::UNSPECIFIED_PLATFORM).result());
279 EXPECT_EQ( 283 EXPECT_EQ(
280 Feature::INVALID_TYPE, 284 Feature::INVALID_TYPE,
281 feature.IsAvailableToManifest(std::string(), 285 feature.IsAvailableToManifest(std::string(),
282 Manifest::TYPE_THEME, 286 Manifest::TYPE_THEME,
283 Manifest::INVALID_LOCATION, 287 Manifest::INVALID_LOCATION,
284 -1, 288 -1,
285 Feature::UNSPECIFIED_PLATFORM).result()); 289 Feature::UNSPECIFIED_PLATFORM).result());
286 } 290 }
287 291
288 TEST(SimpleFeatureTest, Context) { 292 TEST_F(SimpleFeatureTest, Context) {
289 SimpleFeature feature; 293 SimpleFeature feature;
290 feature.set_name("somefeature"); 294 feature.set_name("somefeature");
291 feature.contexts()->insert(Feature::BLESSED_EXTENSION_CONTEXT); 295 feature.contexts()->push_back(Feature::BLESSED_EXTENSION_CONTEXT);
292 feature.extension_types()->insert(Manifest::TYPE_LEGACY_PACKAGED_APP); 296 feature.extension_types()->push_back(Manifest::TYPE_LEGACY_PACKAGED_APP);
293 feature.platforms()->insert(Feature::CHROMEOS_PLATFORM); 297 feature.platforms()->push_back(Feature::CHROMEOS_PLATFORM);
294 feature.set_min_manifest_version(21); 298 feature.set_min_manifest_version(21);
295 feature.set_max_manifest_version(25); 299 feature.set_max_manifest_version(25);
296 300
297 base::DictionaryValue manifest; 301 base::DictionaryValue manifest;
298 manifest.SetString("name", "test"); 302 manifest.SetString("name", "test");
299 manifest.SetString("version", "1"); 303 manifest.SetString("version", "1");
300 manifest.SetInteger("manifest_version", 21); 304 manifest.SetInteger("manifest_version", 21);
301 manifest.SetString("app.launch.local_path", "foo.html"); 305 manifest.SetString("app.launch.local_path", "foo.html");
302 306
303 std::string error; 307 std::string error;
304 scoped_refptr<const Extension> extension(Extension::Create( 308 scoped_refptr<const Extension> extension(Extension::Create(
305 base::FilePath(), Manifest::INTERNAL, manifest, Extension::NO_FLAGS, 309 base::FilePath(), Manifest::INTERNAL, manifest, Extension::NO_FLAGS,
306 &error)); 310 &error));
307 EXPECT_EQ("", error); 311 EXPECT_EQ("", error);
308 ASSERT_TRUE(extension.get()); 312 ASSERT_TRUE(extension.get());
309 313
310 feature.whitelist()->insert("monkey"); 314 feature.whitelist()->push_back("monkey");
311 EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailableToContext( 315 EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailableToContext(
312 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, 316 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT,
313 Feature::CHROMEOS_PLATFORM).result()); 317 Feature::CHROMEOS_PLATFORM).result());
314 feature.whitelist()->clear(); 318 feature.whitelist()->clear();
315 319
316 feature.extension_types()->clear(); 320 feature.extension_types()->clear();
317 feature.extension_types()->insert(Manifest::TYPE_THEME); 321 feature.extension_types()->push_back(Manifest::TYPE_THEME);
318 { 322 {
319 Feature::Availability availability = feature.IsAvailableToContext( 323 Feature::Availability availability = feature.IsAvailableToContext(
320 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, 324 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT,
321 Feature::CHROMEOS_PLATFORM); 325 Feature::CHROMEOS_PLATFORM);
322 EXPECT_EQ(Feature::INVALID_TYPE, availability.result()); 326 EXPECT_EQ(Feature::INVALID_TYPE, availability.result());
323 EXPECT_EQ("'somefeature' is only allowed for themes, " 327 EXPECT_EQ("'somefeature' is only allowed for themes, "
324 "but this is a legacy packaged app.", 328 "but this is a legacy packaged app.",
325 availability.message()); 329 availability.message());
326 } 330 }
327 331
328 feature.extension_types()->clear(); 332 feature.extension_types()->clear();
329 feature.extension_types()->insert(Manifest::TYPE_LEGACY_PACKAGED_APP); 333 feature.extension_types()->push_back(Manifest::TYPE_LEGACY_PACKAGED_APP);
330 feature.contexts()->clear(); 334 feature.contexts()->clear();
331 feature.contexts()->insert(Feature::UNBLESSED_EXTENSION_CONTEXT); 335 feature.contexts()->push_back(Feature::UNBLESSED_EXTENSION_CONTEXT);
332 feature.contexts()->insert(Feature::CONTENT_SCRIPT_CONTEXT); 336 feature.contexts()->push_back(Feature::CONTENT_SCRIPT_CONTEXT);
333 { 337 {
334 Feature::Availability availability = feature.IsAvailableToContext( 338 Feature::Availability availability = feature.IsAvailableToContext(
335 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, 339 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT,
336 Feature::CHROMEOS_PLATFORM); 340 Feature::CHROMEOS_PLATFORM);
337 EXPECT_EQ(Feature::INVALID_CONTEXT, availability.result()); 341 EXPECT_EQ(Feature::INVALID_CONTEXT, availability.result());
338 EXPECT_EQ("'somefeature' is only allowed to run in extension iframes and " 342 EXPECT_EQ("'somefeature' is only allowed to run in extension iframes and "
339 "content scripts, but this is a privileged page", 343 "content scripts, but this is a privileged page",
340 availability.message()); 344 availability.message());
341 } 345 }
342 346
343 feature.contexts()->insert(Feature::WEB_PAGE_CONTEXT); 347 feature.contexts()->push_back(Feature::WEB_PAGE_CONTEXT);
344 { 348 {
345 Feature::Availability availability = feature.IsAvailableToContext( 349 Feature::Availability availability = feature.IsAvailableToContext(
346 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, 350 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT,
347 Feature::CHROMEOS_PLATFORM); 351 Feature::CHROMEOS_PLATFORM);
348 EXPECT_EQ(Feature::INVALID_CONTEXT, availability.result()); 352 EXPECT_EQ(Feature::INVALID_CONTEXT, availability.result());
349 EXPECT_EQ("'somefeature' is only allowed to run in extension iframes, " 353 EXPECT_EQ("'somefeature' is only allowed to run in extension iframes, "
350 "content scripts, and web pages, but this is a privileged page", 354 "content scripts, and web pages, but this is a privileged page",
351 availability.message()); 355 availability.message());
352 } 356 }
353 357
354 feature.contexts()->clear(); 358 feature.contexts()->clear();
355 feature.contexts()->insert(Feature::BLESSED_EXTENSION_CONTEXT); 359 feature.contexts()->push_back(Feature::BLESSED_EXTENSION_CONTEXT);
356 feature.set_location(SimpleFeature::COMPONENT_LOCATION); 360 feature.set_location(SimpleFeature::COMPONENT_LOCATION);
357 EXPECT_EQ(Feature::INVALID_LOCATION, feature.IsAvailableToContext( 361 EXPECT_EQ(Feature::INVALID_LOCATION, feature.IsAvailableToContext(
358 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, 362 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT,
359 Feature::CHROMEOS_PLATFORM).result()); 363 Feature::CHROMEOS_PLATFORM).result());
360 feature.set_location(SimpleFeature::UNSPECIFIED_LOCATION); 364 feature.set_location(SimpleFeature::UNSPECIFIED_LOCATION);
361 365
362 EXPECT_EQ(Feature::INVALID_PLATFORM, feature.IsAvailableToContext( 366 EXPECT_EQ(Feature::INVALID_PLATFORM, feature.IsAvailableToContext(
363 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, 367 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT,
364 Feature::UNSPECIFIED_PLATFORM).result()); 368 Feature::UNSPECIFIED_PLATFORM).result());
365 369
366 feature.set_min_manifest_version(22); 370 feature.set_min_manifest_version(22);
367 EXPECT_EQ(Feature::INVALID_MIN_MANIFEST_VERSION, feature.IsAvailableToContext( 371 EXPECT_EQ(Feature::INVALID_MIN_MANIFEST_VERSION, feature.IsAvailableToContext(
368 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, 372 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT,
369 Feature::CHROMEOS_PLATFORM).result()); 373 Feature::CHROMEOS_PLATFORM).result());
370 feature.set_min_manifest_version(21); 374 feature.set_min_manifest_version(21);
371 375
372 feature.set_max_manifest_version(18); 376 feature.set_max_manifest_version(18);
373 EXPECT_EQ(Feature::INVALID_MAX_MANIFEST_VERSION, feature.IsAvailableToContext( 377 EXPECT_EQ(Feature::INVALID_MAX_MANIFEST_VERSION, feature.IsAvailableToContext(
374 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, 378 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT,
375 Feature::CHROMEOS_PLATFORM).result()); 379 Feature::CHROMEOS_PLATFORM).result());
376 feature.set_max_manifest_version(25); 380 feature.set_max_manifest_version(25);
377 } 381 }
378 382
379 TEST(SimpleFeatureTest, Location) { 383 TEST_F(SimpleFeatureTest, Location) {
380 // Component extensions can access any location. 384 // Component extensions can access any location.
381 EXPECT_TRUE(LocationIsAvailable(SimpleFeature::COMPONENT_LOCATION, 385 EXPECT_TRUE(LocationIsAvailable(SimpleFeature::COMPONENT_LOCATION,
382 Manifest::COMPONENT)); 386 Manifest::COMPONENT));
383 EXPECT_TRUE(LocationIsAvailable(SimpleFeature::EXTERNAL_COMPONENT_LOCATION, 387 EXPECT_TRUE(LocationIsAvailable(SimpleFeature::EXTERNAL_COMPONENT_LOCATION,
384 Manifest::COMPONENT)); 388 Manifest::COMPONENT));
385 EXPECT_TRUE( 389 EXPECT_TRUE(
386 LocationIsAvailable(SimpleFeature::POLICY_LOCATION, Manifest::COMPONENT)); 390 LocationIsAvailable(SimpleFeature::POLICY_LOCATION, Manifest::COMPONENT));
387 EXPECT_TRUE(LocationIsAvailable(SimpleFeature::UNSPECIFIED_LOCATION, 391 EXPECT_TRUE(LocationIsAvailable(SimpleFeature::UNSPECIFIED_LOCATION,
388 Manifest::COMPONENT)); 392 Manifest::COMPONENT));
389 393
(...skipping 26 matching lines...) Expand all
416 LocationIsAvailable(SimpleFeature::POLICY_LOCATION, Manifest::UNPACKED)); 420 LocationIsAvailable(SimpleFeature::POLICY_LOCATION, Manifest::UNPACKED));
417 EXPECT_FALSE(LocationIsAvailable(SimpleFeature::POLICY_LOCATION, 421 EXPECT_FALSE(LocationIsAvailable(SimpleFeature::POLICY_LOCATION,
418 Manifest::EXTERNAL_PREF_DOWNLOAD)); 422 Manifest::EXTERNAL_PREF_DOWNLOAD));
419 423
420 // External component extensions can access the "external_component" 424 // External component extensions can access the "external_component"
421 // location. 425 // location.
422 EXPECT_TRUE(LocationIsAvailable(SimpleFeature::EXTERNAL_COMPONENT_LOCATION, 426 EXPECT_TRUE(LocationIsAvailable(SimpleFeature::EXTERNAL_COMPONENT_LOCATION,
423 Manifest::EXTERNAL_COMPONENT)); 427 Manifest::EXTERNAL_COMPONENT));
424 } 428 }
425 429
426 TEST(SimpleFeatureTest, Platform) { 430 TEST_F(SimpleFeatureTest, Platform) {
427 SimpleFeature feature; 431 SimpleFeature feature;
428 feature.platforms()->insert(Feature::CHROMEOS_PLATFORM); 432 feature.platforms()->push_back(Feature::CHROMEOS_PLATFORM);
429 EXPECT_EQ(Feature::IS_AVAILABLE, 433 EXPECT_EQ(Feature::IS_AVAILABLE,
430 feature.IsAvailableToManifest(std::string(), 434 feature.IsAvailableToManifest(std::string(),
431 Manifest::TYPE_UNKNOWN, 435 Manifest::TYPE_UNKNOWN,
432 Manifest::INVALID_LOCATION, 436 Manifest::INVALID_LOCATION,
433 -1, 437 -1,
434 Feature::CHROMEOS_PLATFORM).result()); 438 Feature::CHROMEOS_PLATFORM).result());
435 EXPECT_EQ( 439 EXPECT_EQ(
436 Feature::INVALID_PLATFORM, 440 Feature::INVALID_PLATFORM,
437 feature.IsAvailableToManifest(std::string(), 441 feature.IsAvailableToManifest(std::string(),
438 Manifest::TYPE_UNKNOWN, 442 Manifest::TYPE_UNKNOWN,
439 Manifest::INVALID_LOCATION, 443 Manifest::INVALID_LOCATION,
440 -1, 444 -1,
441 Feature::UNSPECIFIED_PLATFORM).result()); 445 Feature::UNSPECIFIED_PLATFORM).result());
442 } 446 }
443 447
444 TEST(SimpleFeatureTest, ManifestVersion) { 448 TEST_F(SimpleFeatureTest, ManifestVersion) {
445 SimpleFeature feature; 449 SimpleFeature feature;
446 feature.set_min_manifest_version(5); 450 feature.set_min_manifest_version(5);
447 451
448 EXPECT_EQ( 452 EXPECT_EQ(
449 Feature::INVALID_MIN_MANIFEST_VERSION, 453 Feature::INVALID_MIN_MANIFEST_VERSION,
450 feature.IsAvailableToManifest(std::string(), 454 feature.IsAvailableToManifest(std::string(),
451 Manifest::TYPE_UNKNOWN, 455 Manifest::TYPE_UNKNOWN,
452 Manifest::INVALID_LOCATION, 456 Manifest::INVALID_LOCATION,
453 0, 457 0,
454 Feature::UNSPECIFIED_PLATFORM).result()); 458 Feature::UNSPECIFIED_PLATFORM).result());
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
493 Feature::UNSPECIFIED_PLATFORM).result()); 497 Feature::UNSPECIFIED_PLATFORM).result());
494 EXPECT_EQ( 498 EXPECT_EQ(
495 Feature::IS_AVAILABLE, 499 Feature::IS_AVAILABLE,
496 feature.IsAvailableToManifest(std::string(), 500 feature.IsAvailableToManifest(std::string(),
497 Manifest::TYPE_UNKNOWN, 501 Manifest::TYPE_UNKNOWN,
498 Manifest::INVALID_LOCATION, 502 Manifest::INVALID_LOCATION,
499 7, 503 7,
500 Feature::UNSPECIFIED_PLATFORM).result()); 504 Feature::UNSPECIFIED_PLATFORM).result());
501 } 505 }
502 506
503 TEST(SimpleFeatureTest, ParseNull) { 507 TEST_F(SimpleFeatureTest, ParseNull) {
504 scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue()); 508 scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue());
505 scoped_ptr<SimpleFeature> feature(new SimpleFeature()); 509 scoped_ptr<SimpleFeature> feature(new SimpleFeature());
506 feature->Parse(value.get()); 510 feature->Parse(value.get());
507 EXPECT_TRUE(feature->whitelist()->empty()); 511 EXPECT_TRUE(feature->whitelist()->empty());
508 EXPECT_TRUE(feature->extension_types()->empty()); 512 EXPECT_TRUE(feature->extension_types()->empty());
509 EXPECT_TRUE(feature->contexts()->empty()); 513 EXPECT_TRUE(feature->contexts()->empty());
510 EXPECT_EQ(SimpleFeature::UNSPECIFIED_LOCATION, feature->location()); 514 EXPECT_EQ(SimpleFeature::UNSPECIFIED_LOCATION, feature->location());
511 EXPECT_TRUE(feature->platforms()->empty()); 515 EXPECT_TRUE(feature->platforms()->empty());
512 EXPECT_EQ(0, feature->min_manifest_version()); 516 EXPECT_EQ(0, feature->min_manifest_version());
513 EXPECT_EQ(0, feature->max_manifest_version()); 517 EXPECT_EQ(0, feature->max_manifest_version());
514 } 518 }
515 519
516 TEST(SimpleFeatureTest, ParseWhitelist) { 520 TEST_F(SimpleFeatureTest, ParseWhitelist) {
517 scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue()); 521 scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue());
518 base::ListValue* whitelist = new base::ListValue(); 522 base::ListValue* whitelist = new base::ListValue();
519 whitelist->Append(new base::StringValue("foo")); 523 whitelist->Append(new base::StringValue("foo"));
520 whitelist->Append(new base::StringValue("bar")); 524 whitelist->Append(new base::StringValue("bar"));
521 value->Set("whitelist", whitelist); 525 value->Set("whitelist", whitelist);
522 scoped_ptr<SimpleFeature> feature(new SimpleFeature()); 526 scoped_ptr<SimpleFeature> feature(new SimpleFeature());
523 feature->Parse(value.get()); 527 feature->Parse(value.get());
524 EXPECT_EQ(2u, feature->whitelist()->size()); 528 EXPECT_EQ(2u, feature->whitelist()->size());
525 EXPECT_TRUE(feature->whitelist()->count("foo")); 529 EXPECT_TRUE(STLCount(*(feature->whitelist()), "foo"));
526 EXPECT_TRUE(feature->whitelist()->count("bar")); 530 EXPECT_TRUE(STLCount(*(feature->whitelist()), "bar"));
527 } 531 }
528 532
529 TEST(SimpleFeatureTest, ParsePackageTypes) { 533 TEST_F(SimpleFeatureTest, ParsePackageTypes) {
530 scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue()); 534 scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue());
531 base::ListValue* extension_types = new base::ListValue(); 535 base::ListValue* extension_types = new base::ListValue();
532 extension_types->Append(new base::StringValue("extension")); 536 extension_types->Append(new base::StringValue("extension"));
533 extension_types->Append(new base::StringValue("theme")); 537 extension_types->Append(new base::StringValue("theme"));
534 extension_types->Append(new base::StringValue("legacy_packaged_app")); 538 extension_types->Append(new base::StringValue("legacy_packaged_app"));
535 extension_types->Append(new base::StringValue("hosted_app")); 539 extension_types->Append(new base::StringValue("hosted_app"));
536 extension_types->Append(new base::StringValue("platform_app")); 540 extension_types->Append(new base::StringValue("platform_app"));
537 extension_types->Append(new base::StringValue("shared_module")); 541 extension_types->Append(new base::StringValue("shared_module"));
538 value->Set("extension_types", extension_types); 542 value->Set("extension_types", extension_types);
539 scoped_ptr<SimpleFeature> feature(new SimpleFeature()); 543 scoped_ptr<SimpleFeature> feature(new SimpleFeature());
540 feature->Parse(value.get()); 544 feature->Parse(value.get());
541 EXPECT_EQ(6u, feature->extension_types()->size()); 545 EXPECT_EQ(6u, feature->extension_types()->size());
542 EXPECT_TRUE(feature->extension_types()->count(Manifest::TYPE_EXTENSION)); 546 EXPECT_TRUE(
543 EXPECT_TRUE(feature->extension_types()->count(Manifest::TYPE_THEME)); 547 STLCount(*(feature->extension_types()), Manifest::TYPE_EXTENSION));
544 EXPECT_TRUE(feature->extension_types()->count( 548 EXPECT_TRUE(
545 Manifest::TYPE_LEGACY_PACKAGED_APP)); 549 STLCount(*(feature->extension_types()), Manifest::TYPE_THEME));
546 EXPECT_TRUE(feature->extension_types()->count(Manifest::TYPE_HOSTED_APP)); 550 EXPECT_TRUE(
547 EXPECT_TRUE(feature->extension_types()->count(Manifest::TYPE_PLATFORM_APP)); 551 STLCount(
548 EXPECT_TRUE(feature->extension_types()->count(Manifest::TYPE_SHARED_MODULE)); 552 *(feature->extension_types()), Manifest::TYPE_LEGACY_PACKAGED_APP));
553 EXPECT_TRUE(
554 STLCount(*(feature->extension_types()), Manifest::TYPE_HOSTED_APP));
555 EXPECT_TRUE(
556 STLCount(*(feature->extension_types()), Manifest::TYPE_PLATFORM_APP));
557 EXPECT_TRUE(
558 STLCount(*(feature->extension_types()), Manifest::TYPE_SHARED_MODULE));
549 559
550 value->SetString("extension_types", "all"); 560 value->SetString("extension_types", "all");
551 scoped_ptr<SimpleFeature> feature2(new SimpleFeature()); 561 scoped_ptr<SimpleFeature> feature2(new SimpleFeature());
552 feature2->Parse(value.get()); 562 feature2->Parse(value.get());
553 EXPECT_EQ(*(feature->extension_types()), *(feature2->extension_types())); 563 EXPECT_EQ(*(feature->extension_types()), *(feature2->extension_types()));
554 } 564 }
555 565
556 TEST(SimpleFeatureTest, ParseContexts) { 566 TEST_F(SimpleFeatureTest, ParseContexts) {
557 scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue()); 567 scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue());
558 base::ListValue* contexts = new base::ListValue(); 568 base::ListValue* contexts = new base::ListValue();
559 contexts->Append(new base::StringValue("blessed_extension")); 569 contexts->Append(new base::StringValue("blessed_extension"));
560 contexts->Append(new base::StringValue("unblessed_extension")); 570 contexts->Append(new base::StringValue("unblessed_extension"));
561 contexts->Append(new base::StringValue("content_script")); 571 contexts->Append(new base::StringValue("content_script"));
562 contexts->Append(new base::StringValue("web_page")); 572 contexts->Append(new base::StringValue("web_page"));
563 contexts->Append(new base::StringValue("blessed_web_page")); 573 contexts->Append(new base::StringValue("blessed_web_page"));
564 contexts->Append(new base::StringValue("webui")); 574 contexts->Append(new base::StringValue("webui"));
565 value->Set("contexts", contexts); 575 value->Set("contexts", contexts);
566 scoped_ptr<SimpleFeature> feature(new SimpleFeature()); 576 scoped_ptr<SimpleFeature> feature(new SimpleFeature());
567 feature->Parse(value.get()); 577 feature->Parse(value.get());
568 EXPECT_EQ(6u, feature->contexts()->size()); 578 EXPECT_EQ(6u, feature->contexts()->size());
569 EXPECT_TRUE(feature->contexts()->count(Feature::BLESSED_EXTENSION_CONTEXT)); 579 EXPECT_TRUE(
570 EXPECT_TRUE(feature->contexts()->count(Feature::UNBLESSED_EXTENSION_CONTEXT)); 580 STLCount(*(feature->contexts()), Feature::BLESSED_EXTENSION_CONTEXT));
571 EXPECT_TRUE(feature->contexts()->count(Feature::CONTENT_SCRIPT_CONTEXT)); 581 EXPECT_TRUE(
572 EXPECT_TRUE(feature->contexts()->count(Feature::WEB_PAGE_CONTEXT)); 582 STLCount(*(feature->contexts()), Feature::UNBLESSED_EXTENSION_CONTEXT));
573 EXPECT_TRUE(feature->contexts()->count(Feature::BLESSED_WEB_PAGE_CONTEXT)); 583 EXPECT_TRUE(
584 STLCount(*(feature->contexts()), Feature::CONTENT_SCRIPT_CONTEXT));
585 EXPECT_TRUE(
586 STLCount(*(feature->contexts()), Feature::WEB_PAGE_CONTEXT));
587 EXPECT_TRUE(
588 STLCount(*(feature->contexts()), Feature::BLESSED_WEB_PAGE_CONTEXT));
574 589
575 value->SetString("contexts", "all"); 590 value->SetString("contexts", "all");
576 scoped_ptr<SimpleFeature> feature2(new SimpleFeature()); 591 scoped_ptr<SimpleFeature> feature2(new SimpleFeature());
577 feature2->Parse(value.get()); 592 feature2->Parse(value.get());
578 EXPECT_EQ(*(feature->contexts()), *(feature2->contexts())); 593 EXPECT_EQ(*(feature->contexts()), *(feature2->contexts()));
579 } 594 }
580 595
581 TEST(SimpleFeatureTest, ParseLocation) { 596 TEST_F(SimpleFeatureTest, ParseLocation) {
582 scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue()); 597 scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue());
583 value->SetString("location", "component"); 598 value->SetString("location", "component");
584 scoped_ptr<SimpleFeature> feature(new SimpleFeature()); 599 scoped_ptr<SimpleFeature> feature(new SimpleFeature());
585 feature->Parse(value.get()); 600 feature->Parse(value.get());
586 EXPECT_EQ(SimpleFeature::COMPONENT_LOCATION, feature->location()); 601 EXPECT_EQ(SimpleFeature::COMPONENT_LOCATION, feature->location());
587 } 602 }
588 603
589 TEST(SimpleFeatureTest, ParsePlatforms) { 604 TEST_F(SimpleFeatureTest, ParsePlatforms) {
590 scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue()); 605 scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue());
591 scoped_ptr<SimpleFeature> feature(new SimpleFeature()); 606 scoped_ptr<SimpleFeature> feature(new SimpleFeature());
592 base::ListValue* platforms = new base::ListValue(); 607 base::ListValue* platforms = new base::ListValue();
593 value->Set("platforms", platforms); 608 value->Set("platforms", platforms);
594 feature->Parse(value.get()); 609 feature->Parse(value.get());
595 EXPECT_TRUE(feature->platforms()->empty()); 610 EXPECT_TRUE(feature->platforms()->empty());
596 611
597 platforms->AppendString("chromeos"); 612 platforms->AppendString("chromeos");
598 feature->Parse(value.get()); 613 feature->Parse(value.get());
599 EXPECT_FALSE(feature->platforms()->empty()); 614 EXPECT_FALSE(feature->platforms()->empty());
600 EXPECT_EQ(Feature::CHROMEOS_PLATFORM, *feature->platforms()->begin()); 615 EXPECT_EQ(Feature::CHROMEOS_PLATFORM, *feature->platforms()->begin());
601 616
602 platforms->Clear(); 617 platforms->Clear();
603 platforms->AppendString("win"); 618 platforms->AppendString("win");
604 feature->Parse(value.get()); 619 feature->Parse(value.get());
605 EXPECT_FALSE(feature->platforms()->empty()); 620 EXPECT_FALSE(feature->platforms()->empty());
606 EXPECT_EQ(Feature::WIN_PLATFORM, *feature->platforms()->begin()); 621 EXPECT_EQ(Feature::WIN_PLATFORM, *feature->platforms()->begin());
607 622
608 platforms->Clear(); 623 platforms->Clear();
609 platforms->AppendString("win"); 624 platforms->AppendString("win");
610 platforms->AppendString("chromeos"); 625 platforms->AppendString("chromeos");
611 feature->Parse(value.get()); 626 feature->Parse(value.get());
612 std::set<Feature::Platform> expected_platforms; 627 std::vector<Feature::Platform> expected_platforms;
613 expected_platforms.insert(Feature::CHROMEOS_PLATFORM); 628 expected_platforms.push_back(Feature::CHROMEOS_PLATFORM);
614 expected_platforms.insert(Feature::WIN_PLATFORM); 629 expected_platforms.push_back(Feature::WIN_PLATFORM);
615 630
616 EXPECT_FALSE(feature->platforms()->empty()); 631 EXPECT_FALSE(feature->platforms()->empty());
617 EXPECT_EQ(expected_platforms, *feature->platforms()); 632 EXPECT_EQ(expected_platforms, *feature->platforms());
618 } 633 }
619 634
620 TEST(SimpleFeatureTest, ParseManifestVersion) { 635 TEST_F(SimpleFeatureTest, ParseManifestVersion) {
621 scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue()); 636 scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue());
622 value->SetInteger("min_manifest_version", 1); 637 value->SetInteger("min_manifest_version", 1);
623 value->SetInteger("max_manifest_version", 5); 638 value->SetInteger("max_manifest_version", 5);
624 scoped_ptr<SimpleFeature> feature(new SimpleFeature()); 639 scoped_ptr<SimpleFeature> feature(new SimpleFeature());
625 feature->Parse(value.get()); 640 feature->Parse(value.get());
626 EXPECT_EQ(1, feature->min_manifest_version()); 641 EXPECT_EQ(1, feature->min_manifest_version());
627 EXPECT_EQ(5, feature->max_manifest_version()); 642 EXPECT_EQ(5, feature->max_manifest_version());
628 } 643 }
629 644
630 TEST(SimpleFeatureTest, Inheritance) { 645 TEST_F(SimpleFeatureTest, Inheritance) {
631 SimpleFeature feature; 646 SimpleFeature feature;
632 feature.whitelist()->insert("foo"); 647 feature.whitelist()->push_back("foo");
633 feature.extension_types()->insert(Manifest::TYPE_THEME); 648 feature.extension_types()->push_back(Manifest::TYPE_THEME);
634 feature.contexts()->insert(Feature::BLESSED_EXTENSION_CONTEXT); 649 feature.contexts()->push_back(Feature::BLESSED_EXTENSION_CONTEXT);
635 feature.set_location(SimpleFeature::COMPONENT_LOCATION); 650 feature.set_location(SimpleFeature::COMPONENT_LOCATION);
636 feature.platforms()->insert(Feature::CHROMEOS_PLATFORM); 651 feature.platforms()->push_back(Feature::CHROMEOS_PLATFORM);
637 feature.set_min_manifest_version(1); 652 feature.set_min_manifest_version(1);
638 feature.set_max_manifest_version(2); 653 feature.set_max_manifest_version(2);
639 654
640 // Test additive parsing. Parsing an empty dictionary should result in no 655 // Test additive parsing. Parsing an empty dictionary should result in no
641 // changes to a SimpleFeature. 656 // changes to a SimpleFeature.
642 base::DictionaryValue definition; 657 base::DictionaryValue definition;
643 feature.Parse(&definition); 658 feature.Parse(&definition);
644 EXPECT_EQ(1u, feature.whitelist()->size()); 659 EXPECT_EQ(1u, feature.whitelist()->size());
645 EXPECT_EQ(1u, feature.extension_types()->size()); 660 EXPECT_EQ(1u, feature.extension_types()->size());
646 EXPECT_EQ(1u, feature.contexts()->size()); 661 EXPECT_EQ(1u, feature.contexts()->size());
647 EXPECT_EQ(1u, feature.whitelist()->count("foo")); 662 EXPECT_EQ(1, STLCount(*(feature.whitelist()), "foo"));
648 EXPECT_EQ(SimpleFeature::COMPONENT_LOCATION, feature.location()); 663 EXPECT_EQ(SimpleFeature::COMPONENT_LOCATION, feature.location());
649 EXPECT_EQ(1u, feature.platforms()->size()); 664 EXPECT_EQ(1u, feature.platforms()->size());
650 EXPECT_EQ(1u, feature.platforms()->count(Feature::CHROMEOS_PLATFORM)); 665 EXPECT_EQ(1, STLCount(*(feature.platforms()), Feature::CHROMEOS_PLATFORM));
651 EXPECT_EQ(1, feature.min_manifest_version()); 666 EXPECT_EQ(1, feature.min_manifest_version());
652 EXPECT_EQ(2, feature.max_manifest_version()); 667 EXPECT_EQ(2, feature.max_manifest_version());
653 668
654 base::ListValue* whitelist = new base::ListValue(); 669 base::ListValue* whitelist = new base::ListValue();
655 base::ListValue* extension_types = new base::ListValue(); 670 base::ListValue* extension_types = new base::ListValue();
656 base::ListValue* contexts = new base::ListValue(); 671 base::ListValue* contexts = new base::ListValue();
657 whitelist->Append(new base::StringValue("bar")); 672 whitelist->Append(new base::StringValue("bar"));
658 extension_types->Append(new base::StringValue("extension")); 673 extension_types->Append(new base::StringValue("extension"));
659 contexts->Append(new base::StringValue("unblessed_extension")); 674 contexts->Append(new base::StringValue("unblessed_extension"));
660 definition.Set("whitelist", whitelist); 675 definition.Set("whitelist", whitelist);
661 definition.Set("extension_types", extension_types); 676 definition.Set("extension_types", extension_types);
662 definition.Set("contexts", contexts); 677 definition.Set("contexts", contexts);
663 // Can't test location or platform because we only have one value so far. 678 // Can't test location or platform because we only have one value so far.
664 definition.Set("min_manifest_version", new base::FundamentalValue(2)); 679 definition.Set("min_manifest_version", new base::FundamentalValue(2));
665 definition.Set("max_manifest_version", new base::FundamentalValue(3)); 680 definition.Set("max_manifest_version", new base::FundamentalValue(3));
666 681
667 feature.Parse(&definition); 682 feature.Parse(&definition);
668 EXPECT_EQ(1u, feature.whitelist()->size()); 683 EXPECT_EQ(1u, feature.whitelist()->size());
669 EXPECT_EQ(1u, feature.extension_types()->size()); 684 EXPECT_EQ(1u, feature.extension_types()->size());
670 EXPECT_EQ(1u, feature.contexts()->size()); 685 EXPECT_EQ(1u, feature.contexts()->size());
671 EXPECT_EQ(1u, feature.whitelist()->count("bar")); 686 EXPECT_EQ(1, STLCount(*(feature.whitelist()), "bar"));
672 EXPECT_EQ(1u, feature.extension_types()->count(Manifest::TYPE_EXTENSION)); 687 EXPECT_EQ(1,
673 EXPECT_EQ(1u, 688 STLCount(*(feature.extension_types()), Manifest::TYPE_EXTENSION));
674 feature.contexts()->count(Feature::UNBLESSED_EXTENSION_CONTEXT)); 689 EXPECT_EQ(1,
690 STLCount(
691 *(feature.contexts()), Feature::UNBLESSED_EXTENSION_CONTEXT));
675 EXPECT_EQ(2, feature.min_manifest_version()); 692 EXPECT_EQ(2, feature.min_manifest_version());
676 EXPECT_EQ(3, feature.max_manifest_version()); 693 EXPECT_EQ(3, feature.max_manifest_version());
677 } 694 }
678 695
679 TEST(SimpleFeatureTest, CommandLineSwitch) { 696 TEST_F(SimpleFeatureTest, CommandLineSwitch) {
680 SimpleFeature feature; 697 SimpleFeature feature;
681 feature.set_command_line_switch("laser-beams"); 698 feature.set_command_line_switch("laser-beams");
682 { 699 {
683 EXPECT_EQ(Feature::MISSING_COMMAND_LINE_SWITCH, 700 EXPECT_EQ(Feature::MISSING_COMMAND_LINE_SWITCH,
684 feature.IsAvailableToEnvironment().result()); 701 feature.IsAvailableToEnvironment().result());
685 } 702 }
686 { 703 {
687 ScopedCommandLineSwitch scoped_switch("laser-beams"); 704 ScopedCommandLineSwitch scoped_switch("laser-beams");
688 EXPECT_EQ(Feature::MISSING_COMMAND_LINE_SWITCH, 705 EXPECT_EQ(Feature::MISSING_COMMAND_LINE_SWITCH,
689 feature.IsAvailableToEnvironment().result()); 706 feature.IsAvailableToEnvironment().result());
(...skipping 13 matching lines...) Expand all
703 EXPECT_EQ(Feature::IS_AVAILABLE, 720 EXPECT_EQ(Feature::IS_AVAILABLE,
704 feature.IsAvailableToEnvironment().result()); 721 feature.IsAvailableToEnvironment().result());
705 } 722 }
706 { 723 {
707 ScopedCommandLineSwitch scoped_switch("laser-beams=0"); 724 ScopedCommandLineSwitch scoped_switch("laser-beams=0");
708 EXPECT_EQ(Feature::MISSING_COMMAND_LINE_SWITCH, 725 EXPECT_EQ(Feature::MISSING_COMMAND_LINE_SWITCH,
709 feature.IsAvailableToEnvironment().result()); 726 feature.IsAvailableToEnvironment().result());
710 } 727 }
711 } 728 }
712 729
730 TEST_F(SimpleFeatureTest, IsIdInArray) {
731 EXPECT_FALSE(SimpleFeature::IsIdInArray("", {}, 0));
732 EXPECT_FALSE(SimpleFeature::IsIdInArray(
733 "bbbbccccdddddddddeeeeeeffffgghhh", {}, 0));
734
735 const char* const kIdArray[] = {
736 "bbbbccccdddddddddeeeeeeffffgghhh",
737 // aaaabbbbccccddddeeeeffffgggghhhh
738 "9A0417016F345C934A1A88F55CA17C05014EEEBA"
739 };
740 EXPECT_FALSE(SimpleFeature::IsIdInArray("", kIdArray, arraysize(kIdArray)));
741 EXPECT_FALSE(SimpleFeature::IsIdInArray(
742 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", kIdArray, arraysize(kIdArray)));
743 EXPECT_TRUE(SimpleFeature::IsIdInArray(
744 "bbbbccccdddddddddeeeeeeffffgghhh", kIdArray, arraysize(kIdArray)));
745 EXPECT_TRUE(SimpleFeature::IsIdInArray(
746 "aaaabbbbccccddddeeeeffffgggghhhh", kIdArray, arraysize(kIdArray)));
747 }
748
713 } // namespace extensions 749 } // namespace extensions
OLDNEW
« base/stl_util.h ('K') | « extensions/common/features/simple_feature.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698