Пример #1
0
TEST(EventToStringTest, ScalarType) {
  IntValue int_value(-42);
  std::string int_str;
  EXPECT_TRUE(ToString(&int_value, &int_str));
  EXPECT_STREQ("-42", int_str.c_str());

  UIntValue uint_value(42);
  std::string uint_str;
  EXPECT_TRUE(ToString(&uint_value, &uint_str));
  EXPECT_STREQ("42", uint_str.c_str());

  LongValue long_value(-42);
  std::string long_str;
  EXPECT_TRUE(ToString(&long_value, &long_str));
  EXPECT_STREQ("-42", long_str.c_str());

  ULongValue ulong_value(42);
  std::string ulong_str;
  EXPECT_TRUE(ToString(&ulong_value, &ulong_str));
  EXPECT_STREQ("42", ulong_str.c_str());

  FloatValue float_value(.5);
  std::string float_str;
  EXPECT_TRUE(ToString(&float_value, &float_str));
  EXPECT_STREQ("0.5", float_str.c_str());

  DoubleValue double_value(.25);
  std::string double_str;
  EXPECT_TRUE(ToString(&double_value, &double_str));
  EXPECT_STREQ("0.25", double_str.c_str());

  StringValue string_value("dummy");
  std::string string_str;
  EXPECT_TRUE(ToString(&string_value, &string_str));
  EXPECT_STREQ("\"dummy\"", string_str.c_str());
}
Пример #2
0
static bool assign_xml_value_to_protobuf_field(const std::string &value, xmltype xtype, ::google::protobuf::Message* msg, const ::google::protobuf::FieldDescriptor* field)
{
	if (xtype==duration)
		return assign_xml_duration_value_to_protobuf_field(value,msg,field);
		
	// handle xmltype 'automatic'
	const ::google::protobuf::Reflection* reflection = msg->GetReflection();
	switch (field->cpp_type()) {
		case ::google::protobuf::FieldDescriptor::CPPTYPE_INT32: {
			long longval;
			if (long_value(value,longval))
				reflection->SetInt32(msg, field, longval);
			else
				printf("ERROR:\n");
			break;
		}
		case ::google::protobuf::FieldDescriptor::CPPTYPE_INT64: {
			long longval;
			if (long_value(value,longval))
				reflection->SetInt64(msg, field, longval);
			else
				printf("ERROR:\n");
			break;
		}
		case ::google::protobuf::FieldDescriptor::CPPTYPE_UINT32: {
			unsigned long ulongval;
			if (ulong_value(value,ulongval))
				reflection->SetUInt32(msg, field, ulongval);
			else
				printf("ERROR:\n");
			break;
		}
		case ::google::protobuf::FieldDescriptor::CPPTYPE_UINT64: {
			unsigned long ulongval;
			if (ulong_value(value,ulongval))
				reflection->SetUInt64(msg, field, ulongval);
			else
				printf("ERROR:\n");
			break;
		}
		case ::google::protobuf::FieldDescriptor::CPPTYPE_DOUBLE: {
			double doubleval;
			if (double_value(value,doubleval))
				reflection->SetDouble(msg, field, doubleval);
			else
				printf("ERROR:\n");
			break;
		}
		case ::google::protobuf::FieldDescriptor::CPPTYPE_FLOAT: {
			double floatval;
			if (float_value(value,floatval))
				reflection->SetFloat(msg, field, floatval);
			else
				printf("ERROR:\n");
			break;
		}
		case ::google::protobuf::FieldDescriptor::CPPTYPE_BOOL: {
			bool boolval;
			if (bool_value(value,boolval))
				reflection->SetBool(msg, field, boolval);
			else
				printf("ERROR:\n");
			break;
		}
		case ::google::protobuf::FieldDescriptor::CPPTYPE_ENUM: {
			const ::google::protobuf::EnumDescriptor *enu = field->enum_type();
			const ::google::protobuf::EnumValueDescriptor *enuval =  enu->FindValueByName(value);
			if (!enuval) {
				printf("ERROR: '%s' not a valid value for %s !\n",value.c_str(),enu->name().c_str());
			} else {
				//printf("SUCCESS: '%s' is a valid value for %s !\n",value.c_str(),enu->name().c_str());
				reflection->SetEnum(msg, field, enuval);
			}
			break;
		}
		case ::google::protobuf::FieldDescriptor::CPPTYPE_STRING:
			reflection->SetString(msg, field, value);
			break;
		case ::google::protobuf::FieldDescriptor::CPPTYPE_MESSAGE:
			printf("ERROR: element should not contain text data but we got '%s' !\n",value.c_str());
			return false;
		default:
			printf("ERROR: Unsupported field type '%d' !\n", field->cpp_type());
			return false;
	}
	return true;
}