Chromium Code Reviews| Index: ppapi/shared_impl/var_value_conversions_unittest.cc |
| diff --git a/ppapi/shared_impl/var_value_conversions_unittest.cc b/ppapi/shared_impl/var_value_conversions_unittest.cc |
| index ad04d5691ef2218e85489189b8b24b6f6560a3a2..e4021274c83090006ff47daaadd2163fd5b538a4 100644 |
| --- a/ppapi/shared_impl/var_value_conversions_unittest.cc |
| +++ b/ppapi/shared_impl/var_value_conversions_unittest.cc |
| @@ -13,6 +13,7 @@ |
| #include "base/values.h" |
| #include "ppapi/c/pp_bool.h" |
| #include "ppapi/c/pp_var.h" |
| +#include "ppapi/shared_impl/array_var.h" |
| #include "ppapi/shared_impl/dictionary_var.h" |
| #include "ppapi/shared_impl/proxy_lock.h" |
| #include "ppapi/shared_impl/scoped_pp_var.h" |
| @@ -85,8 +86,22 @@ bool Equals(const base::Value& value, const PP_Var& var) { |
| return true; |
| } |
| case base::Value::TYPE_LIST: { |
| - // TODO(yzshen): add support once array var is supported. |
| - return false; |
| + const base::ListValue& list_value = |
| + static_cast<const base::ListValue&>(value); |
| + ArrayVar* array_var = ArrayVar::FromPPVar(var); |
| + if (!array_var || list_value.GetSize() != array_var->elements().size()) |
| + return false; |
| + |
| + base::ListValue::const_iterator value_iter = list_value.begin(); |
| + ArrayVar::ElementVector::const_iterator var_iter = |
| + array_var->elements().begin(); |
| + for (; value_iter != list_value.end() && |
| + var_iter != array_var->elements().end(); |
|
raymes
2013/03/05 18:19:16
indentation here looks wrong
yzshen1
2013/03/14 22:36:48
It is 4 spaces further than "value_iter != list_va
|
| + ++value_iter, ++var_iter) { |
| + if (!Equals(**value_iter, var_iter->get())) |
| + return false; |
| + } |
| + return true; |
| } |
| } |
| NOTREACHED(); |
| @@ -128,22 +143,22 @@ TEST_F(VarValueConversionsTest, CreateValueFromVar) { |
| { |
| // Var holding a ref to itself is not a valid input. |
| - scoped_refptr<DictionaryVar> dict_var_1(new DictionaryVar()); |
| - ScopedPPVar var_1(ScopedPPVar::PassRef(), dict_var_1->GetPPVar()); |
| - scoped_refptr<DictionaryVar> dict_var_2(new DictionaryVar()); |
| - ScopedPPVar var_2(ScopedPPVar::PassRef(), dict_var_2->GetPPVar()); |
| + scoped_refptr<DictionaryVar> dict_var(new DictionaryVar()); |
| + ScopedPPVar var_1(ScopedPPVar::PassRef(), dict_var->GetPPVar()); |
| + scoped_refptr<ArrayVar> array_var(new ArrayVar()); |
| + ScopedPPVar var_2(ScopedPPVar::PassRef(), array_var->GetPPVar()); |
| - ASSERT_TRUE(dict_var_1->SetWithStringKey("key_1", var_2.get())); |
| + ASSERT_TRUE(dict_var->SetWithStringKey("key_1", var_2.get())); |
| scoped_ptr<base::Value> value(CreateValueFromVar(var_1.get())); |
| - ASSERT_TRUE(value.get() != NULL); |
| + ASSERT_TRUE(value.get()); |
| - ASSERT_TRUE(dict_var_2->SetWithStringKey("key_2", var_1.get())); |
| + ASSERT_TRUE(array_var->Set(0, var_1.get())); |
| value.reset(CreateValueFromVar(var_1.get())); |
| ASSERT_EQ(NULL, value.get()); |
| // Make sure |var_1| doesn't indirectly hold a ref to itself, otherwise it |
| // is leaked. |
| - dict_var_1->DeleteWithStringKey("key_1"); |
| + dict_var->DeleteWithStringKey("key_1"); |
| } |
| { |
| @@ -152,6 +167,8 @@ TEST_F(VarValueConversionsTest, CreateValueFromVar) { |
| ScopedPPVar dict_pp_var_1(ScopedPPVar::PassRef(), dict_var_1->GetPPVar()); |
| scoped_refptr<DictionaryVar> dict_var_2(new DictionaryVar()); |
| ScopedPPVar dict_pp_var_2(ScopedPPVar::PassRef(), dict_var_2->GetPPVar()); |
| + scoped_refptr<ArrayVar> array_var(new ArrayVar()); |
| + ScopedPPVar array_pp_var(ScopedPPVar::PassRef(), array_var->GetPPVar()); |
| scoped_refptr<StringVar> string_var(new StringVar("string_value")); |
| ScopedPPVar string_pp_var(ScopedPPVar::PassRef(), string_var->GetPPVar()); |
| @@ -161,11 +178,13 @@ TEST_F(VarValueConversionsTest, CreateValueFromVar) { |
| ASSERT_TRUE(dict_var_1->SetWithStringKey("dict_key", dict_pp_var_2.get())); |
| ASSERT_TRUE(dict_var_2->SetWithStringKey("double_key", PP_MakeDouble(1))); |
| - ASSERT_TRUE(dict_var_2->SetWithStringKey("int_key", PP_MakeInt32(2))); |
| - ASSERT_TRUE(dict_var_2->SetWithStringKey("bool_key", PP_MakeBool(PP_TRUE))); |
| + ASSERT_TRUE(dict_var_2->SetWithStringKey("array_key", array_pp_var.get())); |
| + |
| + ASSERT_TRUE(array_var->Set(0, PP_MakeInt32(2))); |
| + ASSERT_TRUE(array_var->Set(1, PP_MakeBool(PP_TRUE))); |
|
raymes
2013/03/05 18:19:16
Seems like we could have some more simple conversi
yzshen1
2013/03/14 22:36:48
Done.
|
| scoped_ptr<base::Value> value(CreateValueFromVar(dict_pp_var_1.get())); |
| - ASSERT_TRUE(value.get() != NULL); |
| + ASSERT_TRUE(value.get()); |
| ASSERT_TRUE(Equals(*value, dict_pp_var_1.get())); |
| } |
| @@ -178,7 +197,7 @@ TEST_F(VarValueConversionsTest, CreateValueFromVar) { |
| ASSERT_TRUE(dict_var->SetWithStringKey("int.key..name", PP_MakeInt32(2))); |
| scoped_ptr<base::Value> value(CreateValueFromVar(dict_pp_var.get())); |
| - ASSERT_TRUE(value.get() != NULL); |
| + ASSERT_TRUE(value.get()); |
| ASSERT_TRUE(Equals(*value, dict_pp_var.get())); |
| } |
| } |
| @@ -188,8 +207,12 @@ TEST_F(VarValueConversionsTest, CreateVarFromValue) { |
| dict_value.Set("null_key", base::Value::CreateNullValue()); |
| dict_value.SetString("string_key", "string_value"); |
| dict_value.SetDouble("dict_key.double_key", 1); |
| - dict_value.SetInteger("dict_key.int_key", 2); |
| - dict_value.SetBoolean("dict_key.bool_key", true); |
| + |
| + scoped_ptr<base::ListValue> list_value(new base::ListValue()); |
| + list_value->AppendInteger(2); |
| + list_value->AppendBoolean(true); |
| + |
| + dict_value.Set("dict_key.array_key", list_value.release()); |
| ScopedPPVar var(ScopedPPVar::PassRef(), CreateVarFromValue(dict_value)); |
| ASSERT_TRUE(Equals(dict_value, var.get())); |