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

Side by Side Diff: extensions/common/permissions/permission_message_test_util.cc

Issue 980353003: Extensions: Switch to new permission message system, part I (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix 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
(Empty)
1 // Copyright 2015 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 #include "extensions/common/permissions/permission_message_test_util.h"
6
7 #include <algorithm>
8 #include <iterator>
9
10 #include "base/strings/string_split.h"
11 #include "base/strings/string_util.h"
12 #include "base/strings/utf_string_conversions.h"
13 #include "extensions/common/permissions/permission_message_provider.h"
14 #include "extensions/common/permissions/permissions_data.h"
15
16 // TODO(treib): Remove the legacy messages once we've fully switched to the new
17 // permission message system.
18
19 namespace extensions {
20
21 namespace {
22
23 class ScopedForcePermissionMessageSystem {
24 public:
25 ScopedForcePermissionMessageSystem(ForceForTesting force) {
26 extensions::ForcePermissionMessageSystemForTesting(force);
27 }
28 ~ScopedForcePermissionMessageSystem() {
29 extensions::ForcePermissionMessageSystemForTesting(
30 ForceForTesting::DONT_FORCE);
31 }
32 };
33
34 PermissionMessageStrings GetLegacyMessages(
35 const PermissionsData* permissions_data) {
36 ScopedForcePermissionMessageSystem force(ForceForTesting::FORCE_OLD);
37 return permissions_data->GetPermissionMessageStrings();
38 }
39
40 PermissionMessageStrings GetLegacyMessages(const PermissionSet* permissions,
41 Manifest::Type extension_type) {
42 ScopedForcePermissionMessageSystem force(ForceForTesting::FORCE_OLD);
43 return PermissionMessageProvider::Get()->GetPermissionMessageStrings(
44 permissions, extension_type);
45 }
46
47 PermissionMessageStrings GetNewMessages(
48 const PermissionsData* permissions_data) {
49 ScopedForcePermissionMessageSystem force(ForceForTesting::FORCE_NEW);
50 return permissions_data->GetPermissionMessageStrings();
51 }
52
53 PermissionMessageStrings GetNewMessages(const PermissionSet* permissions,
54 Manifest::Type extension_type) {
55 ScopedForcePermissionMessageSystem force(ForceForTesting::FORCE_NEW);
56 return PermissionMessageProvider::Get()->GetPermissionMessageStrings(
57 permissions, extension_type);
58 }
59
60 std::vector<base::string16> MakeVectorString16(const base::string16& str) {
61 return std::vector<base::string16>(1, str);
62 }
63
64 std::vector<base::string16> MakeVectorString16(const base::string16& str1,
65 const base::string16& str2) {
66 std::vector<base::string16> result;
67 result.push_back(str1);
68 result.push_back(str2);
69 return result;
70 }
71
72 std::vector<base::string16> MakeVectorString16(const std::string& str1,
73 const std::string& str2) {
74 return MakeVectorString16(base::UTF8ToUTF16(str1), base::UTF8ToUTF16(str2));
75 }
76
77 std::vector<base::string16> MakeVectorString16(
78 const std::vector<std::string>& vec) {
79 std::vector<base::string16> result;
80 for (const std::string& msg : vec)
81 result.push_back(base::UTF8ToUTF16(msg));
82 return result;
83 }
84
85 std::vector<std::vector<base::string16>> MakeVectorVectorString16(
86 const std::vector<base::string16>& vec) {
87 return std::vector<std::vector<base::string16>>(1, vec);
88 }
89
90 std::vector<std::vector<base::string16>> MakeVectorVectorString16(
91 const std::vector<std::vector<std::string>>& vecs) {
92 std::vector<std::vector<base::string16>> result;
93 for (const std::vector<std::string>& vec : vecs)
94 result.push_back(MakeVectorString16(vec));
95 return result;
96 }
97
98 // Returns the vector of messages concatenated into a single string, separated
99 // by newlines, e.g.: "Bar"\n"Baz"\n
100 base::string16 MessagesVectorToString(
101 const std::vector<base::string16>& messages) {
102 if (messages.empty())
103 return base::ASCIIToUTF16("\n");
104 return base::ASCIIToUTF16("\"") +
105 JoinString(messages, base::ASCIIToUTF16("\"\n\"")) +
106 base::ASCIIToUTF16("\"\n");
107 }
108
109 base::string16 MessagesToString(const PermissionMessageStrings& messages) {
110 std::vector<base::string16> messages_vec;
111 for (const PermissionMessageString& msg : messages)
112 messages_vec.push_back(msg.message);
113 return MessagesVectorToString(messages_vec);
114 }
115
116 bool CheckThatSubmessagesMatch(
117 const PermissionMessageString& message,
Yoyo Zhou 2015/03/17 00:02:05 Call this expected_message
Marc Treib 2015/03/17 10:00:27 Done.
118 const std::vector<base::string16>& actual_legacy_submessages,
119 const std::vector<base::string16>& actual_submessages) {
120 bool result = true;
121
122 std::vector<base::string16> expected_sorted;
123 for (const base::string16& submessage : message.submessages)
124 expected_sorted.push_back(submessage);
125 std::sort(expected_sorted.begin(), expected_sorted.end());
126
127 std::vector<base::string16> actual_legacy_sorted(actual_legacy_submessages);
128 std::sort(actual_legacy_sorted.begin(), actual_legacy_sorted.end());
129 if (expected_sorted != actual_legacy_sorted) {
130 // This is always a failure, even within an EXPECT_FALSE.
131 // Message: Expected details for "Message" to be { "Foo" }, but got
132 // { "Bar", "Baz" } in the legacy system
133 ADD_FAILURE() << "Expected details for \"" << message.message
134 << "\" to be:\n" << MessagesVectorToString(expected_sorted)
135 << "But got:\n"
136 << MessagesVectorToString(actual_legacy_sorted)
137 << "in the legacy system";
138 result = false;
139 }
140
141 std::vector<base::string16> actual_sorted(actual_submessages);
142 std::sort(actual_sorted.begin(), actual_sorted.end());
143 if (actual_sorted != actual_submessages) {
144 // This is always a failure, even within an EXPECT_FALSE.
145 // Message: Expected submessages for "Message" to be { "Foo" }, but got
146 // { "Bar", "Baz" }
147 ADD_FAILURE() << "Expected submessages for \"" << message.message
148 << "\" to be:\n" << MessagesVectorToString(expected_sorted)
149 << "But got:\n" << MessagesVectorToString(actual_sorted);
150 result = false;
151 }
152
153 return result;
154 }
155
156 testing::AssertionResult VerifyHasPermissionMessageImpl(
Yoyo Zhou 2015/03/17 00:02:05 I notice the order of arguments here is different
Marc Treib 2015/03/17 10:00:27 Argument order fixed. I think the name does make s
157 const PermissionMessageStrings& actual_legacy_messages,
158 const PermissionMessageStrings& actual_messages,
159 const PermissionMessageString& expected_message) {
160 auto legacy_message_it =
161 std::find_if(actual_legacy_messages.begin(), actual_legacy_messages.end(),
162 [&expected_message](const PermissionMessageString& msg) {
163 return msg.message == expected_message.message;
164 });
165 bool legacy_found = legacy_message_it != actual_legacy_messages.end();
166
167 auto message_it =
168 std::find_if(actual_messages.begin(), actual_messages.end(),
169 [&expected_message](const PermissionMessageString& msg) {
170 return msg.message == expected_message.message;
171 });
172 bool found = message_it != actual_messages.end();
173
174 if (legacy_found != found) {
175 // This is always a failure, even within an EXPECT_FALSE.
176 ADD_FAILURE()
177 << "Mismatch between legacy and new system when looking for \""
178 << expected_message.message << "\".\nLegacy system returned:\n"
179 << MessagesToString(actual_legacy_messages)
180 << "New system returned:\n" << MessagesToString(actual_messages);
181 return testing::AssertionFailure();
182 }
183
184 if (!found) {
185 // Message: Expected messages to contain "Foo", but got { "Bar", "Baz" }
186 return testing::AssertionFailure() << "Expected messages to contain \""
187 << expected_message.message
188 << "\", but got "
189 << MessagesToString(actual_messages);
190 }
191
192 if (!CheckThatSubmessagesMatch(expected_message,
193 legacy_message_it->submessages,
194 message_it->submessages)) {
195 return testing::AssertionFailure();
196 }
197
198 // Message: Expected messages NOT to contain "Foo", but got { "Bar", "Baz" }
199 return testing::AssertionSuccess() << "Expected messages NOT to contain \""
200 << expected_message.message
201 << "\", but got "
202 << MessagesToString(actual_messages);
203 }
204
205 testing::AssertionResult VerifyPermissionMessagesWithSubmessagesImpl(
Yoyo Zhou 2015/03/17 00:02:05 ditto here
Marc Treib 2015/03/17 10:00:27 Done.
206 const PermissionMessageStrings& actual_legacy_messages,
207 const PermissionMessageStrings& actual_messages,
208 const PermissionMessageStrings& expected_messages,
209 bool check_order) {
210 if (expected_messages.size() != actual_legacy_messages.size()) {
211 // Message: Expected 2 messages { "Bar", "Baz" }, but got 0 {} in the
212 // legacy system
213 return testing::AssertionFailure()
214 << "Expected " << expected_messages.size() << " messages:\n"
215 << MessagesToString(expected_messages) << "But got "
216 << actual_legacy_messages.size() << " messages:\n"
217 << MessagesToString(actual_legacy_messages)
218 << "in the legacy system";
219 }
220
221 if (expected_messages.size() != actual_messages.size()) {
222 // Message: Expected 2 messages { "Bar", "Baz" }, but got 0 {}
223 return testing::AssertionFailure()
224 << "Expected " << expected_messages.size() << " messages:\n"
225 << MessagesToString(expected_messages) << "But got "
226 << actual_messages.size() << " messages:\n"
227 << MessagesToString(actual_messages);
228 }
229
230 if (check_order) {
231 for (size_t i = 0; i < expected_messages.size(); i++) {
232 if (expected_messages[i].message != actual_legacy_messages[i].message) {
233 // Message: Expected messages to be { "Foo" }, but got { "Bar", "Baz" }
234 // in the legacy system
235 return testing::AssertionFailure()
236 << "Expected messages to be:\n"
237 << MessagesToString(expected_messages) << "But got:\n"
238 << MessagesToString(actual_legacy_messages)
239 << "in the legacy system";
240 }
241
242 if (expected_messages[i].message != actual_messages[i].message) {
243 // Message: Expected messages to be { "Foo" }, but got { "Bar", "Baz" }
244 return testing::AssertionFailure()
245 << "Expected messages to be:\n"
246 << MessagesToString(expected_messages) << "But got:\n"
247 << MessagesToString(actual_messages);
248 }
249
250 if (!CheckThatSubmessagesMatch(expected_messages[i],
251 actual_legacy_messages[i].submessages,
252 actual_messages[i].submessages)) {
253 return testing::AssertionFailure();
254 }
255 }
256 } else {
257 for (size_t i = 0; i < expected_messages.size(); i++) {
258 testing::AssertionResult result = VerifyHasPermissionMessageImpl(
259 actual_legacy_messages, actual_messages, expected_messages[i]);
260 if (!result)
261 return result;
262 }
263 }
264 return testing::AssertionSuccess();
265 }
266
267 } // namespace
268
269 testing::AssertionResult VerifyHasPermissionMessage(
270 const PermissionsData* permissions_data,
271 const std::string& expected_message) {
272 return VerifyHasPermissionMessage(permissions_data,
273 base::UTF8ToUTF16(expected_message));
274 }
275
276 testing::AssertionResult VerifyHasPermissionMessage(
277 const PermissionsData* permissions_data,
278 const base::string16& expected_message) {
279 return VerifyHasPermissionMessageImpl(
280 GetLegacyMessages(permissions_data), GetNewMessages(permissions_data),
281 PermissionMessageString(expected_message));
282 }
283
284 testing::AssertionResult VerifyHasPermissionMessage(
285 const PermissionSet* permissions,
286 Manifest::Type extension_type,
287 const std::string& expected_message) {
288 return VerifyHasPermissionMessage(permissions, extension_type,
289 base::UTF8ToUTF16(expected_message));
290 }
291
292 testing::AssertionResult VerifyHasPermissionMessage(
293 const PermissionSet* permissions,
294 Manifest::Type extension_type,
295 const base::string16& expected_message) {
296 return VerifyHasPermissionMessageImpl(
297 GetLegacyMessages(permissions, extension_type),
298 GetNewMessages(permissions, extension_type),
299 PermissionMessageString(expected_message));
300 }
301
302 testing::AssertionResult VerifyNoPermissionMessages(
303 const PermissionsData* permissions_data) {
304 return VerifyPermissionMessages(permissions_data,
305 std::vector<base::string16>(), true);
306 }
307
308 testing::AssertionResult VerifyOnePermissionMessage(
309 const PermissionsData* permissions_data,
310 const std::string& expected_message) {
311 return VerifyOnePermissionMessage(permissions_data,
312 base::UTF8ToUTF16(expected_message));
313 }
314
315 testing::AssertionResult VerifyOnePermissionMessage(
316 const PermissionsData* permissions_data,
317 const base::string16& expected_message) {
318 return VerifyPermissionMessages(permissions_data,
319 MakeVectorString16(expected_message), true);
320 }
321
322 testing::AssertionResult VerifyOnePermissionMessage(
323 const PermissionSet* permissions,
324 Manifest::Type extension_type,
325 const base::string16& expected_message) {
326 return VerifyPermissionMessagesWithSubmessagesImpl(
327 GetLegacyMessages(permissions, extension_type),
328 GetNewMessages(permissions, extension_type),
329 PermissionMessageStrings(1, PermissionMessageString(expected_message)),
330 true);
331 }
332
333 testing::AssertionResult VerifyOnePermissionMessageWithSubmessages(
334 const PermissionsData* permissions_data,
335 const std::string& expected_message,
336 const std::vector<std::string>& expected_submessages) {
337 return VerifyOnePermissionMessageWithSubmessages(
338 permissions_data, base::UTF8ToUTF16(expected_message),
339 MakeVectorString16(expected_submessages));
340 }
341
342 testing::AssertionResult VerifyOnePermissionMessageWithSubmessages(
343 const PermissionsData* permissions_data,
344 const base::string16& expected_message,
345 const std::vector<base::string16>& expected_submessages) {
346 return VerifyPermissionMessagesWithSubmessages(
347 permissions_data, MakeVectorString16(expected_message),
348 MakeVectorVectorString16(expected_submessages), true);
349 }
350
351 testing::AssertionResult VerifyTwoPermissionMessages(
352 const PermissionsData* permissions_data,
353 const std::string& expected_message_1,
354 const std::string& expected_message_2,
355 bool check_order) {
356 return VerifyPermissionMessages(
357 permissions_data,
358 MakeVectorString16(expected_message_1, expected_message_2), check_order);
359 }
360
361 testing::AssertionResult VerifyTwoPermissionMessages(
362 const PermissionsData* permissions_data,
363 const base::string16& expected_message_1,
364 const base::string16& expected_message_2,
365 bool check_order) {
366 return VerifyPermissionMessages(
367 permissions_data,
368 MakeVectorString16(expected_message_1, expected_message_2), check_order);
369 }
370
371 testing::AssertionResult VerifyPermissionMessages(
372 const PermissionsData* permissions_data,
373 const std::vector<std::string>& expected_messages,
374 bool check_order) {
375 return VerifyPermissionMessages(
376 permissions_data, MakeVectorString16(expected_messages), check_order);
377 }
378
379 testing::AssertionResult VerifyPermissionMessages(
380 const PermissionsData* permissions_data,
381 const std::vector<base::string16>& expected_messages,
382 bool check_order) {
383 return VerifyPermissionMessagesWithSubmessages(
384 permissions_data, expected_messages,
385 std::vector<std::vector<base::string16>>(expected_messages.size()),
386 check_order);
387 }
388
389 testing::AssertionResult VerifyPermissionMessagesWithSubmessages(
390 const PermissionsData* permissions_data,
391 const std::vector<std::string>& expected_messages,
392 const std::vector<std::vector<std::string>>& expected_submessages,
393 bool check_order) {
394 return VerifyPermissionMessagesWithSubmessages(
395 permissions_data, MakeVectorString16(expected_messages),
396 MakeVectorVectorString16(expected_submessages), check_order);
397 }
398
399 testing::AssertionResult VerifyPermissionMessagesWithSubmessages(
400 const PermissionsData* permissions_data,
401 const std::vector<base::string16>& expected_messages,
402 const std::vector<std::vector<base::string16>>& expected_submessages,
403 bool check_order) {
404 CHECK_EQ(expected_messages.size(), expected_submessages.size());
405 PermissionMessageStrings expected;
406 for (size_t i = 0; i < expected_messages.size(); i++) {
407 expected.push_back(PermissionMessageString(expected_messages[i],
408 expected_submessages[i]));
409 }
410 return VerifyPermissionMessagesWithSubmessagesImpl(
411 GetLegacyMessages(permissions_data), GetNewMessages(permissions_data),
412 expected, check_order);
413 }
414
415 } // namespace extensions
OLDNEW
« no previous file with comments | « extensions/common/permissions/permission_message_test_util.h ('k') | extensions/common/permissions/permissions_data.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698