gir_ffi 0.14.0 → 0.15.3

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 (265) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +45 -0
  3. data/Gemfile +6 -4
  4. data/README.md +11 -10
  5. data/Rakefile +5 -5
  6. data/lib/ffi-glib.rb +16 -16
  7. data/lib/ffi-glib/array.rb +14 -4
  8. data/lib/ffi-glib/byte_array.rb +7 -2
  9. data/lib/ffi-glib/container_class_methods.rb +1 -1
  10. data/lib/ffi-glib/error.rb +1 -1
  11. data/lib/ffi-glib/hash_table.rb +3 -3
  12. data/lib/ffi-glib/list.rb +1 -1
  13. data/lib/ffi-glib/list_methods.rb +1 -1
  14. data/lib/ffi-glib/main_loop.rb +3 -3
  15. data/lib/ffi-glib/ptr_array.rb +30 -8
  16. data/lib/ffi-glib/s_list.rb +1 -1
  17. data/lib/ffi-glib/variant.rb +1 -1
  18. data/lib/ffi-gobject.rb +13 -13
  19. data/lib/ffi-gobject/object.rb +23 -32
  20. data/lib/ffi-gobject/param_spec.rb +1 -1
  21. data/lib/ffi-gobject/ruby_closure.rb +2 -2
  22. data/lib/ffi-gobject/value.rb +40 -29
  23. data/lib/ffi-gobject_introspection.rb +20 -20
  24. data/lib/ffi-gobject_introspection/gobject_type_init.rb +2 -2
  25. data/lib/ffi-gobject_introspection/i_arg_info.rb +2 -2
  26. data/lib/ffi-gobject_introspection/i_base_info.rb +27 -17
  27. data/lib/ffi-gobject_introspection/i_callable_info.rb +4 -4
  28. data/lib/ffi-gobject_introspection/i_constant_info.rb +2 -2
  29. data/lib/ffi-gobject_introspection/i_enum_info.rb +1 -0
  30. data/lib/ffi-gobject_introspection/i_field_info.rb +1 -1
  31. data/lib/ffi-gobject_introspection/i_function_info.rb +1 -1
  32. data/lib/ffi-gobject_introspection/i_interface_info.rb +1 -1
  33. data/lib/ffi-gobject_introspection/i_object_info.rb +2 -2
  34. data/lib/ffi-gobject_introspection/i_property_info.rb +2 -2
  35. data/lib/ffi-gobject_introspection/i_repository.rb +9 -6
  36. data/lib/ffi-gobject_introspection/i_struct_info.rb +2 -1
  37. data/lib/ffi-gobject_introspection/i_type_info.rb +13 -7
  38. data/lib/ffi-gobject_introspection/i_unresolved_info.rb +1 -1
  39. data/lib/ffi-gobject_introspection/i_vfunc_info.rb +1 -1
  40. data/lib/ffi-gobject_introspection/lib.rb +30 -19
  41. data/lib/ffi-gobject_introspection/strv.rb +1 -1
  42. data/lib/gir_ffi-base.rb +1 -1
  43. data/lib/gir_ffi-base/gobject.rb +26 -25
  44. data/lib/gir_ffi-base/gobject/lib.rb +3 -2
  45. data/lib/gir_ffi.rb +3 -3
  46. data/lib/gir_ffi/allocation_helper.rb +1 -1
  47. data/lib/gir_ffi/arg_helper.rb +4 -4
  48. data/lib/gir_ffi/{in_out_pointer.rb → array_element_convertor.rb} +16 -23
  49. data/lib/gir_ffi/boolean.rb +1 -1
  50. data/lib/gir_ffi/boxed_base.rb +1 -1
  51. data/lib/gir_ffi/builder.rb +18 -10
  52. data/lib/gir_ffi/builder_helper.rb +6 -1
  53. data/lib/gir_ffi/builders/argument_builder.rb +19 -19
  54. data/lib/gir_ffi/builders/argument_builder_collection.rb +2 -2
  55. data/lib/gir_ffi/builders/base_argument_builder.rb +1 -0
  56. data/lib/gir_ffi/builders/base_method_builder.rb +7 -7
  57. data/lib/gir_ffi/builders/base_return_value_builder.rb +1 -1
  58. data/lib/gir_ffi/builders/base_type_builder.rb +1 -1
  59. data/lib/gir_ffi/builders/c_to_ruby_convertor.rb +5 -5
  60. data/lib/gir_ffi/builders/callback_argument_builder.rb +8 -8
  61. data/lib/gir_ffi/builders/callback_builder.rb +16 -4
  62. data/lib/gir_ffi/builders/callback_return_value_builder.rb +2 -2
  63. data/lib/gir_ffi/builders/closure_argument_builder.rb +1 -1
  64. data/lib/gir_ffi/builders/closure_return_value_builder.rb +1 -1
  65. data/lib/gir_ffi/builders/constant_builder.rb +1 -1
  66. data/lib/gir_ffi/builders/constructor_builder.rb +9 -9
  67. data/lib/gir_ffi/builders/enum_builder.rb +16 -3
  68. data/lib/gir_ffi/builders/field_builder.rb +20 -18
  69. data/lib/gir_ffi/builders/flags_builder.rb +2 -2
  70. data/lib/gir_ffi/builders/full_c_to_ruby_convertor.rb +1 -1
  71. data/lib/gir_ffi/builders/function_builder.rb +11 -5
  72. data/lib/gir_ffi/builders/initializer_builder.rb +3 -3
  73. data/lib/gir_ffi/builders/initializer_return_value_builder.rb +2 -2
  74. data/lib/gir_ffi/builders/interface_builder.rb +2 -2
  75. data/lib/gir_ffi/builders/mapping_method_builder.rb +9 -9
  76. data/lib/gir_ffi/builders/marshalling_method_builder.rb +7 -7
  77. data/lib/gir_ffi/builders/method_template.rb +1 -1
  78. data/lib/gir_ffi/builders/module_builder.rb +7 -7
  79. data/lib/gir_ffi/builders/object_builder.rb +6 -6
  80. data/lib/gir_ffi/builders/property_argument_builder.rb +1 -1
  81. data/lib/gir_ffi/builders/property_builder.rb +13 -12
  82. data/lib/gir_ffi/builders/property_return_value_builder.rb +1 -1
  83. data/lib/gir_ffi/builders/registered_type_builder.rb +14 -5
  84. data/lib/gir_ffi/builders/return_value_builder.rb +4 -4
  85. data/lib/gir_ffi/builders/ruby_to_c_convertor.rb +6 -6
  86. data/lib/gir_ffi/builders/signal_closure_builder.rb +2 -2
  87. data/lib/gir_ffi/builders/struct_builder.rb +6 -4
  88. data/lib/gir_ffi/builders/struct_like.rb +1 -1
  89. data/lib/gir_ffi/builders/type_builder.rb +12 -12
  90. data/lib/gir_ffi/builders/unintrospectable_boxed_builder.rb +2 -2
  91. data/lib/gir_ffi/builders/unintrospectable_builder.rb +2 -2
  92. data/lib/gir_ffi/builders/union_builder.rb +4 -4
  93. data/lib/gir_ffi/builders/user_defined_builder.rb +2 -2
  94. data/lib/gir_ffi/builders/vfunc_argument_builder.rb +1 -1
  95. data/lib/gir_ffi/builders/vfunc_builder.rb +8 -8
  96. data/lib/gir_ffi/builders/with_layout.rb +2 -2
  97. data/lib/gir_ffi/callback_base.rb +4 -6
  98. data/lib/gir_ffi/class_base.rb +6 -5
  99. data/lib/gir_ffi/core.rb +19 -20
  100. data/lib/gir_ffi/enum_base.rb +1 -1
  101. data/lib/gir_ffi/enum_like_base.rb +2 -2
  102. data/lib/gir_ffi/error_argument_info.rb +2 -2
  103. data/lib/gir_ffi/error_type_info.rb +1 -1
  104. data/lib/gir_ffi/ffi_ext.rb +1 -1
  105. data/lib/gir_ffi/ffi_ext/pointer.rb +1 -1
  106. data/lib/gir_ffi/flags_base.rb +1 -1
  107. data/lib/gir_ffi/in_pointer.rb +10 -0
  108. data/lib/gir_ffi/info_ext.rb +15 -14
  109. data/lib/gir_ffi/info_ext/full_type_name.rb +3 -3
  110. data/lib/gir_ffi/info_ext/i_arg_info.rb +1 -1
  111. data/lib/gir_ffi/info_ext/i_callable_info.rb +1 -1
  112. data/lib/gir_ffi/info_ext/i_callback_info.rb +1 -1
  113. data/lib/gir_ffi/info_ext/i_field_info.rb +1 -1
  114. data/lib/gir_ffi/info_ext/i_function_info.rb +1 -1
  115. data/lib/gir_ffi/info_ext/i_property_info.rb +2 -2
  116. data/lib/gir_ffi/info_ext/i_registered_type_info.rb +4 -5
  117. data/lib/gir_ffi/info_ext/i_signal_info.rb +7 -3
  118. data/lib/gir_ffi/info_ext/i_type_info.rb +48 -26
  119. data/lib/gir_ffi/info_ext/i_unresolved_info.rb +1 -1
  120. data/lib/gir_ffi/info_ext/i_value_info.rb +25 -0
  121. data/lib/gir_ffi/info_ext/i_vfunc_info.rb +2 -2
  122. data/lib/gir_ffi/info_ext/safe_constant_name.rb +8 -8
  123. data/lib/gir_ffi/info_ext/safe_function_name.rb +2 -2
  124. data/lib/gir_ffi/interface_base.rb +3 -3
  125. data/lib/gir_ffi/lib_c.rb +1 -1
  126. data/lib/gir_ffi/method_stubber.rb +1 -1
  127. data/lib/gir_ffi/module_base.rb +1 -1
  128. data/lib/gir_ffi/object_base.rb +3 -4
  129. data/lib/gir_ffi/receiver_argument_info.rb +1 -1
  130. data/lib/gir_ffi/receiver_type_info.rb +2 -2
  131. data/lib/gir_ffi/registered_type_base.rb +1 -1
  132. data/lib/gir_ffi/sized_array.rb +4 -2
  133. data/lib/gir_ffi/struct.rb +1 -1
  134. data/lib/gir_ffi/struct_base.rb +1 -1
  135. data/lib/gir_ffi/type_map.rb +2 -23
  136. data/lib/gir_ffi/unintrospectable_boxed_info.rb +2 -2
  137. data/lib/gir_ffi/unintrospectable_type_info.rb +5 -1
  138. data/lib/gir_ffi/union.rb +1 -1
  139. data/lib/gir_ffi/union_base.rb +1 -1
  140. data/lib/gir_ffi/user_defined_object_info.rb +6 -2
  141. data/lib/gir_ffi/user_defined_property_info.rb +33 -33
  142. data/lib/gir_ffi/version.rb +1 -1
  143. data/tasks/test.rake +3 -2
  144. data/test/base_test_helper.rb +16 -9
  145. data/test/ffi-glib/array_test.rb +71 -56
  146. data/test/ffi-glib/byte_array_test.rb +13 -7
  147. data/test/ffi-glib/bytes_test.rb +24 -19
  148. data/test/ffi-glib/closure_test.rb +11 -11
  149. data/test/ffi-glib/destroy_notify_test.rb +6 -6
  150. data/test/ffi-glib/hash_table_test.rb +27 -27
  151. data/test/ffi-glib/list_test.rb +22 -22
  152. data/test/ffi-glib/main_loop_test.rb +12 -12
  153. data/test/ffi-glib/ptr_array_test.rb +39 -39
  154. data/test/ffi-glib/ruby_closure_test.rb +10 -10
  155. data/test/ffi-glib/s_list_test.rb +20 -20
  156. data/test/ffi-glib/strv_test.rb +19 -19
  157. data/test/ffi-glib/variant_test.rb +5 -5
  158. data/test/ffi-gobject/gobject_test.rb +48 -44
  159. data/test/ffi-gobject/object_class_test.rb +8 -8
  160. data/test/ffi-gobject/object_test.rb +51 -68
  161. data/test/ffi-gobject/param_spec_test.rb +12 -12
  162. data/test/ffi-gobject/value_test.rb +145 -125
  163. data/test/ffi-gobject_introspection/gobject_type_init_test.rb +9 -9
  164. data/test/ffi-gobject_introspection/i_base_info_test.rb +15 -16
  165. data/test/ffi-gobject_introspection/i_constant_info_test.rb +9 -13
  166. data/test/ffi-gobject_introspection/i_enum_info_test.rb +7 -7
  167. data/test/ffi-gobject_introspection/i_function_info_test.rb +1 -1
  168. data/test/ffi-gobject_introspection/i_interface_info_test.rb +10 -10
  169. data/test/ffi-gobject_introspection/i_object_info_test.rb +23 -23
  170. data/test/ffi-gobject_introspection/i_property_info_test.rb +19 -19
  171. data/test/ffi-gobject_introspection/i_registered_type_info_test.rb +10 -10
  172. data/test/ffi-gobject_introspection/i_repository_test.rb +34 -34
  173. data/test/ffi-gobject_introspection/i_struct_info_test.rb +10 -10
  174. data/test/ffi-gobject_introspection/i_type_info_test.rb +12 -15
  175. data/test/ffi-gobject_introspection/i_union_info_test.rb +7 -7
  176. data/test/ffi-gobject_introspection/i_vfunc_info_test.rb +16 -16
  177. data/test/ffi-gobject_introspection/lib_test.rb +3 -3
  178. data/test/ffi-gobject_introspection/strv_test.rb +9 -9
  179. data/test/ffi-gobject_test.rb +47 -45
  180. data/test/gir_ffi/allocation_helper_test.rb +13 -13
  181. data/test/gir_ffi/arg_helper_test.rb +71 -65
  182. data/test/gir_ffi/boolean_test.rb +20 -20
  183. data/test/gir_ffi/boxed_base_test.rb +18 -18
  184. data/test/gir_ffi/builder_test.rb +81 -213
  185. data/test/gir_ffi/builders/argument_builder_test.rb +321 -287
  186. data/test/gir_ffi/builders/base_argument_builder_test.rb +1 -1
  187. data/test/gir_ffi/builders/callback_argument_builder_test.rb +57 -56
  188. data/test/gir_ffi/builders/callback_builder_test.rb +71 -72
  189. data/test/gir_ffi/builders/callback_return_value_builder_test.rb +40 -41
  190. data/test/gir_ffi/builders/constant_builder_test.rb +1 -1
  191. data/test/gir_ffi/builders/constructor_builder_test.rb +12 -10
  192. data/test/gir_ffi/builders/enum_builder_test.rb +12 -11
  193. data/test/gir_ffi/builders/field_builder_test.rb +48 -42
  194. data/test/gir_ffi/builders/function_builder_test.rb +256 -224
  195. data/test/gir_ffi/builders/initializer_builder_test.rb +16 -14
  196. data/test/gir_ffi/builders/interface_builder_test.rb +9 -9
  197. data/test/gir_ffi/builders/module_builder_test.rb +18 -18
  198. data/test/gir_ffi/builders/object_builder_test.rb +41 -41
  199. data/test/gir_ffi/builders/property_builder_test.rb +94 -94
  200. data/test/gir_ffi/builders/registered_type_builder_test.rb +35 -11
  201. data/test/gir_ffi/builders/return_value_builder_test.rb +227 -223
  202. data/test/gir_ffi/builders/signal_closure_builder_test.rb +124 -113
  203. data/test/gir_ffi/builders/struct_builder_test.rb +38 -35
  204. data/test/gir_ffi/builders/unintrospectable_boxed_builder_test.rb +8 -14
  205. data/test/gir_ffi/builders/unintrospectable_builder_test.rb +34 -23
  206. data/test/gir_ffi/builders/union_builder_test.rb +12 -15
  207. data/test/gir_ffi/builders/user_defined_builder_test.rb +152 -148
  208. data/test/gir_ffi/builders/vfunc_argument_builder_test.rb +46 -40
  209. data/test/gir_ffi/builders/vfunc_builder_test.rb +149 -157
  210. data/test/gir_ffi/callback_base_test.rb +9 -9
  211. data/test/gir_ffi/class_base_test.rb +56 -53
  212. data/test/gir_ffi/core_test.rb +36 -35
  213. data/test/gir_ffi/enum_base_test.rb +19 -19
  214. data/test/gir_ffi/error_type_info_test.rb +23 -23
  215. data/test/gir_ffi/ffi_ext/pointer_test.rb +9 -7
  216. data/test/gir_ffi/g_type_test.rb +11 -11
  217. data/test/gir_ffi/in_pointer_test.rb +70 -50
  218. data/test/gir_ffi/info_ext/i_callable_info_test.rb +5 -5
  219. data/test/gir_ffi/info_ext/i_callback_info_test.rb +6 -5
  220. data/test/gir_ffi/info_ext/i_field_info_test.rb +6 -6
  221. data/test/gir_ffi/info_ext/i_function_info_test.rb +17 -17
  222. data/test/gir_ffi/info_ext/i_signal_info_test.rb +8 -8
  223. data/test/gir_ffi/info_ext/i_type_info_test.rb +231 -216
  224. data/test/gir_ffi/info_ext/i_unresolved_info_test.rb +4 -4
  225. data/test/gir_ffi/info_ext/safe_constant_name_test.rb +8 -8
  226. data/test/gir_ffi/info_ext/safe_function_name_test.rb +8 -8
  227. data/test/gir_ffi/interface_base_test.rb +8 -8
  228. data/test/gir_ffi/method_stubber_test.rb +21 -19
  229. data/test/gir_ffi/object_base_test.rb +23 -23
  230. data/test/gir_ffi/object_store_test.rb +13 -13
  231. data/test/gir_ffi/receiver_argument_info_test.rb +15 -15
  232. data/test/gir_ffi/sized_array_test.rb +68 -68
  233. data/test/gir_ffi/struct_base_test.rb +8 -8
  234. data/test/gir_ffi/struct_like_base_test.rb +64 -64
  235. data/test/gir_ffi/type_map_test.rb +8 -8
  236. data/test/gir_ffi/unintrospectable_type_info_test.rb +33 -33
  237. data/test/gir_ffi/union_base_test.rb +8 -8
  238. data/test/gir_ffi/user_defined_object_info_test.rb +34 -34
  239. data/test/gir_ffi/user_defined_property_info_test.rb +16 -16
  240. data/test/gir_ffi/variable_name_generator_test.rb +8 -8
  241. data/test/gir_ffi/version_test.rb +4 -4
  242. data/test/gir_ffi/zero_terminated_test.rb +34 -34
  243. data/test/gir_ffi_test_helper.rb +3 -3
  244. data/test/integration/callback_exceptions_test.rb +17 -21
  245. data/test/integration/derived_classes_test.rb +14 -13
  246. data/test/integration/generated_everything_test.rb +225 -224
  247. data/test/integration/generated_gimarshallingtests_test.rb +1174 -1060
  248. data/test/integration/generated_gio_test.rb +36 -36
  249. data/test/integration/generated_glib_test.rb +4 -6
  250. data/test/integration/generated_gobject_test.rb +43 -35
  251. data/test/integration/generated_gst_test.rb +20 -16
  252. data/test/integration/generated_gtk_source_test.rb +9 -15
  253. data/test/integration/generated_gtop_test.rb +8 -15
  254. data/test/integration/generated_pango_ft2_test.rb +2 -2
  255. data/test/integration/generated_pango_test.rb +4 -4
  256. data/test/integration/generated_regress_test.rb +1858 -1632
  257. data/test/integration/generated_secret_test.rb +8 -11
  258. data/test/integration/generated_utility_test.rb +81 -81
  259. data/test/integration/generated_warnlib_test.rb +17 -21
  260. data/test/integration/method_lookup_test.rb +6 -6
  261. data/test/introspection_test_helper.rb +49 -7
  262. data/test/minitest/stats_plugin.rb +1 -1
  263. metadata +21 -23
  264. data/lib/ffi-glib/array_methods.rb +0 -16
  265. data/test/gir_ffi/in_out_pointer_test.rb +0 -56
