gir_ffi 0.14.1 → 0.15.4

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 (281) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +56 -0
  3. data/README.md +12 -12
  4. data/TODO.md +14 -35
  5. data/docs/Documentation.md +6 -0
  6. data/docs/Subclassing.md +38 -0
  7. data/lib/ffi-glib.rb +26 -21
  8. data/lib/ffi-glib/array.rb +14 -4
  9. data/lib/ffi-glib/byte_array.rb +9 -3
  10. data/lib/ffi-glib/container_class_methods.rb +1 -1
  11. data/lib/ffi-glib/destroy_notify.rb +2 -2
  12. data/lib/ffi-glib/error.rb +1 -1
  13. data/lib/ffi-glib/hash_table.rb +4 -5
  14. data/lib/ffi-glib/list.rb +12 -6
  15. data/lib/ffi-glib/list_methods.rb +13 -1
  16. data/lib/ffi-glib/main_loop.rb +3 -3
  17. data/lib/ffi-glib/ptr_array.rb +30 -8
  18. data/lib/ffi-glib/s_list.rb +11 -5
  19. data/lib/ffi-glib/variant.rb +1 -1
  20. data/lib/ffi-gobject.rb +13 -16
  21. data/lib/ffi-gobject/object.rb +82 -87
  22. data/lib/ffi-gobject/object_class.rb +1 -1
  23. data/lib/ffi-gobject/param_spec.rb +1 -1
  24. data/lib/ffi-gobject/ruby_closure.rb +2 -2
  25. data/lib/ffi-gobject/value.rb +136 -126
  26. data/lib/ffi-gobject_introspection.rb +20 -20
  27. data/lib/ffi-gobject_introspection/gobject_type_init.rb +2 -2
  28. data/lib/ffi-gobject_introspection/i_arg_info.rb +2 -2
  29. data/lib/ffi-gobject_introspection/i_base_info.rb +34 -23
  30. data/lib/ffi-gobject_introspection/i_callable_info.rb +4 -4
  31. data/lib/ffi-gobject_introspection/i_constant_info.rb +2 -2
  32. data/lib/ffi-gobject_introspection/i_enum_info.rb +1 -0
  33. data/lib/ffi-gobject_introspection/i_field_info.rb +1 -1
  34. data/lib/ffi-gobject_introspection/i_function_info.rb +1 -1
  35. data/lib/ffi-gobject_introspection/i_interface_info.rb +1 -1
  36. data/lib/ffi-gobject_introspection/i_object_info.rb +2 -2
  37. data/lib/ffi-gobject_introspection/i_property_info.rb +2 -2
  38. data/lib/ffi-gobject_introspection/i_repository.rb +9 -6
  39. data/lib/ffi-gobject_introspection/i_struct_info.rb +2 -1
  40. data/lib/ffi-gobject_introspection/i_type_info.rb +13 -7
  41. data/lib/ffi-gobject_introspection/i_unresolved_info.rb +1 -1
  42. data/lib/ffi-gobject_introspection/i_vfunc_info.rb +1 -1
  43. data/lib/ffi-gobject_introspection/lib.rb +30 -19
  44. data/lib/ffi-gobject_introspection/strv.rb +1 -1
  45. data/lib/gir_ffi-base.rb +1 -1
  46. data/lib/gir_ffi-base/gobject.rb +26 -25
  47. data/lib/gir_ffi-base/gobject/lib.rb +7 -2
  48. data/lib/gir_ffi.rb +3 -3
  49. data/lib/gir_ffi/allocation_helper.rb +1 -1
  50. data/lib/gir_ffi/arg_helper.rb +4 -4
  51. data/lib/gir_ffi/{in_out_pointer.rb → array_element_convertor.rb} +16 -24
  52. data/lib/gir_ffi/boolean.rb +1 -1
  53. data/lib/gir_ffi/boxed_base.rb +2 -6
  54. data/lib/gir_ffi/builder.rb +19 -11
  55. data/lib/gir_ffi/builder_helper.rb +10 -2
  56. data/lib/gir_ffi/builders/argument_builder.rb +19 -19
  57. data/lib/gir_ffi/builders/argument_builder_collection.rb +2 -2
  58. data/lib/gir_ffi/builders/base_argument_builder.rb +2 -1
  59. data/lib/gir_ffi/builders/base_method_builder.rb +8 -8
  60. data/lib/gir_ffi/builders/base_return_value_builder.rb +1 -1
  61. data/lib/gir_ffi/builders/base_type_builder.rb +2 -2
  62. data/lib/gir_ffi/builders/c_to_ruby_convertor.rb +5 -5
  63. data/lib/gir_ffi/builders/callback_argument_builder.rb +10 -8
  64. data/lib/gir_ffi/builders/callback_builder.rb +28 -14
  65. data/lib/gir_ffi/builders/callback_return_value_builder.rb +6 -8
  66. data/lib/gir_ffi/builders/class_struct_builder.rb +24 -0
  67. data/lib/gir_ffi/builders/closure_argument_builder.rb +1 -1
  68. data/lib/gir_ffi/builders/closure_return_value_builder.rb +1 -1
  69. data/lib/gir_ffi/builders/constant_builder.rb +1 -1
  70. data/lib/gir_ffi/builders/constructor_builder.rb +9 -9
  71. data/lib/gir_ffi/builders/enum_builder.rb +11 -7
  72. data/lib/gir_ffi/builders/field_builder.rb +20 -18
  73. data/lib/gir_ffi/builders/flags_builder.rb +2 -2
  74. data/lib/gir_ffi/builders/full_c_to_ruby_convertor.rb +1 -1
  75. data/lib/gir_ffi/builders/function_builder.rb +11 -5
  76. data/lib/gir_ffi/builders/initializer_builder.rb +3 -3
  77. data/lib/gir_ffi/builders/initializer_return_value_builder.rb +2 -2
  78. data/lib/gir_ffi/builders/interface_builder.rb +5 -3
  79. data/lib/gir_ffi/builders/mapping_method_builder.rb +10 -10
  80. data/lib/gir_ffi/builders/marshalling_method_builder.rb +12 -9
  81. data/lib/gir_ffi/builders/method_template.rb +5 -5
  82. data/lib/gir_ffi/builders/module_builder.rb +7 -7
  83. data/lib/gir_ffi/builders/null_argument_builder.rb +0 -2
  84. data/lib/gir_ffi/builders/null_return_value_builder.rb +0 -2
  85. data/lib/gir_ffi/builders/object_builder.rb +22 -12
  86. data/lib/gir_ffi/builders/property_argument_builder.rb +1 -1
  87. data/lib/gir_ffi/builders/property_builder.rb +14 -14
  88. data/lib/gir_ffi/builders/property_return_value_builder.rb +1 -1
  89. data/lib/gir_ffi/builders/registered_type_builder.rb +14 -5
  90. data/lib/gir_ffi/builders/return_value_builder.rb +4 -4
  91. data/lib/gir_ffi/builders/ruby_to_c_convertor.rb +6 -6
  92. data/lib/gir_ffi/builders/signal_closure_builder.rb +5 -7
  93. data/lib/gir_ffi/builders/struct_builder.rb +8 -6
  94. data/lib/gir_ffi/builders/struct_like.rb +1 -1
  95. data/lib/gir_ffi/builders/type_builder.rb +12 -12
  96. data/lib/gir_ffi/builders/unintrospectable_boxed_builder.rb +2 -2
  97. data/lib/gir_ffi/builders/unintrospectable_builder.rb +2 -2
  98. data/lib/gir_ffi/builders/union_builder.rb +4 -4
  99. data/lib/gir_ffi/builders/user_defined_builder.rb +10 -3
  100. data/lib/gir_ffi/builders/vfunc_argument_builder.rb +2 -2
  101. data/lib/gir_ffi/builders/vfunc_builder.rb +8 -8
  102. data/lib/gir_ffi/builders/with_layout.rb +2 -2
  103. data/lib/gir_ffi/callback_base.rb +7 -9
  104. data/lib/gir_ffi/class_base.rb +6 -5
  105. data/lib/gir_ffi/core.rb +36 -22
  106. data/lib/gir_ffi/enum_base.rb +1 -1
  107. data/lib/gir_ffi/enum_like_base.rb +2 -2
  108. data/lib/gir_ffi/error_argument_info.rb +2 -2
  109. data/lib/gir_ffi/error_type_info.rb +1 -1
  110. data/lib/gir_ffi/ffi_ext.rb +1 -1
  111. data/lib/gir_ffi/ffi_ext/pointer.rb +1 -1
  112. data/lib/gir_ffi/flags_base.rb +1 -1
  113. data/lib/gir_ffi/glib_error.rb +1 -2
  114. data/lib/gir_ffi/in_pointer.rb +17 -0
  115. data/lib/gir_ffi/info_ext.rb +15 -15
  116. data/lib/gir_ffi/info_ext/full_type_name.rb +3 -3
  117. data/lib/gir_ffi/info_ext/i_arg_info.rb +1 -1
  118. data/lib/gir_ffi/info_ext/i_callable_info.rb +1 -1
  119. data/lib/gir_ffi/info_ext/i_callback_info.rb +1 -1
  120. data/lib/gir_ffi/info_ext/i_field_info.rb +1 -1
  121. data/lib/gir_ffi/info_ext/i_function_info.rb +1 -1
  122. data/lib/gir_ffi/info_ext/i_property_info.rb +2 -2
  123. data/lib/gir_ffi/info_ext/i_registered_type_info.rb +4 -5
  124. data/lib/gir_ffi/info_ext/i_signal_info.rb +7 -3
  125. data/lib/gir_ffi/info_ext/i_type_info.rb +48 -26
  126. data/lib/gir_ffi/info_ext/i_unresolved_info.rb +1 -1
  127. data/lib/gir_ffi/info_ext/i_value_info.rb +2 -2
  128. data/lib/gir_ffi/info_ext/i_vfunc_info.rb +2 -2
  129. data/lib/gir_ffi/info_ext/safe_constant_name.rb +8 -8
  130. data/lib/gir_ffi/info_ext/safe_function_name.rb +2 -2
  131. data/lib/gir_ffi/interface_base.rb +3 -3
  132. data/lib/gir_ffi/lib_c.rb +1 -1
  133. data/lib/gir_ffi/method_stubber.rb +1 -1
  134. data/lib/gir_ffi/module_base.rb +1 -1
  135. data/lib/gir_ffi/object_base.rb +30 -4
  136. data/lib/gir_ffi/receiver_argument_info.rb +1 -1
  137. data/lib/gir_ffi/receiver_type_info.rb +2 -2
  138. data/lib/gir_ffi/registered_type_base.rb +1 -1
  139. data/lib/gir_ffi/return_value_info.rb +1 -2
  140. data/lib/gir_ffi/sized_array.rb +4 -2
  141. data/lib/gir_ffi/struct.rb +1 -1
  142. data/lib/gir_ffi/struct_base.rb +2 -10
  143. data/lib/gir_ffi/struct_like_base.rb +9 -5
  144. data/lib/gir_ffi/type_map.rb +2 -23
  145. data/lib/gir_ffi/unintrospectable_boxed_info.rb +2 -2
  146. data/lib/gir_ffi/unintrospectable_type_info.rb +6 -2
  147. data/lib/gir_ffi/union.rb +1 -1
  148. data/lib/gir_ffi/union_base.rb +2 -10
  149. data/lib/gir_ffi/user_defined_object_info.rb +9 -4
  150. data/lib/gir_ffi/user_defined_property_info.rb +33 -33
  151. data/lib/gir_ffi/version.rb +1 -1
  152. data/lib/gir_ffi/vfunc_implementation.rb +1 -0
  153. metadata +102 -155
  154. data/Gemfile +0 -12
  155. data/Rakefile +0 -9
  156. data/lib/ffi-glib/array_methods.rb +0 -16
  157. data/tasks/test.rake +0 -203
  158. data/test/base_test_helper.rb +0 -63
  159. data/test/ffi-glib/array_test.rb +0 -188
  160. data/test/ffi-glib/byte_array_test.rb +0 -22
  161. data/test/ffi-glib/bytes_test.rb +0 -56
  162. data/test/ffi-glib/closure_test.rb +0 -38
  163. data/test/ffi-glib/destroy_notify_test.rb +0 -18
  164. data/test/ffi-glib/hash_table_test.rb +0 -68
  165. data/test/ffi-glib/list_test.rb +0 -86
  166. data/test/ffi-glib/main_loop_test.rb +0 -53
  167. data/test/ffi-glib/ptr_array_test.rb +0 -112
  168. data/test/ffi-glib/ruby_closure_test.rb +0 -62
  169. data/test/ffi-glib/s_list_test.rb +0 -76
  170. data/test/ffi-glib/strv_test.rb +0 -60
  171. data/test/ffi-glib/variant_test.rb +0 -12
  172. data/test/ffi-gobject/gobject_test.rb +0 -72
  173. data/test/ffi-gobject/object_class_test.rb +0 -31
  174. data/test/ffi-gobject/object_test.rb +0 -140
  175. data/test/ffi-gobject/param_spec_test.rb +0 -32
  176. data/test/ffi-gobject/value_test.rb +0 -370
  177. data/test/ffi-gobject_introspection/gobject_type_init_test.rb +0 -26
  178. data/test/ffi-gobject_introspection/i_base_info_test.rb +0 -53
  179. data/test/ffi-gobject_introspection/i_constant_info_test.rb +0 -33
  180. data/test/ffi-gobject_introspection/i_enum_info_test.rb +0 -18
  181. data/test/ffi-gobject_introspection/i_function_info_test.rb +0 -6
  182. data/test/ffi-gobject_introspection/i_interface_info_test.rb +0 -23
  183. data/test/ffi-gobject_introspection/i_object_info_test.rb +0 -49
  184. data/test/ffi-gobject_introspection/i_property_info_test.rb +0 -47
  185. data/test/ffi-gobject_introspection/i_registered_type_info_test.rb +0 -27
  186. data/test/ffi-gobject_introspection/i_repository_test.rb +0 -81
  187. data/test/ffi-gobject_introspection/i_struct_info_test.rb +0 -23
  188. data/test/ffi-gobject_introspection/i_type_info_test.rb +0 -33
  189. data/test/ffi-gobject_introspection/i_union_info_test.rb +0 -17
  190. data/test/ffi-gobject_introspection/i_vfunc_info_test.rb +0 -41
  191. data/test/ffi-gobject_introspection/lib_test.rb +0 -13
  192. data/test/ffi-gobject_introspection/strv_test.rb +0 -46
  193. data/test/ffi-gobject_test.rb +0 -151
  194. data/test/gir_ffi/allocation_helper_test.rb +0 -36
  195. data/test/gir_ffi/arg_helper_test.rb +0 -140
  196. data/test/gir_ffi/boolean_test.rb +0 -43
  197. data/test/gir_ffi/boxed_base_test.rb +0 -65
  198. data/test/gir_ffi/builder_test.rb +0 -300
  199. data/test/gir_ffi/builders/argument_builder_test.rb +0 -657
  200. data/test/gir_ffi/builders/base_argument_builder_test.rb +0 -6
  201. data/test/gir_ffi/builders/callback_argument_builder_test.rb +0 -129
  202. data/test/gir_ffi/builders/callback_builder_test.rb +0 -118
  203. data/test/gir_ffi/builders/callback_return_value_builder_test.rb +0 -85
  204. data/test/gir_ffi/builders/constant_builder_test.rb +0 -6
  205. data/test/gir_ffi/builders/constructor_builder_test.rb +0 -37
  206. data/test/gir_ffi/builders/enum_builder_test.rb +0 -23
  207. data/test/gir_ffi/builders/field_builder_test.rb +0 -134
  208. data/test/gir_ffi/builders/function_builder_test.rb +0 -538
  209. data/test/gir_ffi/builders/initializer_builder_test.rb +0 -54
  210. data/test/gir_ffi/builders/interface_builder_test.rb +0 -32
  211. data/test/gir_ffi/builders/module_builder_test.rb +0 -43
  212. data/test/gir_ffi/builders/object_builder_test.rb +0 -98
  213. data/test/gir_ffi/builders/property_builder_test.rb +0 -161
  214. data/test/gir_ffi/builders/registered_type_builder_test.rb +0 -30
  215. data/test/gir_ffi/builders/return_value_builder_test.rb +0 -440
  216. data/test/gir_ffi/builders/signal_closure_builder_test.rb +0 -188
  217. data/test/gir_ffi/builders/struct_builder_test.rb +0 -93
  218. data/test/gir_ffi/builders/unintrospectable_boxed_builder_test.rb +0 -35
  219. data/test/gir_ffi/builders/unintrospectable_builder_test.rb +0 -73
  220. data/test/gir_ffi/builders/union_builder_test.rb +0 -31
  221. data/test/gir_ffi/builders/user_defined_builder_test.rb +0 -524
  222. data/test/gir_ffi/builders/vfunc_argument_builder_test.rb +0 -101
  223. data/test/gir_ffi/builders/vfunc_builder_test.rb +0 -253
  224. data/test/gir_ffi/callback_base_test.rb +0 -22
  225. data/test/gir_ffi/class_base_test.rb +0 -168
  226. data/test/gir_ffi/core_test.rb +0 -98
  227. data/test/gir_ffi/enum_base_test.rb +0 -43
  228. data/test/gir_ffi/error_type_info_test.rb +0 -50
  229. data/test/gir_ffi/ffi_ext/pointer_test.rb +0 -20
  230. data/test/gir_ffi/g_type_test.rb +0 -31
  231. data/test/gir_ffi/in_out_pointer_test.rb +0 -56
  232. data/test/gir_ffi/in_pointer_test.rb +0 -183
  233. data/test/gir_ffi/info_ext/i_callable_info_test.rb +0 -26
  234. data/test/gir_ffi/info_ext/i_callback_info_test.rb +0 -21
  235. data/test/gir_ffi/info_ext/i_field_info_test.rb +0 -37
  236. data/test/gir_ffi/info_ext/i_function_info_test.rb +0 -74
  237. data/test/gir_ffi/info_ext/i_signal_info_test.rb +0 -32
  238. data/test/gir_ffi/info_ext/i_type_info_test.rb +0 -697
  239. data/test/gir_ffi/info_ext/i_unresolved_info_test.rb +0 -19
  240. data/test/gir_ffi/info_ext/safe_constant_name_test.rb +0 -26
  241. data/test/gir_ffi/info_ext/safe_function_name_test.rb +0 -26
  242. data/test/gir_ffi/interface_base_test.rb +0 -20
  243. data/test/gir_ffi/method_stubber_test.rb +0 -65
  244. data/test/gir_ffi/object_base_test.rb +0 -64
  245. data/test/gir_ffi/object_store_test.rb +0 -41
  246. data/test/gir_ffi/receiver_argument_info_test.rb +0 -33
  247. data/test/gir_ffi/sized_array_test.rb +0 -206
  248. data/test/gir_ffi/struct_base_test.rb +0 -23
  249. data/test/gir_ffi/struct_like_base_test.rb +0 -167
  250. data/test/gir_ffi/type_map_test.rb +0 -17
  251. data/test/gir_ffi/unintrospectable_type_info_test.rb +0 -121
  252. data/test/gir_ffi/union_base_test.rb +0 -23
  253. data/test/gir_ffi/user_defined_object_info_test.rb +0 -119
  254. data/test/gir_ffi/user_defined_property_info_test.rb +0 -39
  255. data/test/gir_ffi/variable_name_generator_test.rb +0 -18
  256. data/test/gir_ffi/version_test.rb +0 -9
  257. data/test/gir_ffi/zero_terminated_test.rb +0 -108
  258. data/test/gir_ffi_test_helper.rb +0 -84
  259. data/test/integration/callback_exceptions_test.rb +0 -63
  260. data/test/integration/derived_classes_test.rb +0 -53
  261. data/test/integration/generated_everything_test.rb +0 -452
  262. data/test/integration/generated_gimarshallingtests_test.rb +0 -2995
  263. data/test/integration/generated_gio_test.rb +0 -116
  264. data/test/integration/generated_glib_test.rb +0 -12
  265. data/test/integration/generated_gobject_test.rb +0 -116
  266. data/test/integration/generated_gst_test.rb +0 -34
  267. data/test/integration/generated_gtk_source_test.rb +0 -27
  268. data/test/integration/generated_gtop_test.rb +0 -29
  269. data/test/integration/generated_pango_ft2_test.rb +0 -17
  270. data/test/integration/generated_pango_test.rb +0 -24
  271. data/test/integration/generated_regress_test.rb +0 -3850
  272. data/test/integration/generated_secret_test.rb +0 -17
  273. data/test/integration/generated_utility_test.rb +0 -174
  274. data/test/integration/generated_warnlib_test.rb +0 -49
  275. data/test/integration/method_lookup_test.rb +0 -34
  276. data/test/introspection_test_helper.rb +0 -52
  277. data/test/lib/Makefile.am +0 -110
  278. data/test/lib/autogen.sh +0 -4
  279. data/test/lib/configure.ac +0 -34
  280. data/test/lib/m4/jhflags.m4 +0 -21
  281. data/test/minitest/stats_plugin.rb +0 -30
