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,657 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'gir_ffi_test_helper'
4
-
5
- describe GirFFI::Builders::ArgumentBuilder do
6
- let(:var_gen) { GirFFI::VariableNameGenerator.new }
7
- let(:builder) { GirFFI::Builders::ArgumentBuilder.new(var_gen, arg_info) }
8
-
9
- describe 'for an argument with direction :in' do
10
- describe 'for :c' do
11
- describe 'with full ownership transfer' do
12
- let(:arg_info) do
13
- get_introspection_data('GIMarshallingTests', 'array_struct_take_in').args[0]
14
- end
15
-
16
- it 'has the correct value for #pre_conversion' do
17
- builder.pre_conversion.
18
- must_equal ['_v1 = GirFFI::SizedArray.copy_from([:pointer, GIMarshallingTests::BoxedStruct], -1, structs)']
19
- end
20
-
21
- it 'has the correct value for #post_conversion' do
22
- builder.post_conversion.must_equal []
23
- end
24
- end
25
- end
26
-
27
- describe 'for :callback' do
28
- let(:arg_info) do
29
- get_introspection_data('Regress', 'test_callback_destroy_notify').args[0]
30
- end
31
-
32
- it 'has the correct value for #pre_conversion' do
33
- builder.pre_conversion.must_equal ['_v1 = Regress::TestCallbackUserData.from(callback)']
34
- end
35
-
36
- it 'has the correct value for #post_conversion' do
37
- builder.post_conversion.must_equal []
38
- end
39
- end
40
-
41
- describe 'for :zero_terminated' do
42
- let(:arg_info) do
43
- get_introspection_data('GIMarshallingTests',
44
- 'array_in_len_zero_terminated').args[0]
45
- end
46
-
47
- it 'has the correct value for #pre_conversion' do
48
- builder.pre_conversion.must_equal ['_v1 = GirFFI::ZeroTerminated.from(:gint32, ints)']
49
- end
50
-
51
- it 'has the correct value for #post_conversion' do
52
- builder.post_conversion.must_equal []
53
- end
54
- end
55
-
56
- describe 'for :void' do
57
- let(:arg_info) { get_introspection_data('Regress', 'test_callback_user_data').args[1] }
58
-
59
- describe 'when it is a regular argument' do
60
- it 'has the correct value for method_argument_name' do
61
- builder.method_argument_name.must_equal arg_info.name
62
- end
63
-
64
- it 'has the correct value for #pre_conversion' do
65
- builder.pre_conversion.must_equal ['_v1 = user_data']
66
- end
67
-
68
- it 'has the correct value for #post_conversion' do
69
- builder.post_conversion.must_equal []
70
- end
71
- end
72
-
73
- describe 'when it is a closure' do
74
- before do
75
- callback = Object.new
76
- allow(callback).to receive(:call_argument_name).and_return 'foo'
77
- builder.mark_as_user_data callback
78
- end
79
-
80
- it 'has the correct value for method_argument_name' do
81
- builder.method_argument_name.must_be_nil
82
- end
83
-
84
- it 'has the correct value for #pre_conversion' do
85
- builder.pre_conversion.must_equal ['_v1 = GirFFI::ArgHelper.store(foo)']
86
- end
87
-
88
- it 'has the correct value for #post_conversion' do
89
- builder.post_conversion.must_equal []
90
- end
91
- end
92
- end
93
- end
94
-
95
- describe 'for an argument with direction :out' do
96
- describe 'for :enum' do
97
- let(:arg_info) { get_introspection_data('GIMarshallingTests', 'genum_out').args[0] }
98
-
99
- it 'has the correct value for #pre_conversion' do
100
- builder.pre_conversion.must_equal ['_v1 = FFI::MemoryPointer.new GIMarshallingTests::GEnum']
101
- end
102
-
103
- it 'has the correct value for #post_conversion' do
104
- builder.post_conversion.must_equal ['_v2 = GIMarshallingTests::GEnum.get_value_from_pointer(_v1, 0)']
105
- end
106
- end
107
-
108
- describe 'for :flags' do
109
- let(:arg_info) do
110
- get_introspection_data('GIMarshallingTests', 'flags_out').args[0]
111
- end
112
-
113
- it 'has the correct value for #pre_conversion' do
114
- builder.pre_conversion.must_equal ['_v1 = FFI::MemoryPointer.new GIMarshallingTests::Flags']
115
- end
116
-
117
- it 'has the correct value for #post_conversion' do
118
- builder.post_conversion.must_equal ['_v2 = GIMarshallingTests::Flags.get_value_from_pointer(_v1, 0)']
119
- end
120
- end
121
-
122
- describe 'for :object' do
123
- describe 'with full ownership transfer' do
124
- let(:arg_info) do
125
- get_method_introspection_data('Regress', 'TestObj', 'null_out').args[0]
126
- end
127
-
128
- it 'has the correct value for #pre_conversion' do
129
- builder.pre_conversion.must_equal ['_v1 = FFI::MemoryPointer.new :pointer']
130
- end
131
-
132
- it 'has the correct value for #post_conversion' do
133
- builder.post_conversion.must_equal ['_v2 = Regress::TestObj.wrap(_v1.get_pointer(0))']
134
- end
135
- end
136
-
137
- describe 'with no ownership transfer' do
138
- let(:arg_info) do
139
- get_method_introspection_data('GIMarshallingTests', 'Object', 'none_out').args[0]
140
- end
141
-
142
- it 'has the correct value for #pre_conversion' do
143
- builder.pre_conversion.must_equal ['_v1 = FFI::MemoryPointer.new :pointer']
144
- end
145
-
146
- it 'has the correct value for #post_conversion' do
147
- builder.post_conversion.
148
- must_equal ['_v2 = GIMarshallingTests::Object.wrap(_v1.get_pointer(0)).tap { |it| it && it.ref }']
149
- end
150
- end
151
- end
152
-
153
- describe 'for :struct' do
154
- describe 'when not allocated by the caller' do
155
- let(:arg_info) do
156
- get_introspection_data('GIMarshallingTests', 'boxed_struct_out').args[0]
157
- end
158
-
159
- it 'has the correct value for #pre_conversion' do
160
- builder.pre_conversion.must_equal [
161
- '_v1 = FFI::MemoryPointer.new :pointer'
162
- ]
163
- end
164
-
165
- it 'has the correct value for #post_conversion' do
166
- builder.post_conversion.
167
- must_equal ['_v2 = GIMarshallingTests::BoxedStruct.wrap_copy(_v1.get_pointer(0))']
168
- end
169
- end
170
-
171
- describe 'when allocated by the caller' do
172
- let(:arg_info) do
173
- get_method_introspection_data('Regress', 'TestStructA', 'clone').args[0]
174
- end
175
-
176
- it 'has the correct value for #pre_conversion' do
177
- builder.pre_conversion.must_equal ['_v1 = Regress::TestStructA.new']
178
- end
179
-
180
- it 'has empty #post_conversion' do
181
- builder.post_conversion.must_equal []
182
- end
183
- end
184
- end
185
-
186
- describe 'for :strv' do
187
- let(:arg_info) do
188
- get_introspection_data('GIMarshallingTests', 'gstrv_out').args[0]
189
- end
190
-
191
- it 'has the correct value for #pre_conversion' do
192
- builder.pre_conversion.must_equal ['_v1 = FFI::MemoryPointer.new :pointer']
193
- end
194
-
195
- it 'has the correct value for #post_conversion' do
196
- builder.post_conversion.must_equal ['_v2 = GLib::Strv.wrap(_v1.get_pointer(0))']
197
- end
198
- end
199
-
200
- describe 'for :array' do
201
- describe 'when allocated by the callee' do
202
- let(:arg_info) do
203
- get_introspection_data('GIMarshallingTests', 'garray_utf8_none_out').args[0]
204
- end
205
-
206
- it 'has the correct value for #pre_conversion' do
207
- builder.pre_conversion.must_equal ['_v1 = FFI::MemoryPointer.new :pointer']
208
- end
209
-
210
- it 'has the correct value for #post_conversion' do
211
- builder.post_conversion.must_equal ['_v2 = GLib::Array.wrap(:utf8, _v1.get_pointer(0))']
212
- end
213
- end
214
-
215
- describe 'when allocated by the caller' do
216
- let(:function_info) do
217
- get_introspection_data('GIMarshallingTests', 'garray_utf8_full_out_caller_allocated')
218
- end
219
-
220
- let(:arg_info) { function_info.args[0] }
221
-
222
- before do
223
- skip unless function_info
224
- end
225
-
226
- it 'has the correct value for #pre_conversion' do
227
- builder.pre_conversion.must_equal ['_v1 = GLib::Array.new :utf8']
228
- end
229
-
230
- it 'has empty #post_conversion' do
231
- builder.post_conversion.must_equal []
232
- end
233
- end
234
- end
235
-
236
- describe 'for :ptr_array' do
237
- let(:arg_info) do
238
- get_introspection_data('GIMarshallingTests', 'gptrarray_utf8_none_out').args[0]
239
- end
240
-
241
- it 'has the correct value for #pre_conversion' do
242
- builder.pre_conversion.must_equal ['_v1 = FFI::MemoryPointer.new :pointer']
243
- end
244
-
245
- it 'has the correct value for #post_conversion' do
246
- builder.post_conversion.must_equal ['_v2 = GLib::PtrArray.wrap(:utf8, _v1.get_pointer(0))']
247
- end
248
- end
249
-
250
- describe 'for :error' do
251
- let(:arg_info) do
252
- get_introspection_data('GIMarshallingTests', 'gerror_out').args[0]
253
- end
254
-
255
- it 'has the correct value for #pre_conversion' do
256
- builder.pre_conversion.must_equal ['_v1 = FFI::MemoryPointer.new :pointer']
257
- end
258
-
259
- it 'has the correct value for #post_conversion' do
260
- builder.post_conversion.must_equal ['_v2 = GLib::Error.wrap(_v1.get_pointer(0))']
261
- end
262
- end
263
-
264
- describe 'for :c' do
265
- describe 'with fixed size' do
266
- let(:arg_info) do
267
- get_introspection_data('GIMarshallingTests', 'array_fixed_out').args[0]
268
- end
269
-
270
- it 'has the correct value for #pre_conversion' do
271
- builder.pre_conversion.must_equal ['_v1 = FFI::MemoryPointer.new :pointer']
272
- end
273
-
274
- it 'has the correct value for #post_conversion' do
275
- builder.post_conversion.must_equal ['_v2 = GirFFI::SizedArray.wrap(:gint32, 4, _v1.get_pointer(0))']
276
- end
277
- end
278
-
279
- describe 'with separate size parameter' do
280
- let(:arg_info) do
281
- get_introspection_data('GIMarshallingTests', 'array_out').args[0]
282
- end
283
-
284
- let(:length_argument) { Object.new }
285
- before do
286
- allow(length_argument).to receive(:post_converted_name).and_return 'bar'
287
- builder.length_arg = length_argument
288
- end
289
-
290
- it 'has the correct value for #pre_conversion' do
291
- builder.pre_conversion.must_equal ['_v1 = FFI::MemoryPointer.new :pointer']
292
- end
293
-
294
- it 'has the correct value for #post_conversion' do
295
- builder.post_conversion.must_equal ['_v2 = GirFFI::SizedArray.wrap(:gint32, bar, _v1.get_pointer(0))']
296
- end
297
- end
298
- end
299
-
300
- describe 'for :glist' do
301
- let(:arg_info) do
302
- get_introspection_data('GIMarshallingTests', 'glist_utf8_none_out').args[0]
303
- end
304
-
305
- it 'has the correct value for #pre_conversion' do
306
- builder.pre_conversion.must_equal ['_v1 = FFI::MemoryPointer.new :pointer']
307
- end
308
-
309
- it 'has the correct value for #post_conversion' do
310
- builder.post_conversion.must_equal ['_v2 = GLib::List.wrap(:utf8, _v1.get_pointer(0))']
311
- end
312
- end
313
-
314
- describe 'for :gslist' do
315
- let(:arg_info) do
316
- get_introspection_data('GIMarshallingTests', 'gslist_utf8_none_out').args[0]
317
- end
318
-
319
- it 'has the correct value for #pre_conversion' do
320
- builder.pre_conversion.must_equal ['_v1 = FFI::MemoryPointer.new :pointer']
321
- end
322
-
323
- it 'has the correct value for #post_conversion' do
324
- builder.post_conversion.must_equal ['_v2 = GLib::SList.wrap(:utf8, _v1.get_pointer(0))']
325
- end
326
- end
327
-
328
- describe 'for :ghash' do
329
- let(:arg_info) do
330
- get_introspection_data('GIMarshallingTests', 'ghashtable_utf8_none_out').args[0]
331
- end
332
-
333
- it 'has the correct value for #pre_conversion' do
334
- builder.pre_conversion.must_equal ['_v1 = FFI::MemoryPointer.new :pointer']
335
- end
336
-
337
- it 'has the correct value for #post_conversion' do
338
- builder.post_conversion.must_equal ['_v2 = GLib::HashTable.wrap([:utf8, :utf8], _v1.get_pointer(0))']
339
- end
340
- end
341
-
342
- describe 'for :utf8' do
343
- describe 'with full ownership transfer' do
344
- let(:arg_info) do
345
- get_introspection_data('GIMarshallingTests', 'utf8_full_out').args[0]
346
- end
347
-
348
- it 'has the correct value for #pre_conversion' do
349
- builder.pre_conversion.must_equal ['_v1 = FFI::MemoryPointer.new :pointer']
350
- end
351
-
352
- it 'has the correct value for #post_conversion' do
353
- builder.post_conversion.must_equal [
354
- '_v2 = GirFFI::AllocationHelper.free_after _v1.get_pointer(0), &:to_utf8'
355
- ]
356
- end
357
-
358
- it 'has the correct value for #return_value_name' do
359
- builder.post_conversion
360
- builder.return_value_name.must_equal '_v2'
361
- end
362
- end
363
-
364
- describe 'with no ownership transfer' do
365
- let(:arg_info) do
366
- get_introspection_data('GIMarshallingTests', 'utf8_none_out').args[0]
367
- end
368
-
369
- it 'has the correct value for #pre_conversion' do
370
- builder.pre_conversion.must_equal ['_v1 = FFI::MemoryPointer.new :pointer']
371
- end
372
-
373
- it 'has the correct value for #post_conversion' do
374
- builder.post_conversion.must_equal ['_v2 = _v1.get_pointer(0).to_utf8']
375
- end
376
- end
377
- end
378
-
379
- describe 'for :void' do
380
- let(:function_info) do
381
- get_introspection_data('Everything', 'one_outparam_gpointer')
382
- end
383
- let(:arg_info) { function_info.args[0] }
384
-
385
- before do
386
- skip unless function_info
387
- end
388
-
389
- it 'has the correct value for #pre_conversion' do
390
- builder.pre_conversion.must_equal ['_v1 = FFI::MemoryPointer.new :pointer']
391
- end
392
-
393
- it 'has the correct value for #post_conversion' do
394
- builder.post_conversion.must_equal ['_v2 = _v1.get_pointer(0)']
395
- end
396
- end
397
- end
398
-
399
- describe 'for an argument with direction :inout' do
400
- describe 'for :enum' do
401
- let(:arg_info) do
402
- get_introspection_data('GIMarshallingTests', 'enum_inout').args[0]
403
- end
404
-
405
- it 'has the correct value for #pre_conversion' do
406
- builder.pre_conversion.must_equal ['_v1 = FFI::MemoryPointer.new GIMarshallingTests::Enum',
407
- "GIMarshallingTests::Enum.copy_value_to_pointer(#{arg_info.name}, _v1)"]
408
- end
409
-
410
- it 'has the correct value for #post_conversion' do
411
- builder.post_conversion.must_equal ['_v2 = GIMarshallingTests::Enum.get_value_from_pointer(_v1, 0)']
412
- end
413
- end
414
-
415
- describe 'for :flags' do
416
- let(:arg_info) do
417
- get_introspection_data('GIMarshallingTests', 'no_type_flags_inout').args[0]
418
- end
419
-
420
- it 'has the correct value for #pre_conversion' do
421
- builder.pre_conversion.
422
- must_equal ['_v1 = FFI::MemoryPointer.new GIMarshallingTests::NoTypeFlags',
423
- "GIMarshallingTests::NoTypeFlags.copy_value_to_pointer(#{arg_info.name}, _v1)"]
424
- end
425
-
426
- it 'has the correct value for #post_conversion' do
427
- builder.post_conversion.must_equal ['_v2 = GIMarshallingTests::NoTypeFlags.get_value_from_pointer(_v1, 0)']
428
- end
429
- end
430
-
431
- describe 'for :gint32' do
432
- let(:arg_info) do
433
- get_introspection_data('GIMarshallingTests', 'int32_inout_min_max').args[0]
434
- end
435
-
436
- it 'has the correct value for method_argument_name' do
437
- builder.method_argument_name.must_equal arg_info.name
438
- end
439
-
440
- it 'has the correct value for #pre_conversion' do
441
- builder.pre_conversion.must_equal ['_v1 = FFI::MemoryPointer.new :int32',
442
- "_v1.put_int32 0, #{arg_info.name}"]
443
- end
444
-
445
- it 'has the correct value for #post_conversion' do
446
- builder.post_conversion.must_equal ['_v2 = _v1.get_int32(0)']
447
- end
448
- end
449
-
450
- describe 'for an array length' do
451
- let(:function_info) do
452
- get_introspection_data('Regress', 'test_array_int_inout')
453
- end
454
- let(:arg_info) { function_info.args[0] }
455
- let(:array_arg_info) { function_info.args[1] }
456
- let(:array_arg_builder) do
457
- GirFFI::Builders::ArgumentBuilder.new(var_gen, array_arg_info)
458
- end
459
-
460
- before do
461
- builder.array_arg = array_arg_builder
462
- end
463
-
464
- it 'has the correct value for #pre_conversion' do
465
- builder.pre_conversion.must_equal ['n_ints = ints.nil? ? 0 : ints.length',
466
- '_v1 = FFI::MemoryPointer.new :int32',
467
- '_v1.put_int32 0, n_ints']
468
- end
469
-
470
- it 'has the correct value for #post_conversion' do
471
- builder.post_conversion.must_equal ['_v2 = _v1.get_int32(0)']
472
- end
473
- end
474
-
475
- describe 'for :strv' do
476
- let(:arg_info) do
477
- get_introspection_data('GIMarshallingTests', 'gstrv_inout').args[0]
478
- end
479
-
480
- it 'has the correct value for #pre_conversion' do
481
- builder.pre_conversion.must_equal ['_v1 = FFI::MemoryPointer.new :pointer',
482
- '_v1.put_pointer 0, GLib::Strv.from(g_strv)']
483
- end
484
-
485
- it 'has the correct value for #post_conversion' do
486
- builder.post_conversion.must_equal ['_v2 = GLib::Strv.wrap(_v1.get_pointer(0))']
487
- end
488
- end
489
-
490
- describe 'for :ptr_array' do
491
- let(:arg_info) do
492
- get_introspection_data('GIMarshallingTests', 'gptrarray_utf8_none_inout').args[0]
493
- end
494
-
495
- it 'has the correct value for #pre_conversion' do
496
- builder.pre_conversion.must_equal ['_v1 = FFI::MemoryPointer.new :pointer',
497
- '_v1.put_pointer 0, GLib::PtrArray.from(:utf8, parray_)']
498
- end
499
-
500
- it 'has the correct value for #post_conversion' do
501
- builder.post_conversion.must_equal ['_v2 = GLib::PtrArray.wrap(:utf8, _v1.get_pointer(0))']
502
- end
503
- end
504
-
505
- describe 'for :utf8' do
506
- let(:arg_info) do
507
- get_introspection_data('GIMarshallingTests', 'utf8_none_inout').args[0]
508
- end
509
-
510
- it 'has the correct value for #pre_conversion' do
511
- builder.pre_conversion.must_equal ['_v1 = FFI::MemoryPointer.new :pointer',
512
- '_v1.put_pointer 0, GirFFI::InPointer.from_utf8(utf8)']
513
- end
514
-
515
- it 'has the correct value for #post_conversion' do
516
- builder.post_conversion.must_equal ['_v2 = _v1.get_pointer(0).to_utf8']
517
- end
518
- end
519
-
520
- describe 'for :struct' do
521
- describe 'with full ownership transfer' do
522
- let(:arg_info) do
523
- get_introspection_data('GIMarshallingTests', 'boxed_struct_inout').args[0]
524
- end
525
-
526
- it 'has the correct value for #pre_conversion' do
527
- builder.pre_conversion.must_equal [
528
- '_v1 = FFI::MemoryPointer.new :pointer',
529
- '_v1.put_pointer 0, GIMarshallingTests::BoxedStruct.copy_from(struct_)'
530
- ]
531
- end
532
-
533
- it 'has the correct value for #post_conversion' do
534
- builder.post_conversion.
535
- must_equal ['_v2 = GIMarshallingTests::BoxedStruct.wrap_own(_v1.get_pointer(0))']
536
- end
537
- end
538
- end
539
-
540
- describe 'for :c' do
541
- describe 'with fixed size' do
542
- let(:arg_info) do
543
- get_introspection_data('GIMarshallingTests', 'array_fixed_inout').args[0]
544
- end
545
-
546
- it 'has the correct value for #pre_conversion' do
547
- builder.pre_conversion.must_equal [
548
- 'GirFFI::ArgHelper.check_fixed_array_size 4, ints, "ints"',
549
- '_v1 = FFI::MemoryPointer.new :pointer',
550
- '_v1.put_pointer 0, GirFFI::SizedArray.from(:gint32, 4, ints)'
551
- ]
552
- end
553
-
554
- it 'has the correct value for #post_conversion' do
555
- builder.post_conversion.must_equal ['_v2 = GirFFI::SizedArray.wrap(:gint32, 4, _v1.get_pointer(0))']
556
- end
557
- end
558
-
559
- describe 'with separate size parameter' do
560
- let(:function_info) do
561
- get_introspection_data('Regress', 'test_array_int_inout')
562
- end
563
- let(:length_arg_info) { function_info.args[0] }
564
- let(:arg_info) { function_info.args[1] }
565
- let(:length_arg_builder) do
566
- GirFFI::Builders::ArgumentBuilder.new(var_gen, length_arg_info)
567
- end
568
-
569
- before do
570
- builder.length_arg = length_arg_builder
571
- end
572
-
573
- it 'has the correct value for #pre_conversion' do
574
- builder.pre_conversion.must_equal [
575
- '_v1 = FFI::MemoryPointer.new :pointer',
576
- '_v1.put_pointer 0, GirFFI::SizedArray.copy_from(:gint32, -1, ints)'
577
- ]
578
- end
579
-
580
- it 'has the correct value for #post_conversion' do
581
- builder.post_conversion.must_equal ['_v3 = GirFFI::SizedArray.wrap(:gint32, _v2, _v1.get_pointer(0))']
582
- end
583
- end
584
- end
585
- end
586
-
587
- describe 'for a skipped argument with direction :in' do
588
- let(:arg_info) do
589
- get_method_introspection_data('Regress', 'TestObj', 'skip_param').args[2]
590
- end
591
-
592
- it 'has the correct value for method_argument_name' do
593
- builder.method_argument_name.must_be_nil
594
- end
595
-
596
- it 'has the correct value for #pre_conversion' do
597
- builder.pre_conversion.must_equal ['_v1 = 0']
598
- end
599
-
600
- it 'has the correct value for #post_conversion' do
601
- builder.post_conversion.must_equal []
602
- end
603
- end
604
-
605
- describe 'for a skipped argument with direction :inout' do
606
- let(:arg_info) do
607
- get_method_introspection_data('Regress', 'TestObj', 'skip_inout_param').args[3]
608
- end
609
-
610
- it 'has the correct value for method_argument_name' do
611
- builder.method_argument_name.must_be_nil
612
- end
613
-
614
- it 'has the correct value for #pre_conversion' do
615
- builder.pre_conversion.must_equal ['_v1 = FFI::MemoryPointer.new :int32',
616
- '_v1.put_int32 0, 0']
617
- end
618
-
619
- it 'has the correct value for #post_conversion' do
620
- builder.post_conversion.must_equal []
621
- end
622
- end
623
-
624
- describe 'for a skipped argument with direction :out' do
625
- let(:arg_info) do
626
- get_method_introspection_data('Regress', 'TestObj', 'skip_out_param').args[1]
627
- end
628
-
629
- it 'has the correct value for method_argument_name' do
630
- builder.method_argument_name.must_be_nil
631
- end
632
-
633
- it 'has the correct value for #pre_conversion' do
634
- builder.pre_conversion.must_equal ['_v1 = FFI::MemoryPointer.new :int32']
635
- end
636
-
637
- it 'has the correct value for #post_conversion' do
638
- builder.post_conversion.must_equal []
639
- end
640
- end
641
-
642
- describe 'for an argument with direction :error' do
643
- let(:arg_info) { GirFFI::ErrorArgumentInfo.new }
644
-
645
- it 'has the correct value for #pre_conversion' do
646
- builder.pre_conversion.must_equal [
647
- '_v1 = FFI::MemoryPointer.new(:pointer).write_pointer nil'
648
- ]
649
- end
650
-
651
- it 'has the correct value for #post_conversion' do
652
- builder.post_conversion.must_equal [
653
- 'GirFFI::ArgHelper.check_error(_v1)'
654
- ]
655
- end
656
- end
657
- end