simpleble 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (341) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +88 -0
  3. data/LICENSE.txt +21 -0
  4. data/README.md +350 -0
  5. data/ext/simpleble/extconf.rb +57 -0
  6. data/ext/simpleble/simpleble_ruby.c +682 -0
  7. data/lib/simpleble/adapter.rb +10 -0
  8. data/lib/simpleble/characteristic.rb +36 -0
  9. data/lib/simpleble/descriptor.rb +8 -0
  10. data/lib/simpleble/exceptions.rb +25 -0
  11. data/lib/simpleble/peripheral.rb +64 -0
  12. data/lib/simpleble/service.rb +16 -0
  13. data/lib/simpleble/version.rb +3 -0
  14. data/lib/simpleble.rb +40 -0
  15. data/vendor/simpleble/build_simplecble/CMakeFiles/4.0.3/CompilerIdCXX/CMakeCXXCompilerId.cpp +920 -0
  16. data/vendor/simpleble/build_simplecble/CMakeFiles/4.0.3/CompilerIdCXX/apple-sdk.cpp +1 -0
  17. data/vendor/simpleble/build_simplecble/CMakeFiles/4.1.0/CompilerIdCXX/CMakeCXXCompilerId.cpp +949 -0
  18. data/vendor/simpleble/build_simplecble/CMakeFiles/4.1.0/CompilerIdCXX/apple-sdk.cpp +1 -0
  19. data/vendor/simpleble/build_simplecble/export/simplecble/export.h +43 -0
  20. data/vendor/simpleble/build_simplecble/simpleble/export/simpleble/export.h +43 -0
  21. data/vendor/simpleble/dependencies/external/kvn/kvn_bytearray.h +222 -0
  22. data/vendor/simpleble/dependencies/external/kvn/kvn_safe_callback.hpp +66 -0
  23. data/vendor/simpleble/dependencies/external/kvn/logfwd.hpp +35 -0
  24. data/vendor/simpleble/dependencies/internal/fmt/args.h +220 -0
  25. data/vendor/simpleble/dependencies/internal/fmt/base.h +2962 -0
  26. data/vendor/simpleble/dependencies/internal/fmt/chrono.h +2338 -0
  27. data/vendor/simpleble/dependencies/internal/fmt/color.h +610 -0
  28. data/vendor/simpleble/dependencies/internal/fmt/compile.h +539 -0
  29. data/vendor/simpleble/dependencies/internal/fmt/core.h +5 -0
  30. data/vendor/simpleble/dependencies/internal/fmt/format-inl.h +1949 -0
  31. data/vendor/simpleble/dependencies/internal/fmt/format.h +4244 -0
  32. data/vendor/simpleble/dependencies/internal/fmt/os.h +427 -0
  33. data/vendor/simpleble/dependencies/internal/fmt/ostream.h +166 -0
  34. data/vendor/simpleble/dependencies/internal/fmt/printf.h +633 -0
  35. data/vendor/simpleble/dependencies/internal/fmt/ranges.h +850 -0
  36. data/vendor/simpleble/dependencies/internal/fmt/std.h +726 -0
  37. data/vendor/simpleble/dependencies/internal/fmt/xchar.h +373 -0
  38. data/vendor/simpleble/dependencies/internal/simplejni/Common.hpp +579 -0
  39. data/vendor/simpleble/dependencies/internal/simplejni/References.hpp +151 -0
  40. data/vendor/simpleble/dependencies/internal/simplejni/Registry.hpp +183 -0
  41. data/vendor/simpleble/dependencies/internal/simplejni/VM.hpp +88 -0
  42. data/vendor/simpleble/examples/simpleble/src/connect.cpp +67 -0
  43. data/vendor/simpleble/examples/simpleble/src/connect_safe.cpp +91 -0
  44. data/vendor/simpleble/examples/simpleble/src/list_adapters.cpp +22 -0
  45. data/vendor/simpleble/examples/simpleble/src/list_adapters_safe.cpp +33 -0
  46. data/vendor/simpleble/examples/simpleble/src/list_paired.cpp +27 -0
  47. data/vendor/simpleble/examples/simpleble/src/multiconnect.cpp +60 -0
  48. data/vendor/simpleble/examples/simpleble/src/notify.cpp +85 -0
  49. data/vendor/simpleble/examples/simpleble/src/notify_multi.cpp +101 -0
  50. data/vendor/simpleble/examples/simpleble/src/power_cycle.cpp +43 -0
  51. data/vendor/simpleble/examples/simpleble/src/read.cpp +82 -0
  52. data/vendor/simpleble/examples/simpleble/src/scan.cpp +62 -0
  53. data/vendor/simpleble/examples/simpleble/src/utils.cpp +59 -0
  54. data/vendor/simpleble/examples/simpleble/src/utils.hpp +27 -0
  55. data/vendor/simpleble/examples/simpleble/src/write.cpp +81 -0
  56. data/vendor/simpleble/examples/simplebluez/ble_nus/ble_nus.cpp +138 -0
  57. data/vendor/simpleble/examples/simplebluez/connect/connect.cpp +119 -0
  58. data/vendor/simpleble/examples/simplebluez/list_adapters/list_adapters.cpp +44 -0
  59. data/vendor/simpleble/examples/simplebluez/list_paired/list_paired.cpp +48 -0
  60. data/vendor/simpleble/examples/simplebluez/notify/notify.cpp +145 -0
  61. data/vendor/simpleble/examples/simplebluez/pair/pair.cpp +181 -0
  62. data/vendor/simpleble/examples/simplebluez/read/read.cpp +141 -0
  63. data/vendor/simpleble/examples/simplebluez/scan/scan.cpp +85 -0
  64. data/vendor/simpleble/examples/simplecble/c/connect.c +163 -0
  65. data/vendor/simpleble/examples/simplecble/c/notify.c +217 -0
  66. data/vendor/simpleble/examples/simplecble/c/scan.c +164 -0
  67. data/vendor/simpleble/examples/simpledbus/notification.cpp +24 -0
  68. data/vendor/simpleble/hitl/src/test_sanity.cpp +48 -0
  69. data/vendor/simpleble/install_simplecble/include/simpleble/Adapter.h +102 -0
  70. data/vendor/simpleble/install_simplecble/include/simpleble/AdapterSafe.h +58 -0
  71. data/vendor/simpleble/install_simplecble/include/simpleble/Advanced.h +50 -0
  72. data/vendor/simpleble/install_simplecble/include/simpleble/Characteristic.h +39 -0
  73. data/vendor/simpleble/install_simplecble/include/simpleble/Config.h +55 -0
  74. data/vendor/simpleble/install_simplecble/include/simpleble/Descriptor.h +30 -0
  75. data/vendor/simpleble/install_simplecble/include/simpleble/Exceptions.h +72 -0
  76. data/vendor/simpleble/install_simplecble/include/simpleble/Logging.h +73 -0
  77. data/vendor/simpleble/install_simplecble/include/simpleble/Peripheral.h +82 -0
  78. data/vendor/simpleble/install_simplecble/include/simpleble/PeripheralSafe.h +64 -0
  79. data/vendor/simpleble/install_simplecble/include/simpleble/Service.h +34 -0
  80. data/vendor/simpleble/install_simplecble/include/simpleble/SimpleBLE.h +8 -0
  81. data/vendor/simpleble/install_simplecble/include/simpleble/Types.h +49 -0
  82. data/vendor/simpleble/install_simplecble/include/simpleble/Utils.h +13 -0
  83. data/vendor/simpleble/install_simplecble/include/simpleble/export.h +43 -0
  84. data/vendor/simpleble/install_simplecble/include/simpleble/kvn/kvn_bytearray.h +222 -0
  85. data/vendor/simpleble/install_simplecble/include/simplecble/adapter.h +188 -0
  86. data/vendor/simpleble/install_simplecble/include/simplecble/logging.h +37 -0
  87. data/vendor/simpleble/install_simplecble/include/simplecble/peripheral.h +304 -0
  88. data/vendor/simpleble/install_simplecble/include/simplecble/simpleble.h +21 -0
  89. data/vendor/simpleble/install_simplecble/include/simplecble/types.h +73 -0
  90. data/vendor/simpleble/install_simplecble/include/simplecble/utils.h +27 -0
  91. data/vendor/simpleble/simpleble/include/simpleble/Adapter.h +102 -0
  92. data/vendor/simpleble/simpleble/include/simpleble/AdapterSafe.h +58 -0
  93. data/vendor/simpleble/simpleble/include/simpleble/Characteristic.h +39 -0
  94. data/vendor/simpleble/simpleble/include/simpleble/Config.h +55 -0
  95. data/vendor/simpleble/simpleble/include/simpleble/Descriptor.h +30 -0
  96. data/vendor/simpleble/simpleble/include/simpleble/Exceptions.h +72 -0
  97. data/vendor/simpleble/simpleble/include/simpleble/Logging.h +73 -0
  98. data/vendor/simpleble/simpleble/include/simpleble/Peripheral.h +82 -0
  99. data/vendor/simpleble/simpleble/include/simpleble/PeripheralSafe.h +64 -0
  100. data/vendor/simpleble/simpleble/include/simpleble/Service.h +34 -0
  101. data/vendor/simpleble/simpleble/include/simpleble/SimpleBLE.h +8 -0
  102. data/vendor/simpleble/simpleble/include/simpleble/Types.h +49 -0
  103. data/vendor/simpleble/simpleble/include/simpleble/Utils.h +13 -0
  104. data/vendor/simpleble/simpleble/include/simpleble_c/adapter.h +188 -0
  105. data/vendor/simpleble/simpleble/include/simpleble_c/logging.h +37 -0
  106. data/vendor/simpleble/simpleble/include/simpleble_c/peripheral.h +304 -0
  107. data/vendor/simpleble/simpleble/include/simpleble_c/simpleble.h +21 -0
  108. data/vendor/simpleble/simpleble/include/simpleble_c/types.h +73 -0
  109. data/vendor/simpleble/simpleble/include/simpleble_c/utils.h +27 -0
  110. data/vendor/simpleble/simpleble/src/CommonUtils.h +63 -0
  111. data/vendor/simpleble/simpleble/src/Exceptions.cpp +31 -0
  112. data/vendor/simpleble/simpleble/src/Logging.cpp +136 -0
  113. data/vendor/simpleble/simpleble/src/LoggingInternal.h +85 -0
  114. data/vendor/simpleble/simpleble/src/Utils.cpp +24 -0
  115. data/vendor/simpleble/simpleble/src/backends/android/AdapterAndroid.cpp +101 -0
  116. data/vendor/simpleble/simpleble/src/backends/android/AdapterAndroid.h +70 -0
  117. data/vendor/simpleble/simpleble/src/backends/android/BackendAndroid.cpp +40 -0
  118. data/vendor/simpleble/simpleble/src/backends/android/BackendAndroid.h +20 -0
  119. data/vendor/simpleble/simpleble/src/backends/android/PeripheralAndroid.cpp +365 -0
  120. data/vendor/simpleble/simpleble/src/backends/android/PeripheralAndroid.h +90 -0
  121. data/vendor/simpleble/simpleble/src/backends/android/bridge/BluetoothGattCallback.cpp +432 -0
  122. data/vendor/simpleble/simpleble/src/backends/android/bridge/BluetoothGattCallback.h +102 -0
  123. data/vendor/simpleble/simpleble/src/backends/android/bridge/ScanCallback.cpp +142 -0
  124. data/vendor/simpleble/simpleble/src/backends/android/bridge/ScanCallback.h +55 -0
  125. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothAdapter.cpp +107 -0
  126. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothAdapter.h +55 -0
  127. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothDevice.cpp +68 -0
  128. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothDevice.h +54 -0
  129. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothGatt.cpp +115 -0
  130. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothGatt.h +75 -0
  131. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattCharacteristic.cpp +142 -0
  132. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattCharacteristic.h +66 -0
  133. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattDescriptor.cpp +67 -0
  134. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattDescriptor.h +46 -0
  135. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattService.cpp +106 -0
  136. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/BluetoothGattService.h +47 -0
  137. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/le/BluetoothScanner.cpp +47 -0
  138. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/le/BluetoothScanner.h +37 -0
  139. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/le/ScanRecord.cpp +69 -0
  140. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/le/ScanRecord.h +41 -0
  141. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/le/ScanResult.cpp +63 -0
  142. data/vendor/simpleble/simpleble/src/backends/android/types/android/bluetooth/le/ScanResult.h +42 -0
  143. data/vendor/simpleble/simpleble/src/backends/android/types/android/os/ParcelUUID.cpp +32 -0
  144. data/vendor/simpleble/simpleble/src/backends/android/types/android/os/ParcelUUID.h +30 -0
  145. data/vendor/simpleble/simpleble/src/backends/android/types/android/util/SparseArray.cpp +54 -0
  146. data/vendor/simpleble/simpleble/src/backends/android/types/android/util/SparseArray.h +37 -0
  147. data/vendor/simpleble/simpleble/src/backends/android/types/java/util/Iterator.cpp +36 -0
  148. data/vendor/simpleble/simpleble/src/backends/android/types/java/util/Iterator.h +28 -0
  149. data/vendor/simpleble/simpleble/src/backends/android/types/java/util/List.cpp +29 -0
  150. data/vendor/simpleble/simpleble/src/backends/android/types/java/util/List.h +27 -0
  151. data/vendor/simpleble/simpleble/src/backends/android/types/java/util/Set.cpp +33 -0
  152. data/vendor/simpleble/simpleble/src/backends/android/types/java/util/Set.h +28 -0
  153. data/vendor/simpleble/simpleble/src/backends/android/types/java/util/UUID.cpp +26 -0
  154. data/vendor/simpleble/simpleble/src/backends/android/types/java/util/UUID.h +29 -0
  155. data/vendor/simpleble/simpleble/src/backends/common/AdapterBase.cpp +53 -0
  156. data/vendor/simpleble/simpleble/src/backends/common/AdapterBase.h +81 -0
  157. data/vendor/simpleble/simpleble/src/backends/common/AdapterBaseTypes.h +22 -0
  158. data/vendor/simpleble/simpleble/src/backends/common/BackendBase.h +20 -0
  159. data/vendor/simpleble/simpleble/src/backends/common/BackendUtils.h +33 -0
  160. data/vendor/simpleble/simpleble/src/backends/common/CharacteristicBase.cpp +28 -0
  161. data/vendor/simpleble/simpleble/src/backends/common/CharacteristicBase.h +38 -0
  162. data/vendor/simpleble/simpleble/src/backends/common/DescriptorBase.cpp +7 -0
  163. data/vendor/simpleble/simpleble/src/backends/common/DescriptorBase.h +19 -0
  164. data/vendor/simpleble/simpleble/src/backends/common/PeripheralBase.h +82 -0
  165. data/vendor/simpleble/simpleble/src/backends/common/ServiceBase.cpp +18 -0
  166. data/vendor/simpleble/simpleble/src/backends/common/ServiceBase.h +28 -0
  167. data/vendor/simpleble/simpleble/src/backends/linux/AdapterLinux.cpp +102 -0
  168. data/vendor/simpleble/simpleble/src/backends/linux/AdapterLinux.h +55 -0
  169. data/vendor/simpleble/simpleble/src/backends/linux/BackendBluez.cpp +87 -0
  170. data/vendor/simpleble/simpleble/src/backends/linux/PeripheralLinux.cpp +376 -0
  171. data/vendor/simpleble/simpleble/src/backends/linux/PeripheralLinux.h +90 -0
  172. data/vendor/simpleble/simpleble/src/backends/macos/AdapterBaseMacOS.h +29 -0
  173. data/vendor/simpleble/simpleble/src/backends/macos/AdapterMac.h +78 -0
  174. data/vendor/simpleble/simpleble/src/backends/macos/PeripheralBaseMacOS.h +49 -0
  175. data/vendor/simpleble/simpleble/src/backends/macos/PeripheralMac.h +81 -0
  176. data/vendor/simpleble/simpleble/src/backends/macos/Utils.h +9 -0
  177. data/vendor/simpleble/simpleble/src/backends/plain/AdapterPlain.cpp +65 -0
  178. data/vendor/simpleble/simpleble/src/backends/plain/AdapterPlain.h +49 -0
  179. data/vendor/simpleble/simpleble/src/backends/plain/BackendPlain.cpp +30 -0
  180. data/vendor/simpleble/simpleble/src/backends/plain/PeripheralPlain.cpp +159 -0
  181. data/vendor/simpleble/simpleble/src/backends/plain/PeripheralPlain.h +72 -0
  182. data/vendor/simpleble/simpleble/src/backends/windows/AdapterWindows.cpp +330 -0
  183. data/vendor/simpleble/simpleble/src/backends/windows/AdapterWindows.h +89 -0
  184. data/vendor/simpleble/simpleble/src/backends/windows/BackendWinRT.cpp +67 -0
  185. data/vendor/simpleble/simpleble/src/backends/windows/BackendWinRT.h +18 -0
  186. data/vendor/simpleble/simpleble/src/backends/windows/MtaManager.cpp +49 -0
  187. data/vendor/simpleble/simpleble/src/backends/windows/MtaManager.h +90 -0
  188. data/vendor/simpleble/simpleble/src/backends/windows/PeripheralWindows.cpp +487 -0
  189. data/vendor/simpleble/simpleble/src/backends/windows/PeripheralWindows.h +129 -0
  190. data/vendor/simpleble/simpleble/src/backends/windows/Utils.cpp +146 -0
  191. data/vendor/simpleble/simpleble/src/backends/windows/Utils.h +47 -0
  192. data/vendor/simpleble/simpleble/src/builders/BuildVec.h +32 -0
  193. data/vendor/simpleble/simpleble/src/builders/BuilderBase.h +87 -0
  194. data/vendor/simpleble/simpleble/src/external/TaskRunner.hpp +99 -0
  195. data/vendor/simpleble/simpleble/src/external/ThreadRunner.h +52 -0
  196. data/vendor/simpleble/simpleble/src/external/kvn_safe_callback.hpp +66 -0
  197. data/vendor/simpleble/simpleble/src/external/kvn_safe_map.hpp +94 -0
  198. data/vendor/simpleble/simpleble/src/external/kvn_threadrunner.hpp +70 -0
  199. data/vendor/simpleble/simpleble/src/external/logfwd.hpp +35 -0
  200. data/vendor/simpleble/simpleble/src/frontends/base/Adapter.cpp +111 -0
  201. data/vendor/simpleble/simpleble/src/frontends/base/Backend.cpp +83 -0
  202. data/vendor/simpleble/simpleble/src/frontends/base/Backend.h +76 -0
  203. data/vendor/simpleble/simpleble/src/frontends/base/Characteristic.cpp +56 -0
  204. data/vendor/simpleble/simpleble/src/frontends/base/Descriptor.cpp +21 -0
  205. data/vendor/simpleble/simpleble/src/frontends/base/Peripheral.cpp +113 -0
  206. data/vendor/simpleble/simpleble/src/frontends/base/Service.cpp +26 -0
  207. data/vendor/simpleble/simpleble/src/frontends/safe/AdapterSafe.cpp +158 -0
  208. data/vendor/simpleble/simpleble/src/frontends/safe/PeripheralSafe.cpp +219 -0
  209. data/vendor/simpleble/simpleble/src_c/adapter.cpp +204 -0
  210. data/vendor/simpleble/simpleble/src_c/logging.cpp +19 -0
  211. data/vendor/simpleble/simpleble/src_c/peripheral.cpp +444 -0
  212. data/vendor/simpleble/simpleble/src_c/simpleble.cpp +5 -0
  213. data/vendor/simpleble/simpleble/src_c/utils.cpp +15 -0
  214. data/vendor/simpleble/simpleble/test/src/main.cpp +8 -0
  215. data/vendor/simpleble/simpleble/test/src/test_bytearray.cpp +246 -0
  216. data/vendor/simpleble/simpleble/test/src/test_utils.cpp +24 -0
  217. data/vendor/simpleble/simplebluez/include/simplebluez/Adapter.h +46 -0
  218. data/vendor/simpleble/simplebluez/include/simplebluez/Agent.h +52 -0
  219. data/vendor/simpleble/simplebluez/include/simplebluez/Bluez.h +37 -0
  220. data/vendor/simpleble/simplebluez/include/simplebluez/BluezOrg.h +22 -0
  221. data/vendor/simpleble/simplebluez/include/simplebluez/BluezOrgBluez.h +26 -0
  222. data/vendor/simpleble/simplebluez/include/simplebluez/BluezRoot.h +32 -0
  223. data/vendor/simpleble/simplebluez/include/simplebluez/Characteristic.h +46 -0
  224. data/vendor/simpleble/simplebluez/include/simplebluez/Descriptor.h +33 -0
  225. data/vendor/simpleble/simplebluez/include/simplebluez/Device.h +64 -0
  226. data/vendor/simpleble/simplebluez/include/simplebluez/Exceptions.h +43 -0
  227. data/vendor/simpleble/simplebluez/include/simplebluez/Service.h +27 -0
  228. data/vendor/simpleble/simplebluez/include/simplebluez/Types.h +9 -0
  229. data/vendor/simpleble/simplebluez/include/simplebluez/interfaces/Adapter1.h +49 -0
  230. data/vendor/simpleble/simplebluez/include/simplebluez/interfaces/Agent1.h +100 -0
  231. data/vendor/simpleble/simplebluez/include/simplebluez/interfaces/AgentManager1.h +24 -0
  232. data/vendor/simpleble/simplebluez/include/simplebluez/interfaces/Battery1.h +32 -0
  233. data/vendor/simpleble/simplebluez/include/simplebluez/interfaces/Device1.h +62 -0
  234. data/vendor/simpleble/simplebluez/include/simplebluez/interfaces/GattCharacteristic1.h +48 -0
  235. data/vendor/simpleble/simplebluez/include/simplebluez/interfaces/GattDescriptor1.h +41 -0
  236. data/vendor/simpleble/simplebluez/include/simplebluez/interfaces/GattService1.h +28 -0
  237. data/vendor/simpleble/simplebluez/src/Adapter.cpp +78 -0
  238. data/vendor/simpleble/simplebluez/src/Agent.cpp +72 -0
  239. data/vendor/simpleble/simplebluez/src/Bluez.cpp +45 -0
  240. data/vendor/simpleble/simplebluez/src/BluezOrg.cpp +20 -0
  241. data/vendor/simpleble/simplebluez/src/BluezOrgBluez.cpp +23 -0
  242. data/vendor/simpleble/simplebluez/src/BluezRoot.cpp +44 -0
  243. data/vendor/simpleble/simplebluez/src/Characteristic.cpp +64 -0
  244. data/vendor/simpleble/simplebluez/src/Descriptor.cpp +27 -0
  245. data/vendor/simpleble/simplebluez/src/Device.cpp +104 -0
  246. data/vendor/simpleble/simplebluez/src/Exceptions.cpp +29 -0
  247. data/vendor/simpleble/simplebluez/src/Logging.cpp +52 -0
  248. data/vendor/simpleble/simplebluez/src/Logging.h +57 -0
  249. data/vendor/simpleble/simplebluez/src/Service.cpp +33 -0
  250. data/vendor/simpleble/simplebluez/src/interfaces/Adapter1.cpp +123 -0
  251. data/vendor/simpleble/simplebluez/src/interfaces/Agent1.cpp +143 -0
  252. data/vendor/simpleble/simplebluez/src/interfaces/AgentManager1.cpp +34 -0
  253. data/vendor/simpleble/simplebluez/src/interfaces/Battery1.cpp +30 -0
  254. data/vendor/simpleble/simplebluez/src/interfaces/Device1.cpp +170 -0
  255. data/vendor/simpleble/simplebluez/src/interfaces/GattCharacteristic1.cpp +118 -0
  256. data/vendor/simpleble/simplebluez/src/interfaces/GattDescriptor1.cpp +78 -0
  257. data/vendor/simpleble/simplebluez/src/interfaces/GattService1.cpp +28 -0
  258. data/vendor/simpleble/simplebluez/test/src/helpers/PythonRunner.cpp +53 -0
  259. data/vendor/simpleble/simplebluez/test/src/helpers/PythonRunner.h +24 -0
  260. data/vendor/simpleble/simplebluez/test/src/main.cpp +16 -0
  261. data/vendor/simpleble/simplecble/include/simplecble/adapter.h +188 -0
  262. data/vendor/simpleble/simplecble/include/simplecble/logging.h +37 -0
  263. data/vendor/simpleble/simplecble/include/simplecble/peripheral.h +304 -0
  264. data/vendor/simpleble/simplecble/include/simplecble/simpleble.h +21 -0
  265. data/vendor/simpleble/simplecble/include/simplecble/types.h +73 -0
  266. data/vendor/simpleble/simplecble/include/simplecble/utils.h +27 -0
  267. data/vendor/simpleble/simplecble/src/adapter.cpp +204 -0
  268. data/vendor/simpleble/simplecble/src/logging.cpp +19 -0
  269. data/vendor/simpleble/simplecble/src/peripheral.cpp +444 -0
  270. data/vendor/simpleble/simplecble/src/simpleble.cpp +5 -0
  271. data/vendor/simpleble/simplecble/src/utils.cpp +15 -0
  272. data/vendor/simpleble/simpledbus/include/simpledbus/advanced/Interface.h +67 -0
  273. data/vendor/simpleble/simpledbus/include/simpledbus/advanced/InterfaceRegistry.h +64 -0
  274. data/vendor/simpleble/simpledbus/include/simpledbus/advanced/Proxy.h +117 -0
  275. data/vendor/simpleble/simpledbus/include/simpledbus/base/Connection.h +50 -0
  276. data/vendor/simpleble/simpledbus/include/simpledbus/base/Exceptions.h +56 -0
  277. data/vendor/simpleble/simpledbus/include/simpledbus/base/Holder.h +147 -0
  278. data/vendor/simpleble/simpledbus/include/simpledbus/base/Logging.h +57 -0
  279. data/vendor/simpleble/simpledbus/include/simpledbus/base/Message.h +89 -0
  280. data/vendor/simpleble/simpledbus/include/simpledbus/base/Path.h +24 -0
  281. data/vendor/simpleble/simpledbus/include/simpledbus/interfaces/ObjectManager.h +26 -0
  282. data/vendor/simpleble/simpledbus/src/advanced/Interface.cpp +155 -0
  283. data/vendor/simpleble/simpledbus/src/advanced/Proxy.cpp +375 -0
  284. data/vendor/simpleble/simpledbus/src/base/Connection.cpp +222 -0
  285. data/vendor/simpleble/simpledbus/src/base/Exceptions.cpp +39 -0
  286. data/vendor/simpleble/simpledbus/src/base/Holder.cpp +739 -0
  287. data/vendor/simpleble/simpledbus/src/base/Logging.cpp +52 -0
  288. data/vendor/simpleble/simpledbus/src/base/Message.cpp +622 -0
  289. data/vendor/simpleble/simpledbus/src/base/Path.cpp +129 -0
  290. data/vendor/simpleble/simpledbus/src/interfaces/ObjectManager.cpp +58 -0
  291. data/vendor/simpleble/simpledbus/test/src/helpers/PythonRunner.cpp +53 -0
  292. data/vendor/simpleble/simpledbus/test/src/helpers/PythonRunner.h +24 -0
  293. data/vendor/simpleble/simpledbus/test/src/main.cpp +16 -0
  294. data/vendor/simpleble/simpledbus/test/src/test_holder.cpp +184 -0
  295. data/vendor/simpleble/simpledbus/test/src/test_message.cpp +397 -0
  296. data/vendor/simpleble/simpledbus/test/src/test_path.cpp +76 -0
  297. data/vendor/simpleble/simpledbus/test/src/test_proxy_children.cpp +109 -0
  298. data/vendor/simpleble/simpledbus/test/src/test_proxy_interfaces.cpp +102 -0
  299. data/vendor/simpleble/simpledbus/test/src/test_proxy_lifetime.cpp +18 -0
  300. data/vendor/simpleble/simpledroidble/simpledroidble/src/main/cpp/ThreadRunner.h +89 -0
  301. data/vendor/simpleble/simpledroidble/simpledroidble/src/main/cpp/android_utils.cpp +55 -0
  302. data/vendor/simpleble/simpledroidble/simpledroidble/src/main/cpp/android_utils.h +18 -0
  303. data/vendor/simpleble/simpledroidble/simpledroidble/src/main/cpp/simpleble_android.cpp +813 -0
  304. data/vendor/simpleble/simplejavable/cpp/src/core/AdapterWrapper.cpp +37 -0
  305. data/vendor/simpleble/simplejavable/cpp/src/core/AdapterWrapper.h +23 -0
  306. data/vendor/simpleble/simplejavable/cpp/src/core/Cache.cpp +58 -0
  307. data/vendor/simpleble/simplejavable/cpp/src/core/Cache.h +34 -0
  308. data/vendor/simpleble/simplejavable/cpp/src/core/PeripheralWrapper.cpp +17 -0
  309. data/vendor/simpleble/simplejavable/cpp/src/core/PeripheralWrapper.h +19 -0
  310. data/vendor/simpleble/simplejavable/cpp/src/java/lang/ArrayList.cpp +257 -0
  311. data/vendor/simpleble/simplejavable/cpp/src/java/lang/ArrayList.h +78 -0
  312. data/vendor/simpleble/simplejavable/cpp/src/java/lang/HashMap.cpp +96 -0
  313. data/vendor/simpleble/simplejavable/cpp/src/java/lang/HashMap.h +54 -0
  314. data/vendor/simpleble/simplejavable/cpp/src/java/lang/Integer.cpp +93 -0
  315. data/vendor/simpleble/simplejavable/cpp/src/java/lang/Integer.h +49 -0
  316. data/vendor/simpleble/simplejavable/cpp/src/java/lang/Iterator.cpp +85 -0
  317. data/vendor/simpleble/simplejavable/cpp/src/java/lang/Iterator.h +48 -0
  318. data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/AdapterCallback.cpp +91 -0
  319. data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/AdapterCallback.h +90 -0
  320. data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/Characteristic.cpp +35 -0
  321. data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/Characteristic.h +60 -0
  322. data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/DataCallback.cpp +33 -0
  323. data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/DataCallback.h +45 -0
  324. data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/Descriptor.cpp +30 -0
  325. data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/Descriptor.h +49 -0
  326. data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/PeripheralCallback.cpp +41 -0
  327. data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/PeripheralCallback.h +51 -0
  328. data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/Service.cpp +33 -0
  329. data/vendor/simpleble/simplejavable/cpp/src/org/simplejavable/Service.h +54 -0
  330. data/vendor/simpleble/simplejavable/cpp/src/simplejavable.cpp +361 -0
  331. data/vendor/simpleble/simplepyble/src/main.cpp +55 -0
  332. data/vendor/simpleble/simplepyble/src/wrap_adapter.cpp +106 -0
  333. data/vendor/simpleble/simplepyble/src/wrap_characteristic.cpp +56 -0
  334. data/vendor/simpleble/simplepyble/src/wrap_config.cpp +136 -0
  335. data/vendor/simpleble/simplepyble/src/wrap_descriptor.cpp +21 -0
  336. data/vendor/simpleble/simplepyble/src/wrap_peripheral.cpp +217 -0
  337. data/vendor/simpleble/simplepyble/src/wrap_service.cpp +32 -0
  338. data/vendor/simpleble/simplepyble/src/wrap_types.cpp +21 -0
  339. data/vendor/simpleble/simplersble/src/bindings/Bindings.cpp +338 -0
  340. data/vendor/simpleble/simplersble/src/bindings/Bindings.hpp +178 -0
  341. metadata +430 -0