@@ -1,23 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'gir_ffi_test_helper'
4
-
5
- GirFFI.setup :GIMarshallingTests
6
-
7
- describe GirFFI::StructBase do
8
- it 'inherits from StructLikeBase' do
9
- GirFFI::StructBase.must_include GirFFI::StructLikeBase
10
- end
11
-
12
- describe 'new' do
13
- it 'creates an instance with an owned struct' do
14
- instance = GIMarshallingTests::SimpleStruct.new
15
- instance.struct.must_be :owned?
16
- end
17
-
18
- it 'ensures the wrapped pointer is not autoreleased' do
19
- instance = GIMarshallingTests::SimpleStruct.new
20
- instance.to_ptr.wont_be :autorelease?
21
- end
22
- end
23
- end
@@ -1,167 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'gir_ffi_test_helper'
4
-
5
- GirFFI.setup :GIMarshallingTests
6
-
7
- describe GirFFI::StructLikeBase do
8
- describe 'wrap_copy' do
9
- it 'returns a wrapped owned copy of structs' do
10
- original = GIMarshallingTests::SimpleStruct.new
11
- copy = GIMarshallingTests::SimpleStruct.wrap_copy(original.to_ptr)
12
- copy.to_ptr.wont_be :==, original.to_ptr
13
- copy.to_ptr.wont_be :autorelease?
14
- copy.struct.must_be :owned?
15
- end
16
-
17
- it 'returns a wrapped owned copy of unions' do
18
- original = GIMarshallingTests::Union.new
19
- copy = GIMarshallingTests::Union.wrap_copy(original.to_ptr)
20
- copy.to_ptr.wont_be :==, original.to_ptr
21
- copy.to_ptr.wont_be :autorelease?
22
- copy.struct.must_be :owned?
23
- end
24
-
25
- it 'returns a wrapped owned copy of boxed types' do
26
- original = GIMarshallingTests::BoxedStruct.new
27
- copy = GIMarshallingTests::BoxedStruct.wrap_copy(original.to_ptr)
28
- ptr = copy.to_ptr
29
- ptr.wont_be :==, original.to_ptr
30
- ptr.wont_be :autorelease? if ptr.respond_to? :autorelease
31
- copy.struct.must_be :owned?
32
- end
33
-
34
- it 'returns nil when passed nil' do
35
- GIMarshallingTests::SimpleStruct.wrap_copy(nil).must_be_nil
36
- end
37
- end
38
-
39
- describe 'copy_from' do
40
- it 'returns an unowned copy of unions' do
41
- original = GIMarshallingTests::Union.new
42
- original.long_ = 42
43
- copy = GIMarshallingTests::Union.copy_from(original)
44
- copy.long_.must_equal 42
45
- copy.to_ptr.wont_be :==, original.to_ptr
46
- copy.to_ptr.wont_be :autorelease?
47
- copy.struct.wont_be :owned?
48
- end
49
-
50
- it 'returns an unowned copy of structs' do
51
- original = GIMarshallingTests::SimpleStruct.new
52
- copy = GIMarshallingTests::SimpleStruct.copy_from(original)
53
- copy.to_ptr.wont_be :==, original.to_ptr
54
- copy.to_ptr.wont_be :autorelease?
55
- copy.struct.wont_be :owned?
56
- end
57
-
58
- it 'returns nil when passed nil' do
59
- GIMarshallingTests::SimpleStruct.copy_from(nil).must_be_nil
60
- end
61
-
62
- it 'converts its argument if that is possible' do
63
- GObject::Value.copy_from(4).must_be_instance_of GObject::Value
64
- end
65
- end
66
-
67
- describe 'wrap_own' do
68
- it 'wraps and owns the supplied pointer for structs' do
69
- original = GIMarshallingTests::SimpleStruct.new
70
- original.struct.owned = false
71
-
72
- copy = GIMarshallingTests::SimpleStruct.wrap_own(original.to_ptr)
73
- copy.to_ptr.must_equal original.to_ptr
74
- copy.to_ptr.wont_be :autorelease?
75
- copy.struct.must_be :owned?
76
- end
77
-
78
- it 'wraps and owns the supplied pointer for unions' do
79
- original = GIMarshallingTests::Union.new
80
- original.struct.owned = false
81
-
82
- copy = GIMarshallingTests::Union.wrap_own(original.to_ptr)
83
- copy.to_ptr.must_equal original.to_ptr
84
- copy.to_ptr.wont_be :autorelease?
85
- copy.struct.must_be :owned?
86
- end
87
-
88
- it 'returns nil when passed nil' do
89
- GIMarshallingTests::SimpleStruct.wrap_own(nil).must_be_nil
90
- end
91
- end
92
-
93
- describe '.native_type' do
94
- let(:type) { GIMarshallingTests::SimpleStruct.native_type }
95
-
96
- it 'is a struct by value' do
97
- type.must_be_instance_of FFI::StructByValue
98
- end
99
-
100
- it 'wraps the types nested struct class' do
101
- type.struct_class.must_equal GIMarshallingTests::SimpleStruct::Struct
102
- end
103
- end
104
-
105
- describe '.to_native' do
106
- it "returns the supplied value's struct" do
107
- object = GIMarshallingTests::SimpleStruct.new
108
- result = object.class.to_native(object, 'some-context')
109
- result.must_equal object.struct
110
- end
111
- end
112
-
113
- describe '.to_ffi_type' do
114
- it 'returns the class itself' do
115
- struct_class = GIMarshallingTests::SimpleStruct
116
- ffi_type = struct_class.to_ffi_type
117
- ffi_type.must_equal struct_class
118
- end
119
- end
120
-
121
- describe '.get_value_from_pointer' do
122
- let(:struct_class) { GIMarshallingTests::SimpleStruct }
123
-
124
- it 'returns just a pointer' do
125
- object = struct_class.new
126
- ptr = object.to_ptr
127
- result = struct_class.get_value_from_pointer(ptr, 0)
128
- result.must_be :==, ptr
129
- end
130
-
131
- it 'uses offset correctly' do
132
- struct1 = struct_class.new.tap { |it| it.long_ = 42 }
133
- struct2 = struct_class.new.tap { |it| it.long_ = 24 }
134
- array_ptr = GirFFI::InPointer.from_array(struct_class, [struct1, struct2])
135
- ptr = struct_class.get_value_from_pointer(array_ptr, struct_class.size)
136
- result = struct_class.wrap(ptr)
137
- result.long_.must_equal 24
138
- end
139
- end
140
-
141
- describe '.copy_value_to_pointer' do
142
- let(:struct_class) { GIMarshallingTests::SimpleStruct }
143
- let(:struct) { struct_class.new }
144
-
145
- it 'copies data correctly' do
146
- struct.long_ = 42
147
- target = FFI::MemoryPointer.new struct_class.size
148
- struct_class.copy_value_to_pointer(struct, target)
149
- result = struct_class.wrap(target)
150
- result.long_.must_equal 42
151
- end
152
-
153
- it 'uses offset correctly' do
154
- struct.long_ = 42
155
- target = FFI::MemoryPointer.new struct_class.size + 10
156
- struct_class.copy_value_to_pointer(struct, target, 10)
157
- result = struct_class.wrap(target + 10)
158
- result.long_.must_equal 42
159
- end
160
- end
161
-
162
- it 'adds its class methods to classes that include it' do
163
- struct_class = Class.new
164
- struct_class.send :include, GirFFI::StructLikeBase
165
- struct_class.singleton_class.must_include GirFFI::StructLikeBase::ClassMethods
166
- end
167
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'gir_ffi_test_helper'
4
-
5
- describe GirFFI::TypeMap do
6
- describe '.type_specification_to_ffi_type' do
7
- it 'returns the nested FFI::Enum for an Enum module' do
8
- GirFFI::TypeMap.type_specification_to_ffi_type(GLib::DateMonth).
9
- must_equal GLib::DateMonth
10
- end
11
-
12
- it 'returns the class itself for a Struct class' do
13
- GirFFI::TypeMap.type_specification_to_ffi_type(GObject::EnumValue).
14
- must_equal GObject::EnumValue
15
- end
16
- end
17
- end
@@ -1,121 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'gir_ffi_test_helper'
4
- require 'gir_ffi/unintrospectable_type_info'
5
-
6
- describe GirFFI::UnintrospectableTypeInfo do
7
- describe '#info_type' do
8
- it 'returns :unintrospectable' do
9
- info = GirFFI::UnintrospectableTypeInfo.new :some_type
10
- info.info_type.must_equal :unintrospectable
11
- end
12
- end
13
-
14
- describe '#parent' do
15
- describe 'when the GIR knows about the parent gtype' do
16
- it "finds the parent's info by gtype" do
17
- gobject = Object.new
18
- gir = Object.new
19
-
20
- expect(gobject).to receive(:type_parent).with(:some_type).and_return :foo
21
- expect(gir).to receive(:find_by_gtype).with(:foo).and_return :foo_info
22
-
23
- info = GirFFI::UnintrospectableTypeInfo.new(:some_type, gir, gobject)
24
-
25
- info.parent.must_equal :foo_info
26
- end
27
- end
28
-
29
- describe 'when the GIR does not know about the parent gtype' do
30
- it 'creates a new UnintrospectableTypeInfo from the parent gtype' do
31
- gobject = Object.new
32
- gir = Object.new
33
-
34
- expect(gobject).to receive(:type_parent).with(:some_type).and_return :foo
35
- expect(gir).to receive(:find_by_gtype).with(:foo).and_return nil
36
-
37
- info = GirFFI::UnintrospectableTypeInfo.new(:some_type, gir, gobject)
38
-
39
- info.parent.g_type.must_equal :foo
40
- end
41
- end
42
- end
43
-
44
- describe '#interfaces' do
45
- it 'finds interface infos by gtype' do
46
- gobject = Object.new
47
- gir = Object.new
48
-
49
- expect(gobject).to receive(:type_interfaces).with(:some_type).and_return [:foo, :bar]
50
- expect(gir).to receive(:find_by_gtype).with(:foo).and_return :foo_info
51
- expect(gir).to receive(:find_by_gtype).with(:bar).and_return :bar_info
52
-
53
- info = GirFFI::UnintrospectableTypeInfo.new(:some_type, gir, gobject)
54
-
55
- info.interfaces.must_equal [:foo_info, :bar_info]
56
- end
57
-
58
- it 'skips interfaces that have no introspection data' do
59
- gobject = Object.new
60
- gir = Object.new
61
-
62
- expect(gobject).to receive(:type_interfaces).with(:some_type).and_return [:foo, :bar]
63
- expect(gir).to receive(:find_by_gtype).with(:foo).and_return :foo_info
64
- expect(gir).to receive(:find_by_gtype).with(:bar).and_return nil
65
-
66
- info = GirFFI::UnintrospectableTypeInfo.new(:some_type, gir, gobject)
67
-
68
- info.interfaces.must_equal [:foo_info]
69
- end
70
- end
71
-
72
- describe '#g_type' do
73
- it 'returns the passed-in gtype' do
74
- info = GirFFI::UnintrospectableTypeInfo.new(:some_type)
75
- info.g_type.must_equal :some_type
76
- end
77
- end
78
-
79
- describe '#fields' do
80
- it 'returns an empty array' do
81
- info = GirFFI::UnintrospectableTypeInfo.new(:some_type)
82
- info.fields.must_equal []
83
- end
84
- end
85
-
86
- describe '#namespace' do
87
- it "returns the parent class' namespace" do
88
- gobject = Object.new
89
- gir = Object.new
90
- parent_info = Object.new
91
-
92
- expect(gobject).to receive(:type_parent).with(:some_type).and_return :foo
93
- expect(gir).to receive(:find_by_gtype).with(:foo).and_return parent_info
94
- expect(parent_info).to receive(:namespace).and_return 'FooNamespace'
95
-
96
- info = GirFFI::UnintrospectableTypeInfo.new(:some_type, gir, gobject)
97
-
98
- info.namespace.must_equal 'FooNamespace'
99
- end
100
- end
101
-
102
- describe '#safe_name' do
103
- it 'finds the class name by gtype' do
104
- gobject = Object.new
105
-
106
- expect(gobject).to receive(:type_name).with(:some_type).and_return 'GSomeType'
107
-
108
- info = GirFFI::UnintrospectableTypeInfo.new(:some_type, nil, gobject)
109
-
110
- info.safe_name.must_equal 'GSomeType'
111
- end
112
- end
113
-
114
- describe '#find_signal' do
115
- it 'indicates that no signals can be found' do
116
- info = GirFFI::UnintrospectableTypeInfo.new(:some_type)
117
- result = info.find_signal 'any'
118
- result.must_be_nil
119
- end
120
- end
121
- end
@@ -1,23 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'gir_ffi_test_helper'
4
-
5
- GirFFI.setup :GIMarshallingTests
6
-
7
- describe GirFFI::UnionBase do
8
- it 'inherits from StructLikeBase' do
9
- GirFFI::StructBase.must_include GirFFI::StructLikeBase
10
- end
11
-
12
- describe 'new' do
13
- it 'creates an instance with an owned struct' do
14
- instance = GIMarshallingTests::Union.new
15
- instance.struct.must_be :owned?
16
- end
17
-
18
- it 'ensures the wrapped pointer is not autoreleased' do
19
- instance = GIMarshallingTests::Union.new
20
- instance.to_ptr.wont_be :autorelease?
21
- end
22
- end
23
- end
@@ -1,119 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'gir_ffi_test_helper'
4
- require 'gir_ffi/user_defined_object_info'
5
-
6
- GirFFI.setup :GIMarshallingTests
7
-
8
- describe GirFFI::UserDefinedObjectInfo do
9
- describe '#described_class' do
10
- let(:info) { GirFFI::UserDefinedObjectInfo.new :some_class }
11
-
12
- it 'returns the class passed to #initialize' do
13
- info.described_class.must_equal :some_class
14
- end
15
- end
16
-
17
- describe '#install_property' do
18
- let(:info) { GirFFI::UserDefinedObjectInfo.new :some_class }
19
- let(:foo_spec) { Object.new }
20
-
21
- it 'adds the passed in property to the list of properties' do
22
- info.install_property foo_spec
23
- info.properties.must_equal [foo_spec]
24
- end
25
- end
26
-
27
- describe '#install_vfunc_implementation' do
28
- let(:info) { GirFFI::UserDefinedObjectInfo.new :some_class }
29
- let(:implementation) { Object.new }
30
-
31
- it 'adds to the list of vfunc implementations' do
32
- info.vfunc_implementations.must_equal []
33
- info.install_vfunc_implementation :foo, implementation
34
- info.vfunc_implementations.map(&:name).must_equal [:foo]
35
- end
36
-
37
- it 'stores the passed-in implementation in the implementation object' do
38
- info.install_vfunc_implementation :foo, implementation
39
- impl = info.vfunc_implementations.first
40
- impl.implementation.must_equal implementation
41
- end
42
-
43
- it 'provides a default implementation' do
44
- info.install_vfunc_implementation :foo
45
- impl = info.vfunc_implementations.first
46
- impl.implementation.class.must_equal Proc
47
- end
48
- end
49
-
50
- describe '#initialize' do
51
- let(:foo_spec) { Object.new }
52
- let(:bar_spec) { Object.new }
53
- let(:info) do
54
- GirFFI::UserDefinedObjectInfo.new :some_class do |inf|
55
- inf.install_property foo_spec
56
- inf.install_property bar_spec
57
- end
58
- end
59
-
60
- before do
61
- allow(foo_spec).to receive(:get_name).and_return :foo
62
- allow(bar_spec).to receive(:get_name).and_return :bar
63
- end
64
-
65
- it 'yields the new object to the block passed' do
66
- info.properties.map(&:get_name).must_equal [:foo, :bar]
67
- end
68
- end
69
-
70
- describe '#g_name' do
71
- let(:user_class) { Object.new }
72
- let(:info) { GirFFI::UserDefinedObjectInfo.new user_class }
73
-
74
- before do
75
- allow(user_class).to receive(:name).and_return 'foo'
76
- end
77
-
78
- it "returns the described class' name by default" do
79
- info.g_name.must_equal 'foo'
80
- end
81
-
82
- it 'returns the the name set by #g_name= if present' do
83
- info.g_name = 'bar'
84
- info.g_name.must_equal 'bar'
85
- end
86
- end
87
-
88
- describe '#find_method' do
89
- let(:user_class) { Object.new }
90
- let(:info) { GirFFI::UserDefinedObjectInfo.new user_class }
91
-
92
- it 'finds no methods' do
93
- info.find_method('foo').must_be_nil
94
- end
95
- end
96
-
97
- describe '#find_signal' do
98
- let(:user_class) { Object.new }
99
- let(:info) { GirFFI::UserDefinedObjectInfo.new user_class }
100
-
101
- it 'finds no signals' do
102
- info.find_signal('foo').must_be_nil
103
- end
104
- end
105
-
106
- describe '#interfaces' do
107
- let(:modul) { GIMarshallingTests::Interface }
108
- let(:user_class) { Class.new GIMarshallingTests::Object }
109
- let(:info) { GirFFI::UserDefinedObjectInfo.new user_class }
110
-
111
- before do
112
- user_class.send :include, modul
113
- end
114
-
115
- it 'returns the interface infos for the include modules' do
116
- info.interfaces.must_equal [modul.gir_info]
117
- end
118
- end
119
- end