PropertyTest.cpp 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. /******************************************************************
  2. *
  3. * uEcho for C
  4. *
  5. * Copyright (C) Satoshi Konno 2015
  6. *
  7. * This is licensed under BSD-style license, see file COPYING.
  8. *
  9. ******************************************************************/
  10. #include <boost/test/unit_test.hpp>
  11. #include <string>
  12. #include <vector>
  13. #include <uecho/_property.h>
  14. BOOST_AUTO_TEST_CASE(PropertyBasicFunctions)
  15. {
  16. uEchoProperty* prop = uecho_property_new();
  17. BOOST_CHECK(prop);
  18. for (int n = uEchoPropertyCodeMin; n < uEchoPropertyCodeMax; n++) {
  19. uecho_property_setcode(prop, n);
  20. BOOST_CHECK_EQUAL(uecho_property_getcode(prop), n);
  21. }
  22. BOOST_CHECK(uecho_property_delete(prop));
  23. }
  24. BOOST_AUTO_TEST_CASE(PropertySetData)
  25. {
  26. uEchoProperty* prop = uecho_property_new();
  27. BOOST_CHECK_EQUAL(uecho_property_getdatasize(prop), 0);
  28. BOOST_CHECK_EQUAL(uecho_property_getdata(prop), (byte*)NULL);
  29. uecho_property_cleardata(prop);
  30. BOOST_CHECK_EQUAL(uecho_property_getdatasize(prop), 0);
  31. BOOST_CHECK_EQUAL(uecho_property_getdata(prop), (byte*)NULL);
  32. uecho_property_setdata(prop, NULL, 0);
  33. BOOST_CHECK_EQUAL(uecho_property_getdatasize(prop), 0);
  34. BOOST_CHECK_EQUAL(uecho_property_getdata(prop), (byte*)NULL);
  35. std::vector<std::string> test_data_vec;
  36. test_data_vec.push_back("a");
  37. test_data_vec.push_back("abcd");
  38. test_data_vec.push_back("abcd0123456789");
  39. for (int i = 0; i < test_data_vec.size(); i++) {
  40. const char* test_data = test_data_vec[i].c_str();
  41. size_t test_data_len = strlen(test_data);
  42. uecho_property_setdata(prop, (const byte*)test_data, test_data_len);
  43. BOOST_CHECK_EQUAL(uecho_property_getdatasize(prop), test_data_len);
  44. BOOST_CHECK(uecho_property_isdataequal(prop, (const byte*)test_data, test_data_len));
  45. byte* prop_data = uecho_property_getdata(prop);
  46. BOOST_CHECK(prop_data);
  47. for (int n = 0; n < test_data_len; n++) {
  48. BOOST_CHECK_EQUAL(test_data[n], prop_data[n]);
  49. }
  50. }
  51. uecho_property_cleardata(prop);
  52. BOOST_CHECK_EQUAL(uecho_property_getdatasize(prop), 0);
  53. BOOST_CHECK_EQUAL(uecho_property_getdata(prop), (byte*)NULL);
  54. BOOST_CHECK(uecho_property_delete(prop));
  55. }
  56. BOOST_AUTO_TEST_CASE(PropertyPermission)
  57. {
  58. uEchoProperty* prop = uecho_property_new();
  59. BOOST_CHECK_EQUAL(uecho_property_isreadable(prop), true);
  60. BOOST_CHECK_EQUAL(uecho_property_isreadrequired(prop), false);
  61. BOOST_CHECK_EQUAL(uecho_property_iswritable(prop), true);
  62. BOOST_CHECK_EQUAL(uecho_property_iswriterequired(prop), false);
  63. BOOST_CHECK_EQUAL(uecho_property_isreadonly(prop), false);
  64. BOOST_CHECK_EQUAL(uecho_property_iswriteonly(prop), false);
  65. BOOST_CHECK_EQUAL(uecho_property_isannounceable(prop), false);
  66. BOOST_CHECK_EQUAL(uecho_property_isannouncerequired(prop), false);
  67. uecho_property_setattribute(prop, uEchoPropertyAttrNone);
  68. BOOST_CHECK_EQUAL(uecho_property_isreadable(prop), false);
  69. BOOST_CHECK_EQUAL(uecho_property_isreadrequired(prop), false);
  70. BOOST_CHECK_EQUAL(uecho_property_iswritable(prop), false);
  71. BOOST_CHECK_EQUAL(uecho_property_iswriterequired(prop), false);
  72. BOOST_CHECK_EQUAL(uecho_property_isreadonly(prop), false);
  73. BOOST_CHECK_EQUAL(uecho_property_iswriteonly(prop), false);
  74. BOOST_CHECK_EQUAL(uecho_property_isannounceable(prop), false);
  75. BOOST_CHECK_EQUAL(uecho_property_isannouncerequired(prop), false);
  76. uecho_property_setattribute(prop, uEchoPropertyAttrRead);
  77. BOOST_CHECK_EQUAL(uecho_property_isreadable(prop), true);
  78. BOOST_CHECK_EQUAL(uecho_property_isreadrequired(prop), false);
  79. BOOST_CHECK_EQUAL(uecho_property_iswritable(prop), false);
  80. BOOST_CHECK_EQUAL(uecho_property_iswriterequired(prop), false);
  81. BOOST_CHECK_EQUAL(uecho_property_isreadonly(prop), true);
  82. BOOST_CHECK_EQUAL(uecho_property_iswriteonly(prop), false);
  83. BOOST_CHECK_EQUAL(uecho_property_isannounceable(prop), false);
  84. BOOST_CHECK_EQUAL(uecho_property_isannouncerequired(prop), false);
  85. uecho_property_setattribute(prop, uEchoPropertyAttrReadRequired);
  86. BOOST_CHECK_EQUAL(uecho_property_isreadable(prop), true);
  87. BOOST_CHECK_EQUAL(uecho_property_isreadrequired(prop), true);
  88. BOOST_CHECK_EQUAL(uecho_property_iswritable(prop), false);
  89. BOOST_CHECK_EQUAL(uecho_property_iswriterequired(prop), false);
  90. BOOST_CHECK_EQUAL(uecho_property_isreadonly(prop), true);
  91. BOOST_CHECK_EQUAL(uecho_property_iswriteonly(prop), false);
  92. BOOST_CHECK_EQUAL(uecho_property_isannounceable(prop), false);
  93. BOOST_CHECK_EQUAL(uecho_property_isannouncerequired(prop), false);
  94. uecho_property_setattribute(prop, uEchoPropertyAttrWrite);
  95. BOOST_CHECK_EQUAL(uecho_property_isreadable(prop), false);
  96. BOOST_CHECK_EQUAL(uecho_property_isreadrequired(prop), false);
  97. BOOST_CHECK_EQUAL(uecho_property_iswritable(prop), true);
  98. BOOST_CHECK_EQUAL(uecho_property_iswriterequired(prop), false);
  99. BOOST_CHECK_EQUAL(uecho_property_isreadonly(prop), false);
  100. BOOST_CHECK_EQUAL(uecho_property_iswriteonly(prop), true);
  101. BOOST_CHECK_EQUAL(uecho_property_isannounceable(prop), false);
  102. BOOST_CHECK_EQUAL(uecho_property_isannouncerequired(prop), false);
  103. uecho_property_setattribute(prop, uEchoPropertyAttrWriteRequired);
  104. BOOST_CHECK_EQUAL(uecho_property_isreadable(prop), false);
  105. BOOST_CHECK_EQUAL(uecho_property_isreadrequired(prop), false);
  106. BOOST_CHECK_EQUAL(uecho_property_iswritable(prop), true);
  107. BOOST_CHECK_EQUAL(uecho_property_iswriterequired(prop), true);
  108. BOOST_CHECK_EQUAL(uecho_property_isreadonly(prop), false);
  109. BOOST_CHECK_EQUAL(uecho_property_iswriteonly(prop), true);
  110. BOOST_CHECK_EQUAL(uecho_property_isannounceable(prop), false);
  111. BOOST_CHECK_EQUAL(uecho_property_isannouncerequired(prop), false);
  112. uecho_property_setattribute(prop, uEchoPropertyAttrReadWrite);
  113. BOOST_CHECK_EQUAL(uecho_property_isreadable(prop), true);
  114. BOOST_CHECK_EQUAL(uecho_property_isreadrequired(prop), false);
  115. BOOST_CHECK_EQUAL(uecho_property_iswritable(prop), true);
  116. BOOST_CHECK_EQUAL(uecho_property_iswriterequired(prop), false);
  117. BOOST_CHECK_EQUAL(uecho_property_isreadonly(prop), false);
  118. BOOST_CHECK_EQUAL(uecho_property_iswriteonly(prop), false);
  119. BOOST_CHECK_EQUAL(uecho_property_isannounceable(prop), false);
  120. BOOST_CHECK_EQUAL(uecho_property_isannouncerequired(prop), false);
  121. uecho_property_setattribute(prop, uEchoPropertyAttrAnno);
  122. BOOST_CHECK_EQUAL(uecho_property_isreadable(prop), false);
  123. BOOST_CHECK_EQUAL(uecho_property_isreadrequired(prop), false);
  124. BOOST_CHECK_EQUAL(uecho_property_iswritable(prop), false);
  125. BOOST_CHECK_EQUAL(uecho_property_iswriterequired(prop), false);
  126. BOOST_CHECK_EQUAL(uecho_property_isreadonly(prop), false);
  127. BOOST_CHECK_EQUAL(uecho_property_iswriteonly(prop), false);
  128. BOOST_CHECK_EQUAL(uecho_property_isannounceable(prop), true);
  129. BOOST_CHECK_EQUAL(uecho_property_isannouncerequired(prop), false);
  130. uecho_property_setattribute(prop, uEchoPropertyAttrAnnoRequired);
  131. BOOST_CHECK_EQUAL(uecho_property_isreadable(prop), false);
  132. BOOST_CHECK_EQUAL(uecho_property_isreadrequired(prop), false);
  133. BOOST_CHECK_EQUAL(uecho_property_iswritable(prop), false);
  134. BOOST_CHECK_EQUAL(uecho_property_iswriterequired(prop), false);
  135. BOOST_CHECK_EQUAL(uecho_property_isreadonly(prop), false);
  136. BOOST_CHECK_EQUAL(uecho_property_iswriteonly(prop), false);
  137. BOOST_CHECK_EQUAL(uecho_property_isannounceable(prop), true);
  138. BOOST_CHECK_EQUAL(uecho_property_isannouncerequired(prop), true);
  139. BOOST_CHECK(uecho_property_delete(prop));
  140. }
  141. BOOST_AUTO_TEST_CASE(PropertyAnnouncement)
  142. {
  143. uEchoProperty* prop = uecho_property_new();
  144. BOOST_CHECK_EQUAL(uecho_property_isannounceable(prop), false);
  145. uecho_property_setattribute(prop, uEchoPropertyAttrAnno);
  146. BOOST_CHECK_EQUAL(uecho_property_isannounceable(prop), true);
  147. uecho_property_setattribute(prop, uEchoPropertyAttrNone);
  148. BOOST_CHECK_EQUAL(uecho_property_isannounceable(prop), false);
  149. BOOST_CHECK(uecho_property_delete(prop));
  150. }
  151. BOOST_AUTO_TEST_CASE(PropertyByte2Integer)
  152. {
  153. uEchoProperty* prop = uecho_property_new();
  154. int val;
  155. for (int n = 0; n <= 0xFF; n++) {
  156. BOOST_CHECK(uecho_property_setintegerdata(prop, n, 1));
  157. BOOST_CHECK(uecho_property_getintegerdata(prop, &val));
  158. BOOST_CHECK_EQUAL(n, val);
  159. }
  160. for (int n = 0; n <= 0xFFFF; n += (0xFFFF / 0xFF)) {
  161. BOOST_CHECK(uecho_property_setintegerdata(prop, n, 2));
  162. BOOST_CHECK(uecho_property_getintegerdata(prop, &val));
  163. BOOST_CHECK_EQUAL(n, val);
  164. }
  165. for (int n = 0; n <= 0xFFFFFF; n += (0xFFFFFF / 0xFF)) {
  166. BOOST_CHECK(uecho_property_setintegerdata(prop, n, 3));
  167. BOOST_CHECK(uecho_property_getintegerdata(prop, &val));
  168. BOOST_CHECK_EQUAL(n, val);
  169. }
  170. for (int n = 0; n < 0xFFFFFFFF; n += (0xFFFFFFFF / 0xFF)) {
  171. BOOST_CHECK(uecho_property_setintegerdata(prop, n, 4));
  172. BOOST_CHECK(uecho_property_getintegerdata(prop, &val));
  173. BOOST_CHECK_EQUAL(n, val);
  174. }
  175. BOOST_CHECK(uecho_property_delete(prop));
  176. }
  177. BOOST_AUTO_TEST_CASE(PropertyAddData)
  178. {
  179. uEchoProperty* prop = uecho_property_new();
  180. BOOST_CHECK_EQUAL(uecho_property_getdatasize(prop), 0);
  181. const size_t property_add_data_count = 10;
  182. for (size_t n = 0; n < property_add_data_count; n++) {
  183. byte new_byte = n;
  184. BOOST_CHECK(uecho_property_addbytedata(prop, new_byte));
  185. BOOST_CHECK_EQUAL(uecho_property_getdatasize(prop), (n + 1));
  186. byte* bytes = uecho_property_getdata(prop);
  187. BOOST_CHECK(bytes);
  188. BOOST_CHECK_EQUAL(bytes[n], new_byte);
  189. }
  190. BOOST_CHECK_EQUAL(uecho_property_getdatasize(prop), property_add_data_count);
  191. BOOST_CHECK(uecho_property_delete(prop));
  192. }