@@ -1,187 +1,198 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'gir_ffi_test_helper'
3
+ require "gir_ffi_test_helper"
4
4
 
5
5
  describe GirFFI::Builders::SignalClosureBuilder do
6
6
  let(:builder) { GirFFI::Builders::SignalClosureBuilder.new signal_info }
7
7
 
8
- describe '#build_class' do
8
+ describe "#build_class" do
9
9
  let(:signal_info) do
10
- get_signal_introspection_data 'Regress', 'TestObj', 'test'
10
+ get_signal_introspection_data "Regress", "TestObj", "test"
11
11
  end
12
12
 
13
- it 'builds a descendant of RubyClosure' do
13
+ it "builds a descendant of RubyClosure" do
14
14
  klass = builder.build_class
15
- klass.superclass.must_equal GObject::RubyClosure
15
+ _(klass.superclass).must_equal GObject::RubyClosure
16
16
  end
17
17
  end
18
18
 
19
- describe '#marshaller_definition' do
20
- describe 'for a signal with no arguments or return value' do
19
+ describe "#marshaller_definition" do
20
+ describe "for a signal with no arguments or return value" do
21
21
  let(:signal_info) do
22
- get_signal_introspection_data 'Regress', 'TestObj', 'test'
22
+ get_signal_introspection_data "Regress", "TestObj", "test"
23
23
  end
