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,32 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'gir_ffi_test_helper'
4
-
5
- require 'ffi-gobject'
6
- describe GObject::ParamSpec do
7
- let(:pspec) do
8
- GObject.param_spec_int('foo-bar', 'foo bar',
9
- 'Foo Bar',
10
- 1, 3, 2,
11
- readable: true, writable: true)
12
- end
13
- let(:pspec_struct) { GObject::ParamSpec::Struct.new(pspec.to_ptr) }
14
-
15
- describe '#ref' do
16
- it 'increases the ref count' do
17
- old = pspec_struct[:ref_count]
18
- pspec.ref
19
- pspec_struct[:ref_count].must_equal old + 1
20
- end
21
- end
22
-
23
- describe '#accessor_name' do
24
- it 'returns a safe ruby method name' do
25
- pspec.accessor_name.must_equal 'foo_bar'
26
- end
27
- end
28
-
29
- it 'cannot be instantiated directly' do
30
- proc { GObject::ParamSpec.new }.must_raise NoMethodError
31
- end
32
- end
@@ -1,370 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'gir_ffi_test_helper'
4
-
5
- GirFFI.setup :Regress
6
- GirFFI.setup :Gio
7
-
8
- describe GObject::Value do
9
- describe '::Struct' do
10
- describe 'layout' do
11
- let(:layout) { GObject::Value::Struct.layout }
12
-
13
- it 'consists of :g_type and :data' do
14
- layout.members.must_equal [:g_type, :data]
15
- end
16
-
17
- it 'has an array as its second element' do
18
- types = layout.fields.map(&:type)
19
- types[1].class.must_equal FFI::Type::Array
20
- end
21
- end
22
- end
23
-
24
- describe '.for_gtype' do
25
- it 'handles char' do
26
- gv = GObject::Value.for_gtype GObject::TYPE_CHAR
27
- gv.current_gtype.must_equal GObject::TYPE_CHAR
28
- end
29
-
30
- it 'handles invalid type' do
31
- gv = GObject::Value.for_gtype GObject::TYPE_INVALID
32
- gv.current_gtype.must_equal GObject::TYPE_INVALID
33
- end
34
-
35
- it 'handles void type' do
36
- gv = GObject::Value.for_gtype GObject::TYPE_NONE
37
- gv.current_gtype.must_equal GObject::TYPE_INVALID
38
- end
39
- end
40
-
41
- describe '::wrap_ruby_value' do
42
- it 'wraps a boolean false' do
43
- gv = GObject::Value.wrap_ruby_value false
44
- assert_instance_of GObject::Value, gv
45
- gv.get_boolean.must_equal false
46
- end
47
-
48
- it 'wraps a boolean true' do
49
- gv = GObject::Value.wrap_ruby_value true
50
- assert_instance_of GObject::Value, gv
51
- gv.get_boolean.must_equal true
52
- end
53
-
54
- it 'wraps an Integer' do
55
- gv = GObject::Value.wrap_ruby_value 42
56
- gv.get_int.must_equal 42
57
- end
58
-
59
- it 'wraps a String' do
60
- gv = GObject::Value.wrap_ruby_value 'Some Random String'
61
- gv.get_string.must_equal 'Some Random String'
62
- end
63
-
64
- it 'wraps nil' do
65
- gv = GObject::Value.wrap_ruby_value nil
66
- assert_instance_of GObject::Value, gv
67
- gv.get_value.must_be_nil
68
- end
69
-
70
- it 'wraps object values' do
71
- value = GObject::Object.new({})
72
- gv = GObject::Value.wrap_ruby_value value
73
- object_ref_count(value).must_equal 2
74
- gv.get_value.must_equal value
75
- object_ref_count(value).must_equal 3
76
- end
77
- end
78
-
79
- describe '#set_value' do
80
- it 'handles signed char values' do
81
- value = -83
82
- gv = GObject::Value.for_gtype GObject::TYPE_CHAR
83
- gv.set_value value
84
- gv.get_schar.must_equal value
85
- end
86
-
87
- it 'handles unsigned char values' do
88
- value = 174
89
- gv = GObject::Value.for_gtype GObject::TYPE_UCHAR
90
- gv.set_value value
91
- gv.get_uchar.must_equal value
92
- end
93
-
94
- it 'handles enum values presented as symbols' do
95
- value = :value2
96
- gv = GObject::Value.for_gtype Regress::TestEnum.gtype
97
- gv.set_value value
98
- gv.get_value.must_equal value
99
- end
100
-
101
- it 'handles enum values presented as numbers' do
102
- value = :value2
103
- gv = GObject::Value.for_gtype Regress::TestEnum.gtype
104
- gv.set_value Regress::TestEnum[value]
105
- gv.get_value.must_equal value
106
- end
107
-
108
- it 'handles GType values' do
109
- value = GObject::TYPE_STRING
110
- gv = GObject::Value.for_gtype GObject::TYPE_GTYPE
111
- gv.set_value value
112
- gv.get_gtype.must_equal value
113
- end
114
-
115
- it 'handles int64 values' do
116
- value = 0x1234_5678_9012_3456
117
- gv = GObject::Value.for_gtype GObject::TYPE_INT64
118
- gv.set_value value
119
- gv.get_int64.must_equal value
120
- end
121
-
122
- it 'handles long values' do
123
- value = FFI.type_size(:long) == 8 ? 0x1234_5678_9012_3456 : 0x1234_5678
124
- gv = GObject::Value.for_gtype GObject::TYPE_LONG
125
- gv.set_value value
126
- gv.get_long.must_equal value
127
- end
128
-
129
- it 'handles uchar values' do
130
- value = 83
131
- gv = GObject::Value.for_gtype GObject::TYPE_UCHAR
132
- gv.set_value value
133
- gv.get_uchar.must_equal value
134
- end
135
-
136
- it 'handles uint values' do
137
- value = 0x1234_5678
138
- gv = GObject::Value.for_gtype GObject::TYPE_UINT
139
- gv.set_value value
140
- gv.get_uint.must_equal value
141
- end
142
-
143
- it 'handles uint64 values' do
144
- value = 0x1234_5678_9012_3456
145
- gv = GObject::Value.for_gtype GObject::TYPE_UINT64
146
- gv.set_value value
147
- gv.get_uint64.must_equal value
148
- end
149
-
150
- it 'handles ulong values' do
151
- value = FFI.type_size(:long) == 8 ? 0x1234_5678_9012_3456 : 0x1234_5678
152
- gv = GObject::Value.for_gtype GObject::TYPE_ULONG
153
- gv.set_value value
154
- gv.get_ulong.must_equal value
155
- end
156
-
157
- it 'handles variant values' do
158
- value = GLib::Variant.new_string('Foo')
159
- gv = GObject::Value.for_gtype GObject::TYPE_VARIANT
160
- gv.set_value value
161
- gv.get_variant.must_equal value
162
- end
163
-
164
- it 'handles object values' do
165
- value = GObject::Object.new({})
166
- gv = GObject::Value.for_gtype GObject::Object.gtype
167
- gv.set_value value
168
- gv.get_object.must_equal value
169
- end
170
-
171
- it 'handles interface values' do
172
- value = Gio.file_new_for_path('/')
173
- gv = GObject::Value.for_gtype Gio::File.gtype
174
- gv.set_value value
175
- gv.get_object.must_equal value
176
- end
177
- end
178
-
179
- describe '#get_value' do
180
- it 'unwraps a boolean false' do
181
- gv = GObject::Value.wrap_ruby_value false
182
- result = gv.get_value
183
- result.must_equal false
184
- end
185
-
186
- it 'unwraps a boolean true' do
187
- gv = GObject::Value.wrap_ruby_value true
188
- result = gv.get_value
189
- result.must_equal true
190
- end
191
-
192
- it 'unwraps a signed char' do
193
- value = -42
194
- gv = GObject::Value.for_gtype GObject::TYPE_CHAR
195
- gv.set_schar value
196
- gv.get_value.must_equal value
197
- end
198
-
199
- it 'unwraps an unsigned char' do
200
- value = 173
201
- gv = GObject::Value.for_gtype GObject::TYPE_UCHAR
202
- gv.set_uchar value
203
- gv.get_value.must_equal value
204
- end
205
-
206
- it 'unwraps an enum value' do
207
- value = :value2
208
- gv = GObject::Value.for_gtype Regress::TestEnum.gtype
209
- gv.set_enum Regress::TestEnum[value]
210
- gv.get_value.must_equal value
211
- end
212
-
213
- it 'unwraps a flags value' do
214
- value = Regress::TestFlags[:flag1] | Regress::TestFlags[:flag3]
215
- gv = GObject::Value.for_gtype Regress::TestFlags.gtype
216
- gv.set_flags value
217
- gv.get_value.must_equal value
218
- end
219
-
220
- it 'unwraps a GType' do
221
- value = GObject::TYPE_STRING
222
- gv = GObject::Value.for_gtype GObject::TYPE_GTYPE
223
- gv.set_gtype value
224
- gv.get_value.must_equal value
225
- end
226
-
227
- it 'unwraps an int64' do
228
- value = 0x1234_5678_9012_3456
229
- gv = GObject::Value.for_gtype GObject::TYPE_INT64
230
- gv.set_int64 value
231
- gv.get_value.must_equal value
232
- end
233
-
234
- it 'unwraps a long' do
235
- value = FFI.type_size(:long) == 8 ? 0x1234_5678_9012_3456 : 0x1234_5678
236
- gv = GObject::Value.for_gtype GObject::TYPE_LONG
237
- gv.set_long value
238
- gv.get_value.must_equal value
239
- end
240
-
241
- it 'unwraps an uchar' do
242
- value = 3
243
- gv = GObject::Value.for_gtype GObject::TYPE_UCHAR
244
- gv.set_uchar value
245
- gv.get_value.must_equal value
246
- end
247
-
248
- it 'unwraps an uint' do
249
- value = 0x1234_5678
250
- gv = GObject::Value.for_gtype GObject::TYPE_UINT
251
- gv.set_uint value
252
- gv.get_value.must_equal value
253
- end
254
-
255
- it 'unwraps an uint64' do
256
- value = 0x1234_5678_9012_3456
257
- gv = GObject::Value.for_gtype GObject::TYPE_UINT64
258
- gv.set_uint64 value
259
- gv.get_value.must_equal value
260
- end
261
-
262
- it 'unwraps an ulong' do
263
- value = FFI.type_size(:long) == 8 ? 0x1234_5678_9012_3456 : 0x1234_5678
264
- gv = GObject::Value.for_gtype GObject::TYPE_ULONG
265
- gv.set_ulong value
266
- gv.get_value.must_equal value
267
- end
268
-
269
- it 'unwraps a variant' do
270
- value = GLib::Variant.new_string('Foo')
271
- gv = GObject::Value.for_gtype GObject::TYPE_VARIANT
272
- gv.set_variant value
273
- gv.get_value.must_equal value
274
- end
275
-
276
- it 'works with a ByteArray' do
277
- ba = GLib::ByteArray.new.append('some bytes')
278
- v = GObject::Value.for_gtype GObject::TYPE_BYTE_ARRAY
279
- v.set_boxed ba
280
-
281
- result = v.get_value
282
-
283
- result.to_string.must_equal 'some bytes'
284
- result.must_be_kind_of GLib::ByteArray
285
- end
286
-
287
- it 'works with an Array' do
288
- arr = GLib::Array.from(:uint, [1, 2, 3])
289
- v = GObject::Value.for_gtype GObject::TYPE_ARRAY
290
- v.set_boxed arr
291
-
292
- result = v.get_value
293
-
294
- result.must_be_kind_of GLib::Array
295
- result.reset_typespec(:uint).to_a.must_equal [1, 2, 3]
296
- end
297
-
298
- it 'unwraps a Strv' do
299
- strv = GLib::Strv.from %w(foo bar)
300
- val = GObject::Value.for_gtype GObject::TYPE_STRV
301
- val.set_boxed strv
302
-
303
- result = val.get_value
304
-
305
- result.must_be_kind_of GLib::Strv
306
- result.to_a.must_equal %w(foo bar)
307
- end
308
- end
309
-
310
- describe '::from' do
311
- it 'creates a gint GValue from a Ruby Integer' do
312
- gv = GObject::Value.from 21
313
- gv.current_gtype_name.must_equal 'gint'
314
- gv.get_value.must_equal 21
315
- end
316
-
317
- it 'returns its argument if given a GValue' do
318
- gv = GObject::Value.from 21
319
- gv2 = GObject::Value.from gv
320
- gv2.current_gtype_name.must_equal 'gint'
321
- gv2.get_value.must_equal 21
322
- end
323
-
324
- it 'creates a null GValue from a Ruby nil' do
325
- gv = GObject::Value.from nil
326
- gv.current_gtype.must_equal GObject::TYPE_INVALID
327
- gv.get_value.must_be_nil
328
- end
329
- end
330
-
331
- describe '#set_value' do
332
- before do
333
- GirFFI.setup :GIMarshallingTests
334
- end
335
-
336
- it 'raises an error when setting an incompatible object type' do
337
- o = GIMarshallingTests::Object.new 1
338
- v = GObject::Value.new.init(GIMarshallingTests::OverridesObject.gtype)
339
- proc { v.set_value o }.must_raise ArgumentError
340
- end
341
-
342
- it 'works with a ByteArray' do
343
- ba = GLib::ByteArray.new.append('some bytes')
344
- v = GObject::Value.new.init(GObject.type_from_name('GByteArray'))
345
- v.set_value ba
346
- v.get_value.to_string.must_equal 'some bytes'
347
- end
348
- end
349
-
350
- describe 'upon garbage collection' do
351
- it 'restores the underlying GValue to its pristine state' do
352
- skip 'cannot be reliably tested on JRuby and Rubinius' if jruby? || rubinius?
353
-
354
- value = GObject::Value.from 42
355
-
356
- # Drop reference to original GObject::Value
357
- value = GObject::Value.wrap value.to_ptr
358
- value.current_gtype_name.must_equal 'gint'
359
-
360
- GC.start
361
- # Creating a new object is sometimes needed to trigger enough garbage collection.
362
- GObject::Value.new
363
- sleep 1
364
- GC.start
365
- GC.start
366
-
367
- value.current_gtype_name.wont_equal 'gint'
368
- end
369
- end
370
- end
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'introspection_test_helper'
4
-
5
- describe GObjectIntrospection::GObjectTypeInit do
6
- describe 'Lib' do
7
- it 'represents the gobject-2.0 library' do
8
- GObjectIntrospection::GObjectTypeInit::Lib.ffi_libraries.first.name.
9
- must_match(/gobject-2\.0/)
10
- end
11
-
12
- it 'provides the g_type_init function' do
13
- GObjectIntrospection::GObjectTypeInit::Lib.must_respond_to :g_type_init
14
- end
15
- end
16
-
17
- describe '.type_init' do
18
- it 'calls the g_type_init function from the gobject-2.0 library' do
19
- allow(GObjectIntrospection::GObjectTypeInit::Lib).to receive(:g_type_init)
20
-
21
- GObjectIntrospection::GObjectTypeInit.type_init
22
-
23
- expect(GObjectIntrospection::GObjectTypeInit::Lib).to have_received(:g_type_init)
24
- end
25
- end
26
- end
@@ -1,53 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'introspection_test_helper'
4
-
5
- describe GObjectIntrospection::IBaseInfo do
6
- let(:described_class) { GObjectIntrospection::IBaseInfo }
7
- describe '#initialize' do
8
- it 'raises an error if a null pointer is passed' do
9
- expect(ptr = Object.new).to receive(:null?).and_return true
10
- proc { described_class.new ptr }.must_raise ArgumentError
11
- end
12
-
13
- it 'raises no error if a non-null pointer is passed' do
14
- expect(ptr = Object.new).to receive(:null?).and_return false
15
- described_class.new ptr
16
- pass
17
- end
18
- end
19
-
20
- describe '#deprecated?' do
21
- let(:deprecated_info) { get_introspection_data 'Regress', 'test_versioning' }
22
- let(:other_info) { get_introspection_data 'Regress', 'test_value_return' }
23
-
24
- it 'returns true for a deprecated item' do
25
- skip unless deprecated_info
26
- deprecated_info.must_be :deprecated?
27
- end
28
-
29
- it 'returns false for a non-deprecated item' do
30
- other_info.wont_be :deprecated?
31
- end
32
- end
33
-
34
- describe 'upon garbage collection' do
35
- it 'calls g_base_info_unref' do
36
- skip 'cannot be reliably tested on JRuby and Rubinius' if jruby? || rubinius?
37
-
38
- expect(ptr = Object.new).to receive(:null?).and_return false
39
- expect(lib = Object.new).to receive(:g_base_info_unref).with(ptr).and_return nil
40
- described_class.new ptr, lib
41
-
42
- GC.start
43
-
44
- # Yes, the next three lines are needed. https://gist.github.com/4277829
45
- allow(ptr2 = Object.new).to receive(:null?).and_return false
46
- allow(lib).to receive(:g_base_info_unref).with(ptr2).and_return nil
47
- described_class.new ptr2, lib
48
-
49
- GC.start
50
- GC.start
51
- end
52
- end
53
- end