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,54 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'gir_ffi_test_helper'
4
-
5
- describe GirFFI::Builders::InitializerBuilder do
6
- describe '#method_definition' do
7
- let(:builder) { GirFFI::Builders::InitializerBuilder.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 an initializer' do
13
- code.must_equal <<-CODE.reset_indentation
14
- def initialize(obj)
15
- _v1 = Regress::TestObj.from(obj)
16
- _v2 = Regress::Lib.regress_test_obj_new _v1
17
- store_pointer(_v2)
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 initializer' do
26
- code.must_equal <<-CODE.reset_indentation
27
- def initialize_from_file(x)
28
- _v1 = GirFFI::InPointer.from_utf8(x)
29
- _v2 = FFI::MemoryPointer.new(:pointer).write_pointer nil
30
- _v3 = Regress::Lib.regress_test_obj_new_from_file _v1, _v2
31
- GirFFI::ArgHelper.check_error(_v2)
32
- store_pointer(_v3)
33
- end
34
- CODE
35
- end
36
- end
37
-
38
- describe 'for constructors for boxed types' do
39
- let(:function_info) do
40
- get_method_introspection_data 'GIMarshallingTests', 'BoxedStruct', 'new'
41
- end
42
-
43
- it 'builds an initializer that sets owned to true' do
44
- code.must_equal <<-CODE.reset_indentation
45
- def initialize
46
- _v1 = GIMarshallingTests::Lib.gi_marshalling_tests_boxed_struct_new
47
- store_pointer(_v1)
48
- @struct.owned = true
49
- end
50
- CODE
51
- end
52
- end
53
- end
54
- end
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'gir_ffi_test_helper'
4
-
5
- describe GirFFI::Builders::InterfaceBuilder do
6
- let(:interface_builder) do
7
- GirFFI::Builders::InterfaceBuilder.new(
8
- get_introspection_data('Regress', 'TestInterface'))
9
- end
10
-
11
- describe '#build_class' do
12
- before do
13
- info = get_introspection_data 'GObject', 'TypePlugin'
14
- @bldr = GirFFI::Builders::InterfaceBuilder.new info
15
- @iface = @bldr.build_class
16
- end
17
-
18
- it 'builds an interface as a module' do
19
- assert_instance_of Module, @iface
20
- end
21
-
22
- it 'creates methods on the interface' do
23
- assert_defines_instance_method @iface, :complete_interface_info
24
- end
25
- end
26
-
27
- describe '#interface_struct' do
28
- it 'returns the interface struct type' do
29
- interface_builder.interface_struct.must_equal Regress::TestInterfaceIface
30
- end
31
- end
32
- end
@@ -1,43 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'gir_ffi_test_helper'
4
-
5
- describe GirFFI::Builders::ModuleBuilder do
6
- let(:gir) { GObjectIntrospection::IRepository.default }
7
-
8
- describe '#find_namespaced_class_info' do
9
- it 'finds the info in the GIR' do
10
- allow(gir).to receive(:require).with('Foo', nil)
11
-
12
- builder = GirFFI::Builders::ModuleBuilder.new 'Foo'
13
-
14
- expect(gir).to receive(:find_by_name).with('Foo', 'Bar').and_return 'gir info'
15
-
16
- builder.find_namespaced_class_info(:Bar).must_equal 'gir info'
17
- end
18
-
19
- it 'checks downcased class name as an alternative' do
20
- allow(gir).to receive(:require).with('Foo', nil)
21
-
22
- builder = GirFFI::Builders::ModuleBuilder.new 'Foo'
23
-
24
- expect(gir).to receive(:find_by_name).with('Foo', 'Bar').and_return nil
25
- expect(gir).to receive(:find_by_name).with('Foo', 'bar').and_return 'gir info'
26
-
27
- builder.find_namespaced_class_info(:Bar).must_equal 'gir info'
28
- end
29
-
30
- it 'raises a clear error if the named class does not exist' do
31
- allow(gir).to receive(:require).with('Foo', nil)
32
-
33
- builder = GirFFI::Builders::ModuleBuilder.new 'Foo'
34
-
35
- expect(gir).to receive(:find_by_name).with('Foo', 'Bar').and_return nil
36
- expect(gir).to receive(:find_by_name).with('Foo', 'bar').and_return nil
37
-
38
- assert_raises NameError do
39
- builder.find_namespaced_class_info :Bar
40
- end
41
- end
42
- end
43
- end
@@ -1,98 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'gir_ffi_test_helper'
4
-
5
- describe GirFFI::Builders::ObjectBuilder do
6
- let(:obj_builder) do
7
- GirFFI::Builders::ObjectBuilder.new(
8
- get_introspection_data('Regress', 'TestObj'))
9
- end
10
- let(:sub_obj_builder) do
11
- GirFFI::Builders::ObjectBuilder.new(
12
- get_introspection_data('Regress', 'TestSubObj'))
13
- end
14
- let(:param_spec_builder) do
15
- GirFFI::Builders::ObjectBuilder.new(
16
- get_introspection_data('GObject', 'ParamSpec'))
17
- end
18
-
19
- describe '#find_signal' do
20
- it 'finds the signal "test" for TestObj' do
21
- sig = obj_builder.find_signal 'test'
22
- sig.name.must_equal 'test'
23
- end
24
-
25
- it 'finds the signal "test" for TestSubObj' do
26
- sig = sub_obj_builder.find_signal 'test'
27
- sig.name.must_equal 'test'
28
- end
29
-
30
- it 'finds the signal "changed" for Gtk::Entry' do
31
- builder = GirFFI::Builders::ObjectBuilder.new get_introspection_data('Gtk', 'Entry')
32
- sig = builder.find_signal 'changed'
33
- sig.name.must_equal 'changed'
34
- end
35
-
36
- it "returns nil for a signal that doesn't exist" do
37
- obj_builder.find_signal('foo').must_be_nil
38
- end
39
- end
40
-
41
- describe '#find_property' do
42
- it 'finds a property specified on the class itself' do
43
- prop = obj_builder.find_property('int')
44
- prop.name.must_equal 'int'
45
- end
46
-
47
- it 'finds a property specified on the parent class' do
48
- prop = sub_obj_builder.find_property('int')
49
- prop.name.must_equal 'int'
50
- end
51
-
52
- it 'returns nil if the property is not found' do
53
- sub_obj_builder.find_property('this-property-does-not-exist').must_be_nil
54
- end
55
- end
56
-
57
- describe '#object_class_struct' do
58
- it 'returns the class struct type' do
59
- obj_builder.object_class_struct.must_equal Regress::TestObjClass
60
- end
61
-
62
- it 'returns the parent struct type for classes without their own struct' do
63
- binding_info = get_introspection_data 'GObject', 'Binding'
64
- builder = GirFFI::Builders::ObjectBuilder.new binding_info
65
- builder.object_class_struct.must_equal GObject::ObjectClass
66
- end
67
- end
68
-
69
- describe 'for a struct without defined fields' do
70
- let(:info) { get_introspection_data 'GObject', 'Binding' }
71
-
72
- it 'uses a single field of the parent struct type as the default layout' do
73
- info.n_fields.must_equal 0
74
-
75
- builder = GirFFI::Builders::ObjectBuilder.new info
76
-
77
- spec = builder.send :layout_specification
78
- assert_equal [:parent, GObject::Object::Struct, 0], spec
79
- end
80
- end
81
-
82
- describe '#eligible_properties' do
83
- let(:wi_builder) do
84
- GirFFI::Builders::ObjectBuilder.new(
85
- get_introspection_data('Regress', 'TestWi8021x'))
86
- end
87
-
88
- it 'includes properties that do not have a matching getter method' do
89
- result = obj_builder.eligible_properties
90
- result.map(&:name).must_include 'double'
91
- end
92
-
93
- it 'skips properties that have a matching getter method' do
94
- result = wi_builder.eligible_properties
95
- result.map(&:name).wont_include 'testbool'
96
- end
97
- end
98
- end
@@ -1,161 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'gir_ffi_test_helper'
4
-
5
- describe GirFFI::Builders::PropertyBuilder do
6
- let(:builder) { GirFFI::Builders::PropertyBuilder.new property_info }
7
-
8
- describe 'for a property of type :glist' do
9
- let(:property_info) { get_property_introspection_data('Regress', 'TestObj', 'list') }
10
- it 'generates the correct getter definition' do
11
- expected = <<-CODE.reset_indentation
12
- def list
13
- _v1 = get_property('list')
14
- _v2 = GLib::List.wrap(:utf8, _v1)
15
- _v2
16
- end
17
- CODE
18
-
19
- builder.getter_def.must_equal expected
20
- end
21
-
22
- it 'generates the correct setter definition' do
23
- expected = <<-CODE.reset_indentation
24
- def list= value
25
- _v1 = GLib::List.from(:utf8, value)
26
- set_property("list", _v1)
27
- end
28
- CODE
29
-
30
- builder.setter_def.must_equal expected
31
- end
32
- end
33
-
34
- describe 'for a property of type :ghash' do
35
- let(:property_info) { get_property_introspection_data('Regress', 'TestObj', 'hash-table') }
36
- it 'generates the correct getter definition' do
37
- expected = <<-CODE.reset_indentation
38
- def hash_table
39
- _v1 = get_property('hash-table')
40
- _v2 = GLib::HashTable.wrap([:utf8, :gint8], _v1)
41
- _v2
42
- end
43
- CODE
44
-
45
- builder.getter_def.must_equal expected
46
- end
47
-
48
- it 'generates the correct setter definition' do
49
- expected = <<-CODE.reset_indentation
50
- def hash_table= value
51
- _v1 = GLib::HashTable.from([:utf8, :gint8], value)
52
- set_property("hash-table", _v1)
53
- end
54
- CODE
55
-
56
- builder.setter_def.must_equal expected
57
- end
58
- end
59
-
60
- describe 'for a property of type :strv' do
61
- let(:property_info) do
62
- get_property_introspection_data('GIMarshallingTests',
63
- 'PropertiesObject',
64
- 'some-strv')
65
- end
66
- before do
67
- skip unless property_info
68
- end
69
-
70
- it 'generates the correct getter definition' do
71
- expected = <<-CODE.reset_indentation
72
- def some_strv
73
- _v1 = get_property('some-strv')
74
- _v1
75
- end
76
- CODE
77
-
78
- builder.getter_def.must_equal expected
79
- end
80
-
81
- it 'generates the correct setter definition' do
82
- expected = <<-CODE.reset_indentation
83
- def some_strv= value
84
- _v1 = GLib::Strv.from(value)
85
- set_property("some-strv", _v1)
86
- end
87
- CODE
88
-
89
- builder.setter_def.must_equal expected
90
- end
91
- end
92
-
93
- describe 'for a property of type :utf8' do
94
- let(:property_info) { get_property_introspection_data('Regress', 'TestObj', 'string') }
95
- it 'generates the correct getter definition' do
96
- expected = <<-CODE.reset_indentation
97
- def string
98
- _v1 = get_property('string')
99
- _v1
100
- end
101
- CODE
102
-
103
- builder.getter_def.must_equal expected
104
- end
105
-
106
- it 'generates the correct setter definition' do
107
- expected = <<-CODE.reset_indentation
108
- def string= value
109
- _v1 = value
110
- set_property("string", _v1)
111
- end
112
- CODE
113
-
114
- builder.setter_def.must_equal expected
115
- end
116
- end
117
-
118
- describe 'for a property of a callback type' do
119
- let(:property_info) do
120
- get_property_introspection_data('Regress', 'AnnotationObject', 'function-property')
121
- end
122
-
123
- it 'generates the correct getter definition' do
124
- expected = <<-CODE.reset_indentation
125
- def function_property
126
- _v1 = get_property('function-property')
127
- _v2 = Regress::AnnotationCallback.wrap(_v1)
128
- _v2
129
- end
130
- CODE
131
-
132
- builder.getter_def.must_equal expected
133
- end
134
-
135
- it 'generates the correct setter definition' do
136
- expected = <<-CODE.reset_indentation
137
- def function_property= value
138
- _v1 = Regress::AnnotationCallback.from(value)
139
- set_property("function-property", _v1)
140
- end
141
- CODE
142
-
143
- builder.setter_def.must_equal expected
144
- end
145
- end
146
-
147
- describe '#container_defines_getter_method?' do
148
- let(:property_info) { Object.new.tap { |o| o.extend GirFFI::InfoExt::IPropertyInfo } }
149
- let(:container_info) { Object.new }
150
-
151
- before do
152
- allow(property_info).to receive(:container).and_return container_info
153
- allow(property_info).to receive(:name).and_return 'foo-bar'
154
- allow(container_info).to receive(:find_instance_method).with('foo_bar').and_return true
155
- end
156
-
157
- it 'finds methods with underscores for properties with dashes' do
158
- builder.container_defines_getter_method?.must_equal true
159
- end
160
- end
161
- end
@@ -1,30 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'gir_ffi_test_helper'
4
-
5
- GirFFI.setup :Regress
6
-
7
- describe GirFFI::Builders::RegisteredTypeBuilder do
8
- describe '#setup_instance_method' do
9
- it 'restores a method that was removed' do
10
- Regress::TestObj.class_eval { remove_method 'instance_method' }
11
-
12
- builder = Regress::TestObj.gir_ffi_builder
13
-
14
- builder.setup_instance_method 'instance_method'
15
-
16
- obj = Regress::TestObj.constructor
17
- obj.must_respond_to 'instance_method'
18
- end
19
-
20
- it 'returns the name of the generated method' do
21
- builder = Regress::TestObj.gir_ffi_builder
22
- result = builder.setup_instance_method 'instance_method'
23
- result.must_equal 'instance_method'
24
- end
25
-
26
- it 'returns the name of the generated method if different from the info name' do
27
- skip 'Need some way to test this now that GLib::IConv is gone'
28
- end
29
- end
30
- end
@@ -1,440 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'gir_ffi_test_helper'
4
-
5
- describe GirFFI::Builders::ReturnValueBuilder do
6
- let(:var_gen) { GirFFI::VariableNameGenerator.new }
7
- let(:type_info) { method_info.return_type }
8
- let(:ownership_transfer) { method_info.caller_owns }
9
- let(:return_type_info) { GirFFI::ReturnValueInfo.new(type_info, ownership_transfer, false) }
10
- let(:builder) do
11
- GirFFI::Builders::ReturnValueBuilder.new(var_gen, return_type_info)
12
- end
13
-
14
- describe 'for :gint32' do
15
- let(:method_info) do
16
- get_introspection_data('GIMarshallingTests',
17
- 'int_return_min')
18
- end
19
-
20
- it 'has no statements in #post_conversion' do
21
- builder.post_conversion.must_equal []
22
- end
23
-
24
- it 'returns the result of the c function directly' do
25
- builder.capture_variable_name.must_equal '_v1'
26
- builder.return_value_name.must_equal '_v1'
27
- end
28
- end
29
-
30
- describe 'for :struct' do
31
- describe 'with transfer :nothing' do
32
- let(:method_info) do
33
- get_method_introspection_data('GIMarshallingTests',
34
- 'BoxedStruct',
35
- 'returnv')
36
- end
37
-
38
- it 'wraps and copies the result in #post_conversion' do
39
- builder.capture_variable_name.must_equal '_v1'
40
- builder.post_conversion.must_equal ['_v2 = GIMarshallingTests::BoxedStruct.wrap_copy(_v1)']
41
- end
42
-
43
- it 'returns the copied result' do
44
- builder.capture_variable_name.must_equal '_v1'
45
- builder.return_value_name.must_equal '_v2'
46
- end
47
- end
48
- end
49
-
50
- describe 'for :union' do
51
- let(:method_info) do
52
- get_method_introspection_data('GIMarshallingTests',
53
- 'Union',
54
- 'returnv')
55
- end
56
-
57
- it 'wraps the result in #post_conversion' do
58
- builder.capture_variable_name.must_equal '_v1'
59
- builder.post_conversion.must_equal ['_v2 = GIMarshallingTests::Union.wrap_copy(_v1)']
60
- end
61
-
62
- it 'returns the wrapped result' do
63
- builder.capture_variable_name.must_equal '_v1'
64
- builder.return_value_name.must_equal '_v2'
65
- end
66
- end
67
-
68
- describe 'for :interface' do
69
- let(:method_info) do
70
- get_method_introspection_data('Gio',
71
- 'File',
72
- 'new_for_commandline_arg')
73
- end
74
-
75
- it 'wraps the result in #post_conversion' do
76
- builder.capture_variable_name.must_equal '_v1'
77
- builder.post_conversion.must_equal ['_v2 = Gio::File.wrap(_v1)']
78
- end
79
-
80
- it 'returns the wrapped result' do
81
- builder.capture_variable_name.must_equal '_v1'
82
- builder.return_value_name.must_equal '_v2'
83
- end
84
- end
85
-
86
- describe 'for :object' do
87
- describe 'with full ownership transfer' do
88
- let(:method_info) do
89
- get_method_introspection_data('GIMarshallingTests',
90
- 'Object',
91
- 'full_return')
92
- end
93
-
94
- it 'wraps the result in #post_conversion' do
95
- builder.capture_variable_name.must_equal '_v1'
96
- builder.post_conversion.must_equal ['_v2 = GIMarshallingTests::Object.wrap(_v1)']
97
- end
98
-
99
- it 'returns the wrapped result' do
100
- builder.capture_variable_name.must_equal '_v1'
101
- builder.return_value_name.must_equal '_v2'
102
- end
103
- end
104
-
105
- describe 'with no ownership transfer' do
106
- let(:method_info) do
107
- get_method_introspection_data('GIMarshallingTests',
108
- 'Object',
109
- 'none_return')
110
- end
111
-
112
- it 'wraps the result in #post_conversion' do
113
- builder.capture_variable_name.must_equal '_v1'
114
- builder.post_conversion.
115
- must_equal ['_v2 = GIMarshallingTests::Object.wrap(_v1).tap { |it| it && it.ref }']
116
- end
117
-
118
- it 'returns the wrapped result' do
119
- builder.capture_variable_name.must_equal '_v1'
120
- builder.return_value_name.must_equal '_v2'
121
- end
122
- end
123
- end
124
-
125
- describe 'for :strv' do
126
- let(:method_info) do
127
- get_method_introspection_data('GLib',
128
- 'KeyFile',
129
- 'get_locale_string_list')
130
- end
131
-
132
- it 'wraps the result in #post_conversion' do
133
- builder.capture_variable_name.must_equal '_v1'
134
- builder.post_conversion.must_equal ['_v2 = GLib::Strv.wrap(_v1)']
135
- end
136
-
137
- it 'returns the wrapped result' do
138
- builder.capture_variable_name.must_equal '_v1'
139
- builder.return_value_name.must_equal '_v2'
140
- end
141
- end
142
-
143
- describe 'for :zero_terminated' do
144
- let(:method_info) do
145
- get_method_introspection_data('GLib',
146
- 'Variant',
147
- 'dup_bytestring')
148
- end
149
- before do
150
- skip unless type_info.zero_terminated?
151
- end
152
-
153
- it 'wraps the result in #post_conversion' do
154
- builder.capture_variable_name.must_equal '_v1'
155
- builder.post_conversion.must_equal ['_v2 = GirFFI::ZeroTerminated.wrap(:guint8, _v1)']
156
- end
157
-
158
- it 'returns the wrapped result' do
159
- builder.capture_variable_name.must_equal '_v1'
160
- builder.return_value_name.must_equal '_v2'
161
- end
162
- end
163
-
164
- describe 'for :byte_array' do
165
- let(:method_info) do
166
- get_introspection_data('GIMarshallingTests',
167
- 'bytearray_full_return')
168
- end
169
-
170
- it 'wraps the result in #post_conversion' do
171
- builder.capture_variable_name.must_equal '_v1'
172
- builder.post_conversion.must_equal ['_v2 = GLib::ByteArray.wrap(_v1)']
173
- end
174
-
175
- it 'returns the wrapped result' do
176
- builder.capture_variable_name.must_equal '_v1'
177
- builder.return_value_name.must_equal '_v2'
178
- end
179
- end
180
-
181
- describe 'for :ptr_array' do
182
- let(:method_info) do
183
- get_introspection_data('GIMarshallingTests',
184
- 'gptrarray_utf8_none_return')
185
- end
186
-
187
- it 'wraps the result in #post_conversion' do
188
- builder.capture_variable_name.must_equal '_v1'
189
- builder.post_conversion.must_equal ['_v2 = GLib::PtrArray.wrap(:utf8, _v1)']
190
- end
191
-
192
- it 'returns the wrapped result' do
193
- builder.capture_variable_name.must_equal '_v1'
194
- builder.return_value_name.must_equal '_v2'
195
- end
196
- end
197
-
198
- describe 'for :glist' do
199
- let(:method_info) do
200
- get_introspection_data('GIMarshallingTests',
201
- 'glist_int_none_return')
202
- end
203
-
204
- it 'wraps the result in #post_conversion' do
205
- builder.capture_variable_name.must_equal '_v1'
206
- builder.post_conversion.must_equal ['_v2 = GLib::List.wrap(:gint32, _v1)']
207
- end
208
-
209
- it 'returns the wrapped result' do
210
- builder.capture_variable_name.must_equal '_v1'
211
- builder.return_value_name.must_equal '_v2'
212
- end
213
- end
214
-
215
- describe 'for :gslist' do
216
- let(:method_info) do
217
- get_introspection_data('GIMarshallingTests',
218
- 'gslist_int_none_return')
219
- end
220
-
221
- it 'wraps the result in #post_conversion' do
222
- builder.capture_variable_name.must_equal '_v1'
223
- builder.post_conversion.must_equal ['_v2 = GLib::SList.wrap(:gint32, _v1)']
224
- end
225
-
226
- it 'returns the wrapped result' do
227
- builder.capture_variable_name.must_equal '_v1'
228
- builder.return_value_name.must_equal '_v2'
229
- end
230
- end
231
-
232
- describe 'for :ghash' do
233
- let(:method_info) do
234
- get_introspection_data('GIMarshallingTests',
235
- 'ghashtable_int_none_return')
236
- end
237
-
238
- it 'wraps the result in #post_conversion' do
239
- builder.capture_variable_name.must_equal '_v1'
240
- builder.post_conversion.must_equal ['_v2 = GLib::HashTable.wrap([:gint32, :gint32], _v1)']
241
- end
242
-
243
- it 'returns the wrapped result' do
244
- builder.capture_variable_name.must_equal '_v1'
245
- builder.return_value_name.must_equal '_v2'
246
- end
247
- end
248
-
249
- describe 'for :array' do
250
- let(:method_info) do
251
- get_introspection_data('GIMarshallingTests',
252
- 'garray_int_none_return')
253
- end
254
-
255
- it 'wraps the result in #post_conversion' do
256
- builder.capture_variable_name.must_equal '_v1'
257
- builder.post_conversion.must_equal ['_v2 = GLib::Array.wrap(:gint32, _v1)']
258
- end
259
-
260
- it 'returns the wrapped result' do
261
- builder.capture_variable_name.must_equal '_v1'
262
- builder.return_value_name.must_equal '_v2'
263
- end
264
- end
265
-
266
- describe 'for :error' do
267
- let(:method_info) do
268
- get_introspection_data('GIMarshallingTests',
269
- 'gerror_return')
270
- end
271
-
272
- it 'wraps the result in #post_conversion' do
273
- builder.capture_variable_name.must_equal '_v1'
274
- builder.post_conversion.must_equal ['_v2 = GLib::Error.wrap(_v1)']
275
- end
276
-
277
- it 'returns the wrapped result' do
278
- builder.capture_variable_name.must_equal '_v1'
279
- builder.return_value_name.must_equal '_v2'
280
- end
281
- end
282
-
283
- describe 'for :c' do
284
- describe 'with fixed size' do
285
- let(:method_info) do
286
- get_introspection_data('GIMarshallingTests',
287
- 'array_fixed_int_return')
288
- end
289
-
290
- it 'converts the result in #post_conversion' do
291
- builder.capture_variable_name.must_equal '_v1'
292
- builder.post_conversion.must_equal ['_v2 = GirFFI::SizedArray.wrap(:gint32, 4, _v1)']
293
- end
294
-
295
- it 'returns the wrapped result' do
296
- builder.capture_variable_name.must_equal '_v1'
297
- builder.return_value_name.must_equal '_v2'
298
- end
299
- end
300
-
301
- describe 'with separate size parameter' do
302
- let(:length_argument) { Object.new }
303
- let(:method_info) do
304
- get_method_introspection_data('GIMarshallingTests',
305
- 'Object',
306
- 'method_array_return')
307
- end
308
-
309
- before do
310
- allow(length_argument).to receive(:post_converted_name).and_return 'bar'
311
- builder.length_arg = length_argument
312
- end
313
-
314
- it 'converts the result in #post_conversion' do
315
- builder.capture_variable_name.must_equal '_v1'
316
- builder.post_conversion.must_equal ['_v2 = GirFFI::SizedArray.wrap(:gint32, bar, _v1)']
317
- end
318
-
319
- it 'returns the wrapped result' do
320
- builder.capture_variable_name.must_equal '_v1'
321
- builder.return_value_name.must_equal '_v2'
322
- end
323
- end
324
- end
325
-
326
- describe 'for :utf8' do
327
- describe 'with no transfer' do
328
- let(:method_info) do
329
- get_introspection_data('GIMarshallingTests', 'utf8_none_return')
330
- end
331
-
332
- it 'converts the result in #post_conversion' do
333
- builder.capture_variable_name.must_equal '_v1'
334
- builder.post_conversion.must_equal ['_v2 = _v1.to_utf8']
335
- end
336
-
337
- it 'returns the converted result' do
338
- builder.capture_variable_name.must_equal '_v1'
339
- builder.return_value_name.must_equal '_v2'
340
- end
341
- end
342
-
343
- describe 'with full transfer' do
344
- let(:method_info) do
345
- get_introspection_data('GIMarshallingTests', 'utf8_full_return')
346
- end
347
-
348
- it 'autoreleases and converts the result in #post_conversion' do
349
- builder.capture_variable_name.must_equal '_v1'
350
- builder.post_conversion.
351
- must_equal ['_v2 = GirFFI::AllocationHelper.free_after _v1, &:to_utf8']
352
- end
353
-
354
- it 'returns the converted result' do
355
- builder.capture_variable_name.must_equal '_v1'
356
- builder.return_value_name.must_equal '_v2'
357
- end
358
- end
359
- end
360
-
361
- describe 'for :void pointer' do
362
- let(:ownership_transfer) { :nothing }
363
- let(:callback_info) do
364
- get_introspection_data('GIMarshallingTests', 'CallbackIntInt')
365
- end
366
- let(:type_info) { callback_info.args[1].argument_type }
367
-
368
- before do
369
- skip unless callback_info
370
- end
371
-
372
- it 'has no statements in #post_conversion' do
373
- builder.post_conversion.must_equal []
374
- end
375
-
376
- it 'returns the result of the c function directly' do
377
- builder.capture_variable_name.must_equal '_v1'
378
- builder.return_value_name.must_equal '_v1'
379
- end
380
- end
381
-
382
- describe 'for :void' do
383
- let(:method_info) do
384
- get_method_introspection_data('Regress', 'TestObj', 'null_out')
385
- end
386
-
387
- it 'has no statements in #post_conversion' do
388
- builder.post_conversion.must_equal []
389
- end
390
-
391
- it 'marks itself as irrelevant' do
392
- builder.relevant?.must_equal false
393
- end
394
-
395
- it 'returns nothing' do
396
- builder.return_value_name.must_be_nil
397
- end
398
- end
399
-
400
- describe 'for a closure argument' do
401
- let(:ownership_transfer) { :nothing }
402
- let(:callback_info) do
403
- get_introspection_data('Regress', 'TestCallbackUserData')
404
- end
405
- let(:type_info) { callback_info.args[0].argument_type }
406
-
407
- before do
408
- builder.mark_as_user_data :dummy
409
- end
410
-
411
- it 'fetches the stored object in #post_conversion' do
412
- builder.capture_variable_name.must_equal '_v1'
413
- builder.post_conversion.must_equal ['_v2 = GirFFI::ArgHelper::OBJECT_STORE.fetch(_v1)']
414
- end
415
-
416
- it 'returns the stored object' do
417
- builder.capture_variable_name.must_equal '_v1'
418
- builder.return_value_name.must_equal '_v2'
419
- end
420
- end
421
-
422
- describe 'for a skipped return value' do
423
- let(:method_info) do
424
- get_method_introspection_data('Regress', 'TestObj', 'skip_return_val')
425
- end
426
- let(:return_type_info) { GirFFI::ReturnValueInfo.new(type_info, :nothing, true) }
427
-
428
- it 'has no statements in #post_conversion' do
429
- builder.post_conversion.must_equal []
430
- end
431
-
432
- it 'marks itself as irrelevant' do
433
- builder.relevant?.must_equal false
434
- end
435
-
436
- it 'returns nothing' do
437
- builder.return_value_name.must_be_nil
438
- end
439
- end
440
- end