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

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
« no previous file with comments | « ppapi/shared_impl/var_value_conversions.cc ('k') | ppapi/tests/all_c_includes.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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()); 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()); 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()); 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()); 192 ASSERT_TRUE(value.get());
168 ASSERT_TRUE(Equals(*value, var.get())); 193 ASSERT_TRUE(Equals(*value, var.get()));
169 } 194 }
(...skipping 11 matching lines...) Expand all
181 ASSERT_TRUE(dict_var_1->SetWithStringKey("key_2", dict_pp_var_2.get())); 206 ASSERT_TRUE(dict_var_1->SetWithStringKey("key_2", dict_pp_var_2.get()));
182 ASSERT_TRUE(dict_var_1->SetWithStringKey("key_3", string_pp_var.get())); 207 ASSERT_TRUE(dict_var_1->SetWithStringKey("key_3", string_pp_var.get()));
183 ASSERT_TRUE(dict_var_2->SetWithStringKey("key_4", string_pp_var.get())); 208 ASSERT_TRUE(dict_var_2->SetWithStringKey("key_4", string_pp_var.get()));
184 209
185 scoped_ptr<base::Value> value(CreateValueFromVar(dict_pp_var_1.get())); 210 scoped_ptr<base::Value> value(CreateValueFromVar(dict_pp_var_1.get()));
186 ASSERT_TRUE(value.get()); 211 ASSERT_TRUE(value.get());
187 ASSERT_TRUE(Equals(*value, dict_pp_var_1.get())); 212 ASSERT_TRUE(Equals(*value, dict_pp_var_1.get()));
188 } 213 }
189 214
190 { 215 {
216 // Test basic cases for array.
217 scoped_refptr<ArrayVar> array_var(new ArrayVar());
218 ScopedPPVar var(ScopedPPVar::PassRef(), array_var->GetPPVar());
219
220 scoped_ptr<base::Value> value(CreateValueFromVar(var.get()));
221 ASSERT_TRUE(value.get());
222 ASSERT_TRUE(Equals(*value, var.get()));
223
224 ASSERT_TRUE(array_var->Set(0, PP_MakeDouble(1)));
225 value.reset(CreateValueFromVar(var.get()));
226 ASSERT_TRUE(value.get());
227 ASSERT_TRUE(Equals(*value, var.get()));
228 }
229
230 {
191 // Test more complex inputs. 231 // Test more complex inputs.
192 scoped_refptr<DictionaryVar> dict_var_1(new DictionaryVar()); 232 scoped_refptr<DictionaryVar> dict_var_1(new DictionaryVar());
193 ScopedPPVar dict_pp_var_1(ScopedPPVar::PassRef(), dict_var_1->GetPPVar()); 233 ScopedPPVar dict_pp_var_1(ScopedPPVar::PassRef(), dict_var_1->GetPPVar());
194 scoped_refptr<DictionaryVar> dict_var_2(new DictionaryVar()); 234 scoped_refptr<DictionaryVar> dict_var_2(new DictionaryVar());
195 ScopedPPVar dict_pp_var_2(ScopedPPVar::PassRef(), dict_var_2->GetPPVar()); 235 ScopedPPVar dict_pp_var_2(ScopedPPVar::PassRef(), dict_var_2->GetPPVar());
236 scoped_refptr<ArrayVar> array_var(new ArrayVar());
237 ScopedPPVar array_pp_var(ScopedPPVar::PassRef(), array_var->GetPPVar());
196 scoped_refptr<StringVar> string_var(new StringVar("string_value")); 238 scoped_refptr<StringVar> string_var(new StringVar("string_value"));
197 ScopedPPVar string_pp_var(ScopedPPVar::PassRef(), string_var->GetPPVar()); 239 ScopedPPVar string_pp_var(ScopedPPVar::PassRef(), string_var->GetPPVar());
198 240
199 ASSERT_TRUE(dict_var_1->SetWithStringKey("null_key", PP_MakeNull())); 241 ASSERT_TRUE(dict_var_1->SetWithStringKey("null_key", PP_MakeNull()));
200 ASSERT_TRUE(dict_var_1->SetWithStringKey("string_key", 242 ASSERT_TRUE(dict_var_1->SetWithStringKey("string_key",
201 string_pp_var.get())); 243 string_pp_var.get()));
202 ASSERT_TRUE(dict_var_1->SetWithStringKey("dict_key", dict_pp_var_2.get())); 244 ASSERT_TRUE(dict_var_1->SetWithStringKey("dict_key", dict_pp_var_2.get()));
203 245
204 ASSERT_TRUE(dict_var_2->SetWithStringKey("undefined_key", 246 ASSERT_TRUE(dict_var_2->SetWithStringKey("undefined_key",
205 PP_MakeUndefined())); 247 PP_MakeUndefined()));
206 ASSERT_TRUE(dict_var_2->SetWithStringKey("double_key", PP_MakeDouble(1))); 248 ASSERT_TRUE(dict_var_2->SetWithStringKey("double_key", PP_MakeDouble(1)));
207 ASSERT_TRUE(dict_var_2->SetWithStringKey("int_key", PP_MakeInt32(2))); 249 ASSERT_TRUE(dict_var_2->SetWithStringKey("array_key", array_pp_var.get()));
208 ASSERT_TRUE(dict_var_2->SetWithStringKey("bool_key", PP_MakeBool(PP_TRUE))); 250
251 ASSERT_TRUE(array_var->Set(0, PP_MakeInt32(2)));
252 ASSERT_TRUE(array_var->Set(1, PP_MakeBool(PP_TRUE)));
253 ASSERT_TRUE(array_var->SetLength(4));
209 254
210 scoped_ptr<base::Value> value(CreateValueFromVar(dict_pp_var_1.get())); 255 scoped_ptr<base::Value> value(CreateValueFromVar(dict_pp_var_1.get()));
211 ASSERT_TRUE(value.get()); 256 ASSERT_TRUE(value.get());
212 ASSERT_TRUE(Equals(*value, dict_pp_var_1.get())); 257 ASSERT_TRUE(Equals(*value, dict_pp_var_1.get()));
213 } 258 }
214 259
215 { 260 {
216 // Test that dictionary keys containing '.' are handled correctly. 261 // Test that dictionary keys containing '.' are handled correctly.
217 scoped_refptr<DictionaryVar> dict_var(new DictionaryVar()); 262 scoped_refptr<DictionaryVar> dict_var(new DictionaryVar());
218 ScopedPPVar dict_pp_var(ScopedPPVar::PassRef(), dict_var->GetPPVar()); 263 ScopedPPVar dict_pp_var(ScopedPPVar::PassRef(), dict_var->GetPPVar());
219 264
220 ASSERT_TRUE(dict_var->SetWithStringKey("double.key", PP_MakeDouble(1))); 265 ASSERT_TRUE(dict_var->SetWithStringKey("double.key", PP_MakeDouble(1)));
221 ASSERT_TRUE(dict_var->SetWithStringKey("int.key..name", PP_MakeInt32(2))); 266 ASSERT_TRUE(dict_var->SetWithStringKey("int.key..name", PP_MakeInt32(2)));
222 267
223 scoped_ptr<base::Value> value(CreateValueFromVar(dict_pp_var.get())); 268 scoped_ptr<base::Value> value(CreateValueFromVar(dict_pp_var.get()));
224 ASSERT_TRUE(value.get()); 269 ASSERT_TRUE(value.get());
225 ASSERT_TRUE(Equals(*value, dict_pp_var.get())); 270 ASSERT_TRUE(Equals(*value, dict_pp_var.get()));
226 } 271 }
227 } 272 }
228 273
229 TEST_F(VarValueConversionsTest, CreateVarFromValue) { 274 TEST_F(VarValueConversionsTest, CreateVarFromValue) {
230 base::DictionaryValue dict_value; 275 {
231 dict_value.Set("null_key", base::Value::CreateNullValue()); 276 // Test basic cases for dictionary.
232 dict_value.SetString("string_key", "string_value"); 277 base::DictionaryValue dict_value;
233 dict_value.SetDouble("dict_key.double_key", 1); 278 ScopedPPVar var(ScopedPPVar::PassRef(), CreateVarFromValue(dict_value));
234 dict_value.SetInteger("dict_key.int_key", 2); 279 ASSERT_TRUE(Equals(dict_value, var.get()));
235 dict_value.SetBoolean("dict_key.bool_key", true);
236 280
237 ScopedPPVar var(ScopedPPVar::PassRef(), CreateVarFromValue(dict_value)); 281 dict_value.SetInteger("int_key", 1);
238 ASSERT_TRUE(Equals(dict_value, var.get())); 282 var = ScopedPPVar(ScopedPPVar::PassRef(), CreateVarFromValue(dict_value));
283 ASSERT_TRUE(Equals(dict_value, var.get()));
284 }
285
286 {
287 // Test basic cases for array.
288 base::ListValue list_value;
289 ScopedPPVar var(ScopedPPVar::PassRef(), CreateVarFromValue(list_value));
290 ASSERT_TRUE(Equals(list_value, var.get()));
291
292 list_value.AppendInteger(1);
293 var = ScopedPPVar(ScopedPPVar::PassRef(), CreateVarFromValue(list_value));
294 ASSERT_TRUE(Equals(list_value, var.get()));
295 }
296
297 {
298 // Test more complex inputs.
299 base::DictionaryValue dict_value;
300 dict_value.Set("null_key", base::Value::CreateNullValue());
301 dict_value.SetString("string_key", "string_value");
302 dict_value.SetDouble("dict_key.double_key", 1);
303
304 scoped_ptr<base::ListValue> list_value(new base::ListValue());
305 list_value->AppendInteger(2);
306 list_value->AppendBoolean(true);
307 list_value->Append(base::Value::CreateNullValue());
308
309 dict_value.Set("dict_key.array_key", list_value.release());
310
311 ScopedPPVar var(ScopedPPVar::PassRef(), CreateVarFromValue(dict_value));
312 ASSERT_TRUE(Equals(dict_value, var.get()));
313 }
239 } 314 }
240 315
241 } // namespace ppapi 316 } // namespace ppapi
OLDNEW
« no previous file with comments | « ppapi/shared_impl/var_value_conversions.cc ('k') | ppapi/tests/all_c_includes.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698