24
24
 
25
- it 'returns a valid marshaller converting only the receiver' do
26
- expected = <<-CODE.reset_indentation
27
- def self.marshaller(closure, return_value, param_values, _invocation_hint, _marshal_data)
28
- _instance = param_values.first.get_value_plain
29
- _v1 = _instance
30
- wrap(closure.to_ptr).invoke_block(_v1)
31
- end
25
+ it "returns a valid marshaller converting only the receiver" do
26
+ expected = <<~CODE
27
+ def self.marshaller(closure, return_value, param_values, _invocation_hint, _marshal_data)
28
+ _instance = param_values.first.get_value_plain
29
+ _v1 = _instance
30
+ wrap(closure.to_ptr).invoke_block(_v1)
31
+ end
32
32
  CODE
33
33
 
34
- builder.marshaller_definition.must_equal expected
34
+ _(builder.marshaller_definition).must_equal expected
35
35
  end
36
36
  end
37
37
 
38
- describe 'for a signal with an argument and a return value' do
38
+ describe "for a signal with an argument and a return value" do
39
39
  let(:signal_info) do
40
- get_signal_introspection_data 'Regress', 'TestObj', 'sig-with-int64-prop'
41
- end
42
-
43
- it 'returns a valid mapping method' do
44
- skip unless signal_info
45
-
46
- expected = <<-CODE.reset_indentation
47
- def self.marshaller(closure, return_value, param_values, _invocation_hint, _marshal_data)
48
- _instance, i = param_values.map(&:get_value_plain)
49
- _v1 = _instance
50
- _v2 = i
51
- _v3 = wrap(closure.to_ptr).invoke_block(_v1, _v2)
52
- return_value.set_value _v3
53
- end
40
+ get_signal_introspection_data "Regress", "TestObj", "sig-with-int64-prop"
41
+ end
42
+
43
+ it "returns a valid mapping method" do
44
+ expected = <<~CODE
45
+ def self.marshaller(closure, return_value, param_values, _invocation_hint, _marshal_data)
46
+ _instance, i = param_values.map(&:get_value_plain)
47
+ _v1 = _instance
48
+ _v2 = i
49
+ _v3 = wrap(closure.to_ptr).invoke_block(_v1, _v2)
50
+ return_value.set_value _v3
51
+ end
54
52
  CODE
