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

Side by Side Diff: extensions/common/message_bundle_unittest.cc

Issue 2899743002: Remove raw base::DictionaryValue::Set in //extensions (Closed)
Patch Set: Rebase Created 3 years, 6 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/message_bundle.h" 5 #include "extensions/common/message_bundle.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <memory> 9 #include <memory>
10 #include <string> 10 #include <string>
11 #include <utility>
11 #include <vector> 12 #include <vector>
12 13
13 #include "base/i18n/rtl.h" 14 #include "base/i18n/rtl.h"
14 #include "base/macros.h" 15 #include "base/macros.h"
16 #include "base/memory/ptr_util.h"
15 #include "base/strings/string_util.h" 17 #include "base/strings/string_util.h"
16 #include "base/strings/utf_string_conversions.h" 18 #include "base/strings/utf_string_conversions.h"
17 #include "base/values.h" 19 #include "base/values.h"
18 #include "extensions/common/error_utils.h" 20 #include "extensions/common/error_utils.h"
19 #include "extensions/common/extension_l10n_util.h" 21 #include "extensions/common/extension_l10n_util.h"
20 #include "extensions/common/manifest_constants.h" 22 #include "extensions/common/manifest_constants.h"
21 #include "testing/gtest/include/gtest/gtest.h" 23 #include "testing/gtest/include/gtest/gtest.h"
22 24
23 namespace extensions { 25 namespace extensions {
24 26
25 namespace errors = manifest_errors; 27 namespace errors = manifest_errors;
26 28
27 class MessageBundleTest : public testing::Test { 29 class MessageBundleTest : public testing::Test {
28 protected: 30 protected:
29 enum BadDictionary { 31 enum BadDictionary {
30 INVALID_NAME, 32 INVALID_NAME,
31 NAME_NOT_A_TREE, 33 NAME_NOT_A_TREE,
32 EMPTY_NAME_TREE, 34 EMPTY_NAME_TREE,
33 MISSING_MESSAGE, 35 MISSING_MESSAGE,
34 PLACEHOLDER_NOT_A_TREE, 36 PLACEHOLDER_NOT_A_TREE,
35 EMPTY_PLACEHOLDER_TREE, 37 EMPTY_PLACEHOLDER_TREE,
36 CONTENT_MISSING, 38 CONTENT_MISSING,
37 MESSAGE_PLACEHOLDER_DOESNT_MATCH, 39 MESSAGE_PLACEHOLDER_DOESNT_MATCH,
38 }; 40 };
39 41
40 // Helper method for dictionary building. 42 // Helper method for dictionary building.
41 void SetDictionary(const std::string& name, 43 void SetDictionary(const std::string& name,
Devlin 2017/06/02 15:38:49 This method seems a little unnecessary now. It'd
jdoerrie 2017/06/06 12:40:23 Done.
42 base::DictionaryValue* subtree, 44 std::unique_ptr<base::DictionaryValue> subtree,
43 base::DictionaryValue* target) { 45 base::DictionaryValue* target) {
44 target->Set(name, static_cast<base::Value*>(subtree)); 46 target->Set(name, std::move(subtree));
45 } 47 }
46 48
47 void CreateContentTree(const std::string& name, 49 void CreateContentTree(const std::string& name,
48 const std::string& content, 50 const std::string& content,
49 base::DictionaryValue* dict) { 51 base::DictionaryValue* dict) {
50 base::DictionaryValue* content_tree = new base::DictionaryValue; 52 auto content_tree = base::MakeUnique<base::DictionaryValue>();
51 content_tree->SetString(MessageBundle::kContentKey, content); 53 content_tree->SetString(MessageBundle::kContentKey, content);
52 SetDictionary(name, content_tree, dict); 54 SetDictionary(name, std::move(content_tree), dict);
53 } 55 }
54 56
55 void CreatePlaceholdersTree(base::DictionaryValue* dict) { 57 void CreatePlaceholdersTree(base::DictionaryValue* dict) {
56 base::DictionaryValue* placeholders_tree = new base::DictionaryValue; 58 auto placeholders_tree = base::MakeUnique<base::DictionaryValue>();
57 CreateContentTree("a", "A", placeholders_tree); 59 CreateContentTree("a", "A", placeholders_tree.get());
58 CreateContentTree("b", "B", placeholders_tree); 60 CreateContentTree("b", "B", placeholders_tree.get());
59 CreateContentTree("c", "C", placeholders_tree); 61 CreateContentTree("c", "C", placeholders_tree.get());
60 SetDictionary(MessageBundle::kPlaceholdersKey, 62 SetDictionary(MessageBundle::kPlaceholdersKey, std::move(placeholders_tree),
61 placeholders_tree,
62 dict); 63 dict);
63 } 64 }
64 65
65 void CreateMessageTree(const std::string& name, 66 void CreateMessageTree(const std::string& name,
66 const std::string& message, 67 const std::string& message,
67 bool create_placeholder_subtree, 68 bool create_placeholder_subtree,
68 base::DictionaryValue* dict) { 69 base::DictionaryValue* dict) {
69 base::DictionaryValue* message_tree = new base::DictionaryValue; 70 auto message_tree = base::MakeUnique<base::DictionaryValue>();
70 if (create_placeholder_subtree) 71 if (create_placeholder_subtree)
71 CreatePlaceholdersTree(message_tree); 72 CreatePlaceholdersTree(message_tree.get());
72 message_tree->SetString(MessageBundle::kMessageKey, message); 73 message_tree->SetString(MessageBundle::kMessageKey, message);
73 SetDictionary(name, message_tree, dict); 74 SetDictionary(name, std::move(message_tree), dict);
74 } 75 }
75 76
76 std::unique_ptr<base::DictionaryValue> CreateGoodDictionary() { 77 std::unique_ptr<base::DictionaryValue> CreateGoodDictionary() {
77 std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); 78 auto dict = base::MakeUnique<base::DictionaryValue>();
78 CreateMessageTree("n1", "message1 $a$ $b$", true, dict.get()); 79 CreateMessageTree("n1", "message1 $a$ $b$", true, dict.get());
79 CreateMessageTree("n2", "message2 $c$", true, dict.get()); 80 CreateMessageTree("n2", "message2 $c$", true, dict.get());
80 CreateMessageTree("n3", "message3", false, dict.get()); 81 CreateMessageTree("n3", "message3", false, dict.get());
81 return dict; 82 return dict;
82 } 83 }
83 84
84 std::unique_ptr<base::DictionaryValue> CreateBadDictionary( 85 std::unique_ptr<base::DictionaryValue> CreateBadDictionary(
85 enum BadDictionary what_is_bad) { 86 enum BadDictionary what_is_bad) {
86 std::unique_ptr<base::DictionaryValue> dict = CreateGoodDictionary(); 87 std::unique_ptr<base::DictionaryValue> dict = CreateGoodDictionary();
87 // Now remove/break things. 88 // Now remove/break things.
88 switch (what_is_bad) { 89 switch (what_is_bad) {
89 case INVALID_NAME: 90 case INVALID_NAME:
90 CreateMessageTree("n 5", "nevermind", false, dict.get()); 91 CreateMessageTree("n 5", "nevermind", false, dict.get());
91 break; 92 break;
92 case NAME_NOT_A_TREE: 93 case NAME_NOT_A_TREE:
93 dict->SetString("n4", "whatever"); 94 dict->SetString("n4", "whatever");
94 break; 95 break;
95 case EMPTY_NAME_TREE: { 96 case EMPTY_NAME_TREE: {
96 base::DictionaryValue* empty_tree = new base::DictionaryValue; 97 auto empty_tree = base::MakeUnique<base::DictionaryValue>();
97 SetDictionary("n4", empty_tree, dict.get()); 98 SetDictionary("n4", std::move(empty_tree), dict.get());
98 } 99 }
Devlin 2017/06/02 15:38:48 broken before, but can we fix this brace?
jdoerrie 2017/06/06 12:40:23 Done, inlined empty_tree so braces are not necessa
99 break; 100 break;
100 case MISSING_MESSAGE: 101 case MISSING_MESSAGE:
101 dict->Remove("n1.message", NULL); 102 dict->Remove("n1.message", NULL);
102 break; 103 break;
103 case PLACEHOLDER_NOT_A_TREE: 104 case PLACEHOLDER_NOT_A_TREE:
104 dict->SetString("n1.placeholders", "whatever"); 105 dict->SetString("n1.placeholders", "whatever");
105 break; 106 break;
106 case EMPTY_PLACEHOLDER_TREE: { 107 case EMPTY_PLACEHOLDER_TREE: {
107 base::DictionaryValue* empty_tree = new base::DictionaryValue; 108 auto empty_tree = base::MakeUnique<base::DictionaryValue>();
108 SetDictionary("n1.placeholders", empty_tree, dict.get()); 109 SetDictionary("n1.placeholders", std::move(empty_tree), dict.get());
109 } 110 }
110 break; 111 break;
111 case CONTENT_MISSING: 112 case CONTENT_MISSING:
112 dict->Remove("n1.placeholders.a.content", NULL); 113 dict->Remove("n1.placeholders.a.content", NULL);
113 break; 114 break;
114 case MESSAGE_PLACEHOLDER_DOESNT_MATCH: 115 case MESSAGE_PLACEHOLDER_DOESNT_MATCH:
115 base::DictionaryValue* value; 116 base::DictionaryValue* value;
116 dict->Remove("n1.placeholders.a", NULL); 117 dict->Remove("n1.placeholders.a", NULL);
117 dict->GetDictionary("n1.placeholders", &value); 118 dict->GetDictionary("n1.placeholders", &value);
118 CreateContentTree("x", "X", value); 119 CreateContentTree("x", "X", value);
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after
420 messages.insert(std::make_pair("message_name", "message_value")); 421 messages.insert(std::make_pair("message_name", "message_value"));
421 (*GetExtensionToL10nMessagesMap())[extension_id] = messages; 422 (*GetExtensionToL10nMessagesMap())[extension_id] = messages;
422 423
423 L10nMessagesMap* map = GetL10nMessagesMap(extension_id); 424 L10nMessagesMap* map = GetL10nMessagesMap(extension_id);
424 ASSERT_TRUE(NULL != map); 425 ASSERT_TRUE(NULL != map);
425 EXPECT_EQ(1U, map->size()); 426 EXPECT_EQ(1U, map->size());
426 EXPECT_EQ("message_value", (*map)["message_name"]); 427 EXPECT_EQ("message_value", (*map)["message_name"]);
427 } 428 }
428 429
429 } // namespace extensions 430 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698