| // Copyright 2010-2015, Google Inc. |
| // All rights reserved. |
| // |
| // Redistribution and use in source and binary forms, with or without |
| // modification, are permitted provided that the following conditions are |
| // met: |
| // |
| // * Redistributions of source code must retain the above copyright |
| // notice, this list of conditions and the following disclaimer. |
| // * Redistributions in binary form must reproduce the above |
| // copyright notice, this list of conditions and the following disclaimer |
| // in the documentation and/or other materials provided with the |
| // distribution. |
| // * Neither the name of Google Inc. nor the names of its |
| // contributors may be used to endorse or promote products derived from |
| // this software without specific prior written permission. |
| // |
| // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
| // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| |
| #include "net/json_util.h" |
| |
| #include <string> |
| #include <vector> |
| |
| #include "base/port.h" |
| #include "base/util.h" |
| #include "net/json_util_test.pb.h" |
| #include "net/jsoncpp.h" |
| #include "testing/base/public/gunit.h" |
| #include "testing/base/public/testing_util.h" |
| |
| namespace mozc { |
| namespace net { |
| namespace { |
| const char * const kDefaultJsonString = |
| "{" |
| " \"repeated_double_value\": []," |
| " \"repeated_float_value\": []," |
| " \"repeated_int32_value\": []," |
| " \"repeated_int64_value\": []," |
| " \"repeated_uint32_value\": []," |
| " \"repeated_uint64_value\": []," |
| " \"repeated_sint32_value\": []," |
| " \"repeated_sint64_value\": []," |
| " \"repeated_fixed32_value\": []," |
| " \"repeated_fixed64_value\": []," |
| " \"repeated_sfixed32_value\": []," |
| " \"repeated_sfixed64_value\": []," |
| " \"repeated_bool_value\": []," |
| " \"repeated_string_value\": []," |
| " \"repeated_bytes_value\": []," |
| " \"repeated_enum_value\": []," |
| " \"repeated_innerenum_value\": []," |
| " \"required_double_value\": 201.0," |
| " \"required_float_value\": 202.0," |
| " \"required_int32_value\": 203," |
| " \"required_int64_value\": \"204\"," |
| " \"required_uint32_value\": 205," |
| " \"required_uint64_value\": \"206\"," |
| " \"required_sint32_value\": 207," |
| " \"required_sint64_value\": \"208\"," |
| " \"required_fixed32_value\": 209," |
| " \"required_fixed64_value\": \"210\"," |
| " \"required_sfixed32_value\": 211," |
| " \"required_sfixed64_value\": \"212\"," |
| " \"required_bool_value\": true," |
| " \"required_string_value\": \"TEST\"," |
| " \"required_bytes_value\": \"TEST\"," |
| " \"required_enum_value\": \"ENUM_C\"," |
| " \"required_innerenum_value\": \"ENUM_2\"," |
| " \"repeated_sub_message\": []," |
| " \"required_sub_message\": {" |
| " \"repeated_double_value\": []," |
| " \"repeated_float_value\": []," |
| " \"repeated_int32_value\": []," |
| " \"repeated_int64_value\": []," |
| " \"repeated_uint32_value\": []," |
| " \"repeated_uint64_value\": []," |
| " \"repeated_sint32_value\": []," |
| " \"repeated_sint64_value\": []," |
| " \"repeated_fixed32_value\": []," |
| " \"repeated_fixed64_value\": []," |
| " \"repeated_sfixed32_value\": []," |
| " \"repeated_sfixed64_value\": []," |
| " \"repeated_bool_value\": []," |
| " \"repeated_string_value\": []," |
| " \"repeated_bytes_value\": []," |
| " \"repeated_enum_value\": []," |
| " \"required_double_value\": 201.0," |
| " \"required_float_value\": 202.0," |
| " \"required_int32_value\": 203," |
| " \"required_int64_value\": \"204\"," |
| " \"required_uint32_value\": 205," |
| " \"required_uint64_value\": \"206\"," |
| " \"required_sint32_value\": 207," |
| " \"required_sint64_value\": \"208\"," |
| " \"required_fixed32_value\": 209," |
| " \"required_fixed64_value\": \"210\"," |
| " \"required_sfixed32_value\": 211," |
| " \"required_sfixed64_value\": \"212\"," |
| " \"required_bool_value\": true," |
| " \"required_string_value\": \"TEST\"," |
| " \"required_bytes_value\": \"TEST\"," |
| " \"required_enum_value\": \"ENUM_C\"," |
| " }" |
| "}"; |
| const char * const kDefaultSubMessageJsonString = |
| "{" |
| " \"repeated_double_value\": []," |
| " \"repeated_float_value\": []," |
| " \"repeated_int32_value\": []," |
| " \"repeated_int64_value\": []," |
| " \"repeated_uint32_value\": []," |
| " \"repeated_uint64_value\": []," |
| " \"repeated_sint32_value\": []," |
| " \"repeated_sint64_value\": []," |
| " \"repeated_fixed32_value\": []," |
| " \"repeated_fixed64_value\": []," |
| " \"repeated_sfixed32_value\": []," |
| " \"repeated_sfixed64_value\": []," |
| " \"repeated_bool_value\": []," |
| " \"repeated_string_value\": []," |
| " \"repeated_bytes_value\": []," |
| " \"repeated_enum_value\": []," |
| " \"required_double_value\": 201.0," |
| " \"required_float_value\": 202.0," |
| " \"required_int32_value\": 203," |
| " \"required_int64_value\": \"204\"," |
| " \"required_uint32_value\": 205," |
| " \"required_uint64_value\": \"206\"," |
| " \"required_sint32_value\": 207," |
| " \"required_sint64_value\": \"208\"," |
| " \"required_fixed32_value\": 209," |
| " \"required_fixed64_value\": \"210\"," |
| " \"required_sfixed32_value\": 211," |
| " \"required_sfixed64_value\": \"212\"," |
| " \"required_bool_value\": true," |
| " \"required_string_value\": \"TEST\"," |
| " \"required_bytes_value\": \"TEST\"," |
| " \"required_enum_value\": \"ENUM_C\"," |
| "}"; |
| |
| Json::Value GetDefaultExpectedValue() { |
| Json::Value expected_value(Json::objectValue); |
| Json::Reader().parse(kDefaultJsonString, expected_value); |
| return expected_value; |
| } |
| |
| Json::Value GetDefaultSubMessageExpectedValue() { |
| Json::Value expected_value(Json::objectValue); |
| Json::Reader().parse(kDefaultSubMessageJsonString, expected_value); |
| return expected_value; |
| } |
| |
| void FillRequiredFields(protobuf::Message *message) { |
| const protobuf::Descriptor *descriptor = message->GetDescriptor(); |
| const protobuf::Reflection *reflection = message->GetReflection(); |
| const int field_count = descriptor->field_count(); |
| for (size_t i = 0; i < field_count; ++i) { |
| const protobuf::FieldDescriptor *field = descriptor->field(i); |
| if (field->is_repeated()) { |
| const int count = reflection->FieldSize(*message, field); |
| if (field->cpp_type() == protobuf::FieldDescriptor::CPPTYPE_MESSAGE) { |
| for (int j = 0; j < count; ++j) { |
| FillRequiredFields( |
| reflection->MutableRepeatedMessage(message, field, j)); |
| } |
| } |
| } else if (reflection->HasField(*message, field)) { |
| if (field->cpp_type() == protobuf::FieldDescriptor::CPPTYPE_MESSAGE) { |
| FillRequiredFields(reflection->MutableMessage(message, field, NULL)); |
| } |
| } else if (field->is_required()) { |
| switch (field->cpp_type()) { |
| case protobuf::FieldDescriptor::CPPTYPE_INT32: { |
| reflection->SetInt32(message, field, field->default_value_int32()); |
| break; |
| } |
| case protobuf::FieldDescriptor::CPPTYPE_INT64: { |
| reflection->SetInt64(message, field, field->default_value_int64()); |
| break; |
| } |
| case protobuf::FieldDescriptor::CPPTYPE_UINT32: { |
| reflection->SetUInt32(message, field, field->default_value_uint32()); |
| break; |
| } |
| case protobuf::FieldDescriptor::CPPTYPE_UINT64: { |
| reflection->SetUInt64(message, field, field->default_value_uint64()); |
| break; |
| } |
| case protobuf::FieldDescriptor::CPPTYPE_DOUBLE: { |
| reflection->SetDouble(message, field, field->default_value_double()); |
| break; |
| } |
| case protobuf::FieldDescriptor::CPPTYPE_FLOAT: { |
| reflection->SetFloat(message, field, field->default_value_float()); |
| break; |
| } |
| case protobuf::FieldDescriptor::CPPTYPE_BOOL: { |
| reflection->SetBool(message, field, field->default_value_bool()); |
| break; |
| } |
| case protobuf::FieldDescriptor::CPPTYPE_ENUM: { |
| reflection->SetEnum(message, field, field->default_value_enum()); |
| break; |
| } |
| case protobuf::FieldDescriptor::CPPTYPE_STRING: { |
| reflection->SetString(message, field, field->default_value_string()); |
| break; |
| } |
| case protobuf::FieldDescriptor::CPPTYPE_MESSAGE: { |
| FillRequiredFields(reflection->MutableMessage(message, field, NULL)); |
| break; |
| } |
| default: { |
| DLOG(ERROR) << "Unknown or unsupported type: " << field->cpp_type(); |
| return; |
| } |
| } |
| } |
| } |
| } |
| |
| } // namespace |
| |
| TEST(JsonUtilTest, EmptyTest) { |
| TestMsg msg; |
| Json::Value json_value; |
| EXPECT_TRUE(JsonUtil::ProtobufMessageToJsonValue(msg, &json_value)); |
| Json::Value expected_value = GetDefaultExpectedValue(); |
| EXPECT_EQ(Json::FastWriter().write(expected_value), |
| Json::FastWriter().write(json_value)); |
| TestMsg new_msg; |
| FillRequiredFields(&msg); |
| EXPECT_TRUE(JsonUtil::JsonValueToProtobufMessage(json_value, &new_msg)); |
| EXPECT_PROTO_EQ(msg, new_msg); |
| } |
| |
| |
| TEST(JsonUtilTest, ConvertItemTest) { |
| #define TEST_CONVERT_ITEM(proto_setter, proto_value, json_name, json_value) \ |
| { \ |
| TestMsg msg; \ |
| msg.proto_setter(proto_value); \ |
| Json::Value value; \ |
| EXPECT_TRUE(JsonUtil::ProtobufMessageToJsonValue(msg, &value)); \ |
| Json::Value expected_value = GetDefaultExpectedValue(); \ |
| expected_value[json_name] = json_value; \ |
| EXPECT_EQ(Json::FastWriter().write(expected_value), \ |
| Json::FastWriter().write(value)); \ |
| TestMsg new_msg; \ |
| EXPECT_TRUE(JsonUtil::JsonValueToProtobufMessage(value, &new_msg)); \ |
| FillRequiredFields(&msg); \ |
| EXPECT_PROTO_EQ(msg, new_msg); \ |
| } |
| TEST_CONVERT_ITEM(set_double_value, 1.0, "double_value", 1.0) |
| TEST_CONVERT_ITEM(set_float_value, 2.0, "float_value", 2.0) |
| TEST_CONVERT_ITEM(set_int32_value, 3, "int32_value", Json::Int(3)) |
| TEST_CONVERT_ITEM(set_int32_value, -3, "int32_value", Json::Int(-3)) |
| TEST_CONVERT_ITEM(set_int32_value, kint32min, |
| "int32_value", Json::Int(kint32min)) |
| TEST_CONVERT_ITEM(set_int32_value, kint32max, |
| "int32_value", Json::Int(kint32max)) |
| TEST_CONVERT_ITEM(set_int64_value, 4, "int64_value", "4") |
| TEST_CONVERT_ITEM(set_int64_value, -4, "int64_value", "-4") |
| TEST_CONVERT_ITEM(set_int64_value, kint64min, |
| "int64_value", "-9223372036854775808") |
| TEST_CONVERT_ITEM(set_int64_value, kint64max, |
| "int64_value", "9223372036854775807") |
| TEST_CONVERT_ITEM(set_uint32_value, 5, "uint32_value", Json::UInt(5)) |
| TEST_CONVERT_ITEM(set_uint32_value, kuint32max, |
| "uint32_value", Json::UInt(kuint32max)) |
| TEST_CONVERT_ITEM(set_uint64_value, 6, "uint64_value", "6") |
| TEST_CONVERT_ITEM(set_uint64_value, kuint64max, |
| "uint64_value", "18446744073709551615") |
| TEST_CONVERT_ITEM(set_sint32_value, 7, "sint32_value", Json::Int(7)) |
| TEST_CONVERT_ITEM(set_sint32_value, -7, "sint32_value", Json::Int(-7)) |
| TEST_CONVERT_ITEM(set_sint32_value, kint32min, |
| "sint32_value", Json::Int(kint32min)) |
| TEST_CONVERT_ITEM(set_sint32_value, kint32max, |
| "sint32_value", Json::Int(kint32max)) |
| TEST_CONVERT_ITEM(set_sint64_value, 8, "sint64_value", "8") |
| TEST_CONVERT_ITEM(set_sint64_value, -8, "sint64_value", "-8") |
| TEST_CONVERT_ITEM(set_sint64_value, kint64min, |
| "sint64_value", "-9223372036854775808") |
| TEST_CONVERT_ITEM(set_sint64_value, kint64max, |
| "sint64_value", "9223372036854775807") |
| TEST_CONVERT_ITEM(set_fixed32_value, 9, "fixed32_value", Json::UInt(9)) |
| TEST_CONVERT_ITEM(set_fixed32_value, kuint32max, |
| "fixed32_value", Json::UInt(kuint32max)) |
| TEST_CONVERT_ITEM(set_fixed64_value, 10, "fixed64_value", "10") |
| TEST_CONVERT_ITEM(set_fixed64_value, kuint64max, |
| "fixed64_value", "18446744073709551615") |
| TEST_CONVERT_ITEM(set_sfixed32_value, 11, "sfixed32_value", Json::Int(11)) |
| TEST_CONVERT_ITEM(set_sfixed32_value, -11, "sfixed32_value", Json::Int(-11)) |
| TEST_CONVERT_ITEM(set_sfixed32_value, kint32min, |
| "sfixed32_value", Json::Int(kint32min)) |
| TEST_CONVERT_ITEM(set_sfixed32_value, kint32max, |
| "sfixed32_value", Json::Int(kint32max)) |
| TEST_CONVERT_ITEM(set_sfixed64_value, 12, "sfixed64_value", "12") |
| TEST_CONVERT_ITEM(set_sfixed64_value, -12, "sfixed64_value", "-12") |
| TEST_CONVERT_ITEM(set_sfixed64_value, kint64min, |
| "sfixed64_value", "-9223372036854775808") |
| TEST_CONVERT_ITEM(set_sfixed64_value, kint64max, |
| "sfixed64_value", "9223372036854775807") |
| TEST_CONVERT_ITEM(set_bool_value, true, "bool_value", true) |
| TEST_CONVERT_ITEM(set_bool_value, false, "bool_value", false) |
| TEST_CONVERT_ITEM(set_string_value, "string", "string_value", "string") |
| TEST_CONVERT_ITEM(set_bytes_value, "bytes", "bytes_value", "bytes") |
| TEST_CONVERT_ITEM(set_enum_value, ENUM_A, "enum_value", "ENUM_A") |
| TEST_CONVERT_ITEM(set_innerenum_value, TestMsg::ENUM_1, |
| "innerenum_value", "ENUM_1") |
| |
| |
| TEST_CONVERT_ITEM(set_required_double_value, 1.0, |
| "required_double_value", 1.0) |
| TEST_CONVERT_ITEM(set_required_float_value, 2.0, |
| "required_float_value", 2.0) |
| TEST_CONVERT_ITEM(set_required_int32_value, 3, |
| "required_int32_value", Json::Int(3)) |
| TEST_CONVERT_ITEM(set_required_int32_value, -3, |
| "required_int32_value", Json::Int(-3)) |
| TEST_CONVERT_ITEM(set_required_int32_value, kint32min, |
| "required_int32_value", Json::Int(kint32min)) |
| TEST_CONVERT_ITEM(set_required_int32_value, kint32max, |
| "required_int32_value", Json::Int(kint32max)) |
| TEST_CONVERT_ITEM(set_required_int64_value, 4, "required_int64_value", "4") |
| TEST_CONVERT_ITEM(set_required_int64_value, -4, "required_int64_value", "-4") |
| TEST_CONVERT_ITEM(set_required_int64_value, kint64min, |
| "required_int64_value", "-9223372036854775808") |
| TEST_CONVERT_ITEM(set_required_int64_value, kint64max, |
| "required_int64_value", "9223372036854775807") |
| TEST_CONVERT_ITEM(set_required_uint32_value, 5, |
| "required_uint32_value", Json::UInt(5)) |
| TEST_CONVERT_ITEM(set_required_uint32_value, kuint32max, |
| "required_uint32_value", Json::UInt(kuint32max)) |
| TEST_CONVERT_ITEM(set_required_uint64_value, 6, "required_uint64_value", "6") |
| TEST_CONVERT_ITEM(set_required_uint64_value, kuint64max, |
| "required_uint64_value", "18446744073709551615") |
| TEST_CONVERT_ITEM(set_required_sint32_value, 7, |
| "required_sint32_value", Json::Int(7)) |
| TEST_CONVERT_ITEM(set_required_sint32_value, -7, |
| "required_sint32_value", Json::Int(-7)) |
| TEST_CONVERT_ITEM(set_required_sint32_value, kint32min, |
| "required_sint32_value", Json::Int(kint32min)) |
| TEST_CONVERT_ITEM(set_required_sint32_value, kint32max, |
| "required_sint32_value", Json::Int(kint32max)) |
| TEST_CONVERT_ITEM(set_required_sint64_value, 8, "required_sint64_value", "8") |
| TEST_CONVERT_ITEM(set_required_sint64_value, -8, |
| "required_sint64_value", "-8") |
| TEST_CONVERT_ITEM(set_required_sint64_value, kint64min, |
| "required_sint64_value", "-9223372036854775808") |
| TEST_CONVERT_ITEM(set_required_sint64_value, kint64max, |
| "required_sint64_value", "9223372036854775807") |
| TEST_CONVERT_ITEM(set_required_fixed32_value, 9, |
| "required_fixed32_value", Json::UInt(9)) |
| TEST_CONVERT_ITEM(set_required_fixed32_value, kuint32max, |
| "required_fixed32_value", Json::UInt(kuint32max)) |
| TEST_CONVERT_ITEM(set_required_fixed64_value, 10, |
| "required_fixed64_value", "10") |
| TEST_CONVERT_ITEM(set_required_fixed64_value, kuint64max, |
| "required_fixed64_value", "18446744073709551615") |
| TEST_CONVERT_ITEM(set_required_sfixed32_value, 11, |
| "required_sfixed32_value", Json::Int(11)) |
| TEST_CONVERT_ITEM(set_required_sfixed32_value, -11, |
| "required_sfixed32_value", Json::Int(-11)) |
| TEST_CONVERT_ITEM(set_required_sfixed32_value, kint32min, |
| "required_sfixed32_value", Json::Int(kint32min)) |
| TEST_CONVERT_ITEM(set_required_sfixed32_value, kint32max, |
| "required_sfixed32_value", Json::Int(kint32max)) |
| TEST_CONVERT_ITEM(set_required_sfixed64_value, 12, |
| "required_sfixed64_value", "12") |
| TEST_CONVERT_ITEM(set_required_sfixed64_value, -12, |
| "required_sfixed64_value", "-12") |
| TEST_CONVERT_ITEM(set_required_sfixed64_value, kint64min, |
| "required_sfixed64_value", "-9223372036854775808") |
| TEST_CONVERT_ITEM(set_required_sfixed64_value, kint64max, |
| "required_sfixed64_value", "9223372036854775807") |
| TEST_CONVERT_ITEM(set_required_bool_value, true, "required_bool_value", true) |
| TEST_CONVERT_ITEM(set_required_bool_value, false, |
| "required_bool_value", false) |
| TEST_CONVERT_ITEM(set_required_string_value, "string", |
| "required_string_value", "string") |
| TEST_CONVERT_ITEM(set_required_bytes_value, "bytes", |
| "required_bytes_value", "bytes") |
| TEST_CONVERT_ITEM(set_required_enum_value, ENUM_A, |
| "required_enum_value", "ENUM_A") |
| TEST_CONVERT_ITEM(set_required_innerenum_value, TestMsg::ENUM_1, |
| "required_innerenum_value", "ENUM_1") |
| #undef TEST_CONVERT_ITEM |
| } |
| |
| TEST(JsonUtilTest, ConvertRepeatedItemTest) { |
| #define TEST_CONVERT_REPEATED_ITEM( \ |
| proto_adder, proto_value1, proto_value2, proto_value3, \ |
| json_name, json_value1, json_value2, json_value3) \ |
| { \ |
| TestMsg msg; \ |
| msg.proto_adder(proto_value1); \ |
| msg.proto_adder(proto_value2); \ |
| msg.proto_adder(proto_value3); \ |
| Json::Value value; \ |
| EXPECT_TRUE(JsonUtil::ProtobufMessageToJsonValue(msg, &value)); \ |
| Json::Value expected_value = GetDefaultExpectedValue(); \ |
| expected_value[json_name].append(json_value1); \ |
| expected_value[json_name].append(json_value2); \ |
| expected_value[json_name].append(json_value3); \ |
| EXPECT_EQ(Json::FastWriter().write(expected_value), \ |
| Json::FastWriter().write(value)); \ |
| TestMsg new_msg; \ |
| EXPECT_TRUE(JsonUtil::JsonValueToProtobufMessage(value, &new_msg)); \ |
| FillRequiredFields(&msg); \ |
| EXPECT_PROTO_EQ(msg, new_msg); \ |
| } |
| TEST_CONVERT_REPEATED_ITEM(add_repeated_double_value, 1.0, 2.0, 3.0, |
| "repeated_double_value", 1.0, 2.0, 3.0) |
| TEST_CONVERT_REPEATED_ITEM(add_repeated_float_value, 1.0, 2.0, 3.0, |
| "repeated_float_value", 1.0, 2.0, 3.0) |
| TEST_CONVERT_REPEATED_ITEM(add_repeated_int32_value, 1, 2, 3, |
| "repeated_int32_value", |
| Json::Int(1), Json::Int(2), Json::Int(3)) |
| TEST_CONVERT_REPEATED_ITEM( |
| add_repeated_int32_value, |
| kint32min, kint32min, kint32min, |
| "repeated_int32_value", |
| Json::Int(kint32min), Json::Int(kint32min), Json::Int(kint32min)) |
| TEST_CONVERT_REPEATED_ITEM( |
| add_repeated_int32_value, |
| kint32max, kint32max, kint32max, |
| "repeated_int32_value", |
| Json::Int(kint32max), Json::Int(kint32max), Json::Int(kint32max)) |
| TEST_CONVERT_REPEATED_ITEM(add_repeated_int64_value, 1, 2, 3, |
| "repeated_int64_value", |
| "1", "2", "3") |
| TEST_CONVERT_REPEATED_ITEM( |
| add_repeated_int64_value, |
| kint64min, kint64min, kint64min, |
| "repeated_int64_value", |
| "-9223372036854775808", "-9223372036854775808", "-9223372036854775808") |
| TEST_CONVERT_REPEATED_ITEM( |
| add_repeated_int64_value, |
| kint64max, kint64max, kint64max, |
| "repeated_int64_value", |
| "9223372036854775807", "9223372036854775807", "9223372036854775807") |
| TEST_CONVERT_REPEATED_ITEM(add_repeated_uint32_value, 1, 2, 3, |
| "repeated_uint32_value", |
| Json::UInt(1), Json::UInt(2), Json::UInt(3)) |
| TEST_CONVERT_REPEATED_ITEM( |
| add_repeated_uint32_value, |
| kuint32max, kuint32max, kuint32max, |
| "repeated_uint32_value", |
| Json::UInt(kuint32max), Json::UInt(kuint32max), Json::UInt(kuint32max)) |
| TEST_CONVERT_REPEATED_ITEM(add_repeated_uint64_value, 1, 2, 3, |
| "repeated_uint64_value", |
| "1", "2", "3") |
| TEST_CONVERT_REPEATED_ITEM( |
| add_repeated_uint64_value, |
| kuint64max, kuint64max, kuint64max, |
| "repeated_uint64_value", |
| "18446744073709551615", "18446744073709551615", "18446744073709551615") |
| TEST_CONVERT_REPEATED_ITEM(add_repeated_sint32_value, 1, 2, 3, |
| "repeated_sint32_value", |
| Json::Int(1), Json::Int(2), Json::Int(3)) |
| TEST_CONVERT_REPEATED_ITEM( |
| add_repeated_sint32_value, |
| kint32min, kint32min, kint32min, |
| "repeated_sint32_value", |
| Json::Int(kint32min), Json::Int(kint32min), Json::Int(kint32min)) |
| TEST_CONVERT_REPEATED_ITEM( |
| add_repeated_sint32_value, |
| kint32max, kint32max, kint32max, |
| "repeated_sint32_value", |
| Json::Int(kint32max), Json::Int(kint32max), Json::Int(kint32max)) |
| TEST_CONVERT_REPEATED_ITEM(add_repeated_sint64_value, 1, 2, 3, |
| "repeated_sint64_value", |
| "1", "2", "3") |
| TEST_CONVERT_REPEATED_ITEM( |
| add_repeated_sint64_value, |
| kint64min, kint64min, kint64min, |
| "repeated_sint64_value", |
| "-9223372036854775808", "-9223372036854775808", "-9223372036854775808") |
| TEST_CONVERT_REPEATED_ITEM( |
| add_repeated_sint64_value, |
| kint64max, kint64max, kint64max, |
| "repeated_sint64_value", |
| "9223372036854775807", "9223372036854775807", "9223372036854775807") |
| TEST_CONVERT_REPEATED_ITEM(add_repeated_fixed32_value, 1, 2, 3, |
| "repeated_fixed32_value", |
| Json::UInt(1), Json::UInt(2), Json::UInt(3)) |
| TEST_CONVERT_REPEATED_ITEM( |
| add_repeated_fixed32_value, |
| kuint32max, kuint32max, kuint32max, |
| "repeated_fixed32_value", |
| Json::UInt(kuint32max), Json::UInt(kuint32max), Json::UInt(kuint32max)) |
| TEST_CONVERT_REPEATED_ITEM(add_repeated_fixed64_value, 1, 2, 3, |
| "repeated_fixed64_value", |
| "1", "2", "3") |
| TEST_CONVERT_REPEATED_ITEM( |
| add_repeated_fixed64_value, |
| kuint64max, kuint64max, kuint64max, |
| "repeated_fixed64_value", |
| "18446744073709551615", "18446744073709551615", "18446744073709551615") |
| TEST_CONVERT_REPEATED_ITEM(add_repeated_sfixed32_value, 1, 2, 3, |
| "repeated_sfixed32_value", |
| Json::Int(1), Json::Int(2), Json::Int(3)) |
| TEST_CONVERT_REPEATED_ITEM( |
| add_repeated_sfixed32_value, |
| kint32min, kint32min, kint32min, |
| "repeated_sfixed32_value", |
| Json::Int(kint32min), Json::Int(kint32min), Json::Int(kint32min)) |
| TEST_CONVERT_REPEATED_ITEM( |
| add_repeated_sfixed32_value, |
| kint32max, kint32max, kint32max, |
| "repeated_sfixed32_value", |
| Json::Int(kint32max), Json::Int(kint32max), Json::Int(kint32max)) |
| TEST_CONVERT_REPEATED_ITEM(add_repeated_sfixed64_value, 1, 2, 3, |
| "repeated_sfixed64_value", |
| "1", "2", "3") |
| TEST_CONVERT_REPEATED_ITEM( |
| add_repeated_sfixed64_value, |
| kint64min, kint64min, kint64min, |
| "repeated_sfixed64_value", |
| "-9223372036854775808", "-9223372036854775808", "-9223372036854775808") |
| TEST_CONVERT_REPEATED_ITEM( |
| add_repeated_sfixed64_value, |
| kint64max, kint64max, kint64max, |
| "repeated_sfixed64_value", |
| "9223372036854775807", "9223372036854775807", "9223372036854775807") |
| TEST_CONVERT_REPEATED_ITEM(add_repeated_bool_value, true, true, false, |
| "repeated_bool_value", true, true, false) |
| TEST_CONVERT_REPEATED_ITEM(add_repeated_string_value, "ABC", "DEF", "GHQ", |
| "repeated_string_value", "ABC", "DEF", "GHQ") |
| TEST_CONVERT_REPEATED_ITEM(add_repeated_bytes_value, "ABC", "DEF", "GHQ", |
| "repeated_bytes_value", "ABC", "DEF", "GHQ") |
| TEST_CONVERT_REPEATED_ITEM(add_repeated_enum_value, ENUM_A, ENUM_C, ENUM_B, |
| "repeated_enum_value", |
| "ENUM_A", "ENUM_C", "ENUM_B") |
| TEST_CONVERT_REPEATED_ITEM(add_repeated_innerenum_value, |
| TestMsg::ENUM_1, TestMsg::ENUM_2, TestMsg::ENUM_0, |
| "repeated_innerenum_value", |
| "ENUM_1", "ENUM_2", "ENUM_0") |
| #undef TEST_CONVERT_REPEATED_ITEM |
| } |
| |
| TEST(JsonUtilTest, SubMsgTest) { |
| { |
| TestMsg msg; |
| SubMsg *sub_msg = msg.mutable_sub_message(); |
| sub_msg->set_double_value(100.0); |
| sub_msg->set_float_value(200.0); |
| Json::Value value; |
| EXPECT_TRUE(JsonUtil::ProtobufMessageToJsonValue(msg, &value)); |
| Json::Value expected_value = GetDefaultExpectedValue(); |
| expected_value["sub_message"] = GetDefaultSubMessageExpectedValue(); |
| expected_value["sub_message"]["double_value"] = 100.0; |
| expected_value["sub_message"]["float_value"] = 200.0; |
| EXPECT_EQ(Json::FastWriter().write(expected_value), |
| Json::FastWriter().write(value)); |
| TestMsg new_msg; |
| EXPECT_TRUE(JsonUtil::JsonValueToProtobufMessage(value, &new_msg)); |
| FillRequiredFields(&msg); |
| EXPECT_PROTO_EQ(msg, new_msg); |
| } |
| { |
| TestMsg msg; |
| SubMsg *sub_msg1 = msg.add_repeated_sub_message(); |
| msg.add_repeated_sub_message(); |
| SubMsg *sub_msg3 = msg.add_repeated_sub_message(); |
| sub_msg1->set_double_value(100.0); |
| sub_msg3->set_float_value(200.0); |
| sub_msg3->add_repeated_bool_value(true); |
| sub_msg3->add_repeated_bool_value(false); |
| Json::Value value; |
| EXPECT_TRUE(JsonUtil::ProtobufMessageToJsonValue(msg, &value)); |
| Json::Value expected_value = GetDefaultExpectedValue(); |
| Json::Value sub_value1 = GetDefaultSubMessageExpectedValue(); |
| Json::Value sub_value2 = GetDefaultSubMessageExpectedValue(); |
| Json::Value sub_value3 = GetDefaultSubMessageExpectedValue(); |
| sub_value1["double_value"] = 100.0; |
| sub_value3["float_value"] = 200.0; |
| sub_value3["repeated_bool_value"].append(true); |
| sub_value3["repeated_bool_value"].append(false); |
| expected_value["repeated_sub_message"].append(sub_value1); |
| expected_value["repeated_sub_message"].append(sub_value2); |
| expected_value["repeated_sub_message"].append(sub_value3); |
| EXPECT_EQ(Json::FastWriter().write(expected_value), |
| Json::FastWriter().write(value)); |
| TestMsg new_msg; |
| EXPECT_TRUE(JsonUtil::JsonValueToProtobufMessage(value, &new_msg)); |
| FillRequiredFields(&msg); |
| EXPECT_PROTO_EQ(msg, new_msg); |
| } |
| } |
| |
| TEST(JsonUtilTest, CombinedTest) { |
| TestMsg msg; |
| msg.set_double_value(1.0); |
| msg.set_float_value(2.0); |
| msg.set_int32_value(3); |
| SubMsg *sub_msg = msg.mutable_sub_message(); |
| sub_msg->set_string_value("123"); |
| sub_msg->add_repeated_int32_value(10); |
| sub_msg->add_repeated_int32_value(20); |
| sub_msg->add_repeated_string_value("abc"); |
| SubMsg *repeated_sub_msg1 = msg.add_repeated_sub_message(); |
| SubMsg *repeated_sub_msg2 = msg.add_repeated_sub_message(); |
| repeated_sub_msg1->set_uint32_value(12); |
| repeated_sub_msg2->add_repeated_enum_value(ENUM_C); |
| repeated_sub_msg2->add_repeated_enum_value(ENUM_A); |
| |
| Json::Value value; |
| EXPECT_TRUE(JsonUtil::ProtobufMessageToJsonValue(msg, &value)); |
| Json::Value expected_value = GetDefaultExpectedValue(); |
| Json::Value sub_value = GetDefaultSubMessageExpectedValue(); |
| Json::Value repeated_sub_value1 = GetDefaultSubMessageExpectedValue(); |
| Json::Value repeated_sub_value2 = GetDefaultSubMessageExpectedValue(); |
| expected_value["double_value"] = 1.0; |
| expected_value["float_value"] = 2.0; |
| expected_value["int32_value"] = Json::Int(3); |
| expected_value["sub_message"] = GetDefaultSubMessageExpectedValue(); |
| expected_value["sub_message"]["string_value"] = "123"; |
| expected_value["sub_message"]["repeated_int32_value"].append(Json::Int(10)); |
| expected_value["sub_message"]["repeated_int32_value"].append(Json::Int(20)); |
| expected_value["sub_message"]["repeated_string_value"].append("abc"); |
| repeated_sub_value1["uint32_value"] = Json::UInt(12); |
| expected_value["repeated_sub_message"].append(repeated_sub_value1); |
| repeated_sub_value2["repeated_enum_value"].append("ENUM_C"); |
| repeated_sub_value2["repeated_enum_value"].append("ENUM_A"); |
| expected_value["repeated_sub_message"].append(repeated_sub_value2); |
| EXPECT_EQ(Json::FastWriter().write(expected_value), |
| Json::FastWriter().write(value)); |
| TestMsg new_msg; |
| EXPECT_TRUE(JsonUtil::JsonValueToProtobufMessage(value, &new_msg)); |
| FillRequiredFields(&msg); |
| EXPECT_PROTO_EQ(msg, new_msg); |
| } |
| |
| namespace { |
| |
| bool ParseToMessage(const string &json_string, TestMsg *message) { |
| message->Clear(); |
| Json::Value value; |
| EXPECT_TRUE(Json::Reader().parse(json_string, value)); |
| return JsonUtil::JsonValueToProtobufMessage(value, message); |
| } |
| |
| } // namespace |
| |
| TEST(JsonUtilTest, JsonParseTest) { |
| TestMsg msg; |
| // signed int 32 |
| EXPECT_FALSE(ParseToMessage("{\"int32_value\": -2147483649}", &msg)); |
| EXPECT_TRUE(ParseToMessage("{\"int32_value\": -2147483648}", &msg)); |
| EXPECT_EQ(kint32min, msg.int32_value()); |
| EXPECT_TRUE(ParseToMessage("{\"int32_value\": 2147483647}", &msg)); |
| EXPECT_EQ(kint32max, msg.int32_value()); |
| EXPECT_FALSE(ParseToMessage("{\"int32_value\": 2147483648}", &msg)); |
| |
| EXPECT_FALSE(ParseToMessage("{\"sint32_value\": -2147483649}", &msg)); |
| EXPECT_TRUE(ParseToMessage("{\"sint32_value\": -2147483648}", &msg)); |
| EXPECT_EQ(kint32min, msg.sint32_value()); |
| EXPECT_TRUE(ParseToMessage("{\"sint32_value\": 2147483647}", &msg)); |
| EXPECT_EQ(kint32max, msg.sint32_value()); |
| EXPECT_FALSE(ParseToMessage("{\"sint32_value\": 2147483648}", &msg)); |
| |
| EXPECT_FALSE(ParseToMessage("{\"sfixed32_value\": -2147483649}", &msg)); |
| EXPECT_TRUE(ParseToMessage("{\"sfixed32_value\": -2147483648}", &msg)); |
| EXPECT_EQ(kint32min, msg.sfixed32_value()); |
| EXPECT_TRUE(ParseToMessage("{\"sfixed32_value\": 2147483647}", &msg)); |
| EXPECT_EQ(kint32max, msg.sfixed32_value()); |
| EXPECT_FALSE(ParseToMessage("{\"sfixed32_value\": 2147483648}", &msg)); |
| |
| // unsigned int 32 |
| EXPECT_FALSE(ParseToMessage("{\"uint32_value\": -1}", &msg)); |
| EXPECT_TRUE(ParseToMessage("{\"uint32_value\": 0}", &msg)); |
| EXPECT_EQ(0, msg.uint32_value()); |
| EXPECT_TRUE(ParseToMessage("{\"uint32_value\": 4294967295}", &msg)); |
| EXPECT_EQ(kuint32max, msg.uint32_value()); |
| EXPECT_FALSE(ParseToMessage("{\"uint32_value\": 4294967296}", &msg)); |
| |
| EXPECT_FALSE(ParseToMessage("{\"fixed32_value\": -1}", &msg)); |
| EXPECT_TRUE(ParseToMessage("{\"fixed32_value\": 0}", &msg)); |
| EXPECT_EQ(0, msg.fixed32_value()); |
| EXPECT_TRUE(ParseToMessage("{\"fixed32_value\": 4294967295}", &msg)); |
| EXPECT_EQ(kuint32max, msg.fixed32_value()); |
| EXPECT_FALSE(ParseToMessage("{\"fixed32_value\": 4294967296}", &msg)); |
| |
| // signed int 64 |
| EXPECT_FALSE(ParseToMessage("{\"int64_value\": \"-9223372036854775809\"}", |
| &msg)); |
| EXPECT_TRUE(ParseToMessage("{\"int64_value\": \"-9223372036854775808\"}", |
| &msg)); |
| EXPECT_EQ(kint64min, msg.int64_value()); |
| EXPECT_TRUE(ParseToMessage("{\"int64_value\": \"9223372036854775807\"}", |
| &msg)); |
| EXPECT_EQ(kint64max, msg.int64_value()); |
| EXPECT_FALSE(ParseToMessage("{\"int64_value\": \"9223372036854775808\"}", |
| &msg)); |
| |
| EXPECT_FALSE(ParseToMessage("{\"sint64_value\": \"-9223372036854775809\"}", |
| &msg)); |
| EXPECT_TRUE(ParseToMessage("{\"sint64_value\": \"-9223372036854775808\"}", |
| &msg)); |
| EXPECT_EQ(kint64min, msg.sint64_value()); |
| EXPECT_TRUE(ParseToMessage("{\"sint64_value\": \"9223372036854775807\"}", |
| &msg)); |
| EXPECT_EQ(kint64max, msg.sint64_value()); |
| EXPECT_FALSE(ParseToMessage("{\"sint64_value\": \"9223372036854775808\"}", |
| &msg)); |
| |
| EXPECT_FALSE(ParseToMessage("{\"sfixed64_value\": \"-9223372036854775809\"}", |
| &msg)); |
| EXPECT_TRUE(ParseToMessage("{\"sfixed64_value\": \"-9223372036854775808\"}", |
| &msg)); |
| EXPECT_EQ(kint64min, msg.sfixed64_value()); |
| EXPECT_TRUE(ParseToMessage("{\"sfixed64_value\": \"9223372036854775807\"}", |
| &msg)); |
| EXPECT_EQ(kint64max, msg.sfixed64_value()); |
| EXPECT_FALSE(ParseToMessage("{\"sfixed64_value\": \"9223372036854775808\"}", |
| &msg)); |
| |
| // unsigned int 64 |
| EXPECT_FALSE(ParseToMessage("{\"uint64_value\": \"-1\"}", &msg)); |
| EXPECT_TRUE(ParseToMessage("{\"uint64_value\": \"0\"}", &msg)); |
| EXPECT_EQ(0, msg.uint64_value()); |
| EXPECT_TRUE(ParseToMessage("{\"uint64_value\": \"18446744073709551615\"}", |
| &msg)); |
| EXPECT_EQ(kuint64max, msg.uint64_value()); |
| EXPECT_FALSE(ParseToMessage("{\"uint64_value\": \"18446744073709551616\"}", |
| &msg)); |
| |
| EXPECT_FALSE(ParseToMessage("{\"fixed64_value\": \"-1\"}", &msg)); |
| EXPECT_TRUE(ParseToMessage("{\"fixed64_value\": \"0\"}", &msg)); |
| EXPECT_EQ(0, msg.fixed64_value()); |
| EXPECT_TRUE(ParseToMessage("{\"fixed64_value\": \"18446744073709551615\"}", |
| &msg)); |
| EXPECT_EQ(kuint64max, msg.fixed64_value()); |
| EXPECT_FALSE(ParseToMessage("{\"fixed64_value\": \"18446744073709551616\"}", |
| &msg)); |
| } |
| |
| TEST(JsonUtilTest, FailureTest) { |
| const char *kNumValueKeys[] = { |
| "double_value", "float_value", "int32_value", "int64_value", |
| "uint32_value", "uint64_value", "sint32_value", "sint64_value", |
| "fixed32_value", "fixed64_value", "sfixed32_value", "sfixed64_value"}; |
| for (size_t i = 0; i < arraysize(kNumValueKeys); ++i) { |
| { |
| Json::Value json_value; |
| json_value[kNumValueKeys[i]] = "str"; |
| TestMsg msg; |
| EXPECT_FALSE(JsonUtil::JsonValueToProtobufMessage(json_value, &msg)); |
| } |
| { |
| Json::Value json_value; |
| json_value[kNumValueKeys[i]].append(1); |
| TestMsg msg; |
| EXPECT_FALSE(JsonUtil::JsonValueToProtobufMessage(json_value, &msg)); |
| } |
| { |
| Json::Value json_value; |
| json_value[kNumValueKeys[i]]["test"] = 1; |
| TestMsg msg; |
| EXPECT_FALSE(JsonUtil::JsonValueToProtobufMessage(json_value, &msg)); |
| } |
| } |
| const char *kNumS32ValueKeys[] = |
| {"int32_value", "sint32_value", "sfixed32_value"}; |
| const char *kNumU32ValueKeys[] = {"uint32_value", "fixed32_value"}; |
| const char *kNumS64ValueKeys[] = |
| {"int64_value", "sint64_value", "sfixed64_value"}; |
| const char *kNumU64ValueKeys[] = {"uint64_value", "fixed64_value"}; |
| for (size_t i = 0; i < arraysize(kNumS32ValueKeys); ++i) { |
| { |
| Json::Value json_value; |
| json_value[kNumS32ValueKeys[i]] = -2147483649ll; |
| TestMsg msg; |
| EXPECT_FALSE(JsonUtil::JsonValueToProtobufMessage(json_value, &msg)); |
| } |
| { |
| Json::Value json_value; |
| json_value[kNumS32ValueKeys[i]] = 2147483648ull; |
| TestMsg msg; |
| EXPECT_FALSE(JsonUtil::JsonValueToProtobufMessage(json_value, &msg)); |
| } |
| } |
| |
| for (size_t i = 0; i < arraysize(kNumU32ValueKeys); ++i) { |
| { |
| Json::Value json_value; |
| json_value[kNumU32ValueKeys[i]] = -1; |
| TestMsg msg; |
| EXPECT_FALSE(JsonUtil::JsonValueToProtobufMessage(json_value, &msg)); |
| } |
| { |
| Json::Value json_value; |
| json_value[kNumU32ValueKeys[i]] = 4294967296ull; |
| TestMsg msg; |
| EXPECT_FALSE(JsonUtil::JsonValueToProtobufMessage(json_value, &msg)); |
| } |
| } |
| for (size_t i = 0; i < arraysize(kNumS64ValueKeys); ++i) { |
| { |
| Json::Value json_value; |
| json_value[kNumS64ValueKeys[i]] = "-9223372036854775809"; |
| TestMsg msg; |
| EXPECT_FALSE(JsonUtil::JsonValueToProtobufMessage(json_value, &msg)); |
| } |
| { |
| Json::Value json_value; |
| json_value[kNumS64ValueKeys[i]] = "9223372036854775808"; |
| TestMsg msg; |
| EXPECT_FALSE(JsonUtil::JsonValueToProtobufMessage(json_value, &msg)); |
| } |
| } |
| for (size_t i = 0; i < arraysize(kNumU64ValueKeys); ++i) { |
| { |
| Json::Value json_value; |
| json_value[kNumU64ValueKeys[i]] = "-1"; |
| TestMsg msg; |
| EXPECT_FALSE(JsonUtil::JsonValueToProtobufMessage(json_value, &msg)); |
| } |
| { |
| Json::Value json_value; |
| json_value[kNumU64ValueKeys[i]] = "18446744073709551616"; |
| TestMsg msg; |
| EXPECT_FALSE(JsonUtil::JsonValueToProtobufMessage(json_value, &msg)); |
| } |
| } |
| |
| { |
| Json::Value json_value; |
| json_value["bool_value"] = "str"; |
| TestMsg msg; |
| EXPECT_FALSE(JsonUtil::JsonValueToProtobufMessage(json_value, &msg)); |
| } |
| |
| { |
| Json::Value json_value; |
| json_value["string_value"].append(1); |
| TestMsg msg; |
| EXPECT_FALSE(JsonUtil::JsonValueToProtobufMessage(json_value, &msg)); |
| } |
| { |
| Json::Value json_value; |
| json_value["string_value"]["test"] = 1; |
| TestMsg msg; |
| EXPECT_FALSE(JsonUtil::JsonValueToProtobufMessage(json_value, &msg)); |
| } |
| { |
| Json::Value json_value; |
| json_value["bytes_value"].append(1); |
| TestMsg msg; |
| EXPECT_FALSE(JsonUtil::JsonValueToProtobufMessage(json_value, &msg)); |
| } |
| { |
| Json::Value json_value; |
| json_value["bytes_value"]["test"] = 1; |
| TestMsg msg; |
| EXPECT_FALSE(JsonUtil::JsonValueToProtobufMessage(json_value, &msg)); |
| } |
| { |
| Json::Value json_value; |
| json_value["enum_value"] = "ENUM_X"; |
| TestMsg msg; |
| EXPECT_FALSE(JsonUtil::JsonValueToProtobufMessage(json_value, &msg)); |
| } |
| { |
| Json::Value json_value; |
| json_value["enum_value"].append(1); |
| TestMsg msg; |
| EXPECT_FALSE(JsonUtil::JsonValueToProtobufMessage(json_value, &msg)); |
| } |
| { |
| Json::Value json_value; |
| json_value["enum_value"]["test"] = 1; |
| TestMsg msg; |
| EXPECT_FALSE(JsonUtil::JsonValueToProtobufMessage(json_value, &msg)); |
| } |
| { |
| Json::Value json_value; |
| json_value["innerenum_value"] = "ENUM_X"; |
| TestMsg msg; |
| EXPECT_FALSE(JsonUtil::JsonValueToProtobufMessage(json_value, &msg)); |
| } |
| { |
| Json::Value json_value; |
| json_value["innerenum_value"].append(1); |
| TestMsg msg; |
| EXPECT_FALSE(JsonUtil::JsonValueToProtobufMessage(json_value, &msg)); |
| } |
| { |
| Json::Value json_value; |
| json_value["innerenum_value"]["test"] = 1; |
| TestMsg msg; |
| EXPECT_FALSE(JsonUtil::JsonValueToProtobufMessage(json_value, &msg)); |
| } |
| const char *kRepeatedNumValueKeys[] = { |
| "repeated_double_value", "repeated_float_value", "repeated_int32_value", |
| "repeated_int64_value", "repeated_uint32_value", "repeated_uint64_value", |
| "repeated_sint32_value", "repeated_sint64_value", "repeated_fixed32_value", |
| "repeated_fixed64_value", "repeated_sfixed32_value", |
| "repeated_sfixed64_value"}; |
| for (size_t i = 0; i < arraysize(kRepeatedNumValueKeys); ++i) { |
| { |
| Json::Value json_value; |
| json_value[kRepeatedNumValueKeys[i]] = "str"; |
| TestMsg msg; |
| EXPECT_FALSE(JsonUtil::JsonValueToProtobufMessage(json_value, &msg)); |
| } |
| { |
| Json::Value json_value; |
| json_value[kRepeatedNumValueKeys[i]] = 1; |
| TestMsg msg; |
| EXPECT_FALSE(JsonUtil::JsonValueToProtobufMessage(json_value, &msg)); |
| } |
| { |
| Json::Value json_value; |
| json_value[kRepeatedNumValueKeys[i]]["test"] = 1; |
| TestMsg msg; |
| EXPECT_FALSE(JsonUtil::JsonValueToProtobufMessage(json_value, &msg)); |
| } |
| } |
| const char *kRepeatedUnsignedNumValueKeys[] = |
| {"repeated_uint32_value", "repeated_uint64_value"}; |
| for (size_t i = 0; i < arraysize(kRepeatedUnsignedNumValueKeys); ++i) { |
| Json::Value json_value; |
| json_value[kRepeatedUnsignedNumValueKeys[i]].append(0); |
| json_value[kRepeatedUnsignedNumValueKeys[i]].append(-1); |
| json_value[kRepeatedUnsignedNumValueKeys[i]].append(2); |
| TestMsg msg; |
| EXPECT_FALSE(JsonUtil::JsonValueToProtobufMessage(json_value, &msg)); |
| } |
| { |
| Json::Value json_value; |
| json_value["repeated_bool_value"].append(true); |
| json_value["repeated_bool_value"].append("xxx"); |
| json_value["repeated_bool_value"].append(false); |
| TestMsg msg; |
| EXPECT_FALSE(JsonUtil::JsonValueToProtobufMessage(json_value, &msg)); |
| } |
| |
| { |
| Json::Value json_value; |
| json_value["repeated_string_value"].append("xx"); |
| json_value["repeated_string_value"].append("xxx"); |
| Json::Value array_value; |
| array_value.append(1); |
| json_value["repeated_string_value"].append(array_value); |
| TestMsg msg; |
| EXPECT_FALSE(JsonUtil::JsonValueToProtobufMessage(json_value, &msg)); |
| } |
| { |
| Json::Value json_value; |
| json_value["repeated_bytes_value"].append("xx"); |
| json_value["repeated_bytes_value"].append("xxx"); |
| Json::Value array_value; |
| array_value.append(1); |
| json_value["repeated_bytes_value"].append(array_value); |
| TestMsg msg; |
| EXPECT_FALSE(JsonUtil::JsonValueToProtobufMessage(json_value, &msg)); |
| } |
| { |
| Json::Value json_value; |
| json_value["repeated_enum_value"].append("ENUM_A"); |
| json_value["repeated_enum_value"].append("ENUM_B"); |
| TestMsg msg1, msg2; |
| EXPECT_TRUE(JsonUtil::JsonValueToProtobufMessage(json_value, &msg1)); |
| json_value["repeated_enum_value"].append("ENUM_X"); |
| EXPECT_FALSE(JsonUtil::JsonValueToProtobufMessage(json_value, &msg2)); |
| } |
| { |
| Json::Value json_value; |
| json_value["repeated_enum_value"].append("xx"); |
| json_value["repeated_enum_value"].append("xxx"); |
| Json::Value array_value; |
| array_value.append(1); |
| json_value["repeated_enum_value"].append(array_value); |
| TestMsg msg; |
| EXPECT_FALSE(JsonUtil::JsonValueToProtobufMessage(json_value, &msg)); |
| } |
| { |
| Json::Value json_value; |
| json_value["repeated_innerenum_value"].append("ENUM_0"); |
| json_value["repeated_innerenum_value"].append("ENUM_1"); |
| TestMsg msg1, msg2; |
| EXPECT_TRUE(JsonUtil::JsonValueToProtobufMessage(json_value, &msg1)); |
| json_value["repeated_innerenum_value"].append("ENUM_X"); |
| EXPECT_FALSE(JsonUtil::JsonValueToProtobufMessage(json_value, &msg2)); |
| } |
| { |
| Json::Value json_value; |
| json_value["repeated_innerenum_value"].append("xx"); |
| json_value["repeated_innerenum_value"].append("xxx"); |
| Json::Value array_value; |
| array_value.append(1); |
| json_value["repeated_innerenum_value"].append(array_value); |
| TestMsg msg; |
| EXPECT_FALSE(JsonUtil::JsonValueToProtobufMessage(json_value, &msg)); |
| } |
| { |
| Json::Value json_value; |
| json_value["nested_message"] = 1; |
| TestMsg msg; |
| EXPECT_FALSE(JsonUtil::JsonValueToProtobufMessage(json_value, &msg)); |
| } |
| { |
| Json::Value json_value; |
| json_value["repeated_nested_message"] = 1; |
| TestMsg msg; |
| EXPECT_FALSE(JsonUtil::JsonValueToProtobufMessage(json_value, &msg)); |
| } |
| } |
| |
| } // namespace net |
| } // namespace mozc |