convert.cpp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. #include <msgpack.hpp>
  2. #include <gtest/gtest.h>
  3. class enum_member {
  4. public:
  5. enum_member() : flag(A) { }
  6. enum flags_t {
  7. A = 0,
  8. B = 1
  9. };
  10. flags_t flag;
  11. MSGPACK_DEFINE(flag);
  12. };
  13. MSGPACK_ADD_ENUM(enum_member::flags_t);
  14. class compatibility {
  15. public:
  16. compatibility() : str1("default"), str2("default") { }
  17. std::string str1;
  18. std::string str2;
  19. MSGPACK_DEFINE(str1, str2);
  20. };
  21. TEST(convert, compatibility_less)
  22. {
  23. std::vector<std::string> src(1);
  24. src[0] = "kumofs";
  25. msgpack::zone z;
  26. msgpack::object obj(src, z);
  27. compatibility c;
  28. EXPECT_NO_THROW( obj.convert(c) );
  29. EXPECT_EQ("kumofs", c.str1);
  30. EXPECT_EQ("default", c.str2);
  31. }
  32. TEST(convert, compatibility_more)
  33. {
  34. std::vector<std::string> src(3);
  35. src[0] = "kumofs";
  36. src[1] = "mpio";
  37. src[2] = "cloudy";
  38. msgpack::zone z;
  39. msgpack::object obj(src, z);
  40. compatibility to;
  41. EXPECT_NO_THROW( obj.convert(to) );
  42. EXPECT_EQ("kumofs", to.str1);
  43. EXPECT_EQ("mpio", to.str2);
  44. }
  45. TEST(convert, enum_member)
  46. {
  47. enum_member src;
  48. src.flag = enum_member::B;
  49. msgpack::zone z;
  50. msgpack::object obj(src, z);
  51. enum_member to;
  52. EXPECT_NO_THROW( obj.convert(to) );
  53. EXPECT_EQ(enum_member::B, to.flag);
  54. }
  55. TEST(convert, return_value_ref)
  56. {
  57. msgpack::zone z;
  58. msgpack::object obj(1, z);
  59. int i;
  60. int const& j = obj.convert(i);
  61. EXPECT_EQ(&i, &j);
  62. EXPECT_EQ(i, j);
  63. }
  64. #if MSGPACK_DEFAULT_API_VERSION == 1 && !defined(MSGPACK_DISABLE_LEGACY_CONVERT)
  65. TEST(convert, return_value_ptr)
  66. {
  67. msgpack::zone z;
  68. msgpack::object obj(1, z);
  69. int i;
  70. // obsolete
  71. #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
  72. #pragma GCC diagnostic push
  73. #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
  74. #endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
  75. EXPECT_EQ(obj.convert(&i), &i);
  76. #if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
  77. #pragma GCC diagnostic pop
  78. #endif // (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
  79. EXPECT_EQ(1, i);
  80. }
  81. #endif // MSGPACK_DEFAULT_API_VERSION == 1 && !defined(MSGPACK_DISABLE_LEGACY_CONVERT)
  82. TEST(convert, if_not_nil_nil)
  83. {
  84. msgpack::object obj;
  85. int i;
  86. EXPECT_FALSE(obj.convert_if_not_nil(i));
  87. }
  88. TEST(convert, if_not_nil_not_nil)
  89. {
  90. msgpack::zone z;
  91. msgpack::object obj(1, z);
  92. int i;
  93. EXPECT_TRUE(obj.convert_if_not_nil(i));
  94. EXPECT_EQ(i, 1);
  95. }