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,98 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'gir_ffi_test_helper'
4
-
5
- GirFFI.setup :GIMarshallingTests
6
-
7
- describe GirFFI::Core do
8
- it 'sets up cairo as Cairo' do
9
- GirFFI.setup :cairo
10
- assert Object.const_defined?(:Cairo)
11
- end
12
-
13
- it 'sets up xlib, which has no shared library' do
14
- gir = GObjectIntrospection::IRepository.default
15
- gir.require 'xlib'
16
- assert_nil gir.shared_library('xlib'), 'Precondition for test failed'
17
- GirFFI.setup :xlib
18
- end
19
-
20
- it 'sets up dependencies' do
21
- save_module :GObject
22
- save_module :Regress
23
- GirFFI.setup :Regress
24
- assert Object.const_defined?(:GObject)
25
- restore_module :Regress
26
- restore_module :GObject
27
- end
28
-
29
- describe '.setup' do
30
- it 'passes the desired version down to the module builder' do
31
- expect(GirFFI::Builder).to receive(:build_module).with('Regress', '0.1')
32
- GirFFI.setup :Regress, '0.1'
33
- end
34
- end
35
-
36
- describe '::define_type' do
37
- describe 'without a block' do
38
- before do
39
- @klass = Class.new GIMarshallingTests::OverridesObject
40
- Object.const_set "DerivedA#{Sequence.next}", @klass
41
- @gtype = GirFFI.define_type @klass
42
- end
43
-
44
- it 'returns a GType for the derived class' do
45
- parent_gtype = GIMarshallingTests::OverridesObject.gtype
46
- @gtype.wont_equal parent_gtype
47
- GObject.type_name(@gtype).must_equal @klass.name
48
- end
49
-
50
- it 'makes #gtype on the registered class return the new GType' do
51
- @klass.gtype.must_equal @gtype
52
- end
53
-
54
- it 'registers a type with the same size as the parent' do
55
- q = GObject.type_query @gtype
56
- q.instance_size.must_equal GIMarshallingTests::OverridesObject::Struct.size
57
- end
58
-
59
- it 'creates a struct class for the derived class with just one member' do
60
- @klass::Struct.members.must_equal [:parent]
61
- end
62
-
63
- it 'allows the new class to be instantiated' do
64
- obj = @klass.new
65
- type = GObject.type_from_instance obj
66
- type.must_equal @gtype
67
- end
68
- end
69
-
70
- describe 'with a block with a call to #install_property' do
71
- before do
72
- @klass = Class.new GIMarshallingTests::OverridesObject
73
- Object.const_set "DerivedB#{Sequence.next}", @klass
74
- @gtype = GirFFI.define_type @klass do |info|
75
- info.install_property GObject.param_spec_int('foo', 'foo bar',
76
- 'The Foo Bar Property',
77
- 10, 20, 15,
78
- 3)
79
- end
80
- end
81
-
82
- it 'registers a type that is bigger than the parent' do
83
- q = GObject.type_query @gtype
84
- q.instance_size.must_be :>, GIMarshallingTests::OverridesObject::Struct.size
85
- end
86
-
87
- it 'gives the types Struct the fields :parent and :foo' do
88
- @klass::Struct.members.must_equal [:parent, :foo]
89
- end
90
-
91
- it 'creates accessor functions for the property' do
92
- obj = @klass.new
93
- obj.foo = 13
94
- obj.foo.must_equal 13
95
- end
96
- end
97
- end
98
- end
@@ -1,43 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'gir_ffi_test_helper'
4
-
5
- GirFFI.setup :Regress
6
-
7
- describe GirFFI::EnumBase do
8
- describe '.wrap' do
9
- it 'converts an integer to a symbol if possible' do
10
- Regress::TestEnum.wrap(1).must_equal :value2
11
- end
12
-
13
- it 'passes an integer if it cannot be converted' do
14
- Regress::TestEnum.wrap(32).must_equal 32
15
- end
16
-
17
- it 'passes a known symbol untouched' do
18
- Regress::TestEnum.wrap(:value1).must_equal :value1
19
- end
20
-
21
- it 'passes an unknown symbol untouched' do
22
- Regress::TestEnum.wrap(:foo).must_equal :foo
23
- end
24
- end
25
-
26
- describe '.to_int' do
27
- it 'passes a known integer untouched' do
28
- Regress::TestEnum.to_int(1).must_equal 1
29
- end
30
-
31
- it 'passes an unknown integer untouched' do
32
- Regress::TestEnum.to_int(32).must_equal 32
33
- end
34
-
35
- it 'convertes a known symbol to an integer' do
36
- Regress::TestEnum.to_int(:value1).must_equal 0
37
- end
38
-
39
- it 'raises an error for an unknown symbol' do
40
- -> { Regress::TestEnum.to_int(:foo) }.must_raise ArgumentError
41
- end
42
- end
43
- end
@@ -1,50 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'gir_ffi_test_helper'
4
- require 'gir_ffi/error_type_info'
5
-
6
- describe GirFFI::ErrorTypeInfo do
7
- let(:instance) { GirFFI::ErrorTypeInfo.new }
8
-
9
- describe '#array_length' do
10
- it 'returns the correct value' do
11
- instance.array_length.must_equal(-1)
12
- end
13
- end
14
-
15
- describe '#tag_or_class' do
16
- it 'returns the correct value' do
17
- instance.tag_or_class.must_equal [:pointer, :error]
18
- end
19
- end
20
-
21
- describe '#pointer?' do
22
- it 'returns the correct value' do
23
- instance.pointer?.must_equal true
24
- end
25
- end
26
-
27
- describe '#flattened_tag' do
28
- it 'returns the correct value' do
29
- instance.flattened_tag.must_equal :error
30
- end
31
- end
32
-
33
- describe '#extra_conversion_arguments' do
34
- it 'returns the correct value' do
35
- instance.extra_conversion_arguments.must_equal []
36
- end
37
- end
38
-
39
- describe '#argument_class_name' do
40
- it 'returns the correct value' do
41
- instance.argument_class_name.must_equal 'GLib::Error'
42
- end
43
- end
44
-
45
- describe '#needs_ruby_to_c_conversion_for_callbacks?' do
46
- it 'returns the correct value' do
47
- instance.needs_ruby_to_c_conversion_for_callbacks?.must_equal true
48
- end
49
- end
50
- end
@@ -1,20 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'gir_ffi_test_helper'
4
-
5
- describe GirFFI::FFIExt::Pointer do
6
- let(:pointer_class) { Class.new { include GirFFI::FFIExt::Pointer } }
7
- describe '#to_object' do
8
- it 'finds the wrapping class by gtype and wraps the pointer in it' do
9
- ptr = pointer_class.new
10
- expect(ptr).to receive(:null?).and_return false
11
- object_class = Class.new
12
-
13
- expect(GObject).to receive(:type_from_instance_pointer).with(ptr).and_return 0xdeadbeef
14
- expect(GirFFI::Builder).to receive(:build_by_gtype).with(0xdeadbeef).and_return object_class
15
- expect(object_class).to receive(:direct_wrap).with(ptr).and_return 'good-result'
16
-
17
- ptr.to_object.must_equal 'good-result'
18
- end
19
- end
20
- end
@@ -1,31 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'gir_ffi_test_helper'
4
-
5
- require 'gir_ffi/g_type'
6
-
7
- describe GirFFI::GType do
8
- let(:gobject_gtype) { GObject::Object.gtype }
9
- let(:gobject_type_query) { GObject.type_query gobject_gtype }
10
-
11
- describe '#to_i' do
12
- it 'returns the integer gtype' do
13
- gt = GirFFI::GType.new(gobject_gtype)
14
- gt.to_i.must_equal gobject_gtype
15
- end
16
- end
17
-
18
- describe '#class_size' do
19
- it 'returns the class size for object types' do
20
- gt = GirFFI::GType.new(gobject_gtype)
21
- gt.class_size.must_equal gobject_type_query.class_size
22
- end
23
- end
24
-
25
- describe '#instance_size' do
26
- it 'returns the instance size for object types' do
27
- gt = GirFFI::GType.new(gobject_gtype)
28
- gt.instance_size.must_equal gobject_type_query.instance_size
29
- end
30
- end
31
- end
@@ -1,56 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'gir_ffi_test_helper'
4
-
5
- describe GirFFI::InOutPointer do
6
- describe '.new' do
7
- it 'wraps an existing pointer and a type' do
8
- ptr = FFI::MemoryPointer.new(:int32)
9
- ptr.put_int32 0, 42
10
- instance = GirFFI::InOutPointer.new :gint32, ptr
11
- instance.to_value.must_equal 42
12
- end
13
- end
14
-
15
- describe '#to_value' do
16
- it 'returns the held value' do
17
- ptr = GirFFI::InOutPointer.allocate_new :gint32
18
- ptr.put_int32 0, 123
19
- assert_equal 123, ptr.to_value
20
- end
21
-
22
- describe 'for :gboolean values' do
23
- it 'works when the value is false' do
24
- ptr = GirFFI::InOutPointer.allocate_new :gboolean
25
- ptr.put_int 0, 0
26
- ptr.to_value.must_equal false
27
- end
28
-
29
- it 'works when the value is true' do
30
- ptr = GirFFI::InOutPointer.allocate_new :gboolean
31
- ptr.put_int 0, 1
32
- ptr.to_value.must_equal true
33
- end
34
- end
35
-
36
- describe 'for :utf8 values' do
37
- it 'returns a pointer to the held string value' do
38
- str_ptr = GirFFI::InPointer.from_utf8 'Some value'
39
- ptr = GirFFI::InOutPointer.allocate_new :utf8
40
- ptr.put_pointer 0, str_ptr
41
- assert_equal 'Some value', ptr.to_value.read_string
42
- end
43
- end
44
-
45
- describe 'for struct values' do
46
- it 'returns a pointer to the held value' do
47
- val = GObject::EnumValue.new
48
- val.value = 3
49
- ptr = GirFFI::InOutPointer.allocate_new GObject::EnumValue
50
- GObject::EnumValue.copy_value_to_pointer val, ptr
51
- result = ptr.to_value
52
- GObject::EnumValue.wrap(result).value.must_equal 3
53
- end
54
- end
55
- end
56
- end
@@ -1,183 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'gir_ffi_test_helper'
4
-
5
- require 'gir_ffi/in_pointer'
6
-
7
- describe GirFFI::InPointer do
8
- describe '.from_array' do
9
- it 'returns nil when passed nil' do
10
- result = GirFFI::InPointer.from_array :gint32, nil
11
- assert_nil result
12
- end
13
-
14
- it 'handles type tag :GType' do
15
- GirFFI::InPointer.from_array :GType, [2]
16
- end
17
-
18
- it 'handles enum types' do
19
- e = Module.new do
20
- extend GirFFI::EnumBase
21
- self::Enum = FFI::Enum.new [:foo, :bar, :baz], :qux
22
- end
23
- ptr = GirFFI::InPointer.from_array e, [:bar, :foo, :baz]
24
- ptr.read_array_of_int32(3).must_equal [1, 0, 2]
25
- end
26
-
27
- it 'handles struct types' do
28
- e = Class.new(GirFFI::StructBase) do
29
- self::Struct = Class.new(GirFFI::Struct) do
30
- layout :foo, :int32, :bar, :int32
31
- end
32
- end
33
- struct = e::Struct.allocate
34
- struct[:foo] = 42
35
- struct[:bar] = 24
36
- ptr = GirFFI::InPointer.from_array e, [struct]
37
- ptr.wont_be :==, struct.to_ptr
38
- new_struct = e::Struct.new ptr
39
- new_struct[:foo].must_equal 42
40
- new_struct[:bar].must_equal 24
41
- end
42
-
43
- it 'handles typed pointers' do
44
- p1 = GirFFI::InPointer.from :gint32, 42
45
- p2 = GirFFI::InPointer.from :gint32, 24
46
-
47
- ptr = GirFFI::InPointer.from_array [:pointer, :gint32], [p1, p2]
48
-
49
- ptr.read_array_of_pointer(2).must_equal [p1, p2]
50
- end
51
-
52
- it 'handles pointer casting' do
53
- ptr = GirFFI::InPointer.from_array [:pointer, :gint32], [42, 24]
54
-
55
- ptr.read_array_of_pointer(2).map(&:address).must_equal [42, 24]
56
- end
57
- end
58
-
59
- describe 'an instance created with .from_array :gint32' do
60
- before do
61
- @result = GirFFI::InPointer.from_array :gint32, [24, 13]
62
- end
63
-
64
- it 'holds a pointer to the correct input values' do
65
- assert_equal 24, @result.get_int(0)
66
- assert_equal 13, @result.get_int(4)
67
- end
68
-
69
- it 'is an instance of FFI::MemoryPointer' do
70
- @result.must_be_instance_of FFI::MemoryPointer
71
- end
72
-
73
- it 'is zero-terminated' do
74
- assert_equal 0, @result.get_int(8)
75
- end
76
- end
77
-
78
- describe 'an instance created with .from_array :utf8' do
79
- before do
80
- @result = GirFFI::InPointer.from_array :utf8, %w(foo bar baz)
81
- end
82
-
83
- it 'returns an array of pointers to strings' do
84
- ary = @result.read_array_of_pointer(3)
85
- assert_equal %w(foo bar baz), ary.map(&:read_string)
86
- end
87
- end
88
-
89
- describe 'an instance created with .from_array :filename' do
90
- before do
91
- @result = GirFFI::InPointer.from_array :filename, %w(foo bar baz)
92
- end
93
-
94
- it 'returns an array of pointers to strings' do
95
- ary = @result.read_array_of_pointer(3)
96
- assert_equal %w(foo bar baz), ary.map(&:read_string)
97
- end
98
- end
99
-
100
- describe 'an instance created with .from :utf8' do
101
- before do
102
- @result = GirFFI::InPointer.from :utf8, 'foo'
103
- end
104
-
105
- it 'returns a pointer to the given string' do
106
- assert_equal 'foo', @result.read_string
107
- end
108
-
109
- it 'is an instance of FFI::MemoryPointer' do
110
- @result.must_be_instance_of FFI::MemoryPointer
111
- end
112
- end
113
-
114
- describe 'an instance created with .from :guint32' do
115
- before do
116
- @result = GirFFI::InPointer.from :guint32, 12_345
117
- end
118
-
119
- it 'returns a pointer with an address equal to the given value' do
120
- assert_equal 12_345, @result.address
121
- end
122
-
123
- it 'is an instance of FFI::Pointer' do
124
- @result.must_be_instance_of FFI::Pointer
125
- end
126
- end
127
-
128
- describe 'an instance created with .from :filename' do
129
- before do
130
- @result = GirFFI::InPointer.from :filename, 'foo'
131
- end
132
-
133
- it 'returns a pointer to the given string' do
134
- assert_equal 'foo', @result.read_string
135
- end
136
- end
137
-
138
- describe '.from' do
139
- it 'returns nil when passed nil' do
140
- result = GirFFI::InPointer.from :foo, nil
141
- assert_nil result
142
- end
143
-
144
- it "sets the pointer's address to the passed value for type :gint8" do
145
- result = GirFFI::InPointer.from :gint8, 23
146
- assert_equal 23, result.address
147
- end
148
-
149
- it 'handles enum types' do
150
- e = Module.new do
151
- extend GirFFI::EnumBase
152
- self::Enum = FFI::Enum.new [:foo, :bar, :baz], :qux
153
- end
154
- ptr = GirFFI::InPointer.from e, :bar
155
- ptr.address.must_equal 1
156
- end
157
-
158
- describe 'for type :void' do
159
- it 'returns the result of to_ptr' do
160
- obj = Object.new
161
- def obj.to_ptr
162
- :test_value
163
- end
164
- GirFFI::InPointer.from(:void, obj).must_equal :test_value
165
- end
166
-
167
- it 'returns nil when passed nil' do
168
- GirFFI::InPointer.from(:void, nil).must_be_nil
169
- end
170
- end
171
-
172
- describe 'for types that are classes' do
173
- it 'returns the result of to_ptr' do
174
- klass = Class.new
175
- obj = klass.new
176
- def obj.to_ptr
177
- :test_value
178
- end
179
- GirFFI::InPointer.from(klass, obj).must_equal :test_value
180
- end
181
- end
182
- end
183
- end