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,101 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'gir_ffi_test_helper'
4
-
5
- describe GirFFI::Builders::VFuncArgumentBuilder do
6
- let(:var_gen) { GirFFI::VariableNameGenerator.new }
7
- let(:builder) { GirFFI::Builders::VFuncArgumentBuilder.new(var_gen, arg_info) }
8
-
9
- describe 'for a plain in argument' do
10
- let(:vfunc_info) do
11
- get_vfunc_introspection_data 'GIMarshallingTests', 'Object', 'method_int8_in'
12
- end
13
- let(:arg_info) { vfunc_info.args[0] }
14
-
15
- it 'has the correct value for #pre_conversion' do
16
- builder.pre_conversion.must_equal ['_v1 = in_']
17
- end
18
-
19
- it 'has the correct value for #post_conversion' do
20
- builder.post_conversion.must_equal []
21
- end
22
- end
23
-
24
- describe 'for a transfer-none in argument' do
25
- let(:vfunc_info) do
26
- get_vfunc_introspection_data 'GIMarshallingTests', 'Object', 'vfunc_in_object_transfer_none'
27
- end
28
- let(:arg_info) { vfunc_info.args[0] }
29
-
30
- it 'has the correct value for #pre_conversion' do
31
- builder.pre_conversion.must_equal ['_v1 = GObject::Object.wrap(object)', '_v1.ref']
32
- end
33
-
34
- it 'has the correct value for #post_conversion' do
35
- builder.post_conversion.must_equal []
36
- end
37
- end
38
-
39
- describe 'for a transfer-none outgoing object argument' do
40
- let(:vfunc_info) do
41
- get_vfunc_introspection_data 'GIMarshallingTests', 'Object', 'vfunc_out_object_transfer_none'
42
- end
43
- let(:arg_info) { vfunc_info.args[0] }
44
-
45
- it 'has the correct value for #pre_conversion' do
46
- builder.pre_conversion.must_equal ['_v1 = object']
47
- end
48
-
49
- it 'has the correct value for #post_conversion' do
50
- builder.post_conversion.must_equal ['_v1.put_pointer 0, GObject::Object.from(_v2)']
51
- end
52
- end
53
-
54
- describe 'for a full-transfer outgoing object argument' do
55
- let(:vfunc_info) do
56
- get_vfunc_introspection_data 'GIMarshallingTests', 'Object', 'vfunc_out_object_transfer_full'
57
- end
58
- let(:arg_info) { vfunc_info.args[0] }
59
-
60
- it 'has the correct value for #pre_conversion' do
61
- builder.pre_conversion.must_equal ['_v1 = object']
62
- end
63
-
64
- it 'has the correct value for #post_conversion' do
65
- builder.pre_conversion
66
- builder.post_conversion.must_equal ['_v2.ref', '_v1.put_pointer 0, GObject::Object.from(_v2)']
67
- end
68
- end
69
-
70
- describe 'for a full-transfer outgoing non-object argument' do
71
- let(:vfunc_info) do
72
- get_vfunc_introspection_data('GIMarshallingTests', 'Object',
73
- 'method_int8_arg_and_out_callee')
74
- end
75
- let(:arg_info) { vfunc_info.args[1] }
76
-
77
- it 'has the correct value for #pre_conversion' do
78
- builder.pre_conversion.
79
- must_equal ['_v1 = FFI::MemoryPointer.new(:int8).tap { |ptr| out.put_pointer 0, ptr }']
80
- end
81
-
82
- it 'has the correct value for #post_conversion' do
83
- builder.post_conversion.must_equal ['_v1.put_int8 0, _v2']
84
- end
85
- end
86
-
87
- describe 'for a receiver argument' do
88
- let(:object_info) { get_introspection_data('GIMarshallingTests', 'Object') }
89
- let(:type_info) { GirFFI::ReceiverTypeInfo.new(object_info) }
90
- let(:arg_info) { GirFFI::ReceiverArgumentInfo.new(type_info) }
91
-
92
- it 'has the correct value for #pre_conversion' do
93
- builder.pre_conversion.
94
- must_equal ['_v1 = GIMarshallingTests::Object.wrap(_instance)']
95
- end
96
-
97
- it 'has the correct value for #post_conversion' do
98
- builder.post_conversion.must_equal []
99
- end
100
- end
101
- end
@@ -1,253 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'gir_ffi_test_helper'
4
-
5
- describe GirFFI::Builders::VFuncBuilder do
6
- let(:builder) { GirFFI::Builders::VFuncBuilder.new vfunc_info }
7
-
8
- describe '#mapping_method_definition' do
9
- let(:result) { builder.mapping_method_definition }
10
-
11
- before do
12
- skip unless vfunc_info
13
- end
14
-
15
- describe 'for a vfunc with only one argument' do
16
- let(:vfunc_info) do
17
- get_vfunc_introspection_data 'GIMarshallingTests', 'Object', 'method_int8_in'
18
- end
19
-
20
- it 'returns a valid mapping method including receiver' do
21
- expected = <<-CODE.reset_indentation
22
- def self.call_with_argument_mapping(_proc, _instance, in_)
23
- _v1 = GIMarshallingTests::Object.wrap(_instance)
24
- _v2 = in_
25
- _proc.call(_v1, _v2)
26
- end
27
- CODE
28
-
29
- result.must_equal expected
30
- end
31
- end
32
-
33
- describe 'for a vfunc returning an enum' do
34
- let(:vfunc_info) do
35
- get_vfunc_introspection_data 'GIMarshallingTests', 'Object', 'vfunc_return_enum'
36
- end
37
-
38
- it 'returns a valid mapping method including receiver' do
39
- expected = <<-CODE.reset_indentation
40
- def self.call_with_argument_mapping(_proc, _instance)
41
- _v1 = GIMarshallingTests::Object.wrap(_instance)
42
- _v2 = _proc.call(_v1)
43
- _v3 = GIMarshallingTests::Enum.to_int(_v2)
44
- return _v3
45
- end
46
- CODE
47
-
48
- result.must_equal expected
49
- end
50
- end
51
-
52
- describe 'for a vfunc with a callback argument' do
53
- let(:vfunc_info) do
54
- get_vfunc_introspection_data 'GIMarshallingTests', 'Object', 'vfunc_with_callback'
55
- end
56
-
57
- it 'returns a valid mapping method including receiver' do
58
- expected = <<-CODE.reset_indentation
59
- def self.call_with_argument_mapping(_proc, _instance, callback, callback_data)
60
- _v1 = GIMarshallingTests::Object.wrap(_instance)
61
- _v2 = GIMarshallingTests::CallbackIntInt.wrap(callback)
62
- _v3 = GirFFI::ArgHelper::OBJECT_STORE.fetch(callback_data)
63
- _proc.call(_v1, _v2, _v3)
64
- end
65
- CODE
66
-
67
- result.must_equal expected
68
- end
69
- end
70
-
71
- describe 'for a vfunc with an out argument allocated by them, the caller' do
72
- let(:vfunc_info) do
73
- get_vfunc_introspection_data('GIMarshallingTests', 'Object',
74
- 'method_int8_arg_and_out_caller')
75
- end
76
-
77
- it 'returns a valid mapping method including receiver' do
78
- expected = <<-CODE.reset_indentation
79
- def self.call_with_argument_mapping(_proc, _instance, arg, out)
80
- _v1 = GIMarshallingTests::Object.wrap(_instance)
81
- _v2 = arg
82
- _v3 = out
83
- _v4 = _proc.call(_v1, _v2)
84
- _v3.put_int8 0, _v4
85
- end
86
- CODE
87
-
88
- result.must_equal expected
89
- end
90
- end
91
-
92
- describe 'for a vfunc with an out argument allocated by us, the callee' do
93
- let(:vfunc_info) do
94
- get_vfunc_introspection_data('GIMarshallingTests', 'Object',
95
- 'method_int8_arg_and_out_callee')
96
- end
97
-
98
- it 'returns a valid mapping method including receiver' do
99
- expected = <<-CODE.reset_indentation
100
- def self.call_with_argument_mapping(_proc, _instance, arg, out)
101
- _v1 = GIMarshallingTests::Object.wrap(_instance)
102
- _v2 = arg
103
- _v3 = FFI::MemoryPointer.new(:int8).tap { |ptr| out.put_pointer 0, ptr }
104
- _v4 = _proc.call(_v1, _v2)
105
- _v3.put_int8 0, _v4
106
- end
107
- CODE
108
-
109
- result.must_equal expected
110
- end
111
- end
112
-
113
- describe 'for a vfunc with a GObject::Value out argument allocated by them, the caller' do
114
- let(:vfunc_info) do
115
- get_vfunc_introspection_data('GIMarshallingTests', 'Object',
116
- 'vfunc_caller_allocated_out_parameter')
117
- end
118
-
119
- it 'returns a valid mapping method including receiver' do
120
- expected = <<-CODE.reset_indentation
121
- def self.call_with_argument_mapping(_proc, _instance, a)
122
- _v1 = GIMarshallingTests::Object.wrap(_instance)
123
- _v2 = a
124
- _v3 = _proc.call(_v1)
125
- GObject::Value.copy_value_to_pointer(GObject::Value.from(_v3), _v2)
126
- end
127
- CODE
128
-
129
- result.must_equal expected
130
- end
131
- end
132
-
133
- describe 'for a vfunc with an error argument' do
134
- let(:vfunc_info) do
135
- get_vfunc_introspection_data('GIMarshallingTests', 'Object',
136
- 'vfunc_meth_with_err')
137
- end
138
-
139
- it 'returns a valid mapping method including receiver' do
140
- expected = <<-CODE.reset_indentation
141
- def self.call_with_argument_mapping(_proc, _instance, x, _error)
142
- _v1 = GIMarshallingTests::Object.wrap(_instance)
143
- _v2 = x
144
- _v3 = _error
145
- begin
146
- _v4 = _proc.call(_v1, _v2)
147
- rescue => _v5
148
- _v3.put_pointer 0, GLib::Error.from(_v5)
149
- end
150
- return _v4
151
- end
152
- CODE
153
-
154
- result.must_equal expected
155
- end
156
- end
157
-
158
- describe 'for a vfunc with a full-transfer return value' do
159
- let(:vfunc_info) do
160
- get_vfunc_introspection_data 'GIMarshallingTests', 'Object', 'vfunc_return_object_transfer_full'
161
- end
162
-
163
- it 'returns a valid mapping method' do
164
- expected = <<-CODE.reset_indentation
165
- def self.call_with_argument_mapping(_proc, _instance)
166
- _v1 = GIMarshallingTests::Object.wrap(_instance)
167
- _v2 = _proc.call(_v1)
168
- _v2.ref
169
- _v3 = GObject::Object.from(_v2).to_ptr
170
- return _v3
171
- end
172
- CODE
173
-
174
- result.must_equal expected
175
- end
176
- end
177
-
178
- describe 'for a vfunc with a transfer-none in argument' do
179
- let(:vfunc_info) do
180
- get_vfunc_introspection_data 'GIMarshallingTests', 'Object', 'vfunc_in_object_transfer_none'
181
- end
182
-
183
- it 'returns a valid mapping method' do
184
- expected = <<-CODE.reset_indentation
185
- def self.call_with_argument_mapping(_proc, _instance, object)
186
- _v1 = GIMarshallingTests::Object.wrap(_instance)
187
- _v2 = GObject::Object.wrap(object)
188
- _v2.ref
189
- _proc.call(_v1, _v2)
190
- end
191
- CODE
192
-
193
- result.must_equal expected
194
- end
195
- end
196
-
197
- describe 'for a vfunc with a full-transfer outgoing argument' do
198
- let(:vfunc_info) do
199
- get_vfunc_introspection_data 'GIMarshallingTests', 'Object', 'vfunc_out_object_transfer_full'
200
- end
201
-
202
- it 'returns a valid mapping method' do
203
- expected = <<-CODE.reset_indentation
204
- def self.call_with_argument_mapping(_proc, _instance, object)
205
- _v1 = GIMarshallingTests::Object.wrap(_instance)
206
- _v2 = object
207
- _v3 = _proc.call(_v1)
208
- _v3.ref
209
- _v2.put_pointer 0, GObject::Object.from(_v3)
210
- end
211
- CODE
212
-
213
- result.must_equal expected
214
- end
215
- end
216
- end
217
-
218
- describe '#argument_ffi_types' do
219
- let(:result) { builder.argument_ffi_types }
220
-
221
- before do
222
- skip unless vfunc_info
223
- end
224
-
225
- describe 'for a vfunc with only one argument' do
226
- let(:vfunc_info) do
227
- get_vfunc_introspection_data 'GIMarshallingTests', 'Object', 'method_int8_in'
228
- end
229
-
230
- it 'returns the correct FFI types including :pointer for the receiver' do
231
- result.must_equal [:pointer, :int8]
232
- end
233
- end
234
- end
235
-
236
- describe '#return_ffi_type' do
237
- let(:result) { builder.return_ffi_type }
238
-
239
- before do
240
- skip unless vfunc_info
241
- end
242
-
243
- describe 'for a vfunc returning an object' do
244
- let(:vfunc_info) do
245
- get_vfunc_introspection_data 'GIMarshallingTests', 'Object', 'vfunc_return_object_transfer_full'
246
- end
247
-
248
- it 'returns :pointer' do
249
- result.must_equal :pointer
250
- end
251
- end
252
- end
253
- end
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'gir_ffi_test_helper'
4
-
5
- describe GirFFI::CallbackBase do
6
- describe '.store_callback' do
7
- it 'stores the passed in proc in CALLBACKS' do
8
- dummy_proc = 'some-callback'
9
- GirFFI::CallbackBase.store_callback dummy_proc
10
- GirFFI::CallbackBase::CALLBACKS[dummy_proc.object_id].must_equal dummy_proc
11
- end
12
- end
13
-
14
- describe '.drop_callback' do
15
- it 'removes the corresponding proc from CALLBACKS' do
16
- dummy_proc = 'some-callback'
17
- GirFFI::CallbackBase.store_callback dummy_proc
18
- GirFFI::CallbackBase.drop_callback dummy_proc
19
- GirFFI::CallbackBase::CALLBACKS[dummy_proc.object_id].must_be_nil
20
- end
21
- end
22
- end
@@ -1,168 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'gir_ffi_test_helper'
4
-
5
- describe GirFFI::ClassBase do
6
- describe 'a simple descendant' do
7
- let(:object_class) do
8
- Class.new(GirFFI::ClassBase) do
9
- self::Struct = Class.new(GirFFI::Struct) do
10
- layout :foo, :int32
11
- end
12
- end
13
- end
14
- let(:object) { object_class.wrap FFI::MemoryPointer.new(:int32) }
15
-
16
- it 'has #from as a pass-through method' do
17
- result = object_class.from :foo
18
- result.must_equal :foo
19
- end
20
-
21
- describe '#==' do
22
- it 'returns true when comparing to an object of the same class and pointer' do
23
- other = object_class.wrap object.to_ptr
24
-
25
- object.must_be :==, other
26
- other.must_be :==, object
27
- end
28
-
29
- it 'returns true when comparing to an object of the same class and a pointer with the same address' do
30
- ptr = FFI::Pointer.new object.to_ptr
31
- other = object_class.wrap ptr
32
-
33
- object.must_be :==, other
34
- other.must_be :==, object
35
- end
36
-
37
- it 'returns false when comparing to an object of a sub/superclass and the same pointer' do
38
- subclass = Class.new(object_class)
39
- other = subclass.wrap object.to_ptr
40
-
41
- object.wont_be :==, other
42
- other.wont_be :==, object
43
- end
44
-
45
- it 'returns false when comparing to an object of the same class and different pointer' do
46
- other = object_class.wrap FFI::MemoryPointer.new(:int32)
47
-
48
- object.wont_be :==, other
49
- other.wont_be :==, object
50
- end
51
-
52
- it "returns false when comparing to an object that doesn't respond to #to_ptr" do
53
- other = Object.new
54
-
55
- object.wont_be :==, other
56
- other.wont_be :==, object
57
- end
58
-
59
- it 'returns false when comparing to an object of a different class and same pointer' do
60
- allow(other = Object.new).to receive(:to_ptr).and_return object.to_ptr
61
-
62
- object.wont_be :==, other
63
- other.wont_be :==, object
64
- end
65
-
66
- it 'returns false when comparing to an object of a different class and different pointer' do
67
- allow(other = Object.new).to receive(:to_ptr).and_return FFI::MemoryPointer.new(:int32)
68
-
69
- object.wont_be :==, other
70
- other.wont_be :==, object
71
- end
72
- end
73
- end
74
-
75
- describe '.setup_and_call' do
76
- it 'looks up class methods in all builders' do
77
- expect(builder = Object.new).to receive(:setup_method).with('foo').and_return 'foo'
78
- klass = Class.new GirFFI::ClassBase
79
- klass.const_set :GIR_FFI_BUILDER, builder
80
-
81
- expect(sub_builder = Object.new).to receive(:setup_method).with('foo').and_return nil
82
- sub_klass = Class.new klass do
83
- def self.foo; end
84
- end
85
- sub_klass.const_set :GIR_FFI_BUILDER, sub_builder
86
-
87
- sub_klass.setup_and_call :foo, []
88
- end
89
-
90
- it 'calls the method given by the result of .setup_method' do
91
- expect(builder = Object.new).to receive(:setup_method).with('foo').and_return 'bar'
92
- klass = Class.new GirFFI::ClassBase do
93
- def self.bar
94
- 'correct-result'
95
- end
96
-
97
- def initialize; end
98
- end
99
- klass.const_set :GIR_FFI_BUILDER, builder
100
-
101
- result = klass.setup_and_call :foo, []
102
- result.must_equal 'correct-result'
103
- end
104
-
105
- it 'raises a sensible error if the method is not found' do
106
- expect(builder = Object.new).to receive(:setup_method).with('foo').and_return nil
107
- klass = Class.new GirFFI::ClassBase do
108
- def initialize; end
109
- end
110
- klass.const_set :GIR_FFI_BUILDER, builder
111
-
112
- proc { klass.setup_and_call :foo, [] }.
113
- must_raise(NoMethodError).message.
114
- must_match(/^undefined method `foo' for/)
115
- end
116
- end
117
-
118
- describe '#setup_and_call' do
119
- it 'looks up instance methods in all builders' do
120
- expect(builder = Object.new).to receive(:setup_instance_method).with('foo').and_return 'foo'
121
- klass = Class.new GirFFI::ClassBase
122
- klass.const_set :GIR_FFI_BUILDER, builder
123
-
124
- expect(sub_builder = Object.new).to receive(:setup_instance_method).with('foo').and_return nil
125
- sub_klass = Class.new klass do
126
- def foo; end
127
-
128
- def initialize; end
129
- end
130
- sub_klass.const_set :GIR_FFI_BUILDER, sub_builder
131
-
132
- obj = sub_klass.new
133
-
134
- obj.setup_and_call :foo, []
135
- end
136
-
137
- it 'calls the method given by the result of .setup_instance_method' do
138
- expect(builder = Object.new).to receive(:setup_instance_method).with('foo').and_return 'bar'
139
- klass = Class.new GirFFI::ClassBase do
140
- def bar
141
- 'correct-result'
142
- end
143
-
144
- def initialize; end
145
- end
146
- klass.const_set :GIR_FFI_BUILDER, builder
147
-
148
- obj = klass.new
149
-
150
- result = obj.setup_and_call :foo, []
151
- result.must_equal 'correct-result'
152
- end
153
-
154
- it 'raises a sensible error if the method is not found' do
155
- expect(builder = Object.new).to receive(:setup_instance_method).with('foo').and_return nil
156
- klass = Class.new GirFFI::ClassBase do
157
- def initialize; end
158
- end
159
- klass.const_set :GIR_FFI_BUILDER, builder
160
-
161
- obj = klass.new
162
-
163
- proc { obj.setup_and_call :foo, [] }.
164
- must_raise(NoMethodError).message.
165
- must_match(/^undefined method `foo' for/)
166
- end
167
- end
168
- end