55
53
 
56
- builder.marshaller_definition.must_equal expected
54
+ _(builder.marshaller_definition).must_equal expected
57
55
  end
58
56
  end
59
57
 
60
- describe 'for a signal with an enum argument' do
58
+ describe "for a signal with an enum argument" do
61
59
  let(:signal_info) do
62
- get_signal_introspection_data 'Gio', 'MountOperation', 'reply'
60
+ get_signal_introspection_data "Gio", "MountOperation", "reply"
63
61
  end
64
62
 
65
- it 'returns a valid mapping method' do
66
- expected = <<-CODE.reset_indentation
67
- def self.marshaller(closure, return_value, param_values, _invocation_hint, _marshal_data)
68
- _instance, result = param_values.map(&:get_value_plain)
69
- _v1 = _instance
70
- _v2 = result
71
- wrap(closure.to_ptr).invoke_block(_v1, _v2)
72
- end
63
+ it "returns a valid mapping method" do
64
+ expected = <<~CODE
65
+ def self.marshaller(closure, return_value, param_values, _invocation_hint, _marshal_data)
66
+ _instance, result = param_values.map(&:get_value_plain)
67
+ _v1 = _instance
68
+ _v2 = result
69
+ wrap(closure.to_ptr).invoke_block(_v1, _v2)
70
+ end
73
71
  CODE