@@ -0,0 +1,397 @@
1
+ #include <gtest/gtest.h>
2
+
3
+ #include <simpledbus/base/Connection.h>
4
+ #include <simpledbus/base/Message.h>
5
+
6
+ #include <chrono>
7
+
8
+ using namespace SimpleDBus;
9
+
10
+ class MessageTest : public ::testing::Test {
11
+ protected:
12
+ void SetUp() override {
13
+ conn = new Connection(DBUS_BUS_SESSION);
14
+ conn->init();
15
+ }
16
+
17
+ void TearDown() override {
18
+ conn->uninit();
19
+ delete conn;
20
+ conn = nullptr;
21
+ }
22
+
23
+ Connection* conn;
24
+ };
25
+
26
+ TEST_F(MessageTest, SendReceiveBooleanTrue) {
27
+ Message msg = Message::create_method_call("simpledbus.tester.python", "/", "simpledbus.tester.message",
28
+ "SendReceiveBoolean");
29
+
30
+ msg.append_argument(Holder::create_boolean(true), DBUS_TYPE_BOOLEAN_AS_STRING);
31
+
32
+ Message reply = conn->send_with_reply_and_block(msg);
33
+ Holder h_reply = reply.extract();
34
+
35
+ EXPECT_EQ(h_reply.type(), Holder::Type::BOOLEAN);
36
+ EXPECT_EQ(h_reply.get_boolean(), true);
37
+ }
38
+
39
+ TEST_F(MessageTest, SendReceiveBooleanFalse) {
40
+ Message msg = Message::create_method_call("simpledbus.tester.python", "/", "simpledbus.tester.message",
41
+ "SendReceiveBoolean");
42
+
43
+ msg.append_argument(Holder::create_boolean(false), DBUS_TYPE_BOOLEAN_AS_STRING);
44
+
45
+ Message reply = conn->send_with_reply_and_block(msg);
46
+ Holder h_reply = reply.extract();
47
+
48
+ EXPECT_EQ(h_reply.type(), Holder::Type::BOOLEAN);
49
+ EXPECT_EQ(h_reply.get_boolean(), false);
50
+ }
51
+
52
+ TEST_F(MessageTest, SendReceiveByte) {
53
+ Message msg = Message::create_method_call("simpledbus.tester.python", "/", "simpledbus.tester.message",
54
+ "SendReceiveByte");
55
+
56
+ uint8_t value = 0x42;
57
+ msg.append_argument(Holder::create_byte(value), DBUS_TYPE_BYTE_AS_STRING);
58
+
59
+ Message reply = conn->send_with_reply_and_block(msg);
60
+ Holder h_reply = reply.extract();
61
+
62
+ EXPECT_EQ(h_reply.type(), Holder::Type::BYTE);
63
+ EXPECT_EQ(h_reply.get_byte(), value);
64
+ }
65
+
66
+ TEST_F(MessageTest, SendReceiveInt16) {
67
+ Message msg = Message::create_method_call("simpledbus.tester.python", "/", "simpledbus.tester.message",
68
+ "SendReceiveInt16");
69
+
70
+ int16_t value = 0x1234;
71
+ msg.append_argument(Holder::create_int16(value), DBUS_TYPE_INT16_AS_STRING);
72
+
73
+ Message reply = conn->send_with_reply_and_block(msg);
74
+ Holder h_reply = reply.extract();
75
+
76
+ EXPECT_EQ(h_reply.type(), Holder::Type::INT16);
77
+ EXPECT_EQ(h_reply.get_int16(), value);
78
+ }
79
+
80
+ TEST_F(MessageTest, SendReceiveUint16) {
81
+ Message msg = Message::create_method_call("simpledbus.tester.python", "/", "simpledbus.tester.message",
82
+ "SendReceiveUint16");
83
+
84
+ uint16_t value = 0x1234;
85
+ msg.append_argument(Holder::create_uint16(value), DBUS_TYPE_UINT16_AS_STRING);
86
+
87
+ Message reply = conn->send_with_reply_and_block(msg);
88
+ Holder h_reply = reply.extract();
89
+
90
+ EXPECT_EQ(h_reply.type(), Holder::Type::UINT16);
91
+ EXPECT_EQ(h_reply.get_uint16(), value);
92
+ }
93
+
94
+ TEST_F(MessageTest, SendReceiveInt32) {
95
+ Message msg = Message::create_method_call("simpledbus.tester.python", "/", "simpledbus.tester.message",
96
+ "SendReceiveInt32");
97
+
98
+ int32_t value = 0x12345678;
99
+ msg.append_argument(Holder::create_int32(value), DBUS_TYPE_INT32_AS_STRING);
100
+
101
+ Message reply = conn->send_with_reply_and_block(msg);
102
+ Holder h_reply = reply.extract();
103
+
104
+ EXPECT_EQ(h_reply.type(), Holder::Type::INT32);
105
+ EXPECT_EQ(h_reply.get_int32(), value);
106
+ }
107
+
108
+ TEST_F(MessageTest, SendReceiveUint32) {
109
+ Message msg = Message::create_method_call("simpledbus.tester.python", "/", "simpledbus.tester.message",
110
+ "SendReceiveUint32");
111
+
112
+ uint32_t value = 0x12345678;
113
+ msg.append_argument(Holder::create_uint32(value), DBUS_TYPE_UINT32_AS_STRING);
114
+
115
+ Message reply = conn->send_with_reply_and_block(msg);
116
+ Holder h_reply = reply.extract();
117
+
118
+ EXPECT_EQ(h_reply.type(), Holder::Type::UINT32);
119
+ EXPECT_EQ(h_reply.get_uint32(), value);
120
+ }
121
+
122
+ TEST_F(MessageTest, SendReceiveInt64) {
123
+ Message msg = Message::create_method_call("simpledbus.tester.python", "/", "simpledbus.tester.message",
124
+ "SendReceiveInt64");
125
+
126
+ int64_t value = 0x1234567812345678;
127
+ msg.append_argument(Holder::create_int64(value), DBUS_TYPE_INT64_AS_STRING);
128
+
129
+ Message reply = conn->send_with_reply_and_block(msg);
130
+ Holder h_reply = reply.extract();
131
+
132
+ EXPECT_EQ(h_reply.type(), Holder::Type::INT64);
133
+ EXPECT_EQ(h_reply.get_int64(), value);
134
+ }
135
+
136
+ TEST_F(MessageTest, SendReceiveUint64) {
137
+ Message msg = Message::create_method_call("simpledbus.tester.python", "/", "simpledbus.tester.message",
138
+ "SendReceiveUint64");
139
+
140
+ uint64_t value = 0x1234567812345678;
141
+ msg.append_argument(Holder::create_uint64(value), DBUS_TYPE_UINT64_AS_STRING);
142
+
143
+ Message reply = conn->send_with_reply_and_block(msg);
144
+ Holder h_reply = reply.extract();
145
+
146
+ EXPECT_EQ(h_reply.type(), Holder::Type::UINT64);
147
+ EXPECT_EQ(h_reply.get_uint64(), value);
148
+ }
149
+
150
+ TEST_F(MessageTest, SendReceiveArrayInt32) {
151
+ Message msg = Message::create_method_call("simpledbus.tester.python", "/", "simpledbus.tester.message",
152
+ "SendReceiveArrayInt32");
153
+
154
+ Holder h_msg = Holder::create_array();
155
+ h_msg.array_append(Holder::create_int32(0x12345678));
156
+ h_msg.array_append(Holder::create_int32(0x87654321));
157
+ msg.append_argument(h_msg, "ai");
158
+
159
+ Message reply = conn->send_with_reply_and_block(msg);
160
+ Holder h_reply = reply.extract();
161
+
162
+ EXPECT_EQ(h_reply.type(), Holder::Type::ARRAY);
163
+
164
+ std::vector<Holder> array = h_reply.get_array();
165
+
166
+ ASSERT_EQ(array.size(), 2);
167
+
168
+ EXPECT_EQ(array[0].type(), Holder::Type::INT32);
169
+ EXPECT_EQ(array[0].get_int32(), 0x12345678);
170
+
171
+ EXPECT_EQ(array[1].type(), Holder::Type::INT32);
172
+ EXPECT_EQ(array[1].get_int32(), 0x87654321);
173
+ }
174
+
175
+ TEST_F(MessageTest, SendReceiveArrayString) {
176
+ Message msg = Message::create_method_call("simpledbus.tester.python", "/", "simpledbus.tester.message",
177
+ "SendReceiveArrayString");
178
+
179
+ Holder h_msg = Holder::create_array();
180
+ h_msg.array_append(Holder::create_string("Hello"));
181
+ h_msg.array_append(Holder::create_string("World"));
182
+ msg.append_argument(h_msg, "as");
183
+
184
+ Message reply = conn->send_with_reply_and_block(msg);
185
+ Holder h_reply = reply.extract();
186
+
187
+ EXPECT_EQ(h_reply.type(), Holder::Type::ARRAY);
188
+
189
+ std::vector<Holder> array = h_reply.get_array();
190
+
191
+ ASSERT_EQ(array.size(), 2);
192
+
193
+ EXPECT_EQ(array[0].type(), Holder::Type::STRING);
194
+ EXPECT_EQ(array[0].get_string(), "Hello");
195
+
196
+ EXPECT_EQ(array[1].type(), Holder::Type::STRING);
197
+ EXPECT_EQ(array[1].get_string(), "World");
198
+ }
199
+
200
+ TEST_F(MessageTest, SendReceiveDictInt32) {
201
+ Message msg = Message::create_method_call("simpledbus.tester.python", "/", "simpledbus.tester.message",
202
+ "SendReceiveDictInt32");
203
+
204
+ Holder h_msg = Holder::create_dict();
205
+ h_msg.dict_append(Holder::INT32, static_cast<int32_t>(0x12345678), Holder::create_int32(0x87654321));
206
+ h_msg.dict_append(Holder::INT32, static_cast<int32_t>(0x87654321), Holder::create_string("Hello"));
207
+ msg.append_argument(h_msg, "a{iv}");
208
+
209
+ Message reply = conn->send_with_reply_and_block(msg);
210
+ Holder h_reply = reply.extract();
211
+
212
+ EXPECT_EQ(h_reply.type(), Holder::Type::DICT);
213
+
214
+ std::map<int32_t, Holder> dict = h_reply.get_dict_int32();
215
+
216
+ ASSERT_EQ(dict.size(), 2);
217
+ ASSERT_EQ(dict.count(0x12345678), 1);
218
+ ASSERT_EQ(dict.count(0x87654321), 1);
219
+
220
+ EXPECT_EQ(dict[0x12345678].type(), Holder::Type::INT32);
221
+ EXPECT_EQ(dict[0x12345678].get_int32(), 0x87654321);
222
+
223
+ EXPECT_EQ(dict[0x87654321].type(), Holder::Type::STRING);
224
+ EXPECT_EQ(dict[0x87654321].get_string(), "Hello");
225
+ }
226
+
227
+ TEST_F(MessageTest, SendReceiveDictString) {
228
+ Message msg = Message::create_method_call("simpledbus.tester.python", "/", "simpledbus.tester.message",
229
+ "SendReceiveDictString");
230
+
231
+ Holder h_msg = Holder::create_dict();
232
+ h_msg.dict_append(Holder::STRING, "key1", Holder::create_int32(0x87654321));
233
+ h_msg.dict_append(Holder::STRING, "key2", Holder::create_string("Hello"));
234
+ msg.append_argument(h_msg, "a{sv}");
235
+
236
+ Message reply = conn->send_with_reply_and_block(msg);
237
+ Holder h_reply = reply.extract();
238
+
239
+ EXPECT_EQ(h_reply.type(), Holder::Type::DICT);
240
+
241
+ std::map<std::string, Holder> dict = h_reply.get_dict_string();
242
+
243
+ ASSERT_EQ(dict.size(), 2);
244
+ ASSERT_EQ(dict.count("key1"), 1);
245
+ ASSERT_EQ(dict.count("key2"), 1);
246
+
247
+ EXPECT_EQ(dict["key1"].type(), Holder::Type::INT32);
248
+ EXPECT_EQ(dict["key1"].get_int32(), 0x87654321);
249
+
250
+ EXPECT_EQ(dict["key2"].type(), Holder::Type::STRING);
251
+ EXPECT_EQ(dict["key2"].get_string(), "Hello");
252
+ }
253
+
254
+ TEST_F(MessageTest, ReceiveMethodCallSuccess) {
255
+ Message msg = Message::create_method_call("simpledbus.tester.python", "/", "simpledbus.tester.message",
256
+ "TriggerMethodCall");
257
+
258
+ msg.append_argument(Holder::create_string(conn->unique_name()), DBUS_TYPE_STRING_AS_STRING);
259
+ msg.append_argument(Holder::create_string("/my/custom/path"), DBUS_TYPE_STRING_AS_STRING);
260
+ msg.append_argument(Holder::create_string("my.interface"), DBUS_TYPE_STRING_AS_STRING);
261
+ msg.append_argument(Holder::create_string("MyMethod"), DBUS_TYPE_STRING_AS_STRING);
262
+ msg.append_argument(Holder::create_string("Hello World"), DBUS_TYPE_STRING_AS_STRING);
263
+ conn->send_with_reply_and_block(msg);
264
+
265
+ // Wait for the method call to be received
266
+ bool method_called = false;
267
+ std::chrono::time_point<std::chrono::steady_clock> end = std::chrono::steady_clock::now() + std::chrono::seconds(1);
268
+ while (std::chrono::steady_clock::now() < end) {
269
+ conn->read_write();
270
+ auto method_call = conn->pop_message();
271
+ if (method_call.is_valid()) {
272
+ EXPECT_EQ(method_call.get_path(), "/my/custom/path");
273
+ EXPECT_EQ(method_call.get_interface(), "my.interface");
274
+ EXPECT_EQ(method_call.get_member(), "MyMethod");
275
+
276
+ Holder arguments = method_call.extract();
277
+ EXPECT_EQ(arguments.type(), Holder::Type::STRING);
278
+ EXPECT_EQ(arguments.get_string(), "Hello World");
279
+
280
+ Message reply = Message::create_method_return(method_call);
281
+ reply.append_argument(Holder::create_string("Nice to meet you"), DBUS_TYPE_STRING_AS_STRING);
282
+ conn->send(reply);
283
+ method_called = true;
284
+ break;
285
+ }
286
+ }
287
+ EXPECT_TRUE(method_called);
288
+ }
289
+
290
+ TEST_F(MessageTest, ReceiveMethodCallFailure) {
291
+ Message msg = Message::create_method_call("simpledbus.tester.python", "/", "simpledbus.tester.message",
292
+ "TriggerMethodCall");
293
+
294
+ msg.append_argument(Holder::create_string(conn->unique_name()), DBUS_TYPE_STRING_AS_STRING);
295
+ msg.append_argument(Holder::create_string("/my/custom/path"), DBUS_TYPE_STRING_AS_STRING);
296
+ msg.append_argument(Holder::create_string("my.interface"), DBUS_TYPE_STRING_AS_STRING);
297
+ msg.append_argument(Holder::create_string("MyMethod"), DBUS_TYPE_STRING_AS_STRING);
298
+ msg.append_argument(Holder::create_string("Hello World"), DBUS_TYPE_STRING_AS_STRING);
299
+ conn->send_with_reply_and_block(msg);
300
+
301
+ // Wait for the method call to be received
302
+ bool method_called = false;
303
+ std::chrono::time_point<std::chrono::steady_clock> end = std::chrono::steady_clock::now() + std::chrono::seconds(1);
304
+ while (std::chrono::steady_clock::now() < end) {
305
+ conn->read_write();
306
+ auto method_call = conn->pop_message();
307
+ if (method_call.is_valid()) {
308
+ EXPECT_EQ(method_call.get_path(), "/my/custom/path");
309
+ EXPECT_EQ(method_call.get_interface(), "my.interface");
310
+ EXPECT_EQ(method_call.get_member(), "MyMethod");
311
+
312
+ Holder arguments = method_call.extract();
313
+ EXPECT_EQ(arguments.type(), Holder::Type::STRING);
314
+ EXPECT_EQ(arguments.get_string(), "Hello World");
315
+
316
+ Message reply = Message::create_error(method_call, "simpledbus.error.unknown", "Unknown error");
317
+ conn->send(reply);
318
+ method_called = true;
319
+ break;
320
+ }
321
+ }
322
+ EXPECT_TRUE(method_called);
323
+ }
324
+
325
+ TEST_F(MessageTest, CopyConstructor) {
326
+ // Create an original message
327
+ Message original = Message::create_method_call("org.example.Bus", "/org/example/Path", "org.example.Interface",
328
+ "ExampleMethod");
329
+ original.append_argument(Holder::create_string("Test argument"), "s");
330
+
331
+ // Test copy constructor
332
+ Message copy_constructed(original);
333
+ EXPECT_TRUE(copy_constructed.is_valid());
334
+ EXPECT_NE(copy_constructed.get_unique_id(), original.get_unique_id());
335
+ EXPECT_EQ(copy_constructed.get_path(), original.get_path());
336
+ EXPECT_EQ(copy_constructed.get_interface(), original.get_interface());
337
+ EXPECT_EQ(copy_constructed.get_member(), original.get_member());
338
+
339
+ // Verify that the original message is still valid and unchanged
340
+ EXPECT_TRUE(original.is_valid());
341
+ EXPECT_EQ(original.get_path(), "/org/example/Path");
342
+ EXPECT_EQ(original.get_interface(), "org.example.Interface");
343
+ EXPECT_EQ(original.get_member(), "ExampleMethod");
344
+ }
345
+
346
+ TEST_F(MessageTest, CopyAssignment) {
347
+ // Create an original message
348
+ Message original = Message::create_method_call("org.example.Bus", "/org/example/Path", "org.example.Interface",
349
+ "ExampleMethod");
350
+ original.append_argument(Holder::create_string("Test argument"), "s");
351
+
352
+ // Test copy assignment
353
+ Message copy_assigned;
354
+ copy_assigned = original;
355
+ EXPECT_TRUE(copy_assigned.is_valid());
356
+ EXPECT_NE(copy_assigned.get_unique_id(), original.get_unique_id());
357
+ EXPECT_EQ(copy_assigned.get_path(), original.get_path());
358
+ EXPECT_EQ(copy_assigned.get_interface(), original.get_interface());
359
+ EXPECT_EQ(copy_assigned.get_member(), original.get_member());
360
+
361
+ // Verify that the original message is still valid and unchanged
362
+ EXPECT_TRUE(original.is_valid());
363
+ EXPECT_EQ(original.get_path(), "/org/example/Path");
364
+ EXPECT_EQ(original.get_interface(), "org.example.Interface");
365
+ EXPECT_EQ(original.get_member(), "ExampleMethod");
366
+ }
367
+
368
+ TEST_F(MessageTest, MoveConstructor) {
369
+ // Create an original message
370
+ Message original = Message::create_method_call("org.example.Bus", "/org/example/Path", "org.example.Interface",
371
+ "ExampleMethod");
372
+ original.append_argument(Holder::create_string("Test argument"), "s");
373
+
374
+ // Test move constructor
375
+ Message move_constructed(std::move(original));
376
+ EXPECT_TRUE(move_constructed.is_valid());
377
+ EXPECT_FALSE(original.is_valid()); // Original should be invalidated
378
+ EXPECT_EQ(move_constructed.get_path(), "/org/example/Path");
379
+ EXPECT_EQ(move_constructed.get_interface(), "org.example.Interface");
380
+ EXPECT_EQ(move_constructed.get_member(), "ExampleMethod");
381
+ }
382
+
383
+ TEST_F(MessageTest, MoveAssignment) {
384
+ // Create an original message
385
+ Message original = Message::create_method_call("org.example.Bus", "/org/example/Path", "org.example.Interface",
386
+ "ExampleMethod");
387
+ original.append_argument(Holder::create_string("Test argument"), "s");
388
+
389
+ // Test move assignment
390
+ Message move_assigned;
391
+ move_assigned = std::move(original);
392
+ EXPECT_TRUE(move_assigned.is_valid());
393
+ EXPECT_FALSE(original.is_valid()); // Original should be invalidated
394
+ EXPECT_EQ(move_assigned.get_path(), "/org/example/Path");
395
+ EXPECT_EQ(move_assigned.get_interface(), "org.example.Interface");
396
+ EXPECT_EQ(move_assigned.get_member(), "ExampleMethod");
397
+ }
@@ -0,0 +1,76 @@
1
+ #include <gmock/gmock.h>
2
+ #include <gtest/gtest.h>
3
+
4
+ #include <simpledbus/base/Path.h>
5
+
6
+ using namespace SimpleDBus;
7
+
8
+ TEST(Path, CountElements) {
9
+ EXPECT_EQ(0, Path::count_elements("/"));
10
+ EXPECT_EQ(1, Path::count_elements("/a"));
11
+ EXPECT_EQ(2, Path::count_elements("/a/b"));
12
+ EXPECT_EQ(3, Path::count_elements("/a/b/c"));
13
+ }
14
+
15
+ TEST(Path, FetchElements) {
16
+ EXPECT_EQ("/", Path::fetch_elements("/a/b/c/d", 0));
17
+ EXPECT_EQ("/a", Path::fetch_elements("/a/b/c/d", 1));
18
+ EXPECT_EQ("/a/b", Path::fetch_elements("/a/b/c/d", 2));
19
+ EXPECT_EQ("/a/b/c", Path::fetch_elements("/a/b/c/d", 3));
20
+ EXPECT_EQ("/a/b/c/d", Path::fetch_elements("/a/b/c/d", 4));
21
+ }
22
+
23
+ TEST(Path, SplitElements) {
24
+ EXPECT_THAT(Path::split_elements("/"), ::testing::SizeIs(0));
25
+ EXPECT_THAT(Path::split_elements("/a"), ::testing::ElementsAre("a"));
26
+ EXPECT_THAT(Path::split_elements("/a/b"), ::testing::ElementsAre("a", "b"));
27
+ EXPECT_THAT(Path::split_elements("/a/b/c"), ::testing::ElementsAre("a", "b", "c"));
28
+ EXPECT_THAT(Path::split_elements("/a/b/c/d"), ::testing::ElementsAre("a", "b", "c", "d"));
29
+ }
30
+
31
+ TEST(Path, RecognizeDescendant) {
32
+ EXPECT_FALSE(Path::is_descendant("/a/b", "/a/b"));
33
+ EXPECT_FALSE(Path::is_descendant("/a/b", "/a"));
34
+ EXPECT_FALSE(Path::is_descendant("/a/b", "/"));
35
+
36
+ EXPECT_TRUE(Path::is_descendant("/a/b", "/a/b/c"));
37
+ EXPECT_TRUE(Path::is_descendant("/a/b", "/a/b/c/d"));
38
+ EXPECT_TRUE(Path::is_descendant("/a/b", "/a/b/c/d/e"));
39
+ }
40
+
41
+ TEST(Path, RecognizeAscendant) {
42
+ EXPECT_FALSE(Path::is_ascendant("/a/b", "/a/b"));
43
+ EXPECT_TRUE(Path::is_ascendant("/a/b", "/a"));
44
+ EXPECT_TRUE(Path::is_ascendant("/a/b", "/"));
45
+
46
+ EXPECT_FALSE(Path::is_ascendant("/a/b", "/a/b/c"));
47
+ EXPECT_FALSE(Path::is_ascendant("/a/b", "/a/b/c/d"));
48
+ EXPECT_FALSE(Path::is_ascendant("/a/b", "/a/b/c/d/e"));
49
+ }
50
+
51
+ TEST(Path, RecognizeChild) {
52
+ EXPECT_FALSE(Path::is_child("/a/b", "/a/b"));
53
+ EXPECT_FALSE(Path::is_child("/a/b", "/a"));
54
+ EXPECT_FALSE(Path::is_child("/a/b", "/"));
55
+
56
+ EXPECT_TRUE(Path::is_child("/a/b", "/a/b/c"));
57
+ EXPECT_FALSE(Path::is_child("/a/b", "/a/b/c/d"));
58
+ EXPECT_FALSE(Path::is_child("/a/b", "/a/b/c/d/e"));
59
+ }
60
+
61
+ TEST(Path, RecognizeParent) {
62
+ EXPECT_FALSE(Path::is_parent("/a/b", "/a/b"));
63
+ EXPECT_TRUE(Path::is_parent("/a/b", "/a"));
64
+ EXPECT_FALSE(Path::is_parent("/a/b", "/"));
65
+
66
+ EXPECT_FALSE(Path::is_parent("/a/b", "/a/b/c"));
67
+ EXPECT_FALSE(Path::is_parent("/a/b", "/a/b/c/d"));
68
+ EXPECT_FALSE(Path::is_parent("/a/b", "/a/b/c/d/e"));
69
+ }
70
+
71
+ TEST(Path, GenerateNextChild) {
72
+ EXPECT_EQ("/a", Path::next_child("/", "/a/b/c/d/e"));
73
+ EXPECT_EQ("/a/b", Path::next_child("/a", "/a/b/c/d/e"));
74
+ EXPECT_EQ("/a/b/c", Path::next_child("/a/b", "/a/b/c/d/e"));
75
+ EXPECT_EQ("/a/b/c/d", Path::next_child("/a/b/c", "/a/b/c/d/e"));
76
+ }
@@ -0,0 +1,109 @@
1
+ #include <gtest/gtest.h>
2
+
3
+ #include <simpledbus/advanced/Proxy.h>
4
+
5
+ using namespace SimpleDBus;
6
+
7
+ TEST(ProxyChildren, AppendChild) {
8
+ Proxy p = Proxy(nullptr, "", "/a/b");
9
+
10
+ p.path_add("/a/b/c", Holder());
11
+ EXPECT_EQ(1, p.children().size());
12
+ EXPECT_EQ(1, p.children().count("/a/b/c"));
13
+ EXPECT_EQ("/a/b/c", p.children().at("/a/b/c")->path());
14
+ }
15
+
16
+ TEST(ProxyChildren, AppendRepeatedChild) {
17
+ Proxy p = Proxy(nullptr, "", "/a/b");
18
+ p.path_add("/a/b/c", Holder());
19
+
20
+ // Attempting to add a child with the same name should be a no-op
21
+ p.path_add("/a/b/c", Holder());
22
+ EXPECT_EQ(1, p.children().size());
23
+ }
24
+
25
+ TEST(ProxyChildren, AppendExtendedChild) {
26
+ Proxy p = Proxy(nullptr, "", "/");
27
+ p.path_add("/a/b/c/d", Holder());
28
+
29
+ ASSERT_EQ(1, p.children().size());
30
+ ASSERT_EQ(1, p.children().count("/a"));
31
+
32
+ std::shared_ptr<Proxy> p_a = std::dynamic_pointer_cast<Proxy>(p.children().at("/a"));
33
+ ASSERT_EQ(1, p_a->children().size());
34
+ ASSERT_EQ(1, p_a->children().count("/a/b"));
35
+
36
+ std::shared_ptr<Proxy> p_a_b = std::dynamic_pointer_cast<Proxy>(p_a->children().at("/a/b"));
37
+ ASSERT_EQ(1, p_a_b->children().size());
38
+ ASSERT_EQ(1, p_a_b->children().count("/a/b/c"));
39
+
40
+ std::shared_ptr<Proxy> p_a_b_c = std::dynamic_pointer_cast<Proxy>(p_a_b->children().at("/a/b/c"));
41
+ ASSERT_EQ(1, p_a_b_c->children().size());
42
+ ASSERT_EQ(1, p_a_b_c->children().count("/a/b/c/d"));
43
+ }
44
+
45
+ TEST(ProxyChildren, RemoveSelf) {
46
+ Proxy p = Proxy(nullptr, "", "/");
47
+
48
+ // Should notify that the proxy can be safely deleted, as nothing worth keeping is left
49
+ ASSERT_TRUE(p.path_remove("/", Holder::create_array()));
50
+
51
+ // Add a child path without any interfaces
52
+ p.path_add("/a", Holder());
53
+
54
+ // Attempt to remove the path while holding a local copy of the child, should be a no-op
55
+ {
56
+ std::shared_ptr<Proxy> p_a = std::dynamic_pointer_cast<Proxy>(p.children().at("/a"));
57
+ // As there is another copy of the child, the proxy should not be deleted
58
+ ASSERT_FALSE(p.path_remove("/", Holder::create_array()));
59
+ ASSERT_EQ(1, p.children().size());
60
+ }
61
+
62
+ // Should notify that the proxy can be safely deleted, as nothing worth keeping is left
63
+ ASSERT_TRUE(p.path_remove("/", Holder::create_array()));
64
+ ASSERT_EQ(0, p.children().size());
65
+ }
66
+
67
+ TEST(ProxyChildren, RemoveChildNoInterfaces) {
68
+ Proxy p = Proxy(nullptr, "", "/");
69
+ p.path_add("/a", Holder());
70
+
71
+ // Attempt to remove the path while holding a local copy of the child, should be a no-op
72
+ {
73
+ std::shared_ptr<Proxy> p_a = std::dynamic_pointer_cast<Proxy>(p.children().at("/a"));
74
+ // As there is another copy of the child, the proxy should not be deleted
75
+ ASSERT_FALSE(p.path_remove("/a", Holder::create_array()));
76
+ ASSERT_EQ(1, p.children().size());
77
+ }
78
+
79
+ // As only the child was removed, the main proxy should not be deleted.
80
+ ASSERT_FALSE(p.path_remove("/a", Holder::create_array()));
81
+ ASSERT_EQ(0, p.children().size());
82
+ }
83
+
84
+ TEST(ProxyChildren, RemoveChildWithInterfaces) {
85
+ Proxy p = Proxy(nullptr, "", "/");
86
+
87
+ Holder managed_interfaces = Holder::create_dict();
88
+ managed_interfaces.dict_append(Holder::STRING, "i.1", Holder());
89
+ managed_interfaces.dict_append(Holder::STRING, "i.2", Holder());
90
+ p.path_add("/a", managed_interfaces);
91
+
92
+ Holder removed_interfaces = Holder::create_array();
93
+ removed_interfaces.array_append(Holder::create_string("i.2"));
94
+ p.path_remove("/a", removed_interfaces);
95
+
96
+ // Because /a has one interface still, it should still be in the children map.
97
+ ASSERT_EQ(1, p.children().size());
98
+ {
99
+ std::shared_ptr<Proxy> p_a = std::dynamic_pointer_cast<Proxy>(p.children().at("/a"));
100
+ ASSERT_EQ(1, p_a->interfaces_count());
101
+ ASSERT_EQ(1, p_a->interfaces().count("i.1"));
102
+ }
103
+
104
+ // Remove the second interface
105
+ removed_interfaces = Holder::create_array();
106
+ removed_interfaces.array_append(Holder::create_string("i.1"));
107
+ p.path_remove("/a", removed_interfaces);
108
+ ASSERT_EQ(0, p.children().size());
109
+ }
@@ -0,0 +1,102 @@
1
+ #include <gtest/gtest.h>
2
+
3
+ #include <simpledbus/advanced/Proxy.h>
4
+ #include <simpledbus/advanced/InterfaceRegistry.h>
5
+
6
+ using namespace SimpleDBus;
7
+
8
+ const AutoRegisterInterface<Interface> registry_i1{
9
+ "i.1",
10
+ // clang-format off
11
+ [](std::shared_ptr<Connection> conn, const std::string& bus_name, const std::string& path, const Holder& options) -> std::shared_ptr<SimpleDBus::Interface> {
12
+ return std::make_shared<Interface>(conn, bus_name, path, "i.1");
13
+ }
14
+ // clang-format on
15
+ };
16
+
17
+ const AutoRegisterInterface<Interface> registry_i2{
18
+ "i.2",
19
+ // clang-format off
20
+ [](std::shared_ptr<Connection> conn, const std::string& bus_name, const std::string& path, const Holder& options) -> std::shared_ptr<SimpleDBus::Interface> {
21
+ return std::make_shared<Interface>(conn, bus_name, path, "i.2");
22
+ }
23
+ // clang-format on
24
+ };
25
+
26
+ const AutoRegisterInterface<Interface> registry_i3{
27
+ "i.3",
28
+ // clang-format off
29
+ [](std::shared_ptr<Connection> conn, const std::string& bus_name, const std::string& path, const Holder& options) -> std::shared_ptr<SimpleDBus::Interface> {
30
+ return std::make_shared<Interface>(conn, bus_name, path, "i.3");
31
+ }
32
+ // clang-format on
33
+ };
34
+
35
+ TEST(ProxyInterfaces, LoadInterfaces) {
36
+ Holder managed_interfaces = Holder::create_dict();
37
+ managed_interfaces.dict_append(Holder::STRING, "i.1", Holder());
38
+
39
+ Proxy h = Proxy(nullptr, "", "/");
40
+ EXPECT_FALSE(h.interfaces_loaded());
41
+
42
+ // TODO: Check that all properties of the interface are correctly loaded.
43
+
44
+ h.interfaces_load(managed_interfaces);
45
+
46
+ EXPECT_TRUE(h.interfaces_loaded());
47
+ EXPECT_EQ(1, h.interfaces().size());
48
+ EXPECT_EQ(1, h.interfaces().count("i.1"));
49
+ }
50
+
51
+ TEST(ProxyInterfaces, UnloadInterfaces) {
52
+ Holder managed_interfaces = Holder::create_dict();
53
+ managed_interfaces.dict_append(Holder::STRING, "i.1", Holder());
54
+ managed_interfaces.dict_append(Holder::STRING, "i.2", Holder());
55
+ managed_interfaces.dict_append(Holder::STRING, "i.3", Holder());
56
+
57
+ Proxy h = Proxy(nullptr, "", "/");
58
+ h.interfaces_load(managed_interfaces);
59
+ EXPECT_EQ(3, h.interfaces_count());
60
+
61
+ Holder removed_interfaces = Holder::create_array();
62
+ removed_interfaces.array_append(Holder::create_string("i.3"));
63
+ h.interfaces_unload(removed_interfaces);
64
+
65
+ EXPECT_EQ(2, h.interfaces_count());
66
+ EXPECT_TRUE(h.interfaces_loaded());
67
+ EXPECT_FALSE(h.interfaces().at("i.3")->is_loaded());
68
+
69
+ removed_interfaces = Holder::create_array();
70
+ removed_interfaces.array_append(Holder::create_string("i.2"));
71
+ h.interfaces_unload(removed_interfaces);
72
+
73
+ EXPECT_EQ(1, h.interfaces_count());
74
+ EXPECT_TRUE(h.interfaces_loaded());
75
+ EXPECT_FALSE(h.interfaces().at("i.2")->is_loaded());
76
+
77
+ removed_interfaces = Holder::create_array();
78
+ removed_interfaces.array_append(Holder::create_string("i.1"));
79
+ h.interfaces_unload(removed_interfaces);
80
+
81
+ EXPECT_EQ(0, h.interfaces_count());
82
+ EXPECT_FALSE(h.interfaces_loaded());
83
+ EXPECT_FALSE(h.interfaces().at("i.1")->is_loaded());
84
+ }
85
+
86
+ TEST(ProxyInterfaces, ReloadInterfaces) {
87
+ Holder managed_interfaces = Holder::create_dict();
88
+ managed_interfaces.dict_append(Holder::STRING, "i.1", Holder());
89
+ managed_interfaces.dict_append(Holder::STRING, "i.2", Holder());
90
+ managed_interfaces.dict_append(Holder::STRING, "i.3", Holder());
91
+
92
+ Proxy h = Proxy(nullptr, "", "/");
93
+ h.interfaces_load(managed_interfaces);
94
+ EXPECT_EQ(3, h.interfaces_count());
95
+
96
+ managed_interfaces = Holder::create_dict();
97
+ managed_interfaces.dict_append(Holder::STRING, "i.1", Holder());
98
+ managed_interfaces.dict_append(Holder::STRING, "i.3", Holder());
99
+ h.interfaces_reload(managed_interfaces);
100
+
101
+ EXPECT_EQ(2, h.interfaces_count());
102
+ }