gir_ffi 0.14.1 → 0.15.4

Sign up to get free protection for your applications and to get access to all the features.
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,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'gir_ffi_test_helper'
4
-
5
- describe GirFFI::InfoExt::ICallableInfo do
6
- let(:info_class) do
7
- Class.new do
8
- include GirFFI::InfoExt::ICallableInfo
9
- end
10
- end
11
- let(:callable_info) { info_class.new }
12
-
13
- describe '#argument_ffi_types' do
14
- describe 'for a simple callable with several arguments' do
15
- before do
16
- allow(arg_info1 = Object.new).to receive(:to_ffi_type).and_return :type1
17
- allow(arg_info2 = Object.new).to receive(:to_ffi_type).and_return :type2
18
- allow(callable_info).to receive(:args).and_return [arg_info1, arg_info2]
19
- end
20
-
21
- it 'returns the ffi types of the arguments' do
22
- callable_info.argument_ffi_types.must_equal [:type1, :type2]
23
- end
24
- end
25
- end
26
- end
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'gir_ffi_test_helper'
4
-
5
- describe GirFFI::InfoExt::ICallbackInfo do
6
- let(:callback_class) do
7
- Class.new do
8
- include GirFFI::InfoExt::ICallbackInfo
9
- end
10
- end
11
- let(:callback_info) { callback_class.new }
12
-
13
- describe '#return_ffi_type' do
14
- it 'returns the callback ffi type of the return type' do
15
- allow(return_type_info = Object.new).to receive(:to_callback_ffi_type).and_return :some_type
16
- allow(callback_info).to receive(:return_type).and_return return_type_info
17
-
18
- callback_info.return_ffi_type.must_equal :some_type
19
- end
20
- end
21
- end
@@ -1,37 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'gir_ffi_test_helper'
4
-
5
- describe GirFFI::InfoExt::IFieldInfo do
6
- let(:info_class) do
7
- Class.new do
8
- include GirFFI::InfoExt::IFieldInfo
9
- end
10
- end
11
- let(:field_info) { info_class.new }
12
- describe '#layout_specification' do
13
- it 'returns an array of name, typespec and offset' do
14
- expect(type = Object.new).to receive(:to_ffi_type).and_return :bar
15
-
16
- expect(field_info).to receive(:name).and_return 'foo'
17
- expect(field_info).to receive(:field_type).and_return type
18
- expect(field_info).to receive(:offset).and_return 0
19
-
20
- result = field_info.layout_specification
21
-
22
- assert_equal [:foo, :bar, 0], result
23
- end
24
-
25
- it 'keeps a complex typespec intact' do
26
- expect(type = Object.new).to receive(:to_ffi_type).and_return [:bar, 2]
27
-
28
- expect(field_info).to receive(:name).and_return 'foo'
29
- expect(field_info).to receive(:field_type).and_return type
30
- expect(field_info).to receive(:offset).and_return 0
31
-
32
- result = field_info.layout_specification
33
-
34
- assert_equal [:foo, [:bar, 2], 0], result
35
- end
36
- end
37
- end
@@ -1,74 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'gir_ffi_test_helper'
4
-
5
- describe GirFFI::InfoExt::IFunctionInfo do
6
- let(:info_class) do
7
- Class.new do
8
- include GirFFI::InfoExt::ICallableInfo
9
- include GirFFI::InfoExt::IFunctionInfo
10
- end
11
- end
12
- let(:function_info) { info_class.new }
13
-
14
- describe '#argument_ffi_types' do
15
- before do
16
- allow(arg_info1 = Object.new).to receive(:to_ffi_type).and_return :type1
17
- allow(arg_info2 = Object.new).to receive(:to_ffi_type).and_return :type2
18
- allow(function_info).to receive(:args).and_return [arg_info1, arg_info2]
19
- end
20
-
21
- describe 'for a simple function with several arguments' do
22
- before do
23
- allow(function_info).to receive(:method?).and_return false
24
- allow(function_info).to receive(:throws?).and_return false
25
- end
26
-
27
- it 'returns the ffi types of the arguments' do
28
- function_info.argument_ffi_types.must_equal [:type1, :type2]
29
- end
30
- end
31
-
32
- describe 'for a throwing function with several arguments' do
33
- before do
34
- allow(function_info).to receive(:method?).and_return false
35
- allow(function_info).to receive(:throws?).and_return true
36
- end
37
-
38
- it 'appends :pointer to represent the error argument' do
39
- function_info.argument_ffi_types.must_equal [:type1, :type2, :pointer]
40
- end
41
- end
42
-
43
- describe 'for a method with several arguments' do
44
- before do
45
- allow(function_info).to receive(:method?).and_return true
46
- allow(function_info).to receive(:throws?).and_return false
47
- end
48
-
49
- it 'prepends :pointer to represent the method reciever' do
50
- function_info.argument_ffi_types.must_equal [:pointer, :type1, :type2]
51
- end
52
- end
53
-
54
- describe 'for a throwing method with several arguments' do
55
- before do
56
- allow(function_info).to receive(:method?).and_return true
57
- allow(function_info).to receive(:throws?).and_return true
58
- end
59
-
60
- it 'adds :pointer for both the reciever and the error argument' do
61
- function_info.argument_ffi_types.must_equal [:pointer, :type1, :type2, :pointer]
62
- end
63
- end
64
- end
65
-
66
- describe '#return_ffi_type' do
67
- it 'returns the ffi type of the return type' do
68
- allow(return_type_info = Object.new).to receive(:to_ffi_type).and_return :some_type
69
- allow(function_info).to receive(:return_type).and_return return_type_info
70
-
71
- function_info.return_ffi_type.must_equal :some_type
72
- end
73
- end
74
- end
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'gir_ffi_test_helper'
4
-
5
- GirFFI.setup :Regress
6
-
7
- describe GirFFI::InfoExt::ISignalInfo do
8
- let(:signal_class) do
9
- Class.new do
10
- include GirFFI::InfoExt::ICallableInfo
11
- include GirFFI::InfoExt::ISignalInfo
12
- end
13
- end
14
- let(:signal_info) { signal_class.new }
15
-
16
- describe '#arguments_to_gvalues' do
17
- let(:object) { Regress::TestSubObj.new }
18
- let(:boxed) { Regress::TestSimpleBoxedA.const_return }
19
- let(:signal_info) { Regress::TestSubObj.find_signal 'test-with-static-scope-arg' }
20
- let(:result) { signal_info.arguments_to_gvalues(object, [boxed]) }
21
-
22
- it 'correctly wraps :object' do
23
- result[0].get_value.must_equal object
24
- end
25
-
26
- it 'correctly wraps :struct' do
27
- result_boxed = result[1].get_value
28
- result_boxed.some_int8.must_equal boxed.some_int8
29
- result_boxed.some_int.must_equal boxed.some_int
30
- end
31
- end
32
- end
@@ -1,697 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'gir_ffi_test_helper'
4
-
5
- describe GirFFI::InfoExt::ITypeInfo do
6
- let(:info_class) do
7
- Class.new do
8
- include GirFFI::InfoExt::ITypeInfo
9
- end
10
- end
11
-
12
- let(:type_info) { info_class.new }
13
- let(:elmtype_info) { info_class.new }
14
- let(:keytype_info) { info_class.new }
15
- let(:valtype_info) { info_class.new }
16
- let(:iface_info) { Object.new }
17
-
18
- let(:callback_type_info) do
19
- get_introspection_data('Regress', 'test_callback').args[0].argument_type
20
- end
21
- let(:ghash_type_info) do
22
- get_introspection_data('Regress',
23
- 'test_ghash_nested_everything_return').return_type
24
- end
25
-
26
- describe '#to_ffi_type' do
27
- it 'returns an array with elements subtype and size for type :array' do
28
- expect(type_info).to receive(:pointer?).and_return false
29
- allow(type_info).to receive(:tag).and_return :array
30
- expect(type_info).to receive(:array_fixed_size).and_return 2
31
-
32
- expect(elmtype_info).to receive(:to_ffi_type).and_return :foo
33
- expect(type_info).to receive(:param_type).with(0).and_return elmtype_info
34
-
35
- result = type_info.to_ffi_type
36
- assert_equal [:foo, 2], result
37
- end
38
-
39
- describe 'for an :interface type' do
40
- before do
41
- allow(type_info).to receive(:interface).and_return iface_info
42
- allow(type_info).to receive(:tag).and_return :interface
43
- allow(type_info).to receive(:pointer?).and_return false
44
- end
45
-
46
- it "maps a the interface's ffi_type" do
47
- allow(iface_info).to receive(:to_ffi_type).and_return :foo
48
-
49
- type_info.to_ffi_type.must_equal :foo
50
- end
51
- end
52
- end
53
-
54
- describe '#element_type' do
55
- it 'returns the element type for lists' do
56
- allow(elmtype_info).to receive(:tag).and_return :foo
57
- expect(elmtype_info).to receive(:pointer?).and_return false
58
-
59
- expect(type_info).to receive(:tag).and_return :glist
60
- expect(type_info).to receive(:param_type).with(0).and_return elmtype_info
61
-
62
- result = type_info.element_type
63
- result.must_equal :foo
64
- end
65
-
66
- it 'returns the key and value types for ghashes' do
67
- allow(keytype_info).to receive(:tag).and_return :foo
68
- expect(keytype_info).to receive(:pointer?).and_return false
69
- allow(valtype_info).to receive(:tag).and_return :bar
70
- expect(valtype_info).to receive(:pointer?).and_return false
71
-
72
- expect(type_info).to receive(:tag).and_return :ghash
73
- expect(type_info).to receive(:param_type).with(0).and_return keytype_info
74
- expect(type_info).to receive(:param_type).with(1).and_return valtype_info
75
-
76
- result = type_info.element_type
77
- result.must_equal [:foo, :bar]
78
- end
79
-
80
- it 'returns nil for other types' do
81
- expect(type_info).to receive(:tag).and_return :foo
82
-
83
- result = type_info.element_type
84
- result.must_be_nil
85
- end
86
-
87
- it 'returns [:pointer, :void] if the element type is a pointer with tag :void' do
88
- allow(elmtype_info).to receive(:tag_or_class).and_return [:pointer, :void]
89
-
90
- expect(type_info).to receive(:tag).and_return :glist
91
- expect(type_info).to receive(:param_type).with(0).and_return elmtype_info
92
-
93
- assert_equal [:pointer, :void], type_info.element_type
94
- end
95
- end
96
-
97
- describe '#flattened_tag' do
98
- describe 'for a simple type' do
99
- it 'returns the type tag' do
100
- allow(type_info).to receive(:tag).and_return :uint32
101
-
102
- type_info.flattened_tag.must_equal :uint32
103
- end
104
- end
105
-
106
- describe 'for a zero-terminated array' do
107
- before do
108
- allow(type_info).to receive(:tag).and_return :array
109
- allow(type_info).to receive(:param_type).with(0).and_return elmtype_info
110
- allow(type_info).to receive(:zero_terminated?).and_return true
111
- end
112
-
113
- describe 'of utf8' do
114
- it 'returns :strv' do
115
- allow(elmtype_info).to receive(:tag).and_return :utf8
116
- allow(elmtype_info).to receive(:pointer?).and_return true
117
-
118
- type_info.flattened_tag.must_equal :strv
119
- end
120
- end
121
-
122
- describe 'of filename' do
123
- it 'returns :strv' do
124
- allow(elmtype_info).to receive(:tag).and_return :filename
125
- allow(elmtype_info).to receive(:pointer?).and_return true
126
-
127
- type_info.flattened_tag.must_equal :strv
128
- end
129
- end
130
-
131
- describe 'of another type' do
132
- it 'returns :zero_terminated' do
133
- allow(elmtype_info).to receive(:tag).and_return :foo
134
- allow(elmtype_info).to receive(:pointer?).and_return false
135
-
136
- type_info.flattened_tag.must_equal :zero_terminated
137
- end
138
- end
139
- end
140
-
141
- describe 'for a fixed length c-like array' do
142
- it 'returns :c' do
143
- expect(type_info).to receive(:tag).and_return :array
144
- expect(type_info).to receive(:zero_terminated?).and_return false
145
- expect(type_info).to receive(:array_type).and_return :c
146
-
147
- type_info.flattened_tag.must_equal :c
148
- end
149
- end
150
-
151
- describe 'for a GLib array' do
152
- it 'returns :c' do
153
- expect(type_info).to receive(:tag).and_return :array
154
- expect(type_info).to receive(:zero_terminated?).and_return false
155
- expect(type_info).to receive(:array_type).and_return :array
156
-
157
- type_info.flattened_tag.must_equal :array
158
- end
159
- end
160
- end
161
-
162
- describe '#tag_or_class' do
163
- describe 'for a simple type' do
164
- it "returns the type's tag" do
165
- allow(type_info).to receive(:tag).and_return :foo
166
- expect(type_info).to receive(:pointer?).and_return false
167
-
168
- type_info.tag_or_class.must_equal :foo
169
- end
170
- end
171
-
172
- describe 'for utf8 strings' do
173
- it 'returns the tag :utf8' do
174
- allow(type_info).to receive(:tag).and_return :utf8
175
- expect(type_info).to receive(:pointer?).and_return true
176
-
177
- type_info.tag_or_class.must_equal :utf8
178
- end
179
- end
180
-
181
- describe 'for filename strings' do
182
- it 'returns the tag :filename' do
183
- allow(type_info).to receive(:tag).and_return :filename
184
- expect(type_info).to receive(:pointer?).and_return true
185
-
186
- type_info.tag_or_class.must_equal :filename
187
- end
188
- end
189
-
190
- describe 'for an interface class' do
191
- let(:interface) { Object.new }
192
-
193
- before do
194
- allow(type_info).to receive(:tag).and_return :interface
195
- allow(type_info).to receive(:interface).and_return iface_info
196
- expect(type_info).to receive(:pointer?).and_return false
197
-
198
- expect(GirFFI::Builder).to receive(:build_class).with(iface_info).and_return interface
199
- end
200
-
201
- describe 'when the interface type is :enum' do
202
- it 'returns the built interface module' do
203
- allow(iface_info).to receive(:info_type).and_return :enum
204
-
205
- type_info.tag_or_class.must_equal interface
206
- end
207
- end
208
-
209
- describe 'when the interface type is :object' do
210
- it 'returns the built interface class' do
211
- allow(iface_info).to receive(:info_type).and_return :object
212
-
213
- type_info.tag_or_class.must_equal interface
214
- end
215
- end
216
-
217
- describe 'when the interface type is :struct' do
218
- it 'returns the built interface class' do
219
- allow(iface_info).to receive(:info_type).and_return :struct
220
-
221
- type_info.tag_or_class.must_equal interface
222
- end
223
- end
224
- end
225
-
226
- describe 'for a callback' do
227
- it "returns the callback's wrapper class" do
228
- callback_type_info.tag_or_class.must_equal Regress::TestCallback
229
- end
230
- end
231
-
232
- describe 'for a pointer to simple type :foo' do
233
- it 'returns [:pointer, :foo]' do
234
- allow(type_info).to receive(:tag).and_return :foo
235
- expect(type_info).to receive(:pointer?).and_return true
236
-
237
- type_info.tag_or_class.must_equal [:pointer, :foo]
238
- end
239
- end
240
-
241
- describe 'for a pointer to :void' do
242
- it 'returns [:pointer, :void]' do
243
- allow(type_info).to receive(:tag).and_return :void
244
- allow(type_info).to receive(:pointer?).and_return true
245
-
246
- type_info.tag_or_class.must_equal [:pointer, :void]
247
- end
248
- end
249
-
250
- describe 'for a complex nested hash type' do
251
- it 'returns a representeation of the nested structure' do
252
- ghash_type_info.tag_or_class.must_equal(
253
- [:pointer,
254
- [:ghash,
255
- :utf8,
256
- [:pointer,
257
- [:ghash, :utf8, :utf8]]]])
258
- end
259
- end
260
- end
261
-
262
- describe '#to_callback_ffi_type' do
263
- describe 'for an :interface argument' do
264
- before do
265
- allow(type_info).to receive(:interface).and_return iface_info
266
- allow(type_info).to receive(:tag).and_return :interface
267
- allow(type_info).to receive(:pointer?).and_return false
268
- end
269
-
270
- it 'delegates to interface info' do
271
- allow(iface_info).to receive(:to_callback_ffi_type).and_return :some_ffi_type
272
-
273
- type_info.to_callback_ffi_type.must_equal :some_ffi_type
274
- end
275
- end
276
- end
277
-
278
- describe '#extra_conversion_arguments' do
279
- describe 'for normal types' do
280
- before do
281
- allow(type_info).to receive(:tag).and_return :foo
282
- end
283
-
284
- it 'returns an empty array' do
285
- type_info.extra_conversion_arguments.must_equal []
286
- end
287
- end
288
-
289
- describe 'for a fixed-size array' do
290
- before do
291
- allow(type_info).to receive(:tag).and_return :array
292
- allow(type_info).to receive(:zero_terminated?).and_return false
293
- allow(type_info).to receive(:array_type).and_return :c
294
- allow(type_info).to receive(:array_fixed_size).and_return 3
295
-
296
- allow(type_info).to receive(:param_type).with(0).and_return elmtype_info
297
- allow(elmtype_info).to receive(:tag_or_class).and_return :foo
298
- end
299
-
300
- it 'returns an array containing the element type' do
301
- type_info.extra_conversion_arguments.must_equal [:foo, 3]
302
- end
303
- end
304
-
305
- describe 'for a zero-terminated array' do
306
- before do
307
- allow(type_info).to receive(:tag).and_return :array
308
- allow(type_info).to receive(:zero_terminated?).and_return true
309
-
310
- allow(type_info).to receive(:param_type).with(0).and_return elmtype_info
311
- allow(elmtype_info).to receive(:tag_or_class).and_return :foo
312
- end
313
-
314
- it 'returns an array containing the element type' do
315
- type_info.extra_conversion_arguments.must_equal [:foo]
316
- end
317
- end
318
-
319
- describe 'for a GArray' do
320
- before do
321
- allow(type_info).to receive(:tag).and_return :array
322
- allow(type_info).to receive(:zero_terminated?).and_return false
323
- allow(type_info).to receive(:array_type).and_return :array
324
-
325
- allow(type_info).to receive(:param_type).with(0).and_return elmtype_info
326
- allow(elmtype_info).to receive(:tag_or_class).and_return :foo
327
- end
328
-
329
- it 'returns an array containing the element type' do
330
- type_info.extra_conversion_arguments.must_equal [:foo]
331
- end
332
- end
333
-
334
- describe 'for a GHashTable' do
335
- before do
336
- allow(type_info).to receive(:tag).and_return :ghash
337
- allow(type_info).to receive(:param_type).with(0).and_return keytype_info
338
- allow(type_info).to receive(:param_type).with(1).and_return valtype_info
339
-
340
- allow(keytype_info).to receive(:tag_or_class).and_return :foo
341
- allow(valtype_info).to receive(:tag_or_class).and_return :bar
342
- end
343
-
344
- it 'returns an array containing the element type pair' do
345
- type_info.extra_conversion_arguments.must_equal [[:foo, :bar]]
346
- end
347
- end
348
-
349
- describe 'for a GList' do
350
- before do
351
- allow(type_info).to receive(:tag).and_return :glist
352
-
353
- allow(type_info).to receive(:param_type).with(0).and_return elmtype_info
354
- allow(elmtype_info).to receive(:tag_or_class).and_return :foo
355
- end
356
-
357
- it 'returns an array containing the element type' do
358
- type_info.extra_conversion_arguments.must_equal [:foo]
359
- end
360
- end
361
-
362
- describe 'for a GSList' do
363
- before do
364
- allow(type_info).to receive(:tag).and_return :gslist
365
-
366
- allow(type_info).to receive(:param_type).with(0).and_return elmtype_info
367
- allow(elmtype_info).to receive(:tag_or_class).and_return :foo
368
- end
369
-
370
- it 'returns an array containing the element type' do
371
- type_info.extra_conversion_arguments.must_equal [:foo]
372
- end
373
- end
374
-
375
- describe 'for a GPtrArray' do
376
- before do
377
- allow(type_info).to receive(:tag).and_return :array
378
- allow(type_info).to receive(:zero_terminated?).and_return false
379
- allow(type_info).to receive(:array_type).and_return :ptr_array
380
-
381
- allow(type_info).to receive(:param_type).with(0).and_return elmtype_info
382
- allow(elmtype_info).to receive(:tag_or_class).and_return :foo
383
- end
384
-
385
- it 'returns an array containing the element type' do
386
- type_info.extra_conversion_arguments.must_equal [:foo]
387
- end
388
- end
389
-
390
- describe 'for a :callback' do
391
- before do
392
- allow(interface_type_info = Object.new).to receive(:namespace).and_return 'Bar'
393
- allow(interface_type_info).to receive(:name).and_return 'Foo'
394
-
395
- allow(type_info).to receive(:tag).and_return :callback
396
- allow(type_info).to receive(:interface).and_return interface_type_info
397
- end
398
-
399
- it 'returns an empty array' do
400
- type_info.extra_conversion_arguments.must_equal []
401
- end
402
- end
403
- end
404
-
405
- describe '#argument_class_name' do
406
- before do
407
- allow(type_info).to receive(:tag).and_return tag
408
- end
409
-
410
- describe 'for :gint32' do
411
- let(:tag) { :gint32 }
412
-
413
- it 'is nil' do
414
- type_info.argument_class_name.must_be_nil
415
- end
416
- end
417
-
418
- describe 'for interfaces' do
419
- let(:tag) { :interface }
420
-
421
- before do
422
- allow(type_info).to receive(:interface).and_return iface_info
423
- allow(iface_info).to receive(:info_type).and_return interface_type
424
- allow(iface_info).to receive(:full_type_name).and_return 'Bar::Foo'
425
- end
426
-
427
- describe 'for :struct' do
428
- let(:interface_type) { :struct }
429
- it 'equals the struct class name' do
430
- type_info.argument_class_name.must_equal 'Bar::Foo'
431
- end
432
- end
433
-
434
- describe 'for :union' do
435
- let(:interface_type) { :union }
436
- it 'equals the union class name' do
437
- type_info.argument_class_name.must_equal 'Bar::Foo'
438
- end
439
- end
440
-
441
- describe 'for :interface' do
442
- let(:interface_type) { :interface }
443
-
444
- it 'equals the interface module name' do
445
- type_info.argument_class_name.must_equal 'Bar::Foo'
446
- end
447
- end
448
-
449
- describe 'for :object' do
450
- let(:interface_type) { :object }
451
-
452
- it 'equals the object class name' do
453
- type_info.argument_class_name.must_equal 'Bar::Foo'
454
- end
455
- end
456
-
457
- describe 'for :callback' do
458
- let(:interface_type) { :callback }
459
-
460
- it 'equals the callback type name' do
461
- type_info.argument_class_name.must_equal 'Bar::Foo'
462
- end
463
- end
464
- end
465
-
466
- describe 'for :strv' do
467
- let(:tag) { :strv }
468
-
469
- it 'equals GLib::Strv' do
470
- type_info.argument_class_name.must_equal 'GLib::Strv'
471
- end
472
- end
473
-
474
- describe 'for arrays' do
475
- let(:tag) { :array }
476
- before do
477
- allow(type_info).to receive(:param_type).with(0).and_return elmtype_info
478
- allow(elmtype_info).to receive(:tag_or_class).and_return :foo
479
- end
480
-
481
- describe 'for :zero_terminated' do
482
- before do
483
- allow(type_info).to receive(:zero_terminated?).and_return true
484
- end
485
-
486
- it 'equals GirFFI::ZeroTerminated' do
487
- type_info.argument_class_name.must_equal 'GirFFI::ZeroTerminated'
488
- end
489
- end
490
-
491
- describe 'for :byte_array' do
492
- before do
493
- allow(type_info).to receive(:zero_terminated?).and_return false
494
- allow(type_info).to receive(:array_type).and_return :byte_array
495
- end
496
-
497
- it 'equals GLib::ByteArray' do
498
- type_info.argument_class_name.must_equal 'GLib::ByteArray'
499
- end
500
- end
501
-
502
- describe 'for :ptr_array' do
503
- before do
504
- allow(type_info).to receive(:zero_terminated?).and_return false
505
- allow(type_info).to receive(:array_type).and_return :ptr_array
506
- end
507
-
508
- it 'equals GLib::PtrArray' do
509
- type_info.argument_class_name.must_equal 'GLib::PtrArray'
510
- end
511
- end
512
-
513
- describe 'for :array' do
514
- before do
515
- allow(type_info).to receive(:zero_terminated?).and_return false
516
- allow(type_info).to receive(:array_type).and_return :array
517
- end
518
-
519
- it 'equals GLib::Array' do
520
- type_info.argument_class_name.must_equal 'GLib::Array'
521
- end
522
- end
523
- end
524
-
525
- describe 'for :glist' do
526
- let(:tag) { :glist }
527
-
528
- it 'equals GLib::List' do
529
- type_info.argument_class_name.must_equal 'GLib::List'
530
- end
531
- end
532
-
533
- describe 'for :gslist' do
534
- let(:tag) { :gslist }
535
-
536
- it 'equals GLib::SList' do
537
- type_info.argument_class_name.must_equal 'GLib::SList'
538
- end
539
- end
540
-
541
- describe 'for :ghash' do
542
- let(:tag) { :ghash }
543
-
544
- it 'equals GLib::HashTable' do
545
- type_info.argument_class_name.must_equal 'GLib::HashTable'
546
- end
547
- end
548
-
549
- describe 'for :error' do
550
- let(:tag) { :error }
551
-
552
- it 'equals GLib::Error' do
553
- type_info.argument_class_name.must_equal 'GLib::Error'
554
- end
555
- end
556
- end
557
-
558
- describe '#gtype' do
559
- before do
560
- allow(type_info).to receive(:tag).and_return tag
561
- allow(type_info).to receive(:pointer?).and_return pointer?
562
- end
563
-
564
- describe 'for :void' do
565
- let(:tag) { :void }
566
- let(:pointer?) { false }
567
-
568
- it 'equals the none type' do
569
- GObject.type_name(type_info.gtype).must_equal 'void'
570
- end
571
- end
572
-
573
- describe 'for :void pointer' do
574
- let(:tag) { :void }
575
- let(:pointer?) { true }
576
-
577
- it 'equals the none type' do
578
- GObject.type_name(type_info.gtype).must_equal 'gpointer'
579
- end
580
- end
581
-
582
- describe 'for :gboolean' do
583
- let(:tag) { :gboolean }
584
- let(:pointer?) { false }
585
-
586
- it 'equals the gboolean type' do
587
- GObject.type_name(type_info.gtype).must_equal 'gboolean'
588
- end
589
- end
590
-
591
- describe 'for :gint32' do
592
- let(:tag) { :gint32 }
593
- let(:pointer?) { false }
594
-
595
- it 'equals the gint type' do
596
- GObject.type_name(type_info.gtype).must_equal 'gint'
597
- end
598
- end
599
-
600
- describe 'for :gint64' do
601
- let(:tag) { :gint64 }
602
- let(:pointer?) { false }
603
-
604
- it 'equals the gint64 type' do
605
- GObject.type_name(type_info.gtype).must_equal 'gint64'
606
- end
607
- end
608
-
609
- describe 'for :guint64' do
610
- let(:tag) { :guint64 }
611
- let(:pointer?) { false }
612
-
613
- it 'equals the guint64 type' do
614
- GObject.type_name(type_info.gtype).must_equal 'guint64'
615
- end
616
- end
617
-
618
- describe 'for pointer to :utf8' do
619
- let(:tag) { :utf8 }
620
- let(:pointer?) { true }
621
-
622
- it 'equals the gchararray type' do
623
- GObject.type_name(type_info.gtype).must_equal 'gchararray'
624
- end
625
- end
626
-
627
- describe 'for pointer to :ghash' do
628
- let(:tag) { :ghash }
629
- let(:pointer?) { true }
630
-
631
- it 'equals the GHashTable type' do
632
- GObject.type_name(type_info.gtype).must_equal 'GHashTable'
633
- end
634
- end
635
-
636
- describe 'for pointer to :glist' do
637
- let(:tag) { :glist }
638
- let(:pointer?) { true }
639
-
640
- it 'equals the pointer type' do
641
- GObject.type_name(type_info.gtype).must_equal 'gpointer'
642
- end
643
- end
644
-
645
- describe 'for arrays' do
646
- let(:tag) { :array }
647
- let(:pointer?) { true }
648
-
649
- describe 'for pointer to GArray' do
650
- before do
651
- allow(type_info).to receive(:zero_terminated?).and_return false
652
- allow(type_info).to receive(:array_type).and_return :array
653
- end
654
-
655
- it 'equals the GArray type' do
656
- GObject.type_name(type_info.gtype).must_equal 'GArray'
657
- end
658
- end
659
-
660
- describe 'for a C array' do
661
- before do
662
- allow(type_info).to receive(:zero_terminated?).and_return false
663
- allow(type_info).to receive(:array_type).and_return :c
664
- end
665
-
666
- it 'equals the gpointer type' do
667
- GObject.type_name(type_info.gtype).must_equal 'gpointer'
668
- end
669
- end
670
-
671
- describe 'for a zero-terminated array' do
672
- before do
673
- allow(type_info).to receive(:param_type).with(0).and_return elmtype_info
674
- allow(type_info).to receive(:zero_terminated?).and_return true
675
- end
676
-
677
- describe 'of utf8' do
678
- it 'equals the GStrv type' do
679
- allow(elmtype_info).to receive(:tag).and_return :utf8
680
- allow(elmtype_info).to receive(:pointer?).and_return true
681
-
682
- GObject.type_name(type_info.gtype).must_equal 'GStrv'
683
- end
684
- end
685
-
686
- describe 'of filename' do
687
- it 'equals the GStrv type' do
688
- allow(elmtype_info).to receive(:tag).and_return :filename
689
- allow(elmtype_info).to receive(:pointer?).and_return true
690
-
691
- GObject.type_name(type_info.gtype).must_equal 'GStrv'
692
- end
693
- end
694
- end
695
- end
696
- end
697
- end