MessageFieldTest.cc 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. // Copyright 2011 Netease Inc. All Rights Reserved.
  2. // Author: tanghai@corp.netease.com (tanghai)
  3. #include <gtest/gtest.h>
  4. #include <glog/logging.h>
  5. #include <gflags/gflags.h>
  6. #include <google/protobuf/descriptor.h>
  7. #include "Orm/MessageField.h"
  8. #include "Orm/Person.pb.h"
  9. namespace Egametang {
  10. class MessageFieldTest: public testing::Test
  11. {
  12. };
  13. TEST_F(MessageFieldTest, GetField_FieldIsInt32)
  14. {
  15. Person person;
  16. const google::protobuf::Descriptor* descriptor = person.GetDescriptor();
  17. const google::protobuf::FieldDescriptor* field = descriptor->field(1);
  18. std::string str;
  19. MessageField messageField(person, field);
  20. person.set_age(10);
  21. str = messageField.GetField();
  22. ASSERT_EQ("10", str);
  23. person.set_age(-10);
  24. str = messageField.GetField();
  25. ASSERT_EQ("-10", str);
  26. }
  27. TEST_F(MessageFieldTest, GetField_FieldIsUInt32)
  28. {
  29. Person person;
  30. const google::protobuf::Descriptor* descriptor = person.GetDescriptor();
  31. const google::protobuf::FieldDescriptor* field = descriptor->field(2);
  32. std::string str;
  33. MessageField messageField(person, field);
  34. person.set_number(10);
  35. str = messageField.GetField();
  36. ASSERT_EQ("10", str);
  37. person.set_number(-10);
  38. str = messageField.GetField();
  39. ASSERT_EQ("4294967286", str);
  40. }
  41. TEST_F(MessageFieldTest, GetField_FieldIsUInt64)
  42. {
  43. Person person;
  44. const google::protobuf::Descriptor* descriptor = person.GetDescriptor();
  45. const google::protobuf::FieldDescriptor* field = descriptor->field(3);
  46. std::string str;
  47. MessageField messageField(person, field);
  48. person.set_time(33333333333333LL);
  49. str = messageField.GetField();
  50. ASSERT_EQ("33333333333333", str);
  51. person.set_time(-33333333333333LL);
  52. str = messageField.GetField();
  53. ASSERT_EQ("18446710740376218283", str);
  54. }
  55. TEST_F(MessageFieldTest, GetField_FieldIsInt64)
  56. {
  57. Person person;
  58. const google::protobuf::Descriptor* descriptor = person.GetDescriptor();
  59. const google::protobuf::FieldDescriptor* field = descriptor->field(0);
  60. std::string str;
  61. MessageField messageField(person, field);
  62. person.set_guid(33333333333333LL);
  63. str = messageField.GetField();
  64. ASSERT_EQ("33333333333333", str);
  65. person.set_guid(-33333333333333LL);
  66. str = messageField.GetField();
  67. ASSERT_EQ("-33333333333333", str);
  68. }
  69. TEST_F(MessageFieldTest, GetField_FieldIsString)
  70. {
  71. Person person;
  72. const google::protobuf::Descriptor* descriptor = person.GetDescriptor();
  73. const google::protobuf::FieldDescriptor* field = descriptor->field(4);
  74. std::string str;
  75. MessageField messageField(person, field);
  76. person.set_name("tanghai");
  77. str = messageField.GetField();
  78. ASSERT_EQ("'tanghai'", str);
  79. }
  80. TEST_F(MessageFieldTest, GetField_FieldIsDouble)
  81. {
  82. Person person;
  83. const google::protobuf::Descriptor* descriptor = person.GetDescriptor();
  84. const google::protobuf::FieldDescriptor* field = descriptor->field(5);
  85. std::string str;
  86. MessageField messageField(person, field);
  87. person.set_height(1.78);
  88. str = messageField.GetField();
  89. ASSERT_EQ("1.78", str);
  90. }
  91. TEST_F(MessageFieldTest, GetField_FieldIsBytes)
  92. {
  93. Person person;
  94. const google::protobuf::Descriptor* descriptor = person.GetDescriptor();
  95. const google::protobuf::FieldDescriptor* field = descriptor->field(6);
  96. std::string str;
  97. MessageField messageField(person, field);
  98. person.set_comment("tanghai is a good student!");
  99. str = messageField.GetField();
  100. ASSERT_EQ("'tanghai is a good student!'", str);
  101. }
  102. TEST_F(MessageFieldTest, GetField_FieldIsBool)
  103. {
  104. Person person;
  105. const google::protobuf::Descriptor* descriptor = person.GetDescriptor();
  106. const google::protobuf::FieldDescriptor* field = descriptor->field(7);
  107. std::string str;
  108. MessageField messageField(person, field);
  109. person.set_marry(false);
  110. str = messageField.GetField();
  111. ASSERT_EQ("0", str);
  112. person.set_marry(true);
  113. str = messageField.GetField();
  114. ASSERT_EQ("1", str);
  115. }
  116. TEST_F(MessageFieldTest, GetField_FieldIsMessage)
  117. {
  118. Person person;
  119. const google::protobuf::Descriptor* descriptor = person.GetDescriptor();
  120. const google::protobuf::FieldDescriptor* field = descriptor->field(8);
  121. std::string str;
  122. MessageField messageField(person, field);
  123. person.mutable_item()->set_id(123);
  124. person.mutable_item()->set_name("pen");
  125. str = messageField.GetField();
  126. ASSERT_EQ("id: 123 name: \"pen\"", str);
  127. }
  128. } // namespace Egametang
  129. int main(int argc, char* argv[])
  130. {
  131. testing::InitGoogleTest(&argc, argv);
  132. google::InitGoogleLogging(argv[0]);
  133. google::ParseCommandLineFlags(&argc, &argv, true);
  134. return RUN_ALL_TESTS();
  135. }