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

Side by Side Diff: chrome/common/extensions/manifest_tests/extension_manifest_test.cc

Issue 578653005: Revert "Refactor ExtensionManifestTest to allow usage in src/extensions" (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/manifest_test.h" 5 #include "chrome/common/extensions/manifest_tests/extension_manifest_test.h"
6 6
7 #include "base/files/file_path.h" 7 #include "base/files/file_path.h"
8 #include "base/files/file_util.h" 8 #include "base/files/file_util.h"
9 #include "base/json/json_file_value_serializer.h" 9 #include "base/json/json_file_value_serializer.h"
10 #include "base/path_service.h" 10 #include "base/path_service.h"
11 #include "base/strings/string_util.h" 11 #include "base/strings/string_util.h"
12 #include "base/values.h" 12 #include "base/values.h"
13 #include "chrome/common/chrome_paths.h"
13 #include "extensions/common/extension_l10n_util.h" 14 #include "extensions/common/extension_l10n_util.h"
14 #include "extensions/common/extension_paths.h"
15 #include "extensions/common/test_util.h" 15 #include "extensions/common/test_util.h"
16 #include "ui/base/l10n/l10n_util.h" 16 #include "ui/base/l10n/l10n_util.h"
17 17
18 namespace extensions { 18 using extensions::Extension;
19
19 namespace { 20 namespace {
20 21
21 // |manifest_path| is an absolute path to a manifest file. 22 // If filename is a relative path, LoadManifestFile will treat it relative to
22 base::DictionaryValue* LoadManifestFile(const base::FilePath& manifest_path, 23 // the appropriate test directory.
24 base::DictionaryValue* LoadManifestFile(const base::FilePath& filename_path,
23 std::string* error) { 25 std::string* error) {
24 base::FilePath extension_path = manifest_path.DirName(); 26 base::FilePath extension_path;
27 base::FilePath manifest_path;
28
29 PathService::Get(chrome::DIR_TEST_DATA, &manifest_path);
30 manifest_path = manifest_path.Append(filename_path);
31 extension_path = manifest_path.DirName();
25 32
26 EXPECT_TRUE(base::PathExists(manifest_path)) << 33 EXPECT_TRUE(base::PathExists(manifest_path)) <<
27 "Couldn't find " << manifest_path.value(); 34 "Couldn't find " << manifest_path.value();
28 35
29 JSONFileValueSerializer serializer(manifest_path); 36 JSONFileValueSerializer serializer(manifest_path);
30 base::DictionaryValue* manifest = 37 base::DictionaryValue* manifest =
31 static_cast<base::DictionaryValue*>(serializer.Deserialize(NULL, error)); 38 static_cast<base::DictionaryValue*>(serializer.Deserialize(NULL, error));
32 39
33 // Most unit tests don't need localization, and they'll fail if we try to 40 // Most unit tests don't need localization, and they'll fail if we try to
34 // localize them, since their manifests don't have a default_locale key. 41 // localize them, since their manifests don't have a default_locale key.
35 // Only localize manifests that indicate they want to be localized. 42 // Only localize manifests that indicate they want to be localized.
36 // Calling LocalizeExtension at this point mirrors file_util::LoadExtension. 43 // Calling LocalizeExtension at this point mirrors file_util::LoadExtension.
37 if (manifest && 44 if (manifest &&
38 manifest_path.value().find(FILE_PATH_LITERAL("localized")) != 45 filename_path.value().find(FILE_PATH_LITERAL("localized")) !=
39 std::string::npos) 46 std::string::npos)
40 extension_l10n_util::LocalizeExtension(extension_path, manifest, error); 47 extension_l10n_util::LocalizeExtension(extension_path, manifest, error);
41 48
42 return manifest; 49 return manifest;
43 } 50 }
44 51
45 } // namespace 52 } // namespace
46 53
47 ManifestTest::ManifestTest() 54 ExtensionManifestTest::ExtensionManifestTest()
48 : enable_apps_(true) { 55 : enable_apps_(true),
49 } 56 // UNKNOWN == trunk.
50 57 current_channel_(chrome::VersionInfo::CHANNEL_UNKNOWN) {}
51 ManifestTest::~ManifestTest() {
52 }
53 58
54 // Helper class that simplifies creating methods that take either a filename 59 // Helper class that simplifies creating methods that take either a filename
55 // to a manifest or the manifest itself. 60 // to a manifest or the manifest itself.
56 ManifestTest::ManifestData::ManifestData(const char* name) 61 ExtensionManifestTest::Manifest::Manifest(const char* name)
57 : name_(name), manifest_(NULL) { 62 : name_(name), manifest_(NULL) {
58 } 63 }
59 64
60 ManifestTest::ManifestData::ManifestData(base::DictionaryValue* manifest, 65 ExtensionManifestTest::Manifest::Manifest(base::DictionaryValue* manifest,
61 const char* name) 66 const char* name)
62 : name_(name), manifest_(manifest) { 67 : name_(name), manifest_(manifest) {
63 CHECK(manifest_) << "Manifest NULL"; 68 CHECK(manifest_) << "Manifest NULL";
64 } 69 }
65 70
66 ManifestTest::ManifestData::ManifestData( 71 ExtensionManifestTest::Manifest::Manifest(
67 scoped_ptr<base::DictionaryValue> manifest) 72 scoped_ptr<base::DictionaryValue> manifest)
68 : manifest_(manifest.get()), manifest_holder_(manifest.Pass()) { 73 : manifest_(manifest.get()), manifest_holder_(manifest.Pass()) {
69 CHECK(manifest_) << "Manifest NULL"; 74 CHECK(manifest_) << "Manifest NULL";
70 } 75 }
71 76
72 ManifestTest::ManifestData::ManifestData(const ManifestData& m) { 77 ExtensionManifestTest::Manifest::Manifest(const Manifest& m) {
73 NOTREACHED(); 78 NOTREACHED();
74 } 79 }
75 80
76 ManifestTest::ManifestData::~ManifestData() { 81 ExtensionManifestTest::Manifest::~Manifest() {
77 } 82 }
78 83
79 base::DictionaryValue* ManifestTest::ManifestData::GetManifest( 84 base::DictionaryValue* ExtensionManifestTest::Manifest::GetManifest(
80 base::FilePath test_data_dir, std::string* error) const { 85 char const* test_data_dir, std::string* error) const {
81 if (manifest_) 86 if (manifest_)
82 return manifest_; 87 return manifest_;
83 88
84 base::FilePath manifest_path = test_data_dir.AppendASCII(name_); 89 base::FilePath filename_path;
85 manifest_ = LoadManifestFile(manifest_path, error); 90 filename_path = filename_path.AppendASCII("extensions")
91 .AppendASCII(test_data_dir)
92 .AppendASCII(name_);
93 manifest_ = LoadManifestFile(filename_path, error);
86 manifest_holder_.reset(manifest_); 94 manifest_holder_.reset(manifest_);
87 return manifest_; 95 return manifest_;
88 } 96 }
89 97
90 base::FilePath ManifestTest::GetTestDataDir() { 98 char const* ExtensionManifestTest::test_data_dir() {
91 base::FilePath path; 99 return "manifest_tests";
92 PathService::Get(DIR_TEST_DATA, &path);
93 return path.AppendASCII("manifest_tests");
94 } 100 }
95 101
96 scoped_ptr<base::DictionaryValue> ManifestTest::LoadManifest( 102 scoped_ptr<base::DictionaryValue> ExtensionManifestTest::LoadManifest(
97 char const* manifest_name, std::string* error) { 103 char const* manifest_name, std::string* error) {
98 base::FilePath manifest_path = GetTestDataDir().AppendASCII(manifest_name); 104 base::FilePath filename_path;
99 return make_scoped_ptr(LoadManifestFile(manifest_path, error)); 105 filename_path = filename_path.AppendASCII("extensions")
106 .AppendASCII(test_data_dir())
107 .AppendASCII(manifest_name);
108 return make_scoped_ptr(LoadManifestFile(filename_path, error));
100 } 109 }
101 110
102 scoped_refptr<Extension> ManifestTest::LoadExtension( 111 scoped_refptr<Extension> ExtensionManifestTest::LoadExtension(
103 const ManifestData& manifest, 112 const Manifest& manifest,
104 std::string* error, 113 std::string* error,
105 extensions::Manifest::Location location, 114 extensions::Manifest::Location location,
106 int flags) { 115 int flags) {
107 base::FilePath test_data_dir = GetTestDataDir(); 116 base::DictionaryValue* value = manifest.GetManifest(test_data_dir(), error);
108 base::DictionaryValue* value = manifest.GetManifest(test_data_dir, error);
109 if (!value) 117 if (!value)
110 return NULL; 118 return NULL;
111 return Extension::Create( 119 base::FilePath path;
112 test_data_dir.DirName(), location, *value, flags, error); 120 PathService::Get(chrome::DIR_TEST_DATA, &path);
121 path = path.AppendASCII("extensions").AppendASCII(test_data_dir());
122 return Extension::Create(path.DirName(), location, *value, flags, error);
113 } 123 }
114 124
115 scoped_refptr<Extension> ManifestTest::LoadAndExpectSuccess( 125 scoped_refptr<Extension> ExtensionManifestTest::LoadAndExpectSuccess(
116 const ManifestData& manifest, 126 const Manifest& manifest,
117 extensions::Manifest::Location location, 127 extensions::Manifest::Location location,
118 int flags) { 128 int flags) {
119 std::string error; 129 std::string error;
120 scoped_refptr<Extension> extension = 130 scoped_refptr<Extension> extension =
121 LoadExtension(manifest, &error, location, flags); 131 LoadExtension(manifest, &error, location, flags);
122 EXPECT_TRUE(extension.get()) << manifest.name(); 132 EXPECT_TRUE(extension.get()) << manifest.name();
123 EXPECT_EQ("", error) << manifest.name(); 133 EXPECT_EQ("", error) << manifest.name();
124 return extension; 134 return extension;
125 } 135 }
126 136
127 scoped_refptr<Extension> ManifestTest::LoadAndExpectSuccess( 137 scoped_refptr<Extension> ExtensionManifestTest::LoadAndExpectSuccess(
128 char const* manifest_name, 138 char const* manifest_name,
129 extensions::Manifest::Location location, 139 extensions::Manifest::Location location,
130 int flags) { 140 int flags) {
131 return LoadAndExpectSuccess(ManifestData(manifest_name), location, flags); 141 return LoadAndExpectSuccess(Manifest(manifest_name), location, flags);
132 } 142 }
133 143
134 scoped_refptr<Extension> ManifestTest::LoadAndExpectWarning( 144 scoped_refptr<Extension> ExtensionManifestTest::LoadFromStringAndExpectSuccess(
135 const ManifestData& manifest, 145 char const* manifest_json) {
146 return LoadAndExpectSuccess(
147 Manifest(extensions::test_util::ParseJsonDictionaryWithSingleQuotes(
148 manifest_json)));
149 }
150
151 scoped_refptr<Extension> ExtensionManifestTest::LoadAndExpectWarning(
152 const Manifest& manifest,
136 const std::string& expected_warning, 153 const std::string& expected_warning,
137 extensions::Manifest::Location location, 154 extensions::Manifest::Location location,
138 int flags) { 155 int flags) {
139 std::string error; 156 std::string error;
140 scoped_refptr<Extension> extension = 157 scoped_refptr<Extension> extension =
141 LoadExtension(manifest, &error, location, flags); 158 LoadExtension(manifest, &error, location, flags);
142 EXPECT_TRUE(extension.get()) << manifest.name(); 159 EXPECT_TRUE(extension.get()) << manifest.name();
143 EXPECT_EQ("", error) << manifest.name(); 160 EXPECT_EQ("", error) << manifest.name();
144 EXPECT_EQ(1u, extension->install_warnings().size()); 161 EXPECT_EQ(1u, extension->install_warnings().size());
145 EXPECT_EQ(expected_warning, extension->install_warnings()[0].message); 162 EXPECT_EQ(expected_warning, extension->install_warnings()[0].message);
146 return extension; 163 return extension;
147 } 164 }
148 165
149 scoped_refptr<Extension> ManifestTest::LoadAndExpectWarning( 166 scoped_refptr<Extension> ExtensionManifestTest::LoadAndExpectWarning(
150 char const* manifest_name, 167 char const* manifest_name,
151 const std::string& expected_warning, 168 const std::string& expected_warning,
152 extensions::Manifest::Location location, 169 extensions::Manifest::Location location,
153 int flags) { 170 int flags) {
154 return LoadAndExpectWarning( 171 return LoadAndExpectWarning(
155 ManifestData(manifest_name), expected_warning, location, flags); 172 Manifest(manifest_name), expected_warning, location, flags);
156 } 173 }
157 174
158 void ManifestTest::VerifyExpectedError( 175 void ExtensionManifestTest::VerifyExpectedError(
159 Extension* extension, 176 Extension* extension,
160 const std::string& name, 177 const std::string& name,
161 const std::string& error, 178 const std::string& error,
162 const std::string& expected_error) { 179 const std::string& expected_error) {
163 EXPECT_FALSE(extension) << 180 EXPECT_FALSE(extension) <<
164 "Expected failure loading extension '" << name << 181 "Expected failure loading extension '" << name <<
165 "', but didn't get one."; 182 "', but didn't get one.";
166 EXPECT_TRUE(MatchPattern(error, expected_error)) << name << 183 EXPECT_TRUE(MatchPattern(error, expected_error)) << name <<
167 " expected '" << expected_error << "' but got '" << error << "'"; 184 " expected '" << expected_error << "' but got '" << error << "'";
168 } 185 }
169 186
170 void ManifestTest::LoadAndExpectError( 187 void ExtensionManifestTest::LoadAndExpectError(
171 const ManifestData& manifest, 188 const Manifest& manifest,
172 const std::string& expected_error, 189 const std::string& expected_error,
173 extensions::Manifest::Location location, 190 extensions::Manifest::Location location,
174 int flags) { 191 int flags) {
175 std::string error; 192 std::string error;
176 scoped_refptr<Extension> extension( 193 scoped_refptr<Extension> extension(
177 LoadExtension(manifest, &error, location, flags)); 194 LoadExtension(manifest, &error, location, flags));
178 VerifyExpectedError(extension.get(), manifest.name(), error, 195 VerifyExpectedError(extension.get(), manifest.name(), error,
179 expected_error); 196 expected_error);
180 } 197 }
181 198
182 void ManifestTest::LoadAndExpectError( 199 void ExtensionManifestTest::LoadAndExpectError(
183 char const* manifest_name, 200 char const* manifest_name,
184 const std::string& expected_error, 201 const std::string& expected_error,
185 extensions::Manifest::Location location, 202 extensions::Manifest::Location location,
186 int flags) { 203 int flags) {
187 return LoadAndExpectError( 204 return LoadAndExpectError(
188 ManifestData(manifest_name), expected_error, location, flags); 205 Manifest(manifest_name), expected_error, location, flags);
189 } 206 }
190 207
191 void ManifestTest::AddPattern(extensions::URLPatternSet* extent, 208 void ExtensionManifestTest::LoadFromStringAndExpectError(
209 char const* manifest_json,
210 const std::string& expected_error) {
211 return LoadAndExpectError(
212 Manifest(extensions::test_util::ParseJsonDictionaryWithSingleQuotes(
213 manifest_json)),
214 expected_error);
215 }
216
217 void ExtensionManifestTest::AddPattern(extensions::URLPatternSet* extent,
192 const std::string& pattern) { 218 const std::string& pattern) {
193 int schemes = URLPattern::SCHEME_ALL; 219 int schemes = URLPattern::SCHEME_ALL;
194 extent->AddPattern(URLPattern(schemes, pattern)); 220 extent->AddPattern(URLPattern(schemes, pattern));
195 } 221 }
196 222
197 ManifestTest::Testcase::Testcase( 223 ExtensionManifestTest::Testcase::Testcase(
198 std::string manifest_filename, 224 std::string manifest_filename,
199 std::string expected_error, 225 std::string expected_error,
200 extensions::Manifest::Location location, 226 extensions::Manifest::Location location,
201 int flags) 227 int flags)
202 : manifest_filename_(manifest_filename), 228 : manifest_filename_(manifest_filename),
203 expected_error_(expected_error), 229 expected_error_(expected_error),
204 location_(location), flags_(flags) { 230 location_(location), flags_(flags) {
205 } 231 }
206 232
207 ManifestTest::Testcase::Testcase(std::string manifest_filename, 233 ExtensionManifestTest::Testcase::Testcase(std::string manifest_filename,
208 std::string expected_error) 234 std::string expected_error)
209 : manifest_filename_(manifest_filename), 235 : manifest_filename_(manifest_filename),
210 expected_error_(expected_error), 236 expected_error_(expected_error),
211 location_(extensions::Manifest::INTERNAL), 237 location_(extensions::Manifest::INTERNAL),
212 flags_(Extension::NO_FLAGS) { 238 flags_(Extension::NO_FLAGS) {
213 } 239 }
214 240
215 ManifestTest::Testcase::Testcase(std::string manifest_filename) 241 ExtensionManifestTest::Testcase::Testcase(std::string manifest_filename)
216 : manifest_filename_(manifest_filename), 242 : manifest_filename_(manifest_filename),
217 location_(extensions::Manifest::INTERNAL), 243 location_(extensions::Manifest::INTERNAL),
218 flags_(Extension::NO_FLAGS) {} 244 flags_(Extension::NO_FLAGS) {}
219 245
220 ManifestTest::Testcase::Testcase( 246 ExtensionManifestTest::Testcase::Testcase(
221 std::string manifest_filename, 247 std::string manifest_filename,
222 extensions::Manifest::Location location, 248 extensions::Manifest::Location location,
223 int flags) 249 int flags)
224 : manifest_filename_(manifest_filename), 250 : manifest_filename_(manifest_filename),
225 location_(location), 251 location_(location),
226 flags_(flags) {} 252 flags_(flags) {}
227 253
228 void ManifestTest::RunTestcases(const Testcase* testcases, 254 void ExtensionManifestTest::RunTestcases(const Testcase* testcases,
229 size_t num_testcases, 255 size_t num_testcases,
230 ExpectType type) { 256 ExpectType type) {
231 for (size_t i = 0; i < num_testcases; ++i) 257 for (size_t i = 0; i < num_testcases; ++i)
232 RunTestcase(testcases[i], type); 258 RunTestcase(testcases[i], type);
233 } 259 }
234 260
235 void ManifestTest::RunTestcase(const Testcase& testcase, 261 void ExtensionManifestTest::RunTestcase(const Testcase& testcase,
236 ExpectType type) { 262 ExpectType type) {
237 switch (type) { 263 switch (type) {
238 case EXPECT_TYPE_ERROR: 264 case EXPECT_TYPE_ERROR:
239 LoadAndExpectError(testcase.manifest_filename_.c_str(), 265 LoadAndExpectError(testcase.manifest_filename_.c_str(),
240 testcase.expected_error_, 266 testcase.expected_error_,
241 testcase.location_, 267 testcase.location_,
242 testcase.flags_); 268 testcase.flags_);
243 break; 269 break;
244 case EXPECT_TYPE_WARNING: 270 case EXPECT_TYPE_WARNING:
245 LoadAndExpectWarning(testcase.manifest_filename_.c_str(), 271 LoadAndExpectWarning(testcase.manifest_filename_.c_str(),
246 testcase.expected_error_, 272 testcase.expected_error_,
247 testcase.location_, 273 testcase.location_,
248 testcase.flags_); 274 testcase.flags_);
249 break; 275 break;
250 case EXPECT_TYPE_SUCCESS: 276 case EXPECT_TYPE_SUCCESS:
251 LoadAndExpectSuccess(testcase.manifest_filename_.c_str(), 277 LoadAndExpectSuccess(testcase.manifest_filename_.c_str(),
252 testcase.location_, 278 testcase.location_,
253 testcase.flags_); 279 testcase.flags_);
254 break; 280 break;
255 } 281 }
256 } 282 }
257
258 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698