PropertyMapTest.cpp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  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/device.h>
  14. static bool propertymap_has_prop(uEchoPropertyCode* prop_map_codes, size_t prop_map_count, uEchoPropertyCode prop_code)
  15. {
  16. for (int n = 0; n < prop_map_count; n++) {
  17. if (prop_map_codes[n] == prop_code) {
  18. return true;
  19. }
  20. }
  21. return false;
  22. }
  23. BOOST_AUTO_TEST_CASE(PropertyMap)
  24. {
  25. uEchoObjectCode obj_codes[] = {
  26. 0x03CE,
  27. };
  28. for (int i = 0; i < sizeof(obj_codes) / sizeof(obj_codes[0]); i++) {
  29. uEchoObjectCode obj_code = obj_codes[i];
  30. uEchoObject* obj = uecho_device_new();
  31. uecho_object_setcode(obj, obj_code);
  32. uEchoPropertyCode prop_codes[] = {
  33. uEchoObjectGetPropertyMap,
  34. uEchoObjectSetPropertyMap,
  35. uEchoObjectAnnoPropertyMap,
  36. };
  37. for (int j = 0; j < sizeof(prop_codes) / sizeof(prop_codes[0]); j++) {
  38. uEchoPropertyCode prop_code = prop_codes[i];
  39. size_t expected_prop_map_count = 0;
  40. for (uEchoProperty* prop = uecho_object_getproperties(obj); prop; prop = uecho_property_next(prop)) {
  41. switch (prop_code) {
  42. case uEchoObjectGetPropertyMap: {
  43. if (uecho_property_isreadable(prop))
  44. expected_prop_map_count++;
  45. } break;
  46. case uEchoObjectSetPropertyMap: {
  47. if (uecho_property_iswritable(prop))
  48. expected_prop_map_count++;
  49. } break;
  50. case uEchoObjectAnnoPropertyMap: {
  51. if (uecho_property_isannounceable(prop))
  52. expected_prop_map_count++;
  53. } break;
  54. }
  55. }
  56. uEchoProperty* prop = uecho_object_getproperty(obj, prop_code);
  57. BOOST_CHECK(prop);
  58. size_t prop_map_count = 0;
  59. uecho_property_getpropertymapcount(prop, &prop_map_count);
  60. BOOST_CHECK_EQUAL(prop_map_count, expected_prop_map_count);
  61. uEchoPropertyCode* prop_map_codes = (uEchoPropertyCode*)malloc(prop_map_count);
  62. BOOST_CHECK(uecho_property_getpropertymapcodes(prop, prop_map_codes, prop_map_count));
  63. for (uEchoProperty* prop = uecho_object_getproperties(obj); prop; prop = uecho_property_next(prop)) {
  64. switch (prop_code) {
  65. case uEchoObjectGetPropertyMap: {
  66. if (uecho_property_isreadable(prop)) {
  67. BOOST_CHECK(propertymap_has_prop(prop_map_codes, prop_map_count, prop_code));
  68. }
  69. } break;
  70. case uEchoObjectSetPropertyMap: {
  71. if (uecho_property_iswritable(prop))
  72. BOOST_CHECK(propertymap_has_prop(prop_map_codes, prop_map_count, prop_code));
  73. } break;
  74. case uEchoObjectAnnoPropertyMap: {
  75. if (uecho_property_isannounceable(prop))
  76. BOOST_CHECK(propertymap_has_prop(prop_map_codes, prop_map_count, prop_code));
  77. } break;
  78. }
  79. }
  80. free(prop_map_codes);
  81. }
  82. uecho_object_delete(obj);
  83. }
  84. }