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,538 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'gir_ffi_test_helper'
4
-
5
- describe GirFFI::Builders::FunctionBuilder do
6
- describe '#method_definition' do
7
- let(:builder) { GirFFI::Builders::FunctionBuilder.new function_info }
8
- let(:code) { builder.method_definition }
9
-
10
- describe 'generally' do
11
- let(:function_info) { get_method_introspection_data 'GObject', 'Object', 'get_property' }
12
-
13
- it 'returns the same result when called twice' do
14
- original = builder.method_definition
15
- copy = builder.method_definition
16
- copy.must_equal original
17
- end
18
- end
19
-
20
- describe 'for Regress:test_array_fixed_out_objects' do
21
- let(:function_info) { get_introspection_data 'Regress', 'test_array_fixed_out_objects' }
22
- it 'builds a correct definition' do
23
- skip unless function_info
24
- code.must_equal <<-CODE.reset_indentation
25
- def self.test_array_fixed_out_objects
26
- _v1 = FFI::MemoryPointer.new :pointer
27
- Regress::Lib.regress_test_array_fixed_out_objects _v1
28
- _v2 = GirFFI::SizedArray.wrap([:pointer, Regress::TestObj], 2, _v1.get_pointer(0))
29
- return _v2
30
- end
31
- CODE
32
- end
33
- end
34
-
35
- describe 'for functions having a linked length argument' do
36
- let(:function_info) { get_introspection_data 'Regress', 'test_array_gint16_in' }
37
- it 'builds a correct definition' do
38
- code.must_equal <<-CODE.reset_indentation
39
- def self.test_array_gint16_in(ints)
40
- n_ints = ints.nil? ? 0 : ints.length
41
- _v1 = n_ints
42
- _v2 = GirFFI::SizedArray.from(:gint16, -1, ints)
43
- _v3 = Regress::Lib.regress_test_array_gint16_in _v1, _v2
44
- return _v3
45
- end
46
- CODE
47
- end
48
- end
49
-
50
- describe 'for methods taking a zero-terminated array with length argument' do
51
- let(:function_info) { get_method_introspection_data 'Regress', 'AnnotationObject', 'parse_args' }
52
- it 'builds a correct definition' do
53
- skip unless function_info
54
- code.must_equal <<-CODE.reset_indentation
55
- def parse_args(argv)
56
- argc = argv.nil? ? 0 : argv.length
57
- _v1 = FFI::MemoryPointer.new :int32
58
- _v1.put_int32 0, argc
59
- _v2 = FFI::MemoryPointer.new :pointer
60
- _v2.put_pointer 0, GLib::Strv.from(argv)
61
- Regress::Lib.regress_annotation_object_parse_args self, _v1, _v2
62
- _v3 = GLib::Strv.wrap(_v2.get_pointer(0))
63
- return _v3
64
- end
65
- CODE
66
- end
67
- end
68
-
69
- describe 'for functions with callbacks' do
70
- let(:function_info) { get_introspection_data 'Regress', 'test_callback_destroy_notify' }
71
- it 'builds a correct definition' do
72
- code.must_equal <<-CODE.reset_indentation
73
- def self.test_callback_destroy_notify(&callback)
74
- _v1 = Regress::TestCallbackUserData.from(callback)
75
- _v2 = GirFFI::ArgHelper.store(_v1)
76
- _v3 = GLib::DestroyNotify.default
77
- _v4 = Regress::Lib.regress_test_callback_destroy_notify _v1, _v2, _v3
78
- return _v4
79
- end
80
- CODE
81
- end
82
- end
83
-
84
- describe 'for functions that take a GValue' do
85
- let(:function_info) { get_introspection_data 'GIMarshallingTests', 'gvalue_in' }
86
- it 'creates a call to GObject::Value#from' do
87
- code.must_equal <<-CODE.reset_indentation
88
- def self.gvalue_in(value)
89
- _v1 = GObject::Value.from(value)
90
- GIMarshallingTests::Lib.gi_marshalling_tests_gvalue_in _v1
91
- end
92
- CODE
93
- end
94
- end
95
-
96
- describe 'for functions that return a GValue' do
97
- let(:function_info) { get_introspection_data 'GIMarshallingTests', 'gvalue_return' }
98
- it 'creates a call to #get_value' do
99
- code.must_equal <<-CODE.reset_indentation
100
- def self.gvalue_return
101
- _v1 = GIMarshallingTests::Lib.gi_marshalling_tests_gvalue_return
102
- _v2 = GObject::Value.wrap(_v1).get_value
103
- return _v2
104
- end
105
- CODE
106
- end
107
- end
108
-
109
- describe 'for functions that have a GValue out argument' do
110
- let(:function_info) { get_introspection_data 'GIMarshallingTests', 'gvalue_out' }
111
- it 'creates a call to #get_value' do
112
- code.must_equal <<-CODE.reset_indentation
113
- def self.gvalue_out
114
- _v1 = FFI::MemoryPointer.new :pointer
115
- GIMarshallingTests::Lib.gi_marshalling_tests_gvalue_out _v1
116
- _v2 = GObject::Value.wrap(_v1.get_pointer(0)).get_value
117
- return _v2
118
- end
119
- CODE
120
- end
121
- end
122
-
123
- describe 'for functions that have a caller-allocated GValue out argument' do
124
- let(:function_info) { get_introspection_data 'GIMarshallingTests', 'gvalue_out_caller_allocates' }
125
-
126
- it 'creates a call to #get_value' do
127
- skip unless function_info
128
- code.must_equal <<-CODE.reset_indentation
129
- def self.gvalue_out_caller_allocates
130
- _v1 = GObject::Value.new
131
- GIMarshallingTests::Lib.gi_marshalling_tests_gvalue_out_caller_allocates _v1
132
- _v2 = _v1.get_value
133
- return _v2
134
- end
135
- CODE
136
- end
137
- end
138
-
139
- describe 'for functions with a nullable input array' do
140
- let(:function_info) { get_introspection_data 'Regress', 'test_array_int_null_in' }
141
- it 'builds correct definition' do
142
- code.must_equal <<-CODE.reset_indentation
143
- def self.test_array_int_null_in(arr = nil)
144
- len = arr.nil? ? 0 : arr.length
145
- _v1 = len
146
- _v2 = GirFFI::SizedArray.from(:gint32, -1, arr)
147
- Regress::Lib.regress_test_array_int_null_in _v2, _v1
148
- end
149
- CODE
150
- end
151
- end
152
-
153
- describe 'for functions with a nullable output array' do
154
- let(:function_info) { get_introspection_data 'Regress', 'test_array_int_null_out' }
155
- it 'builds correct definition' do
156
- code.must_equal <<-CODE.reset_indentation
157
- def self.test_array_int_null_out
158
- _v1 = FFI::MemoryPointer.new :int32
159
- _v2 = FFI::MemoryPointer.new :pointer
160
- Regress::Lib.regress_test_array_int_null_out _v2, _v1
161
- _v3 = _v1.get_int32(0)
162
- _v4 = GirFFI::SizedArray.wrap(:gint32, _v3, _v2.get_pointer(0))
163
- return _v4
164
- end
165
- CODE
166
- end
167
- end
168
-
169
- describe 'for a method with an inout array with size argument' do
170
- let(:function_info) { get_method_introspection_data 'GIMarshallingTests', 'Object', 'method_array_inout' }
171
- it 'builds the correct definition' do
172
- code.must_equal <<-CODE.reset_indentation
173
- def method_array_inout(ints)
174
- length = ints.nil? ? 0 : ints.length
175
- _v1 = FFI::MemoryPointer.new :int32
176
- _v1.put_int32 0, length
177
- _v2 = FFI::MemoryPointer.new :pointer
178
- _v2.put_pointer 0, GirFFI::SizedArray.from(:gint32, -1, ints)
179
- GIMarshallingTests::Lib.gi_marshalling_tests_object_method_array_inout self, _v2, _v1
180
- _v3 = _v1.get_int32(0)
181
- _v4 = GirFFI::SizedArray.wrap(:gint32, _v3, _v2.get_pointer(0))
182
- return _v4
183
- end
184
- CODE
185
- end
186
- end
187
-
188
- describe 'for a simple method' do
189
- let(:function_info) { get_method_introspection_data 'Regress', 'TestObj', 'instance_method' }
190
-
191
- it 'builds a correct definition' do
192
- code.must_equal <<-CODE.reset_indentation
193
- def instance_method
194
- _v1 = Regress::Lib.regress_test_obj_instance_method self
195
- return _v1
196
- end
197
- CODE
198
- end
199
- end
200
-
201
- describe 'for GLib::Variant.get_strv' do
202
- let(:function_info) { get_method_introspection_data 'GLib', 'Variant', 'get_strv' }
203
- it 'builds a correct definition' do
204
- size_type = ":uint#{FFI.type_size(:size_t) * 8}"
205
- code.must_equal <<-CODE.reset_indentation
206
- def get_strv
207
- _v1 = FFI::MemoryPointer.new #{size_type}
208
- _v2 = GLib::Lib.g_variant_get_strv self, _v1
209
- _v3 = GLib::Strv.wrap(_v2)
210
- return _v3
211
- end
212
- CODE
213
- end
214
- end
215
-
216
- describe 'for Regress.has_parameter_named_attrs' do
217
- let(:function_info) { get_introspection_data 'Regress', 'has_parameter_named_attrs' }
218
-
219
- it 'builds a correct definition' do
220
- skip unless function_info
221
- code.must_equal <<-CODE.reset_indentation
222
- def self.has_parameter_named_attrs(foo, attributes)
223
- _v1 = foo
224
- GirFFI::ArgHelper.check_fixed_array_size 32, attributes, \"attributes\"
225
- _v2 = GirFFI::SizedArray.from([:pointer, :guint32], 32, attributes)
226
- Regress::Lib.regress_has_parameter_named_attrs _v1, _v2
227
- end
228
- CODE
229
- end
230
- end
231
-
232
- describe 'for GIMarshallingTests::Object#method_int8_arg_and_out_callee' do
233
- let(:function_info) do
234
- get_method_introspection_data('GIMarshallingTests', 'Object',
235
- 'method_int8_arg_and_out_callee')
236
- end
237
-
238
- it 'builds a correct definition' do
239
- skip unless function_info
240
- code.must_equal <<-CODE.reset_indentation
241
- def method_int8_arg_and_out_callee(arg)
242
- _v1 = arg
243
- _v2 = FFI::MemoryPointer.new :pointer
244
- GIMarshallingTests::Lib.gi_marshalling_tests_object_method_int8_arg_and_out_callee self, _v1, _v2
245
- _v3 = _v2.get_pointer(0).get_int8(0)
246
- return _v3
247
- end
248
- CODE
249
- end
250
- end
251
-
252
- describe 'object ownership transfer' do
253
- describe 'for GIMarshallingTests::Object#full_in' do
254
- let(:function_info) do
255
- get_method_introspection_data('GIMarshallingTests', 'Object',
256
- 'full_in')
257
- end
258
-
259
- # NOTE: This method is transfer-ownership: none, despite the name.
260
- it 'builds a correct definition' do
261
- code.must_equal <<-CODE.reset_indentation
262
- def full_in
263
- GIMarshallingTests::Lib.gi_marshalling_tests_object_full_in self
264
- end
265
- CODE
266
- end
267
- end
268
-
269
- describe 'for GIMarshallingTests::Object.full_inout' do
270
- let(:function_info) do
271
- get_method_introspection_data('GIMarshallingTests', 'Object',
272
- 'full_inout')
273
- end
274
-
275
- it 'builds a correct definition' do
276
- code.must_equal <<-CODE.reset_indentation
277
- def self.full_inout(object)
278
- _v1 = FFI::MemoryPointer.new :pointer
279
- _v1.put_pointer 0, GIMarshallingTests::Object.from(object && object.ref)
280
- GIMarshallingTests::Lib.gi_marshalling_tests_object_full_inout _v1
281
- _v2 = GIMarshallingTests::Object.wrap(_v1.get_pointer(0))
282
- return _v2
283
- end
284
- CODE
285
- end
286
- end
287
-
288
- describe 'for GIMarshallingTests::Object.full_out' do
289
- let(:function_info) do
290
- get_method_introspection_data('GIMarshallingTests', 'Object',
291
- 'full_out')
292
- end
293
-
294
- it 'builds a correct definition' do
295
- code.must_equal <<-CODE.reset_indentation
296
- def self.full_out
297
- _v1 = FFI::MemoryPointer.new :pointer
298
- GIMarshallingTests::Lib.gi_marshalling_tests_object_full_out _v1
299
- _v2 = GIMarshallingTests::Object.wrap(_v1.get_pointer(0))
300
- return _v2
301
- end
302
- CODE
303
- end
304
- end
305
-
306
- describe 'for GIMarshallingTests::Object.full_return' do
307
- let(:function_info) do
308
- get_method_introspection_data('GIMarshallingTests', 'Object',
309
- 'full_return')
310
- end
311
-
312
- it 'builds a correct definition' do
313
- code.must_equal <<-CODE.reset_indentation
314
- def self.full_return
315
- _v1 = GIMarshallingTests::Lib.gi_marshalling_tests_object_full_return
316
- _v2 = GIMarshallingTests::Object.wrap(_v1)
317
- return _v2
318
- end
319
- CODE
320
- end
321
- end
322
-
323
- describe 'for GIMarshallingTests::Object#none_in' do
324
- let(:function_info) do
325
- get_method_introspection_data('GIMarshallingTests', 'Object',
326
- 'none_in')
327
- end
328
-
329
- it 'builds a correct definition' do
330
- code.must_equal <<-CODE.reset_indentation
331
- def none_in
332
- GIMarshallingTests::Lib.gi_marshalling_tests_object_none_in self
333
- end
334
- CODE
335
- end
336
- end
337
-
338
- describe 'for GIMarshallingTests::Object.none_inout' do
339
- let(:function_info) do
340
- get_method_introspection_data('GIMarshallingTests', 'Object',
341
- 'none_inout')
342
- end
343
-
344
- it 'builds a correct definition' do
345
- code.must_equal <<-CODE.reset_indentation
346
- def self.none_inout(object)
347
- _v1 = FFI::MemoryPointer.new :pointer
348
- _v1.put_pointer 0, GIMarshallingTests::Object.from(object)
349
- GIMarshallingTests::Lib.gi_marshalling_tests_object_none_inout _v1
350
- _v2 = GIMarshallingTests::Object.wrap(_v1.get_pointer(0)).tap { |it| it && it.ref }
351
- return _v2
352
- end
353
- CODE
354
- end
355
- end
356
-
357
- describe 'for GIMarshallingTests::Object.none_out' do
358
- let(:function_info) do
359
- get_method_introspection_data('GIMarshallingTests', 'Object',
360
- 'none_out')
361
- end
362
-
363
- it 'builds a correct definition' do
364
- code.must_equal <<-CODE.reset_indentation
365
- def self.none_out
366
- _v1 = FFI::MemoryPointer.new :pointer
367
- GIMarshallingTests::Lib.gi_marshalling_tests_object_none_out _v1
368
- _v2 = GIMarshallingTests::Object.wrap(_v1.get_pointer(0)).tap { |it| it && it.ref }
369
- return _v2
370
- end
371
- CODE
372
- end
373
- end
374
-
375
- describe 'for GIMarshallingTests::Object.none_return' do
376
- let(:function_info) do
377
- get_method_introspection_data('GIMarshallingTests', 'Object',
378
- 'none_return')
379
- end
380
-
381
- it 'builds a correct definition' do
382
- code.must_equal <<-CODE.reset_indentation
383
- def self.none_return
384
- _v1 = GIMarshallingTests::Lib.gi_marshalling_tests_object_none_return
385
- _v2 = GIMarshallingTests::Object.wrap(_v1).tap { |it| it && it.ref }
386
- return _v2
387
- end
388
- CODE
389
- end
390
- end
391
-
392
- describe 'for Regress::TestObj#instance_method_full' do
393
- let(:function_info) do
394
- get_method_introspection_data('Regress', 'TestObj',
395
- 'instance_method_full')
396
- end
397
-
398
- it 'builds a correct definition including self.ref' do
399
- skip unless function_info
400
- code.must_equal <<-CODE.reset_indentation
401
- def instance_method_full
402
- Regress::Lib.regress_test_obj_instance_method_full self.ref
403
- end
404
- CODE
405
- end
406
- end
407
- end
408
-
409
- describe 'struct ownership transfer' do
410
- describe 'for GIMarshallingTests::BoxedStruct.inout' do
411
- let(:function_info) do
412
- get_method_introspection_data('GIMarshallingTests', 'BoxedStruct', 'inout')
413
- end
414
-
415
- it 'builds a correct definition' do
416
- code.must_equal <<-CODE.reset_indentation
417
- def self.inout(struct_)
418
- _v1 = FFI::MemoryPointer.new :pointer
419
- _v1.put_pointer 0, GIMarshallingTests::BoxedStruct.copy_from(struct_)
420
- GIMarshallingTests::Lib.gi_marshalling_tests_boxed_struct_inout _v1
421
- _v2 = GIMarshallingTests::BoxedStruct.wrap_own(_v1.get_pointer(0))
422
- return _v2
423
- end
424
- CODE
425
- end
426
- end
427
-
428
- describe 'for GIMarshallingTests::BoxedStruct.out' do
429
- let(:function_info) do
430
- get_method_introspection_data('GIMarshallingTests', 'BoxedStruct', 'out')
431
- end
432
-
433
- it 'builds a correct definition' do
434
- code.must_equal <<-CODE.reset_indentation
435
- def self.out
436
- _v1 = FFI::MemoryPointer.new :pointer
437
- GIMarshallingTests::Lib.gi_marshalling_tests_boxed_struct_out _v1
438
- _v2 = GIMarshallingTests::BoxedStruct.wrap_copy(_v1.get_pointer(0))
439
- return _v2
440
- end
441
- CODE
442
- end
443
- end
444
-
445
- describe 'for GIMarshallingTests::BoxedStruct.returnv' do
446
- let(:function_info) do
447
- get_method_introspection_data('GIMarshallingTests', 'BoxedStruct', 'returnv')
448
- end
449
-
450
- it 'builds a correct definition' do
451
- code.must_equal <<-CODE.reset_indentation
452
- def self.returnv
453
- _v1 = GIMarshallingTests::Lib.gi_marshalling_tests_boxed_struct_returnv
454
- _v2 = GIMarshallingTests::BoxedStruct.wrap_copy(_v1)
455
- return _v2
456
- end
457
- CODE
458
- end
459
- end
460
- end
461
-
462
- describe 'string ownership transfer' do
463
- describe 'for Regress.test_utf8_out' do
464
- let(:function_info) { get_introspection_data 'Regress', 'test_utf8_out' }
465
-
466
- it 'builds a correct definition' do
467
- code.must_equal <<-CODE.reset_indentation
468
- def self.test_utf8_out
469
- _v1 = FFI::MemoryPointer.new :pointer
470
- Regress::Lib.regress_test_utf8_out _v1
471
- _v2 = GirFFI::AllocationHelper.free_after _v1.get_pointer(0), &:to_utf8
472
- return _v2
473
- end
474
- CODE
475
- end
476
- end
477
- end
478
-
479
- describe 'for functions with an allow-none ingoing parameter' do
480
- let(:function_info) { get_introspection_data 'Regress', 'test_utf8_null_in' }
481
- it 'builds correct definition with default parameter value' do
482
- code.must_equal <<-CODE.reset_indentation
483
- def self.test_utf8_null_in(in_ = nil)
484
- _v1 = GirFFI::InPointer.from_utf8(in_)
485
- Regress::Lib.regress_test_utf8_null_in _v1
486
- end
487
- CODE
488
- end
489
- end
490
-
491
- describe 'for functions where some allow-none cannot be honored' do
492
- let(:function_info) { get_introspection_data 'GIMarshallingTests', 'array_in_utf8_two_in_out_of_order' }
493
- it 'builds correct definition with default parameter value on the later arguments' do
494
- code.must_equal <<-CODE.reset_indentation
495
- def self.array_in_utf8_two_in_out_of_order(a, ints, b = nil)
496
- length = ints.nil? ? 0 : ints.length
497
- _v1 = length
498
- _v2 = GirFFI::InPointer.from_utf8(a)
499
- _v3 = GirFFI::InPointer.from_utf8(b)
500
- _v4 = GirFFI::SizedArray.from(:gint32, -1, ints)
501
- GIMarshallingTests::Lib.gi_marshalling_tests_array_in_utf8_two_in_out_of_order _v1, _v2, _v4, _v3
502
- end
503
- CODE
504
- end
505
- end
506
-
507
- describe 'ownership transfer for an ingoing array of structs' do
508
- describe 'with no ownership transfer of the elements' do
509
- let(:function_info) { get_introspection_data 'GIMarshallingTests', 'array_struct_in' }
510
-
511
- it 'builds a correct definition' do
512
- code.must_equal <<-CODE.reset_indentation
513
- def self.array_struct_in(structs)
514
- length = structs.nil? ? 0 : structs.length
515
- _v1 = length
516
- _v2 = GirFFI::SizedArray.from([:pointer, GIMarshallingTests::BoxedStruct], -1, structs)
517
- GIMarshallingTests::Lib.gi_marshalling_tests_array_struct_in _v2, _v1
518
- end
519
- CODE
520
- end
521
- end
522
- describe 'with ownership transfer of the elements' do
523
- let(:function_info) { get_introspection_data 'GIMarshallingTests', 'array_struct_take_in' }
524
-
525
- it 'builds a correct definition' do
526
- code.must_equal <<-CODE.reset_indentation
527
- def self.array_struct_take_in(structs)
528
- length = structs.nil? ? 0 : structs.length
529
- _v1 = length
530
- _v2 = GirFFI::SizedArray.copy_from([:pointer, GIMarshallingTests::BoxedStruct], -1, structs)
531
- GIMarshallingTests::Lib.gi_marshalling_tests_array_struct_take_in _v2, _v1
532
- end
533
- CODE
534
- end
535
- end
536
- end
537
- end
538
- end