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

Side by Side Diff: ppapi/shared_impl/var_value_conversions_unittest.cc

Issue 12388083: Add PPB_VarArray_Dev support - part 1. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 7 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 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 "ppapi/shared_impl/var_value_conversions.h" 5 #include "ppapi/shared_impl/var_value_conversions.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 #include <cstring> 8 #include <cstring>
9 9
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "base/memory/ref_counted.h" 11 #include "base/memory/ref_counted.h"
12 #include "base/memory/scoped_ptr.h" 12 #include "base/memory/scoped_ptr.h"
13 #include "base/values.h" 13 #include "base/values.h"
14 #include "ppapi/c/pp_bool.h" 14 #include "ppapi/c/pp_bool.h"
15 #include "ppapi/c/pp_var.h" 15 #include "ppapi/c/pp_var.h"
16 #include "ppapi/shared_impl/array_var.h"
16 #include "ppapi/shared_impl/dictionary_var.h" 17 #include "ppapi/shared_impl/dictionary_var.h"
17 #include "ppapi/shared_impl/ppapi_globals.h" 18 #include "ppapi/shared_impl/ppapi_globals.h"
18 #include "ppapi/shared_impl/proxy_lock.h" 19 #include "ppapi/shared_impl/proxy_lock.h"
19 #include "ppapi/shared_impl/scoped_pp_var.h" 20 #include "ppapi/shared_impl/scoped_pp_var.h"
20 #include "ppapi/shared_impl/test_globals.h" 21 #include "ppapi/shared_impl/test_globals.h"
21 #include "ppapi/shared_impl/var.h" 22 #include "ppapi/shared_impl/var.h"
22 #include "ppapi/shared_impl/var_tracker.h" 23 #include "ppapi/shared_impl/var_tracker.h"
23 #include "testing/gtest/include/gtest/gtest.h" 24 #include "testing/gtest/include/gtest/gtest.h"
24 25
25 namespace ppapi { 26 namespace ppapi {
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 ++non_undefined_count; 88 ++non_undefined_count;
88 const base::Value* sub_value = NULL; 89 const base::Value* sub_value = NULL;
89 if (!dict_value.GetWithoutPathExpansion(iter->first, &sub_value) || 90 if (!dict_value.GetWithoutPathExpansion(iter->first, &sub_value) ||
90 !Equals(*sub_value, iter->second.get())) { 91 !Equals(*sub_value, iter->second.get())) {
91 return false; 92 return false;
92 } 93 }
93 } 94 }
94 return non_undefined_count == dict_value.size(); 95 return non_undefined_count == dict_value.size();
95 } 96 }
96 case base::Value::TYPE_LIST: { 97 case base::Value::TYPE_LIST: {
97 // TODO(yzshen): add support once array var is supported. 98 const base::ListValue& list_value =
98 return false; 99 static_cast<const base::ListValue&>(value);
100 ArrayVar* array_var = ArrayVar::FromPPVar(var);
101 if (!array_var || list_value.GetSize() != array_var->elements().size())
102 return false;
103
104 base::ListValue::const_iterator value_iter = list_value.begin();
105 ArrayVar::ElementVector::const_iterator var_iter =
106 array_var->elements().begin();
107 for (; value_iter != list_value.end() &&
108 var_iter != array_var->elements().end();
109 ++value_iter, ++var_iter) {
110 if (!Equals(**value_iter, var_iter->get()))
111 return false;
112 }
113 return true;
99 } 114 }
100 } 115 }
101 NOTREACHED(); 116 NOTREACHED();
102 return false; 117 return false;
103 } 118 }
104 119
105 class VarValueConversionsTest : public testing::Test { 120 class VarValueConversionsTest : public testing::Test {
106 public: 121 public:
107 VarValueConversionsTest() { 122 VarValueConversionsTest() {
108 } 123 }
(...skipping 11 matching lines...) Expand all
120 135
121 private: 136 private:
122 TestGlobals globals_; 137 TestGlobals globals_;
123 }; 138 };
124 139
125 } // namespace 140 } // namespace
126 141
127 TEST_F(VarValueConversionsTest, CreateValueFromVar) { 142 TEST_F(VarValueConversionsTest, CreateValueFromVar) {
128 { 143 {
129 // Var holding a ref to itself is not a valid input. 144 // Var holding a ref to itself is not a valid input.
130 scoped_refptr<DictionaryVar> dict_var_1(new DictionaryVar()); 145 scoped_refptr<DictionaryVar> dict_var(new DictionaryVar());
131 ScopedPPVar var_1(ScopedPPVar::PassRef(), dict_var_1->GetPPVar()); 146 ScopedPPVar var_1(ScopedPPVar::PassRef(), dict_var->GetPPVar());
132 scoped_refptr<DictionaryVar> dict_var_2(new DictionaryVar()); 147 scoped_refptr<ArrayVar> array_var(new ArrayVar());
133 ScopedPPVar var_2(ScopedPPVar::PassRef(), dict_var_2->GetPPVar()); 148 ScopedPPVar var_2(ScopedPPVar::PassRef(), array_var->GetPPVar());
134 149
135 ASSERT_TRUE(dict_var_1->SetWithStringKey("key_1", var_2.get())); 150 ASSERT_TRUE(dict_var->SetWithStringKey("key_1", var_2.get()));
136 scoped_ptr<base::Value> value(CreateValueFromVar(var_1.get())); 151 scoped_ptr<base::Value> value(CreateValueFromVar(var_1.get()));
137 ASSERT_TRUE(value.get() != NULL); 152 ASSERT_TRUE(value.get());
138 153
139 ASSERT_TRUE(dict_var_2->SetWithStringKey("key_2", var_1.get())); 154 ASSERT_TRUE(array_var->Set(0, var_1.get()));
140 value.reset(CreateValueFromVar(var_1.get())); 155 value.reset(CreateValueFromVar(var_1.get()));
141 ASSERT_EQ(NULL, value.get()); 156 ASSERT_EQ(NULL, value.get());
142 157
143 // Make sure |var_1| doesn't indirectly hold a ref to itself, otherwise it 158 // Make sure |var_1| doesn't indirectly hold a ref to itself, otherwise it
144 // is leaked. 159 // is leaked.
145 dict_var_1->DeleteWithStringKey("key_1"); 160 dict_var->DeleteWithStringKey("key_1");
146 } 161 }
147 162
148 // Vars of null or undefined type are converted to null values. 163 // Vars of null or undefined type are converted to null values.
149 { 164 {
150 scoped_ptr<base::Value> value(CreateValueFromVar(PP_MakeNull())); 165 scoped_ptr<base::Value> value(CreateValueFromVar(PP_MakeNull()));
151 ASSERT_TRUE(value.get() != NULL); 166 ASSERT_TRUE(value.get());
152 ASSERT_TRUE(Equals(*value, PP_MakeNull())); 167 ASSERT_TRUE(Equals(*value, PP_MakeNull()));
153 168
154 value.reset(CreateValueFromVar(PP_MakeUndefined())); 169 value.reset(CreateValueFromVar(PP_MakeUndefined()));
155 ASSERT_TRUE(value.get() != NULL); 170 ASSERT_TRUE(value.get());
156 ASSERT_TRUE(Equals(*value, PP_MakeUndefined())); 171 ASSERT_TRUE(Equals(*value, PP_MakeUndefined()));
157 } 172 }
158 173
159 { 174 {
175 // Test empty dictionary.
176 scoped_refptr<DictionaryVar> dict_var(new DictionaryVar());
177 ScopedPPVar var(ScopedPPVar::PassRef(), dict_var->GetPPVar());
178
179 scoped_ptr<base::Value> value(CreateValueFromVar(var.get()));
180 ASSERT_TRUE(value.get());
181 ASSERT_TRUE(Equals(*value, var.get()));
182 }
183
184 {
160 // Key-value pairs whose value is undefined are ignored. 185 // Key-value pairs whose value is undefined are ignored.
161 scoped_refptr<DictionaryVar> dict_var(new DictionaryVar()); 186 scoped_refptr<DictionaryVar> dict_var(new DictionaryVar());
162 ASSERT_TRUE(dict_var->SetWithStringKey("key_1", PP_MakeUndefined())); 187 ASSERT_TRUE(dict_var->SetWithStringKey("key_1", PP_MakeUndefined()));
163 ASSERT_TRUE(dict_var->SetWithStringKey("key_2", PP_MakeInt32(1))); 188 ASSERT_TRUE(dict_var->SetWithStringKey("key_2", PP_MakeInt32(1)));
164 ScopedPPVar var(ScopedPPVar::PassRef(), dict_var->GetPPVar()); 189 ScopedPPVar var(ScopedPPVar::PassRef(), dict_var->GetPPVar());
165 190
166 scoped_ptr<base::Value> value(CreateValueFromVar(var.get())); 191 scoped_ptr<base::Value> value(CreateValueFromVar(var.get()));
167 ASSERT_TRUE(value.get() != NULL); 192 ASSERT_TRUE(value.get());
168 ASSERT_TRUE(Equals(*value, var.get())); 193 ASSERT_TRUE(Equals(*value, var.get()));
169 } 194 }
170 195
196 {
197 // Test basic cases for array.
198 scoped_refptr<ArrayVar> array_var(new ArrayVar());
199 ScopedPPVar var(ScopedPPVar::PassRef(), array_var->GetPPVar());
200
201 scoped_ptr<base::Value> value(CreateValueFromVar(var.get()));
202 ASSERT_TRUE(value.get());
203 ASSERT_TRUE(Equals(*value, var.get()));
204
205 ASSERT_TRUE(array_var->Set(0, PP_MakeDouble(1)));
206 value.reset(CreateValueFromVar(var.get()));
207 ASSERT_TRUE(value.get());
208 ASSERT_TRUE(Equals(*value, var.get()));
209 }
210
171 { 211 {
172 // Test more complex inputs. 212 // Test more complex inputs.
173 scoped_refptr<DictionaryVar> dict_var_1(new DictionaryVar()); 213 scoped_refptr<DictionaryVar> dict_var_1(new DictionaryVar());
174 ScopedPPVar dict_pp_var_1(ScopedPPVar::PassRef(), dict_var_1->GetPPVar()); 214 ScopedPPVar dict_pp_var_1(ScopedPPVar::PassRef(), dict_var_1->GetPPVar());
175 scoped_refptr<DictionaryVar> dict_var_2(new DictionaryVar()); 215 scoped_refptr<DictionaryVar> dict_var_2(new DictionaryVar());
176 ScopedPPVar dict_pp_var_2(ScopedPPVar::PassRef(), dict_var_2->GetPPVar()); 216 ScopedPPVar dict_pp_var_2(ScopedPPVar::PassRef(), dict_var_2->GetPPVar());
217 scoped_refptr<ArrayVar> array_var(new ArrayVar());
218 ScopedPPVar array_pp_var(ScopedPPVar::PassRef(), array_var->GetPPVar());
177 scoped_refptr<StringVar> string_var(new StringVar("string_value")); 219 scoped_refptr<StringVar> string_var(new StringVar("string_value"));
178 ScopedPPVar string_pp_var(ScopedPPVar::PassRef(), string_var->GetPPVar()); 220 ScopedPPVar string_pp_var(ScopedPPVar::PassRef(), string_var->GetPPVar());
179 221
180 ASSERT_TRUE(dict_var_1->SetWithStringKey("null_key", PP_MakeNull())); 222 ASSERT_TRUE(dict_var_1->SetWithStringKey("null_key", PP_MakeNull()));
181 ASSERT_TRUE(dict_var_1->SetWithStringKey("string_key", 223 ASSERT_TRUE(dict_var_1->SetWithStringKey("string_key",
182 string_pp_var.get())); 224 string_pp_var.get()));
183 ASSERT_TRUE(dict_var_1->SetWithStringKey("dict_key", dict_pp_var_2.get())); 225 ASSERT_TRUE(dict_var_1->SetWithStringKey("dict_key", dict_pp_var_2.get()));
184 226
185 ASSERT_TRUE(dict_var_2->SetWithStringKey("undefined_key", 227 ASSERT_TRUE(dict_var_2->SetWithStringKey("undefined_key",
186 PP_MakeUndefined())); 228 PP_MakeUndefined()));
187 ASSERT_TRUE(dict_var_2->SetWithStringKey("double_key", PP_MakeDouble(1))); 229 ASSERT_TRUE(dict_var_2->SetWithStringKey("double_key", PP_MakeDouble(1)));
188 ASSERT_TRUE(dict_var_2->SetWithStringKey("int_key", PP_MakeInt32(2))); 230 ASSERT_TRUE(dict_var_2->SetWithStringKey("array_key", array_pp_var.get()));
189 ASSERT_TRUE(dict_var_2->SetWithStringKey("bool_key", PP_MakeBool(PP_TRUE))); 231
232 ASSERT_TRUE(array_var->Set(0, PP_MakeInt32(2)));
233 ASSERT_TRUE(array_var->Set(1, PP_MakeBool(PP_TRUE)));
234 ASSERT_TRUE(array_var->SetLength(4));
190 235
191 scoped_ptr<base::Value> value(CreateValueFromVar(dict_pp_var_1.get())); 236 scoped_ptr<base::Value> value(CreateValueFromVar(dict_pp_var_1.get()));
192 ASSERT_TRUE(value.get() != NULL); 237 ASSERT_TRUE(value.get());
193 ASSERT_TRUE(Equals(*value, dict_pp_var_1.get())); 238 ASSERT_TRUE(Equals(*value, dict_pp_var_1.get()));
194 } 239 }
195 240
196 { 241 {
197 // Test that dictionary keys containing '.' are handled correctly. 242 // Test that dictionary keys containing '.' are handled correctly.
198 scoped_refptr<DictionaryVar> dict_var(new DictionaryVar()); 243 scoped_refptr<DictionaryVar> dict_var(new DictionaryVar());
199 ScopedPPVar dict_pp_var(ScopedPPVar::PassRef(), dict_var->GetPPVar()); 244 ScopedPPVar dict_pp_var(ScopedPPVar::PassRef(), dict_var->GetPPVar());
200 245
201 ASSERT_TRUE(dict_var->SetWithStringKey("double.key", PP_MakeDouble(1))); 246 ASSERT_TRUE(dict_var->SetWithStringKey("double.key", PP_MakeDouble(1)));
202 ASSERT_TRUE(dict_var->SetWithStringKey("int.key..name", PP_MakeInt32(2))); 247 ASSERT_TRUE(dict_var->SetWithStringKey("int.key..name", PP_MakeInt32(2)));
203 248
204 scoped_ptr<base::Value> value(CreateValueFromVar(dict_pp_var.get())); 249 scoped_ptr<base::Value> value(CreateValueFromVar(dict_pp_var.get()));
205 ASSERT_TRUE(value.get() != NULL); 250 ASSERT_TRUE(value.get());
206 ASSERT_TRUE(Equals(*value, dict_pp_var.get())); 251 ASSERT_TRUE(Equals(*value, dict_pp_var.get()));
207 } 252 }
208 } 253 }
209 254
210 TEST_F(VarValueConversionsTest, CreateVarFromValue) { 255 TEST_F(VarValueConversionsTest, CreateVarFromValue) {
211 base::DictionaryValue dict_value; 256 {
212 dict_value.Set("null_key", base::Value::CreateNullValue()); 257 // Test basic cases for dictionary.
213 dict_value.SetString("string_key", "string_value"); 258 base::DictionaryValue dict_value;
214 dict_value.SetDouble("dict_key.double_key", 1); 259 ScopedPPVar var(ScopedPPVar::PassRef(), CreateVarFromValue(dict_value));
215 dict_value.SetInteger("dict_key.int_key", 2); 260 ASSERT_TRUE(Equals(dict_value, var.get()));
216 dict_value.SetBoolean("dict_key.bool_key", true);
217 261
218 ScopedPPVar var(ScopedPPVar::PassRef(), CreateVarFromValue(dict_value)); 262 dict_value.SetInteger("int_key", 1);
219 ASSERT_TRUE(Equals(dict_value, var.get())); 263 var = ScopedPPVar(ScopedPPVar::PassRef(), CreateVarFromValue(dict_value));
264 ASSERT_TRUE(Equals(dict_value, var.get()));
265 }
266
267 {
268 // Test basic cases for array.
269 base::ListValue list_value;
270 ScopedPPVar var(ScopedPPVar::PassRef(), CreateVarFromValue(list_value));
271 ASSERT_TRUE(Equals(list_value, var.get()));
272
273 list_value.AppendInteger(1);
274 var = ScopedPPVar(ScopedPPVar::PassRef(), CreateVarFromValue(list_value));
275 ASSERT_TRUE(Equals(list_value, var.get()));
276 }
277
278 {
279 // Test more complex inputs.
280 base::DictionaryValue dict_value;
281 dict_value.Set("null_key", base::Value::CreateNullValue());
282 dict_value.SetString("string_key", "string_value");
283 dict_value.SetDouble("dict_key.double_key", 1);
284
285 scoped_ptr<base::ListValue> list_value(new base::ListValue());
286 list_value->AppendInteger(2);
287 list_value->AppendBoolean(true);
288 list_value->Append(base::Value::CreateNullValue());
289
290 dict_value.Set("dict_key.array_key", list_value.release());
291
292 ScopedPPVar var(ScopedPPVar::PassRef(), CreateVarFromValue(dict_value));
293 ASSERT_TRUE(Equals(dict_value, var.get()));
294 }
220 } 295 }
221 296
222 } // namespace ppapi 297 } // namespace ppapi
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698