74
72
 
75
- builder.marshaller_definition.must_equal expected
73
+ _(builder.marshaller_definition).must_equal expected
76
74
  end
77
75
  end
78
76
 
79
- describe 'for a signal with a array plus length arguments' do
77
+ describe "for a signal with a array plus length arguments" do
80
78
  let(:signal_info) do
81
- get_signal_introspection_data 'Regress', 'TestObj', 'sig-with-array-len-prop'
82
- end
83
-
84
- it 'returns a valid mapping method' do
85
- skip unless signal_info
86
-
87
- expected = <<-CODE.reset_indentation
88
- def self.marshaller(closure, return_value, param_values, _invocation_hint, _marshal_data)
89
- _instance, arr, len = param_values.map(&:get_value_plain)
90
- _v1 = _instance
91
- _v2 = len
92
- _v3 = GirFFI::SizedArray.wrap(:guint32, _v2, arr)
93
- wrap(closure.to_ptr).invoke_block(_v1, _v3)
94
- end
79
+ get_signal_introspection_data "Regress", "TestObj", "sig-with-array-len-prop"
80
+ end
81
+
82
+ it "returns a valid mapping method" do
83
+ expected = <<~CODE
84
+ def self.marshaller(closure, return_value, param_values, _invocation_hint, _marshal_data)
85
+ _instance, arr, len = param_values.map(&:get_value_plain)
86
+ _v1 = _instance
87
+ _v2 = len
88
+ _v3 = GirFFI::SizedArray.wrap(:guint32, _v2, arr)
89
+ wrap(closure.to_ptr).invoke_block(_v1, _v3)
90
+ end
95
91
  CODE
