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,6 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'gir_ffi_test_helper'
4
-
5
- describe GirFFI::Builders::BaseArgumentBuilder do
6
- end
@@ -1,129 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'gir_ffi_test_helper'
4
-
5
- describe GirFFI::Builders::CallbackArgumentBuilder do
6
- let(:var_gen) { GirFFI::VariableNameGenerator.new }
7
- let(:builder) { GirFFI::Builders::CallbackArgumentBuilder.new(var_gen, arg_info) }
8
-
9
- describe 'for an argument with direction :out' do
10
- describe 'for :zero_terminated' do
11
- let(:vfunc_info) do
12
- get_vfunc_introspection_data('GIMarshallingTests', 'Object',
13
- 'vfunc_array_out_parameter')
14
- end
15
- let(:arg_info) { vfunc_info.args[0] }
16
-
17
- before { skip unless vfunc_info }
18
-
19
- it 'has the correct value for #pre_conversion' do
20
- builder.pre_conversion.must_equal ['_v1 = a']
21
- end
22
-
23
- it 'has the correct value for #post_conversion' do
24
- builder.post_conversion.must_equal ['_v1.put_pointer 0, GirFFI::ZeroTerminated.from(:gfloat, _v2)']
25
- end
26
- end
27
-
28
- describe 'when the argument is allocated by us, the callee' do
29
- let(:vfunc_info) do
30
- get_vfunc_introspection_data('GIMarshallingTests', 'Object',
31
- 'method_int8_arg_and_out_callee')
32
- end
33
-
34
- let(:arg_info) { vfunc_info.args[1] }
35
-
36
- it 'has the correct value for #pre_conversion' do
37
- builder.pre_conversion.must_equal ['_v1 = FFI::MemoryPointer.new(:int8).tap { |ptr| out.put_pointer 0, ptr }']
38
- end
39
-
40
- it 'has the correct value for #post_conversion' do
41
- builder.post_conversion.must_equal ['_v1.put_int8 0, _v2']
42
- end
43
- end
44
- end
45
-
46
- describe 'for an argument with direction :error' do
47
- let(:arg_info) { GirFFI::ErrorArgumentInfo.new }
48
-
49
- it 'sets up a rescueing block in #pre_conversion' do
50
- builder.pre_conversion.must_equal [
51
- '_v1 = _error',
52
- 'begin'
53
- ]
54
- end
55
-
56
- it 'converts any exceptions to GLib::Error in #post_conversion' do
57
- builder.post_conversion.must_equal [
58
- 'rescue => _v1',
59
- '_v2.put_pointer 0, GLib::Error.from(_v1)',
60
- 'end'
61
- ]
62
- end
63
- end
64
-
65
- describe 'for an argument with direction :inout' do
66
- let(:callback_info) do
67
- get_introspection_data('Regress',
68
- 'TestCallbackArrayInOut')
69
- end
70
- let(:array_arg_info) { callback_info.args[0] }
71
- let(:array_arg_builder) do
72
- GirFFI::Builders::CallbackArgumentBuilder.new(var_gen, array_arg_info)
73
- end
74
- let(:length_arg_info) { callback_info.args[1] }
75
- let(:length_arg_builder) do
76
- GirFFI::Builders::CallbackArgumentBuilder.new(var_gen, length_arg_info)
77
- end
78
-
79
- before do
80
- skip unless callback_info
81
- length_arg_builder.array_arg = array_arg_builder
82
- array_arg_builder.length_arg = length_arg_builder
83
- end
84
-
85
- describe 'for arrays with a length argument' do
86
- it 'provides a call argument name' do
87
- array_arg_builder.call_argument_name.must_equal '_v1'
88
- end
89
-
90
- it 'provides a capture variable name' do
91
- array_arg_builder.capture_variable_name.must_equal '_v1'
92
- end
93
-
94
- it 'has the correct value for #pre_conversion' do
95
- array_arg_builder.pre_conversion.
96
- must_equal ['_v1 = ints',
97
- '_v2 = GirFFI::SizedArray.wrap(:gint32, _v3, _v1.get_pointer(0))']
98
- end
99
-
100
- it 'has the correct value for #post_conversion' do
101
- array_arg_builder.pre_conversion
102
- array_arg_builder.post_conversion.
103
- must_equal ['_v1.put_pointer 0, GirFFI::SizedArray.from(:gint32, -1, _v4)']
104
- end
105
- end
106
-
107
- describe 'for an array length argument' do
108
- it 'does not provide a call argument name' do
109
- length_arg_builder.call_argument_name.must_be_nil
110
- end
111
-
112
- it 'does not provide a capture variable name' do
113
- length_arg_builder.capture_variable_name.must_be_nil
114
- end
115
-
116
- it 'has the correct value for #pre_conversion' do
117
- length_arg_builder.pre_conversion.
118
- must_equal ['_v1 = length',
119
- '_v2 = _v1.get_int32(0)']
120
- end
121
-
122
- it 'has the correct value for #post_conversion' do
123
- length_arg_builder.pre_conversion
124
- length_arg_builder.post_conversion.
125
- must_equal ['_v1.put_int32 0, _v3.length']
126
- end
127
- end
128
- end
129
- end
@@ -1,118 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'gir_ffi_test_helper'
4
-
5
- describe GirFFI::Builders::CallbackBuilder do
6
- let(:builder) { GirFFI::Builders::CallbackBuilder.new callback_info }
7
-
8
- describe '#mapping_method_definition' do
9
- describe 'for a callback with arguments and return value' do
10
- let(:callback_info) { get_introspection_data 'Regress', 'TestCallbackFull' }
11
- it 'returns a valid mapping method' do
12
- expected = <<-CODE.reset_indentation
13
- def self.call_with_argument_mapping(_proc, foo, bar, path)
14
- _v1 = foo
15
- _v2 = bar
16
- _v3 = path.to_utf8
17
- _v4 = _proc.call(_v1, _v2, _v3)
18
- return _v4
19
- end
20
- CODE
21
-
22
- builder.mapping_method_definition.must_equal expected
23
- end
24
- end
25
-
26
- describe 'for a callback with no arguments or return value' do
27
- let(:callback_info) { get_introspection_data 'Regress', 'TestSimpleCallback' }
28
- it 'returns a valid mapping method' do
29
- expected = <<-CODE.reset_indentation
30
- def self.call_with_argument_mapping(_proc)
31
- _proc.call()
32
- end
33
- CODE
34
-
35
- builder.mapping_method_definition.must_equal expected
36
- end
37
- end
38
-
39
- describe 'for a callback with a closure argument' do
40
- let(:callback_info) { get_introspection_data 'Regress', 'TestCallbackUserData' }
41
- it 'returns a valid mapping method' do
42
- expected = <<-CODE.reset_indentation
43
- def self.call_with_argument_mapping(_proc, user_data)
44
- _v1 = GirFFI::ArgHelper::OBJECT_STORE.fetch(user_data)
45
- _v2 = _proc.call(_v1)
46
- return _v2
47
- end
48
- CODE
49
-
50
- builder.mapping_method_definition.must_equal expected
51
- end
52
- end
53
-
54
- describe 'for a callback with one out argument' do
55
- let(:callback_info) do
56
- get_introspection_data('GIMarshallingTests',
57
- 'CallbackOneOutParameter')
58
- end
59
- it 'returns a valid mapping method' do
60
- expected = <<-CODE.reset_indentation
61
- def self.call_with_argument_mapping(_proc, a)
62
- _v1 = a
63
- _v2 = _proc.call()
64
- _v1.put_float 0, _v2
65
- end
66
- CODE
67
-
68
- builder.mapping_method_definition.must_equal expected
69
- end
70
- end
71
-
72
- describe 'for a callback with an inout array argument' do
73
- let(:callback_info) do
74
- get_introspection_data('Regress',
75
- 'TestCallbackArrayInOut')
76
- end
77
- it 'returns a valid mapping method' do
78
- skip unless callback_info
79
- expected = <<-CODE.reset_indentation
80
- def self.call_with_argument_mapping(_proc, ints, length)
81
- _v1 = length
82
- _v2 = _v1.get_int32(0)
83
- _v3 = ints
84
- _v4 = GirFFI::SizedArray.wrap(:gint32, _v2, _v3.get_pointer(0))
85
- _v5 = _proc.call(_v4)
86
- _v1.put_int32 0, _v5.length
87
- _v3.put_pointer 0, GirFFI::SizedArray.from(:gint32, -1, _v5)
88
- end
89
- CODE
90
-
91
- builder.mapping_method_definition.must_equal expected
92
- end
93
- end
94
-
95
- describe 'for a callback with a value in argument' do
96
- let(:field_info) do
97
- get_field_introspection_data('GObject',
98
- 'ObjectClass', 'get_property')
99
- end
100
- let(:callback_info) do
101
- field_info.field_type.interface
102
- end
103
- it 'returns a valid mapping method' do
104
- expected = <<-CODE.reset_indentation
105
- def self.call_with_argument_mapping(_proc, object, property_id, value, pspec)
106
- _v1 = GObject::Object.wrap(object)
107
- _v2 = property_id
108
- _v3 = GObject::Value.wrap(value)
109
- _v4 = GObject::ParamSpec.wrap(pspec)
110
- _proc.call(_v1, _v2, _v3, _v4)
111
- end
112
- CODE
113
-
114
- builder.mapping_method_definition.must_equal expected
115
- end
116
- end
117
- end
118
- end
@@ -1,85 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'gir_ffi_test_helper'
4
-
5
- describe GirFFI::Builders::CallbackReturnValueBuilder do
6
- let(:var_gen) { GirFFI::VariableNameGenerator.new }
7
- let(:return_value_info) { GirFFI::ReturnValueInfo.new(type_info, ownership_transfer, false) }
8
- let(:type_info) { callback_info.return_type }
9
- let(:ownership_transfer) { callback_info.caller_owns }
10
- let(:builder) do
11
- GirFFI::Builders::CallbackReturnValueBuilder.new(var_gen,
12
- return_value_info)
13
- end
14
-
15
- before do
16
- skip unless callback_info
17
- end
18
-
19
- describe 'for :gint32' do
20
- let(:callback_info) { get_introspection_data('GIMarshallingTests', 'CallbackIntInt') }
21
-
22
- it 'has no statements in #post_conversion' do
23
- builder.post_conversion.must_equal []
24
- end
25
-
26
- it 'returns the result of the callback directly' do
27
- builder.capture_variable_name.must_equal '_v1'
28
- builder.return_value_name.must_equal '_v1'
29
- end
30
- end
31
-
32
- describe 'for :void' do
33
- let(:callback_info) do
34
- get_introspection_data('GIMarshallingTests',
35
- 'CallbackMultipleOutParameters')
36
- end
37
-
38
- it 'has no statements in #post_conversion' do
39
- builder.post_conversion.must_equal []
40
- end
41
-
42
- it 'returns nothing' do
43
- builder.capture_variable_name.must_be_nil
44
- builder.return_value_name.must_be_nil
45
- end
46
- end
47
-
48
- describe 'for :enum' do
49
- let(:callback_info) do
50
- get_vfunc_introspection_data('GIMarshallingTests',
51
- 'Object',
52
- 'vfunc_return_enum')
53
- end
54
-
55
- it 'converts the result' do
56
- # Ensure variable names are generated in order
57
- builder.capture_variable_name.must_equal '_v1'
58
- builder.post_conversion.must_equal ['_v2 = GIMarshallingTests::Enum.to_int(_v1)']
59
- end
60
-
61
- it 'returns the result of the conversion' do
62
- builder.capture_variable_name.must_equal '_v1'
63
- builder.return_value_name.must_equal '_v2'
64
- end
65
- end
66
-
67
- describe 'for :object with full transfer' do
68
- let(:callback_info) do
69
- get_vfunc_introspection_data('GIMarshallingTests',
70
- 'Object',
71
- 'vfunc_return_object_transfer_full')
72
- end
73
-
74
- it 'increases the refcount of the result and converts it to a pointer' do
75
- # Ensure variable names are generated in order
76
- builder.capture_variable_name.must_equal '_v1'
77
- builder.post_conversion.must_equal ['_v1.ref', '_v2 = GObject::Object.from(_v1).to_ptr']
78
- end
79
-
80
- it 'returns the result of the conversion' do
81
- builder.capture_variable_name.must_equal '_v1'
82
- builder.return_value_name.must_equal '_v2'
83
- end
84
- end
85
- end
@@ -1,6 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'gir_ffi_test_helper'
4
-
5
- describe GirFFI::Builders::ConstantBuilder do
6
- end
@@ -1,37 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'gir_ffi_test_helper'
4
-
5
- describe GirFFI::Builders::ConstructorBuilder do
6
- describe '#method_definition' do
7
- let(:builder) { GirFFI::Builders::ConstructorBuilder.new function_info }
8
- let(:code) { builder.method_definition }
9
-
10
- describe 'for constructors with the default name' do
11
- let(:function_info) { get_method_introspection_data 'Regress', 'TestObj', 'new' }
12
- it 'builds a constructor' do
13
- code.must_equal <<-CODE.reset_indentation
14
- def self.new(*args, &block)
15
- obj = allocate
16
- obj.__send__ :initialize, *args, &block
17
- obj
18
- end
19
- CODE
20
- end
21
- end
22
-
23
- describe 'for constructors with a custom name' do
24
- let(:function_info) { get_method_introspection_data 'Regress', 'TestObj', 'new_from_file' }
25
- it 'builds a custom constructor' do
26
- code.must_equal <<-CODE.reset_indentation
27
- def self.new_from_file(*args, &block)
28
- raise NoMethodError unless self == Regress::TestObj
29
- obj = allocate
30
- obj.__send__ :initialize_from_file, *args, &block
31
- obj
32
- end
33
- CODE
34
- end
35
- end
36
- end
37
- end
@@ -1,23 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'gir_ffi_test_helper'
4
-
5
- describe GirFFI::Builders::EnumBuilder do
6
- describe '#build_class' do
7
- let(:info) { get_introspection_data 'Regress', 'TestEnum' }
8
- let(:builder) { GirFFI::Builders::EnumBuilder.new info }
9
-
10
- it 'makes the created type know its proper name' do
11
- enum = builder.build_class
12
- enum.inspect.must_equal 'Regress::TestEnum'
13
- end
14
-
15
- it 'adds constants for the values' do
16
- enum = builder.build_class
17
- enum::VALUE1.must_equal enum[:value1]
18
- enum::VALUE2.must_equal enum[:value2]
19
- enum::VALUE3.must_equal enum[:value3]
20
- enum::VALUE4.must_equal enum[:value4]
21
- end
22
- end
23
- end
@@ -1,134 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'gir_ffi_test_helper'
4
-
5
- describe GirFFI::Builders::FieldBuilder do
6
- let(:target_class) { 'dummy' }
7
- let(:instance) { GirFFI::Builders::FieldBuilder.new field_info, target_class }
8
-
9
- describe 'for a field of type :gint8 with an offset' do
10
- let(:field_info) { get_field_introspection_data 'Regress', 'TestSimpleBoxedA', 'some_int8' }
11
- it 'creates the right getter method' do
12
- expected = <<-CODE.reset_indentation
13
- def some_int8
14
- _v1 = @struct.to_ptr
15
- _v2 = _v1.get_int8(#{field_info.offset})
16
- _v2
17
- end
18
- CODE
19
- instance.getter_def.must_equal expected
20
- end
21
-
22
- it 'creates the right setter method' do
23
- expected = <<-CODE.reset_indentation
24
- def some_int8= value
25
- _v1 = @struct.to_ptr
26
- _v2 = value
27
- _v1.put_int8 #{field_info.offset}, _v2
28
- end
29
- CODE
30
- instance.setter_def.must_equal expected
31
- end
32
- end
33
-
34
- describe 'for a field of type :struct' do
35
- let(:field_info) { get_field_introspection_data 'Regress', 'TestBoxed', 'nested_a' }
36
- it 'creates the right getter method' do
37
- expected = <<-CODE.reset_indentation
38
- def nested_a
39
- _v1 = @struct.to_ptr
40
- _v2 = Regress::TestSimpleBoxedA.get_value_from_pointer(_v1, #{field_info.offset})
41
- _v3 = Regress::TestSimpleBoxedA.wrap(_v2)
42
- _v3
43
- end
44
- CODE
45
- instance.getter_def.must_equal expected
46
- end
47
-
48
- it 'creates the right setter method' do
49
- expected = <<-CODE.reset_indentation
50
- def nested_a= value
51
- _v1 = @struct.to_ptr
52
- _v2 = Regress::TestSimpleBoxedA.copy_from(value)
53
- Regress::TestSimpleBoxedA.copy_value_to_pointer(_v2, _v1, #{field_info.offset})
54
- end
55
- CODE
56
- instance.setter_def.must_equal expected
57
- end
58
- end
59
-
60
- describe 'for a field of type :enum' do
61
- let(:field_info) { get_field_introspection_data 'Regress', 'TestStructA', 'some_enum' }
62
- it 'creates the right getter method' do
63
- expected = <<-CODE.reset_indentation
64
- def some_enum
65
- _v1 = @struct.to_ptr
66
- _v2 = Regress::TestEnum.get_value_from_pointer(_v1, #{field_info.offset})
67
- _v2
68
- end
69
- CODE
70
- instance.getter_def.must_equal expected
71
- end
72
- end
73
-
74
- describe 'for an inline fixed-size array field' do
75
- let(:field_info) { get_field_introspection_data 'Regress', 'TestStructE', 'some_union' }
76
- it 'creates the right getter method' do
77
- expected = <<-CODE.reset_indentation
78
- def some_union
79
- _v1 = @struct.to_ptr
80
- _v2 = GirFFI::SizedArray.get_value_from_pointer(_v1, #{field_info.offset})
81
- _v3 = GirFFI::SizedArray.wrap(Regress::TestStructE__some_union__union, 2, _v2)
82
- _v3
83
- end
84
- CODE
85
- instance.getter_def.must_equal expected
86
- end
87
-
88
- it 'creates the right setter method' do
89
- expected = <<-CODE.reset_indentation
90
- def some_union= value
91
- _v1 = @struct.to_ptr
92
- GirFFI::ArgHelper.check_fixed_array_size 2, value, \"value\"
93
- _v2 = GirFFI::SizedArray.copy_from(Regress::TestStructE__some_union__union, 2, value)
94
- GirFFI::SizedArray.copy_value_to_pointer(_v2, _v1, #{field_info.offset})
95
- end
96
- CODE
97
- instance.setter_def.must_equal expected
98
- end
99
- end
100
-
101
- describe 'for a field of type :callback' do
102
- let(:field_info) { get_field_introspection_data 'GObject', 'TypeInfo', 'class_init' }
103
- it 'creates the right setter method' do
104
- expected = <<-CODE.reset_indentation
105
- def class_init= value
106
- _v1 = @struct.to_ptr
107
- _v2 = GObject::ClassInitFunc.from(value)
108
- GObject::ClassInitFunc.copy_value_to_pointer(_v2, _v1, #{field_info.offset})
109
- end
110
- CODE
111
- instance.setter_def.must_equal expected
112
- end
113
- end
114
-
115
- describe 'for a field with a related array length field' do
116
- let(:field_info) { get_field_introspection_data 'GObject', 'SignalQuery', 'param_types' }
117
- let(:n_params_field_info) { get_field_introspection_data 'GObject', 'SignalQuery', 'n_params' }
118
-
119
- it 'creates the right getter method' do
120
- skip if field_info.field_type.array_length < 0
121
- expected = <<-CODE.reset_indentation
122
- def param_types
123
- _v1 = @struct.to_ptr
124
- _v2 = _v1.get_uint32(#{n_params_field_info.offset})
125
- _v3 = @struct.to_ptr
126
- _v4 = _v3.get_pointer(#{field_info.offset})
127
- _v5 = GirFFI::SizedArray.wrap(:GType, _v2, _v4)
128
- _v5
129
- end
130
- CODE
131
- instance.getter_def.must_equal expected
132
- end
133
- end
134
- end