| // Copyright 2012 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| |
| #include"dbus/values_util.h" |
| |
| #include<stddef.h> |
| #include<stdint.h> |
| |
| #include<array> |
| #include<cmath> |
| #include<memory> |
| #include<utility> |
| #include<vector> |
| |
| #include"base/json/json_writer.h" |
| #include"base/values.h" |
| #include"dbus/message.h" |
| #include"testing/gtest/include/gtest/gtest.h" |
| |
| namespace dbus{ |
| |
| TEST(ValuesUtilTest,PopBasicTypes){ |
| std::unique_ptr<Response> response(Response::CreateEmpty()); |
| // Append basic type values. |
| MessageWriter writer(response.get()); |
| constuint8_t kByteValue=42; |
| writer.AppendByte(kByteValue); |
| constbool kBoolValue=true; |
| writer.AppendBool(kBoolValue); |
| constint16_t kInt16Value=-43; |
| writer.AppendInt16(kInt16Value); |
| constuint16_t kUint16Value=44; |
| writer.AppendUint16(kUint16Value); |
| constint32_t kInt32Value=-45; |
| writer.AppendInt32(kInt32Value); |
| constuint32_t kUint32Value=46; |
| writer.AppendUint32(kUint32Value); |
| constint64_t kInt64Value=-47; |
| writer.AppendInt64(kInt64Value); |
| constuint64_t kUint64Value=48; |
| writer.AppendUint64(kUint64Value); |
| constdouble kDoubleValue=4.9; |
| writer.AppendDouble(kDoubleValue); |
| const std::string kStringValue="fifty"; |
| writer.AppendString(kStringValue); |
| const std::string kEmptyStringValue; |
| writer.AppendString(kEmptyStringValue); |
| constObjectPath kObjectPathValue("/ObjectPath"); |
| writer.AppendObjectPath(kObjectPathValue); |
| |
| MessageReader reader(response.get()); |
| base::Value value; |
| // Pop a byte. |
| value=PopDataAsValue(&reader); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, base::Value(kByteValue)); |
| // Pop a bool. |
| value=PopDataAsValue(&reader); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, base::Value(kBoolValue)); |
| // Pop an int16_t. |
| value=PopDataAsValue(&reader); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, base::Value(kInt16Value)); |
| // Pop a uint16_t. |
| value=PopDataAsValue(&reader); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, base::Value(kUint16Value)); |
| // Pop an int32_t. |
| value=PopDataAsValue(&reader); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, base::Value(kInt32Value)); |
| // Pop a uint32_t. |
| value=PopDataAsValue(&reader); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, base::Value(static_cast<double>(kUint32Value))); |
| // Pop an int64_t. |
| value=PopDataAsValue(&reader); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, base::Value(static_cast<double>(kInt64Value))); |
| // Pop a uint64_t. |
| value=PopDataAsValue(&reader); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, base::Value(static_cast<double>(kUint64Value))); |
| // Pop a double. |
| value=PopDataAsValue(&reader); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, base::Value(kDoubleValue)); |
| // Pop a string. |
| value=PopDataAsValue(&reader); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, base::Value(kStringValue)); |
| // Pop an empty string. |
| value=PopDataAsValue(&reader); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, base::Value(kEmptyStringValue)); |
| // Pop an object path. |
| value=PopDataAsValue(&reader); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, base::Value(kObjectPathValue.value())); |
| } |
| |
| TEST(ValuesUtilTest,PopVariant){ |
| std::unique_ptr<Response> response(Response::CreateEmpty()); |
| // Append variant values. |
| MessageWriter writer(response.get()); |
| constbool kBoolValue=true; |
| writer.AppendVariantOfBool(kBoolValue); |
| constint32_t kInt32Value=-45; |
| writer.AppendVariantOfInt32(kInt32Value); |
| constdouble kDoubleValue=4.9; |
| writer.AppendVariantOfDouble(kDoubleValue); |
| const std::string kStringValue="fifty"; |
| writer.AppendVariantOfString(kStringValue); |
| |
| MessageReader reader(response.get()); |
| base::Value value; |
| // Pop a bool. |
| value=PopDataAsValue(&reader); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, base::Value(kBoolValue)); |
| // Pop an int32_t. |
| value=PopDataAsValue(&reader); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, base::Value(kInt32Value)); |
| // Pop a double. |
| value=PopDataAsValue(&reader); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, base::Value(kDoubleValue)); |
| // Pop a string. |
| value=PopDataAsValue(&reader); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, base::Value(kStringValue)); |
| } |
| |
| // Pop extremely large integers which cannot be precisely represented in |
| // double. |
| TEST(ValuesUtilTest,PopExtremelyLargeIntegers){ |
| std::unique_ptr<Response> response(Response::CreateEmpty()); |
| // Append large integers. |
| MessageWriter writer(response.get()); |
| constint64_t kInt64Value=-123456789012345689LL; |
| writer.AppendInt64(kInt64Value); |
| constuint64_t kUint64Value=9876543210987654321ULL; |
| writer.AppendUint64(kUint64Value); |
| |
| MessageReader reader(response.get()); |
| base::Value value; |
| // Pop an int64_t. |
| value=PopDataAsValue(&reader); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, base::Value(static_cast<double>(kInt64Value))); |
| ASSERT_TRUE(value.is_double()); |
| EXPECT_NE(kInt64Value,static_cast<int64_t>(value.GetDouble())); |
| // Pop a uint64_t. |
| value=PopDataAsValue(&reader); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, base::Value(static_cast<double>(kUint64Value))); |
| ASSERT_TRUE(value.is_double()); |
| EXPECT_NE(kUint64Value,static_cast<uint64_t>(value.GetDouble())); |
| } |
| |
| TEST(ValuesUtilTest,PopIntArray){ |
| std::unique_ptr<Response> response(Response::CreateEmpty()); |
| // Append an int32_t array. |
| MessageWriter writer(response.get()); |
| MessageWriter sub_writer(nullptr); |
| std::vector<int32_t> data; |
| data.push_back(0); |
| data.push_back(1); |
| data.push_back(2); |
| writer.OpenArray("i",&sub_writer); |
| for(size_t i=0; i!= data.size();++i) |
| sub_writer.AppendInt32(data[i]); |
| writer.CloseContainer(&sub_writer); |
| |
| // Create the expected value. |
| base::Value::List list_value; |
| for(size_t i=0; i!= data.size();++i) |
| list_value.Append(data[i]); |
| |
| // Pop an int32_t array. |
| MessageReader reader(response.get()); |
| base::Value value(PopDataAsValue(&reader)); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, list_value); |
| } |
| |
| TEST(ValuesUtilTest,PopStringArray){ |
| std::unique_ptr<Response> response(Response::CreateEmpty()); |
| // Append a string array. |
| MessageWriter writer(response.get()); |
| MessageWriter sub_writer(nullptr); |
| std::vector<std::string> data; |
| data.push_back("Dreamlifter"); |
| data.push_back("Beluga"); |
| data.push_back("Mriya"); |
| writer.AppendArrayOfStrings(data); |
| |
| // Create the expected value. |
| base::Value::List list_value; |
| for(size_t i=0; i!= data.size();++i) |
| list_value.Append(data[i]); |
| |
| // Pop a string array. |
| MessageReader reader(response.get()); |
| base::Value value(PopDataAsValue(&reader)); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, list_value); |
| } |
| |
| TEST(ValuesUtilTest,PopStruct){ |
| std::unique_ptr<Response> response(Response::CreateEmpty()); |
| // Append a struct. |
| MessageWriter writer(response.get()); |
| MessageWriter sub_writer(nullptr); |
| writer.OpenStruct(&sub_writer); |
| constbool kBoolValue=true; |
| sub_writer.AppendBool(kBoolValue); |
| constint32_t kInt32Value=-123; |
| sub_writer.AppendInt32(kInt32Value); |
| constdouble kDoubleValue=1.23; |
| sub_writer.AppendDouble(kDoubleValue); |
| const std::string kStringValue="one two three"; |
| sub_writer.AppendString(kStringValue); |
| writer.CloseContainer(&sub_writer); |
| |
| // Create the expected value. |
| base::Value::List list_value; |
| list_value.Append(kBoolValue); |
| list_value.Append(kInt32Value); |
| list_value.Append(kDoubleValue); |
| list_value.Append(kStringValue); |
| |
| // Pop a struct. |
| MessageReader reader(response.get()); |
| base::Value value(PopDataAsValue(&reader)); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, list_value); |
| } |
| |
| TEST(ValuesUtilTest,PopStringToVariantDictionary){ |
| std::unique_ptr<Response> response(Response::CreateEmpty()); |
| // Append a dictionary. |
| MessageWriter writer(response.get()); |
| MessageWriter sub_writer(nullptr); |
| MessageWriter entry_writer(nullptr); |
| writer.OpenArray("{sv}",&sub_writer); |
| sub_writer.OpenDictEntry(&entry_writer); |
| const std::string kKey1="one"; |
| entry_writer.AppendString(kKey1); |
| constbool kBoolValue=true; |
| entry_writer.AppendVariantOfBool(kBoolValue); |
| sub_writer.CloseContainer(&entry_writer); |
| sub_writer.OpenDictEntry(&entry_writer); |
| const std::string kKey2="two"; |
| entry_writer.AppendString(kKey2); |
| constint32_t kInt32Value=-45; |
| entry_writer.AppendVariantOfInt32(kInt32Value); |
| sub_writer.CloseContainer(&entry_writer); |
| sub_writer.OpenDictEntry(&entry_writer); |
| const std::string kKey3="three"; |
| entry_writer.AppendString(kKey3); |
| constdouble kDoubleValue=4.9; |
| entry_writer.AppendVariantOfDouble(kDoubleValue); |
| sub_writer.CloseContainer(&entry_writer); |
| sub_writer.OpenDictEntry(&entry_writer); |
| const std::string kKey4="four"; |
| entry_writer.AppendString(kKey4); |
| const std::string kStringValue="fifty"; |
| entry_writer.AppendVariantOfString(kStringValue); |
| sub_writer.CloseContainer(&entry_writer); |
| writer.CloseContainer(&sub_writer); |
| |
| // Create the expected value. |
| base::Value::Dict dictionary_value; |
| dictionary_value.Set(kKey1, kBoolValue); |
| dictionary_value.Set(kKey2, kInt32Value); |
| dictionary_value.Set(kKey3, kDoubleValue); |
| dictionary_value.Set(kKey4, kStringValue); |
| |
| // Pop a dictinoary. |
| MessageReader reader(response.get()); |
| base::Value value(PopDataAsValue(&reader)); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, dictionary_value); |
| } |
| |
| TEST(ValuesUtilTest,PopDictionaryWithDottedStringKey){ |
| std::unique_ptr<Response> response(Response::CreateEmpty()); |
| // Append a dictionary. |
| MessageWriter writer(response.get()); |
| MessageWriter sub_writer(nullptr); |
| MessageWriter entry_writer(nullptr); |
| writer.OpenArray("{sv}",&sub_writer); |
| sub_writer.OpenDictEntry(&entry_writer); |
| const std::string kKey1="www.example.com";// String including dots. |
| entry_writer.AppendString(kKey1); |
| constbool kBoolValue=true; |
| entry_writer.AppendVariantOfBool(kBoolValue); |
| sub_writer.CloseContainer(&entry_writer); |
| sub_writer.OpenDictEntry(&entry_writer); |
| const std::string kKey2=".example";// String starting with a dot. |
| entry_writer.AppendString(kKey2); |
| constint32_t kInt32Value=-45; |
| entry_writer.AppendVariantOfInt32(kInt32Value); |
| sub_writer.CloseContainer(&entry_writer); |
| sub_writer.OpenDictEntry(&entry_writer); |
| const std::string kKey3="example.";// String ending with a dot. |
| entry_writer.AppendString(kKey3); |
| constdouble kDoubleValue=4.9; |
| entry_writer.AppendVariantOfDouble(kDoubleValue); |
| sub_writer.CloseContainer(&entry_writer); |
| writer.CloseContainer(&sub_writer); |
| |
| // Create the expected value. |
| base::Value::Dict dictionary_value; |
| dictionary_value.Set(kKey1, kBoolValue); |
| dictionary_value.Set(kKey2, kInt32Value); |
| dictionary_value.Set(kKey3, kDoubleValue); |
| |
| // Pop a dictinoary. |
| MessageReader reader(response.get()); |
| base::Value value(PopDataAsValue(&reader)); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, dictionary_value); |
| } |
| |
| TEST(ValuesUtilTest,PopDoubleToIntDictionary){ |
| // Create test data. |
| constauto kValues= std::to_array<int32_t>({0,1,1,2,3,5,8,13,21}); |
| const std::vector<int32_t> values( |
| kValues.data(), |
| base::span<constint32_t>(kValues).subspan(std::size(kValues)).data()); |
| std::vector<double> keys(values.size()); |
| for(size_t i=0; i!= values.size();++i) |
| keys[i]= std::sqrt(values[i]); |
| |
| // Append a dictionary. |
| std::unique_ptr<Response> response(Response::CreateEmpty()); |
| MessageWriter writer(response.get()); |
| MessageWriter sub_writer(nullptr); |
| writer.OpenArray("{di}",&sub_writer); |
| for(size_t i=0; i!= values.size();++i){ |
| MessageWriter entry_writer(nullptr); |
| sub_writer.OpenDictEntry(&entry_writer); |
| entry_writer.AppendDouble(keys[i]); |
| entry_writer.AppendInt32(values[i]); |
| sub_writer.CloseContainer(&entry_writer); |
| } |
| writer.CloseContainer(&sub_writer); |
| |
| // Create the expected value. |
| base::Value::Dict dictionary_value; |
| for(size_t i=0; i!= values.size();++i){ |
| std::string key_string; |
| base::JSONWriter::Write(base::Value(keys[i]),&key_string); |
| dictionary_value.Set(key_string, values[i]); |
| } |
| |
| // Pop a dictionary. |
| MessageReader reader(response.get()); |
| base::Value value(PopDataAsValue(&reader)); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, dictionary_value); |
| } |
| |
| TEST(ValuesUtilTest,AppendBasicTypes){ |
| const base::Value kBoolValue(false); |
| const base::Value kIntegerValue(42); |
| const base::Value kDoubleValue(4.2); |
| const base::Value kStringValue("string"); |
| |
| std::unique_ptr<Response> response(Response::CreateEmpty()); |
| MessageWriter writer(response.get()); |
| AppendBasicTypeValueData(&writer, kBoolValue); |
| AppendBasicTypeValueData(&writer, kIntegerValue); |
| AppendBasicTypeValueData(&writer, kDoubleValue); |
| AppendBasicTypeValueData(&writer, kStringValue); |
| |
| MessageReader reader(response.get()); |
| base::Value value; |
| value=PopDataAsValue(&reader); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, kBoolValue); |
| value=PopDataAsValue(&reader); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, kIntegerValue); |
| value=PopDataAsValue(&reader); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, kDoubleValue); |
| value=PopDataAsValue(&reader); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, kStringValue); |
| } |
| |
| TEST(ValuesUtilTest,AppendBasicTypesAsVariant){ |
| const base::Value kBoolValue(false); |
| const base::Value kIntegerValue(42); |
| const base::Value kDoubleValue(4.2); |
| const base::Value kStringValue("string"); |
| |
| std::unique_ptr<Response> response(Response::CreateEmpty()); |
| MessageWriter writer(response.get()); |
| AppendBasicTypeValueDataAsVariant(&writer, kBoolValue); |
| AppendBasicTypeValueDataAsVariant(&writer, kIntegerValue); |
| AppendBasicTypeValueDataAsVariant(&writer, kDoubleValue); |
| AppendBasicTypeValueDataAsVariant(&writer, kStringValue); |
| |
| MessageReader reader(response.get()); |
| base::Value value; |
| value=PopDataAsValue(&reader); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, kBoolValue); |
| value=PopDataAsValue(&reader); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, kIntegerValue); |
| value=PopDataAsValue(&reader); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, kDoubleValue); |
| value=PopDataAsValue(&reader); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, kStringValue); |
| } |
| |
| TEST(ValuesUtilTest,AppendValueDataBasicTypes){ |
| const base::Value kBoolValue(false); |
| const base::Value kIntegerValue(42); |
| const base::Value kDoubleValue(4.2); |
| const base::Value kStringValue("string"); |
| |
| std::unique_ptr<Response> response(Response::CreateEmpty()); |
| MessageWriter writer(response.get()); |
| AppendValueData(&writer, kBoolValue); |
| AppendValueData(&writer, kIntegerValue); |
| AppendValueData(&writer, kDoubleValue); |
| AppendValueData(&writer, kStringValue); |
| |
| MessageReader reader(response.get()); |
| base::Value value; |
| value=PopDataAsValue(&reader); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, kBoolValue); |
| value=PopDataAsValue(&reader); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, kIntegerValue); |
| value=PopDataAsValue(&reader); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, kDoubleValue); |
| value=PopDataAsValue(&reader); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, kStringValue); |
| } |
| |
| TEST(ValuesUtilTest,AppendValueDataAsVariantBasicTypes){ |
| const base::Value kBoolValue(false); |
| const base::Value kIntegerValue(42); |
| const base::Value kDoubleValue(4.2); |
| const base::Value kStringValue("string"); |
| |
| std::unique_ptr<Response> response(Response::CreateEmpty()); |
| MessageWriter writer(response.get()); |
| AppendValueDataAsVariant(&writer, kBoolValue); |
| AppendValueDataAsVariant(&writer, kIntegerValue); |
| AppendValueDataAsVariant(&writer, kDoubleValue); |
| AppendValueDataAsVariant(&writer, kStringValue); |
| |
| MessageReader reader(response.get()); |
| base::Value value; |
| value=PopDataAsValue(&reader); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, kBoolValue); |
| value=PopDataAsValue(&reader); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, kIntegerValue); |
| value=PopDataAsValue(&reader); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, kDoubleValue); |
| value=PopDataAsValue(&reader); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, kStringValue); |
| } |
| |
| TEST(ValuesUtilTest,AppendDictionary){ |
| // Set up the input dictionary. |
| const std::string kKey1="one"; |
| const std::string kKey2="two"; |
| const std::string kKey3="three"; |
| const std::string kKey4="four"; |
| const std::string kKey5="five"; |
| const std::string kKey6="six"; |
| |
| constbool kBoolValue=true; |
| constint32_t kInt32Value=-45; |
| constdouble kDoubleValue=4.9; |
| const std::string kStringValue="fifty"; |
| |
| base::Value::List list_value; |
| list_value.Append(kBoolValue); |
| list_value.Append(kInt32Value); |
| |
| base::Value::Dict dictionary_value; |
| dictionary_value.Set(kKey1, kBoolValue); |
| dictionary_value.Set(kKey2, kDoubleValue); |
| |
| base::Value::Dict test_dictionary; |
| test_dictionary.Set(kKey1, kBoolValue); |
| test_dictionary.Set(kKey2, kInt32Value); |
| test_dictionary.Set(kKey3, kDoubleValue); |
| test_dictionary.Set(kKey4, kStringValue); |
| test_dictionary.Set(kKey5, std::move(list_value)); |
| test_dictionary.Set(kKey6, std::move(dictionary_value)); |
| |
| std::unique_ptr<Response> response(Response::CreateEmpty()); |
| MessageWriter writer(response.get()); |
| AppendValueData(&writer, test_dictionary); |
| base::Value int_value(kInt32Value); |
| AppendValueData(&writer, int_value); |
| |
| // Read the data. |
| MessageReader reader(response.get()); |
| base::Value value; |
| value=PopDataAsValue(&reader); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, test_dictionary); |
| value=PopDataAsValue(&reader); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, int_value); |
| } |
| |
| TEST(ValuesUtilTest,AppendDictionaryAsVariant){ |
| // Set up the input dictionary. |
| const std::string kKey1="one"; |
| const std::string kKey2="two"; |
| const std::string kKey3="three"; |
| const std::string kKey4="four"; |
| const std::string kKey5="five"; |
| const std::string kKey6="six"; |
| |
| constbool kBoolValue=true; |
| constint32_t kInt32Value=-45; |
| constdouble kDoubleValue=4.9; |
| const std::string kStringValue="fifty"; |
| |
| base::Value::List list_value; |
| list_value.Append(kBoolValue); |
| list_value.Append(kInt32Value); |
| |
| base::Value::Dict dictionary_value; |
| dictionary_value.Set(kKey1, kBoolValue); |
| dictionary_value.Set(kKey2, kDoubleValue); |
| |
| base::Value::Dict test_dictionary; |
| test_dictionary.Set(kKey1, kBoolValue); |
| test_dictionary.Set(kKey2, kInt32Value); |
| test_dictionary.Set(kKey3, kDoubleValue); |
| test_dictionary.Set(kKey4, kStringValue); |
| test_dictionary.Set(kKey5, std::move(list_value)); |
| test_dictionary.Set(kKey6, std::move(dictionary_value)); |
| |
| std::unique_ptr<Response> response(Response::CreateEmpty()); |
| MessageWriter writer(response.get()); |
| AppendValueDataAsVariant(&writer, test_dictionary); |
| base::Value int_value(kInt32Value); |
| AppendValueData(&writer, int_value); |
| |
| // Read the data. |
| MessageReader reader(response.get()); |
| base::Value value; |
| value=PopDataAsValue(&reader); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, test_dictionary); |
| value=PopDataAsValue(&reader); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, int_value); |
| } |
| |
| TEST(ValuesUtilTest,AppendList){ |
| // Set up the input list. |
| const std::string kKey1="one"; |
| const std::string kKey2="two"; |
| |
| constbool kBoolValue=true; |
| constint32_t kInt32Value=-45; |
| constdouble kDoubleValue=4.9; |
| const std::string kStringValue="fifty"; |
| |
| base::Value::List list_value; |
| list_value.Append(kBoolValue); |
| list_value.Append(kInt32Value); |
| |
| base::Value::Dict dictionary_value; |
| dictionary_value.Set(kKey1, kBoolValue); |
| dictionary_value.Set(kKey2, kDoubleValue); |
| |
| base::Value::List test_list; |
| test_list.Append(kBoolValue); |
| test_list.Append(kInt32Value); |
| test_list.Append(kDoubleValue); |
| test_list.Append(kStringValue); |
| test_list.Append(std::move(list_value)); |
| test_list.Append(std::move(dictionary_value)); |
| |
| std::unique_ptr<Response> response(Response::CreateEmpty()); |
| MessageWriter writer(response.get()); |
| AppendValueData(&writer, test_list); |
| base::Value int_value(kInt32Value); |
| AppendValueData(&writer, int_value); |
| |
| // Read the data. |
| MessageReader reader(response.get()); |
| base::Value value; |
| value=PopDataAsValue(&reader); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, test_list); |
| value=PopDataAsValue(&reader); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, int_value); |
| } |
| |
| TEST(ValuesUtilTest,AppendListAsVariant){ |
| // Set up the input list. |
| const std::string kKey1="one"; |
| const std::string kKey2="two"; |
| |
| constbool kBoolValue=true; |
| constint32_t kInt32Value=-45; |
| constdouble kDoubleValue=4.9; |
| const std::string kStringValue="fifty"; |
| |
| base::Value::List list_value; |
| list_value.Append(kBoolValue); |
| list_value.Append(kInt32Value); |
| |
| base::Value::Dict dictionary_value; |
| dictionary_value.Set(kKey1, kBoolValue); |
| dictionary_value.Set(kKey2, kDoubleValue); |
| |
| base::Value::List test_list; |
| test_list.Append(kBoolValue); |
| test_list.Append(kInt32Value); |
| test_list.Append(kDoubleValue); |
| test_list.Append(kStringValue); |
| test_list.Append(std::move(list_value)); |
| test_list.Append(std::move(dictionary_value)); |
| |
| std::unique_ptr<Response> response(Response::CreateEmpty()); |
| MessageWriter writer(response.get()); |
| AppendValueDataAsVariant(&writer, test_list); |
| base::Value int_value(kInt32Value); |
| AppendValueData(&writer, int_value); |
| |
| // Read the data. |
| MessageReader reader(response.get()); |
| base::Value value; |
| value=PopDataAsValue(&reader); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, test_list); |
| value=PopDataAsValue(&reader); |
| ASSERT_FALSE(value.is_none()); |
| EXPECT_EQ(value, int_value); |
| } |
| |
| }// namespace dbus |