96
92
 
97
- builder.marshaller_definition.must_equal expected
93
+ _(builder.marshaller_definition).must_equal expected
98
94
  end
99
95
  end
100
96
 
101
- describe 'for a signal with a struct argument' do
97
+ describe "for a signal with a struct argument" do
102
98
  let(:signal_info) do
103
- get_signal_introspection_data 'Regress', 'TestObj', 'test-with-static-scope-arg'
99
+ get_signal_introspection_data "Regress", "TestObj", "test-with-static-scope-arg"
104
100
  end
105
101
 
106
- it 'returns a valid mapping method' do
107
- skip unless signal_info
108
-
109
- expected = <<-CODE.reset_indentation
110
- def self.marshaller(closure, return_value, param_values, _invocation_hint, _marshal_data)
111
- _instance, object = param_values.map(&:get_value_plain)
112
- _v1 = _instance
113
- _v2 = Regress::TestSimpleBoxedA.wrap(object)
114
- wrap(closure.to_ptr).invoke_block(_v1, _v2)
115
- end
102
+ it "returns a valid mapping method" do
103
+ expected = <<~CODE
104
+ def self.marshaller(closure, return_value, param_values, _invocation_hint, _marshal_data)
105
+ _instance, object = param_values.map(&:get_value_plain)
106
+ _v1 = _instance
107
+ _v2 = Regress::TestSimpleBoxedA.wrap(object)
108
+ wrap(closure.to_ptr).invoke_block(_v1, _v2)
109
+ end
116
110
  CODE
117
111
 
118
- builder.marshaller_definition.must_equal expected
112
+ _(builder.marshaller_definition).must_equal expected
119
113
  end
120
114
  end
121
115
 
122
- describe 'for a signal returning an array of integers' do
116
+ describe "for a signal returning an array of integers" do
123
117
  let(:signal_info) do
124
- get_signal_introspection_data 'Regress', 'TestObj', 'sig-with-intarray-ret'
125
- end
118
+ get_signal_introspection_data "Regress", "TestObj", "sig-with-intarray-ret"
119
+ end
120
+
121
+ it "returns a valid mapping method" do
122
+ expected = <<~CODE
123
+ def self.marshaller(closure, return_value, param_values, _invocation_hint, _marshal_data)
124
+ _instance, i = param_values.map(&:get_value_plain)
125
+ _v1 = _instance
126
+ _v2 = i
127
+ _v3 = wrap(closure.to_ptr).invoke_block(_v1, _v2)
128
+ _v4 = GLib::Array.from(:gint32, _v3)
129
+ return_value.set_value _v4
130
+ end
131
+ CODE
126
132
 
127
- it 'returns a valid mapping method' do
128
- skip unless signal_info
133
+ _(builder.marshaller_definition).must_equal expected
134
+ end
135
+ end
129
136
 
130
- expected = <<-CODE.reset_indentation
131
- def self.marshaller(closure, return_value, param_values, _invocation_hint, _marshal_data)
132
- _instance, i = param_values.map(&:get_value_plain)
133
- _v1 = _instance
134
- _v2 = i
135
- _v3 = wrap(closure.to_ptr).invoke_block(_v1, _v2)
136
- _v4 = GLib::Array.from(:gint32, _v3)
137
- return_value.set_value _v4
138
- end
137
+ describe "for a signal returning a string" do
138
+ let(:signal_info) do
139
+ get_signal_introspection_data "Regress", "AnnotationObject", "attribute-signal"
140
+ end
141
+
142
+ it "returns a mapping method that passes the string result to return_value directly" \
143
+ do
144
+ expected = <<~CODE
145
+ def self.marshaller(closure, return_value, param_values, _invocation_hint, _marshal_data)
146
+ _instance, arg1, arg2 = param_values.map(&:get_value_plain)
147
+ _v1 = _instance
148
+ _v2 = arg1
149
+ _v3 = arg2
150
+ _v4 = wrap(closure.to_ptr).invoke_block(_v1, _v2, _v3)
151
+ return_value.set_value _v4
152
+ end
139
153
  CODE
140
154
 
141
- builder.marshaller_definition.must_equal expected
155
+ _(builder.marshaller_definition).must_equal expected
142
156
  end
143
157
  end
144
158
 
145
- describe 'for a signal returning an string' do
159
+ describe "for a signal with GList argument" do
146
160
  let(:signal_info) do
147
- get_signal_introspection_data 'Gtk', 'Scale', 'format-value'
161
+ get_signal_introspection_data "Regress", "AnnotationObject", "list-signal"
148
162
  end
149
163
 
150
- it 'returns a mapping method that passes the string result to return_value directly' do
151
- skip unless signal_info
152
-
153
- expected = <<-CODE.reset_indentation
154
- def self.marshaller(closure, return_value, param_values, _invocation_hint, _marshal_data)
155
- _instance, value = param_values.map(&:get_value_plain)
156
- _v1 = _instance
157
- _v2 = value
158
- _v3 = wrap(closure.to_ptr).invoke_block(_v1, _v2)
159
- return_value.set_value _v3
160
- end
164
+ it "returns a valid mapping method" do
165
+ expected = <<~CODE
166
+ def self.marshaller(closure, return_value, param_values, _invocation_hint, _marshal_data)
167
+ _instance, list = param_values.map(&:get_value_plain)
168
+ _v1 = _instance
169
+ _v2 = GLib::List.wrap(:utf8, list)
170
+ wrap(closure.to_ptr).invoke_block(_v1, _v2)
171
+ end
161
172
  CODE
162
173
 
163
- builder.marshaller_definition.must_equal expected
174
+ _(builder.marshaller_definition).must_equal expected
164
175
  end
165
176
  end
166
177
 
167
- describe 'for a signal with GList argument' do
178
+ describe "for a signal with GError argument" do
168
179
  let(:signal_info) do
169
- get_signal_introspection_data 'Regress', 'AnnotationObject', 'list-signal'
180
+ get_signal_introspection_data "Regress", "TestObj", "sig-with-gerror"
170
181
  end
171
182
 
172
- it 'returns a valid mapping method' do
173
- skip unless signal_info
183
+ it "returns a valid mapping method" do
184
+ skip_below "1.61.1"
174
185
 
175
- expected = <<-CODE.reset_indentation
176
- def self.marshaller(closure, return_value, param_values, _invocation_hint, _marshal_data)
177
- _instance, list = param_values.map(&:get_value_plain)
178
- _v1 = _instance
179
- _v2 = GLib::List.wrap(:utf8, list)
180
- wrap(closure.to_ptr).invoke_block(_v1, _v2)
181
- end
186
+ expected = <<~CODE
187
+ def self.marshaller(closure, return_value, param_values, _invocation_hint, _marshal_data)
188
+ _instance, error = param_values.map(&:get_value_plain)
189
+ _v1 = _instance
190
+ _v2 = GLib::Error.wrap(error)
191
+ wrap(closure.to_ptr).invoke_block(_v1, _v2)
192
+ end
182
193
  CODE
183
194
 
184
- builder.marshaller_definition.must_equal expected
195
+ _(builder.marshaller_definition).must_equal expected
185
196
  end
186
197
  end
187
198
  end
@@ -1,45 +1,48 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'gir_ffi_test_helper'
3
+ require "gir_ffi_test_helper"
4
4
 
5
5
  describe GirFFI::Builders::StructBuilder do
6
- describe '#layout_specification' do
7
- it 'returns the correct layout for Regress::TestStructA' do
8
- info = get_introspection_data 'Regress', 'TestStructA'
6
+ describe "#layout_specification" do
7
+ it "returns the correct layout for Regress::TestStructA" do
8
+ info = get_introspection_data "Regress", "TestStructA"
9
9
  builder = GirFFI::Builders::StructBuilder.new info
10
- builder.layout_specification.must_equal [:some_int, :int32, 0,
11
- :some_int8, :int8, 4,
12
- :some_double, :double, 8,
13
- :some_enum, Regress::TestEnum, 16]
10
+ _(builder.layout_specification).must_equal [:some_int, :int32, 0,
11
+ :some_int8, :int8, 4,
12
+ :some_double, :double, 8,
13
+ :some_enum, Regress::TestEnum, 16]
14
14
  end
15
15
 
16
- describe 'for a struct with a simple layout' do
16
+ describe "for a struct with a simple layout" do
17
17
  before do
18
18
  @field = Object.new
19
19
 
20
20
  @struct = Object.new
21
- allow(@struct).to receive(:namespace).and_return 'Foo'
22
- allow(@struct).to receive(:safe_name).and_return 'Bar'
21
+ allow(@struct).to receive(:namespace).and_return "Foo"
22
+ allow(@struct).to receive(:safe_name).and_return "Bar"
23
23
  allow(@struct).to receive(:fields).and_return [@field]
24
24
 
25
25
  @builder = GirFFI::Builders::StructBuilder.new @struct
26
26
  end
27
27
 
28
- it 'creates the correct layout specification' do
28
+ it "creates the correct layout specification" do
29
29
  expect(@field).to receive(:layout_specification).and_return [:bar, :int32, 0]
30
30
  spec = @builder.layout_specification
31
31
  assert_equal [:bar, :int32, 0], spec
32
32
  end
33
33
  end
34
34
 
35
- describe 'for a struct with a layout with a complex type' do
36
- it 'does not flatten the complex type specification' do
37
- expect(simplefield = Object.new).to receive(:layout_specification).and_return [:bar, :foo, 0]
38
- expect(complexfield = Object.new).to receive(:layout_specification).and_return [:baz, [:qux, 2], 0]
39
- expect(struct = Object.new).to receive(:fields).and_return [simplefield, complexfield]
35
+ describe "for a struct with a layout with a complex type" do
36
+ it "does not flatten the complex type specification" do
37
+ expect(simplefield = Object.new)
38
+ .to receive(:layout_specification).and_return [:bar, :foo, 0]
39
+ expect(complexfield = Object.new)
40
+ .to receive(:layout_specification).and_return [:baz, [:qux, 2], 0]
41
+ expect(struct = Object.new)
42
+ .to receive(:fields).and_return [simplefield, complexfield]
40
43
 
41
- allow(struct).to receive(:safe_name).and_return 'Bar'
42
- allow(struct).to receive(:namespace).and_return 'Foo'
44
+ allow(struct).to receive(:safe_name).and_return "Bar"
45
+ allow(struct).to receive(:namespace).and_return "Foo"
43
46
 
44
47
  builder = GirFFI::Builders::StructBuilder.new struct
45
48
  spec = builder.layout_specification
@@ -48,39 +51,39 @@ describe GirFFI::Builders::StructBuilder do
48
51
  end
49
52
  end
50
53
 
51
- describe '#superclass' do
52
- it 'returns StructBase for a normal struct' do
53
- info = get_introspection_data 'Regress', 'TestStructA'
54
+ describe "#superclass" do
55
+ it "returns StructBase for a normal struct" do
56
+ info = get_introspection_data "Regress", "TestStructA"
54
57
  builder = GirFFI::Builders::StructBuilder.new info
55
- builder.superclass.must_equal GirFFI::StructBase
58
+ _(builder.superclass).must_equal GirFFI::StructBase
56
59
  end
57
60
 
58
- it 'returns BoxedBase for a boxed type' do
59
- info = get_introspection_data 'Regress', 'TestSimpleBoxedB'
61
+ it "returns BoxedBase for a boxed type" do
62
+ info = get_introspection_data "Regress", "TestSimpleBoxedB"
60
63
  builder = GirFFI::Builders::StructBuilder.new info
61
- builder.superclass.must_equal GirFFI::BoxedBase
64
+ _(builder.superclass).must_equal GirFFI::BoxedBase
62
65
  end
63
66
 
64
- it 'returns the GObject parent class for a type class' do
65
- info = get_introspection_data 'GIMarshallingTests', 'SubSubObjectClass'
67
+ it "returns the GObject parent class for a type class" do
68
+ info = get_introspection_data "GIMarshallingTests", "SubSubObjectClass"
66
69
  builder = GirFFI::Builders::StructBuilder.new info
67
- builder.superclass.must_equal GIMarshallingTests::SubObjectClass
70
+ _(builder.superclass).must_equal GIMarshallingTests::SubObjectClass
68
71
  end
69
72
 
70
- it 'returns ObjectClass for InitiallyUnownedClass' do
71
- info = get_introspection_data 'GObject', 'InitiallyUnownedClass'
73
+ it "returns ObjectClass for InitiallyUnownedClass" do
74
+ info = get_introspection_data "GObject", "InitiallyUnownedClass"
72
75
  builder = GirFFI::Builders::StructBuilder.new info
73
- builder.superclass.must_equal GObject::ObjectClass
76
+ _(builder.superclass).must_equal GObject::ObjectClass
74
77
  end
75
78
  end
76
79
 
77
- describe '#setup_class' do
80
+ describe "#setup_class" do
78
81
  before do
79
82
  save_module :Regress
80
83
  end
81
84
 
82
- it 'stubs the structs methods' do
83
- info = get_introspection_data 'Regress', 'TestStructA'
85
+ it "stubs the structs methods" do
86
+ info = get_introspection_data "Regress", "TestStructA"
84
87
  builder = GirFFI::Builders::StructBuilder.new info
85
88
  builder.setup_class
86
89
  assert_defines_instance_method Regress::TestStructA, :clone
@@ -1,35 +1,29 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'gir_ffi_test_helper'
3
+ require "gir_ffi_test_helper"
4
4
 
5
5
  GirFFI.setup :GIMarshallingTests
6
6
 
7
7
  describe GirFFI::Builders::UnintrospectableBoxedBuilder do
8
8
  let(:instance) { GIMarshallingTests::PropertiesObject.new }
9
- let(:property) { instance.object_class.find_property 'some-boxed-glist' }
9
+ let(:property) { instance.object_class.find_property "some-boxed-glist" }
10
10
  let(:gtype) { property.value_type }
11
11
  let(:info) { GirFFI::UnintrospectableBoxedInfo.new(gtype) }
12
12
  let(:bldr) { GirFFI::Builders::UnintrospectableBoxedBuilder.new(info) }
13
13
  let(:boxed_class) { bldr.build_class }
14
14
 
15
- before do
16
- skip unless get_property_introspection_data('GIMarshallingTests',
17
- 'PropertiesObject',
18
- 'some-boxed-glist')
15
+ it "builds a class" do
16
+ _(boxed_class).must_be_instance_of Class
19
17
  end
20
18
 
21
- it 'builds a class' do
22
- boxed_class.must_be_instance_of Class
19
+ it "builds a class derived from GirFFI::BoxedBase" do
20
+ _(boxed_class.superclass).must_equal GirFFI::BoxedBase
23
21
  end
24
22
 
25
- it 'builds a class derived from GirFFI::BoxedBase' do
26
- boxed_class.superclass.must_equal GirFFI::BoxedBase
27
- end
28
-
29
- it 'returns the same class when built again' do
23
+ it "returns the same class when built again" do
30
24
  other_bldr = GirFFI::Builders::UnintrospectableBoxedBuilder.new(info)
31
25
  other_class = other_bldr.build_class
32
26
 
33
- other_class.must_equal boxed_class
27
+ _(other_class).must_equal boxed_class
34
28
  end
35
29
  end