gir_ffi 0.15.1 → 0.15.6

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 (190) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +42 -0
  3. data/README.md +10 -10
  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 +8 -3
  8. data/lib/ffi-glib/byte_array.rb +2 -1
  9. data/lib/ffi-glib/container_class_methods.rb +1 -3
  10. data/lib/ffi-glib/destroy_notify.rb +2 -2
  11. data/lib/ffi-glib/hash_table.rb +1 -2
  12. data/lib/ffi-glib/list.rb +11 -5
  13. data/lib/ffi-glib/list_methods.rb +12 -0
  14. data/lib/ffi-glib/s_list.rb +10 -4
  15. data/lib/ffi-gobject.rb +2 -5
  16. data/lib/ffi-gobject/object.rb +102 -92
  17. data/lib/ffi-gobject/object_class.rb +1 -1
  18. data/lib/ffi-gobject/ruby_closure.rb +1 -1
  19. data/lib/ffi-gobject/value.rb +108 -117
  20. data/lib/ffi-gobject_introspection/i_base_info.rb +35 -27
  21. data/lib/ffi-gobject_introspection/lib.rb +1 -1
  22. data/lib/gir_ffi-base/gobject/lib.rb +4 -0
  23. data/lib/gir_ffi/array_element_convertor.rb +2 -3
  24. data/lib/gir_ffi/boxed_base.rb +13 -11
  25. data/lib/gir_ffi/builder.rb +3 -4
  26. data/lib/gir_ffi/builder_helper.rb +10 -2
  27. data/lib/gir_ffi/builders/base_argument_builder.rb +2 -2
  28. data/lib/gir_ffi/builders/base_method_builder.rb +1 -1
  29. data/lib/gir_ffi/builders/base_type_builder.rb +1 -1
  30. data/lib/gir_ffi/builders/callback_argument_builder.rb +2 -0
  31. data/lib/gir_ffi/builders/callback_builder.rb +25 -11
  32. data/lib/gir_ffi/builders/callback_return_value_builder.rb +4 -6
  33. data/lib/gir_ffi/builders/enum_builder.rb +9 -5
  34. data/lib/gir_ffi/builders/field_builder.rb +2 -1
  35. data/lib/gir_ffi/builders/function_builder.rb +1 -1
  36. data/lib/gir_ffi/builders/interface_builder.rb +3 -1
  37. data/lib/gir_ffi/builders/mapping_method_builder.rb +1 -1
  38. data/lib/gir_ffi/builders/marshalling_method_builder.rb +5 -2
  39. data/lib/gir_ffi/builders/method_template.rb +4 -4
  40. data/lib/gir_ffi/builders/module_builder.rb +4 -2
  41. data/lib/gir_ffi/builders/null_argument_builder.rb +0 -2
  42. data/lib/gir_ffi/builders/null_return_value_builder.rb +0 -2
  43. data/lib/gir_ffi/builders/object_builder.rb +18 -6
  44. data/lib/gir_ffi/builders/property_builder.rb +1 -2
  45. data/lib/gir_ffi/builders/signal_closure_builder.rb +3 -5
  46. data/lib/gir_ffi/builders/struct_builder.rb +34 -7
  47. data/lib/gir_ffi/builders/user_defined_builder.rb +8 -1
  48. data/lib/gir_ffi/builders/vfunc_argument_builder.rb +1 -1
  49. data/lib/gir_ffi/callback_base.rb +7 -8
  50. data/lib/gir_ffi/class_base.rb +1 -0
  51. data/lib/gir_ffi/core.rb +17 -2
  52. data/lib/gir_ffi/glib_error.rb +1 -2
  53. data/lib/gir_ffi/in_pointer.rb +7 -0
  54. data/lib/gir_ffi/object_base.rb +27 -0
  55. data/lib/gir_ffi/return_value_info.rb +1 -2
  56. data/lib/gir_ffi/struct_base.rb +1 -9
  57. data/lib/gir_ffi/struct_like_base.rb +9 -5
  58. data/lib/gir_ffi/type_map.rb +1 -0
  59. data/lib/gir_ffi/unintrospectable_type_info.rb +1 -1
  60. data/lib/gir_ffi/union_base.rb +1 -9
  61. data/lib/gir_ffi/user_defined_object_info.rb +3 -2
  62. data/lib/gir_ffi/version.rb +1 -1
  63. data/lib/gir_ffi/vfunc_implementation.rb +1 -0
  64. metadata +106 -143
  65. data/Gemfile +0 -14
  66. data/Rakefile +0 -9
  67. data/tasks/test.rake +0 -204
  68. data/test/base_test_helper.rb +0 -70
  69. data/test/ffi-glib/array_test.rb +0 -203
  70. data/test/ffi-glib/byte_array_test.rb +0 -28
  71. data/test/ffi-glib/bytes_test.rb +0 -61
  72. data/test/ffi-glib/closure_test.rb +0 -38
  73. data/test/ffi-glib/destroy_notify_test.rb +0 -18
  74. data/test/ffi-glib/hash_table_test.rb +0 -68
  75. data/test/ffi-glib/list_test.rb +0 -86
  76. data/test/ffi-glib/main_loop_test.rb +0 -53
  77. data/test/ffi-glib/ptr_array_test.rb +0 -112
  78. data/test/ffi-glib/ruby_closure_test.rb +0 -62
  79. data/test/ffi-glib/s_list_test.rb +0 -76
  80. data/test/ffi-glib/strv_test.rb +0 -60
  81. data/test/ffi-glib/variant_test.rb +0 -12
  82. data/test/ffi-gobject/gobject_test.rb +0 -76
  83. data/test/ffi-gobject/object_class_test.rb +0 -31
  84. data/test/ffi-gobject/object_test.rb +0 -122
  85. data/test/ffi-gobject/param_spec_test.rb +0 -32
  86. data/test/ffi-gobject/value_test.rb +0 -390
  87. data/test/ffi-gobject_introspection/gobject_type_init_test.rb +0 -26
  88. data/test/ffi-gobject_introspection/i_base_info_test.rb +0 -52
  89. data/test/ffi-gobject_introspection/i_constant_info_test.rb +0 -29
  90. data/test/ffi-gobject_introspection/i_enum_info_test.rb +0 -18
  91. data/test/ffi-gobject_introspection/i_function_info_test.rb +0 -6
  92. data/test/ffi-gobject_introspection/i_interface_info_test.rb +0 -23
  93. data/test/ffi-gobject_introspection/i_object_info_test.rb +0 -49
  94. data/test/ffi-gobject_introspection/i_property_info_test.rb +0 -47
  95. data/test/ffi-gobject_introspection/i_registered_type_info_test.rb +0 -27
  96. data/test/ffi-gobject_introspection/i_repository_test.rb +0 -81
  97. data/test/ffi-gobject_introspection/i_struct_info_test.rb +0 -23
  98. data/test/ffi-gobject_introspection/i_type_info_test.rb +0 -30
  99. data/test/ffi-gobject_introspection/i_union_info_test.rb +0 -17
  100. data/test/ffi-gobject_introspection/i_vfunc_info_test.rb +0 -41
  101. data/test/ffi-gobject_introspection/lib_test.rb +0 -13
  102. data/test/ffi-gobject_introspection/strv_test.rb +0 -46
  103. data/test/ffi-gobject_test.rb +0 -151
  104. data/test/gir_ffi/allocation_helper_test.rb +0 -36
  105. data/test/gir_ffi/arg_helper_test.rb +0 -139
  106. data/test/gir_ffi/boolean_test.rb +0 -43
  107. data/test/gir_ffi/boxed_base_test.rb +0 -65
  108. data/test/gir_ffi/builder_test.rb +0 -322
  109. data/test/gir_ffi/builders/argument_builder_test.rb +0 -651
  110. data/test/gir_ffi/builders/base_argument_builder_test.rb +0 -6
  111. data/test/gir_ffi/builders/callback_argument_builder_test.rb +0 -126
  112. data/test/gir_ffi/builders/callback_builder_test.rb +0 -117
  113. data/test/gir_ffi/builders/callback_return_value_builder_test.rb +0 -81
  114. data/test/gir_ffi/builders/constant_builder_test.rb +0 -6
  115. data/test/gir_ffi/builders/constructor_builder_test.rb +0 -37
  116. data/test/gir_ffi/builders/enum_builder_test.rb +0 -23
  117. data/test/gir_ffi/builders/field_builder_test.rb +0 -134
  118. data/test/gir_ffi/builders/function_builder_test.rb +0 -550
  119. data/test/gir_ffi/builders/initializer_builder_test.rb +0 -54
  120. data/test/gir_ffi/builders/interface_builder_test.rb +0 -32
  121. data/test/gir_ffi/builders/module_builder_test.rb +0 -43
  122. data/test/gir_ffi/builders/object_builder_test.rb +0 -98
  123. data/test/gir_ffi/builders/property_builder_test.rb +0 -158
  124. data/test/gir_ffi/builders/registered_type_builder_test.rb +0 -54
  125. data/test/gir_ffi/builders/return_value_builder_test.rb +0 -433
  126. data/test/gir_ffi/builders/signal_closure_builder_test.rb +0 -197
  127. data/test/gir_ffi/builders/struct_builder_test.rb +0 -93
  128. data/test/gir_ffi/builders/unintrospectable_boxed_builder_test.rb +0 -29
  129. data/test/gir_ffi/builders/unintrospectable_builder_test.rb +0 -84
  130. data/test/gir_ffi/builders/union_builder_test.rb +0 -28
  131. data/test/gir_ffi/builders/user_defined_builder_test.rb +0 -524
  132. data/test/gir_ffi/builders/vfunc_argument_builder_test.rb +0 -101
  133. data/test/gir_ffi/builders/vfunc_builder_test.rb +0 -241
  134. data/test/gir_ffi/callback_base_test.rb +0 -22
  135. data/test/gir_ffi/class_base_test.rb +0 -166
  136. data/test/gir_ffi/core_test.rb +0 -98
  137. data/test/gir_ffi/enum_base_test.rb +0 -43
  138. data/test/gir_ffi/error_type_info_test.rb +0 -50
  139. data/test/gir_ffi/ffi_ext/pointer_test.rb +0 -20
  140. data/test/gir_ffi/g_type_test.rb +0 -31
  141. data/test/gir_ffi/in_pointer_test.rb +0 -203
  142. data/test/gir_ffi/info_ext/i_callable_info_test.rb +0 -26
  143. data/test/gir_ffi/info_ext/i_callback_info_test.rb +0 -21
  144. data/test/gir_ffi/info_ext/i_field_info_test.rb +0 -37
  145. data/test/gir_ffi/info_ext/i_function_info_test.rb +0 -74
  146. data/test/gir_ffi/info_ext/i_signal_info_test.rb +0 -32
  147. data/test/gir_ffi/info_ext/i_type_info_test.rb +0 -711
  148. data/test/gir_ffi/info_ext/i_unresolved_info_test.rb +0 -19
  149. data/test/gir_ffi/info_ext/safe_constant_name_test.rb +0 -26
  150. data/test/gir_ffi/info_ext/safe_function_name_test.rb +0 -26
  151. data/test/gir_ffi/interface_base_test.rb +0 -20
  152. data/test/gir_ffi/method_stubber_test.rb +0 -65
  153. data/test/gir_ffi/object_base_test.rb +0 -64
  154. data/test/gir_ffi/object_store_test.rb +0 -41
  155. data/test/gir_ffi/receiver_argument_info_test.rb +0 -33
  156. data/test/gir_ffi/sized_array_test.rb +0 -206
  157. data/test/gir_ffi/struct_base_test.rb +0 -23
  158. data/test/gir_ffi/struct_like_base_test.rb +0 -167
  159. data/test/gir_ffi/type_map_test.rb +0 -17
  160. data/test/gir_ffi/unintrospectable_type_info_test.rb +0 -121
  161. data/test/gir_ffi/union_base_test.rb +0 -23
  162. data/test/gir_ffi/user_defined_object_info_test.rb +0 -119
  163. data/test/gir_ffi/user_defined_property_info_test.rb +0 -39
  164. data/test/gir_ffi/variable_name_generator_test.rb +0 -18
  165. data/test/gir_ffi/version_test.rb +0 -9
  166. data/test/gir_ffi/zero_terminated_test.rb +0 -108
  167. data/test/gir_ffi_test_helper.rb +0 -84
  168. data/test/integration/callback_exceptions_test.rb +0 -59
  169. data/test/integration/derived_classes_test.rb +0 -53
  170. data/test/integration/generated_everything_test.rb +0 -452
  171. data/test/integration/generated_gimarshallingtests_test.rb +0 -3096
  172. data/test/integration/generated_gio_test.rb +0 -116
  173. data/test/integration/generated_glib_test.rb +0 -10
  174. data/test/integration/generated_gobject_test.rb +0 -124
  175. data/test/integration/generated_gst_test.rb +0 -38
  176. data/test/integration/generated_gtk_source_test.rb +0 -32
  177. data/test/integration/generated_gtop_test.rb +0 -22
  178. data/test/integration/generated_pango_ft2_test.rb +0 -17
  179. data/test/integration/generated_pango_test.rb +0 -24
  180. data/test/integration/generated_regress_test.rb +0 -4038
  181. data/test/integration/generated_secret_test.rb +0 -14
  182. data/test/integration/generated_utility_test.rb +0 -174
  183. data/test/integration/generated_warnlib_test.rb +0 -43
  184. data/test/integration/method_lookup_test.rb +0 -34
  185. data/test/introspection_test_helper.rb +0 -93
  186. data/test/lib/Makefile.am +0 -110
  187. data/test/lib/autogen.sh +0 -4
  188. data/test/lib/configure.ac +0 -34
  189. data/test/lib/m4/jhflags.m4 +0 -21
  190. data/test/minitest/stats_plugin.rb +0 -30
@@ -1,390 +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 flag values presented as hashes" do
109
- value = { flag2: true }
110
- gv = GObject::Value.for_gtype Regress::TestFlags.gtype
111
- gv.set_value value
112
- _(gv.get_value).must_equal value
113
- end
114
-
115
- it "handles flag values presented as symbols" do
116
- gv = GObject::Value.for_gtype Regress::TestFlags.gtype
117
- gv.set_value :flag2
118
- _(gv.get_value).must_equal(flag2: true)
119
- end
120
-
121
- it "handles flag values presented as numbers" do
122
- value = { flag2: true }
123
- gv = GObject::Value.for_gtype Regress::TestFlags.gtype
124
- gv.set_value Regress::TestFlags.to_native(value, nil)
125
- _(gv.get_value).must_equal value
126
- end
127
-
128
- it "handles GType values" do
129
- value = GObject::TYPE_STRING
130
- gv = GObject::Value.for_gtype GObject::TYPE_GTYPE
131
- gv.set_value value
132
- _(gv.get_gtype).must_equal value
133
- end
134
-
135
- it "handles int64 values" do
136
- value = 0x1234_5678_9012_3456
137
- gv = GObject::Value.for_gtype GObject::TYPE_INT64
138
- gv.set_value value
139
- _(gv.get_int64).must_equal value
140
- end
141
-
142
- it "handles long values" do
143
- value = FFI.type_size(:long) == 8 ? 0x1234_5678_9012_3456 : 0x1234_5678
144
- gv = GObject::Value.for_gtype GObject::TYPE_LONG
145
- gv.set_value value
146
- _(gv.get_long).must_equal value
147
- end
148
-
149
- it "handles uchar values" do
150
- value = 83
151
- gv = GObject::Value.for_gtype GObject::TYPE_UCHAR
152
- gv.set_value value
153
- _(gv.get_uchar).must_equal value
154
- end
155
-
156
- it "handles uint values" do
157
- value = 0x1234_5678
158
- gv = GObject::Value.for_gtype GObject::TYPE_UINT
159
- gv.set_value value
160
- _(gv.get_uint).must_equal value
161
- end
162
-
163
- it "handles uint64 values" do
164
- value = 0x1234_5678_9012_3456
165
- gv = GObject::Value.for_gtype GObject::TYPE_UINT64
166
- gv.set_value value
167
- _(gv.get_uint64).must_equal value
168
- end
169
-
170
- it "handles ulong values" do
171
- value = FFI.type_size(:long) == 8 ? 0x1234_5678_9012_3456 : 0x1234_5678
172
- gv = GObject::Value.for_gtype GObject::TYPE_ULONG
173
- gv.set_value value
174
- _(gv.get_ulong).must_equal value
175
- end
176
-
177
- it "handles variant values" do
178
- value = GLib::Variant.new_string("Foo")
179
- gv = GObject::Value.for_gtype GObject::TYPE_VARIANT
180
- gv.set_value value
181
- _(gv.get_variant).must_equal value
182
- end
183
-
184
- it "handles object values" do
185
- value = GObject::Object.new({})
186
- gv = GObject::Value.for_gtype GObject::Object.gtype
187
- gv.set_value value
188
- _(gv.get_object).must_equal value
189
- end
190
-
191
- it "handles interface values" do
192
- value = Gio.file_new_for_path("/")
193
- gv = GObject::Value.for_gtype Gio::File.gtype
194
- gv.set_value value
195
- _(gv.get_object).must_equal value
196
- end
197
- end
198
-
199
- describe "#get_value" do
200
- it "unwraps a boolean false" do
201
- gv = GObject::Value.wrap_ruby_value false
202
- result = gv.get_value
203
- _(result).must_equal false
204
- end
205
-
206
- it "unwraps a boolean true" do
207
- gv = GObject::Value.wrap_ruby_value true
208
- result = gv.get_value
209
- _(result).must_equal true
210
- end
211
-
212
- it "unwraps a signed char" do
213
- value = -42
214
- gv = GObject::Value.for_gtype GObject::TYPE_CHAR
215
- gv.set_schar value
216
- _(gv.get_value).must_equal value
217
- end
218
-
219
- it "unwraps an unsigned char" do
220
- value = 173
221
- gv = GObject::Value.for_gtype GObject::TYPE_UCHAR
222
- gv.set_uchar value
223
- _(gv.get_value).must_equal value
224
- end
225
-
226
- it "unwraps an enum value" do
227
- value = :value2
228
- gv = GObject::Value.for_gtype Regress::TestEnum.gtype
229
- gv.set_enum Regress::TestEnum[value]
230
- _(gv.get_value).must_equal value
231
- end
232
-
233
- it "unwraps a flags value" do
234
- value = { flag1: true, flag3: true }
235
- gv = GObject::Value.for_gtype Regress::TestFlags.gtype
236
- gv.set_flags Regress::TestFlags.to_native(value, nil)
237
- _(gv.get_value).must_equal value
238
- end
239
-
240
- it "unwraps a GType" do
241
- value = GObject::TYPE_STRING
242
- gv = GObject::Value.for_gtype GObject::TYPE_GTYPE
243
- gv.set_gtype value
244
- _(gv.get_value).must_equal value
245
- end
246
-
247
- it "unwraps an int64" do
248
- value = 0x1234_5678_9012_3456
249
- gv = GObject::Value.for_gtype GObject::TYPE_INT64
250
- gv.set_int64 value
251
- _(gv.get_value).must_equal value
252
- end
253
-
254
- it "unwraps a long" do
255
- value = FFI.type_size(:long) == 8 ? 0x1234_5678_9012_3456 : 0x1234_5678
256
- gv = GObject::Value.for_gtype GObject::TYPE_LONG
257
- gv.set_long value
258
- _(gv.get_value).must_equal value
259
- end
260
-
261
- it "unwraps an uchar" do
262
- value = 3
263
- gv = GObject::Value.for_gtype GObject::TYPE_UCHAR
264
- gv.set_uchar value
265
- _(gv.get_value).must_equal value
266
- end
267
-
268
- it "unwraps an uint" do
269
- value = 0x1234_5678
270
- gv = GObject::Value.for_gtype GObject::TYPE_UINT
271
- gv.set_uint value
272
- _(gv.get_value).must_equal value
273
- end
274
-
275
- it "unwraps an uint64" do
276
- value = 0x1234_5678_9012_3456
277
- gv = GObject::Value.for_gtype GObject::TYPE_UINT64
278
- gv.set_uint64 value
279
- _(gv.get_value).must_equal value
280
- end
281
-
282
- it "unwraps an ulong" do
283
- value = FFI.type_size(:long) == 8 ? 0x1234_5678_9012_3456 : 0x1234_5678
284
- gv = GObject::Value.for_gtype GObject::TYPE_ULONG
285
- gv.set_ulong value
286
- _(gv.get_value).must_equal value
287
- end
288
-
289
- it "unwraps a variant" do
290
- value = GLib::Variant.new_string("Foo")
291
- gv = GObject::Value.for_gtype GObject::TYPE_VARIANT
292
- gv.set_variant value
293
- _(gv.get_value).must_equal value
294
- end
295
-
296
- it "works with a ByteArray" do
297
- ba = GLib::ByteArray.new.append("some bytes")
298
- v = GObject::Value.for_gtype GObject::TYPE_BYTE_ARRAY
299
- v.set_boxed ba
300
-
301
- result = v.get_value
302
-
303
- _(result.to_string).must_equal "some bytes"
304
- _(result).must_be_kind_of GLib::ByteArray
305
- end
306
-
307
- it "works with an Array" do
308
- arr = GLib::Array.from(:uint, [1, 2, 3])
309
- v = GObject::Value.for_gtype GObject::TYPE_ARRAY
310
- v.set_boxed arr
311
-
312
- result = v.get_value
313
-
314
- _(result).must_be_kind_of GLib::Array
315
- _(result.reset_typespec(:uint).to_a).must_equal [1, 2, 3]
316
- end
317
-
318
- it "unwraps a Strv" do
319
- strv = GLib::Strv.from %w(foo bar)
320
- val = GObject::Value.for_gtype GObject::TYPE_STRV
321
- val.set_boxed strv
322
-
323
- result = val.get_value
324
-
325
- _(result).must_be_kind_of GLib::Strv
326
- _(result.to_a).must_equal %w(foo bar)
327
- end
328
- end
329
-
330
- describe "::from" do
331
- it "creates a gint GValue from a Ruby Integer" do
332
- gv = GObject::Value.from 21
333
- _(gv.current_gtype_name).must_equal "gint"
334
- _(gv.get_value).must_equal 21
335
- end
336
-
337
- it "returns its argument if given a GValue" do
338
- gv = GObject::Value.from 21
339
- gv2 = GObject::Value.from gv
340
- _(gv2.current_gtype_name).must_equal "gint"
341
- _(gv2.get_value).must_equal 21
342
- end
343
-
344
- it "creates a null GValue from a Ruby nil" do
345
- gv = GObject::Value.from nil
346
- _(gv.current_gtype).must_equal GObject::TYPE_INVALID
347
- _(gv.get_value).must_be_nil
348
- end
349
- end
350
-
351
- describe "#set_value" do
352
- before do
353
- GirFFI.setup :GIMarshallingTests
354
- end
355
-
356
- it "raises an error when setting an incompatible object type" do
357
- o = GIMarshallingTests::Object.new 1
358
- v = GObject::Value.new.init(GIMarshallingTests::OverridesObject.gtype)
359
- _(proc { v.set_value o }).must_raise ArgumentError
360
- end
361
-
362
- it "works with a ByteArray" do
363
- ba = GLib::ByteArray.new.append("some bytes")
364
- v = GObject::Value.new.init(GObject.type_from_name("GByteArray"))
365
- v.set_value ba
366
- _(v.get_value.to_string).must_equal "some bytes"
367
- end
368
- end
369
-
370
- describe "upon garbage collection" do
371
- it "restores the underlying GValue to its pristine state" do
372
- skip "cannot be reliably tested on JRuby and Rubinius" if jruby? || rubinius?
373
-
374
- value = GObject::Value.from 42
375
-
376
- # Drop reference to original GObject::Value
377
- value = GObject::Value.wrap value.to_ptr
378
- _(value.current_gtype_name).must_equal "gint"
379
-
380
- GC.start
381
- # Creating a new object is sometimes needed to trigger enough garbage collection.
382
- GObject::Value.new
383
- sleep 1
384
- GC.start
385
- GC.start
386
-
387
- _(value.current_gtype_name).wont_equal "gint"
388
- end
389
- end
390
- 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,52 +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
- _(deprecated_info).must_be :deprecated?
26
- end
27
-
28
- it "returns false for a non-deprecated item" do
29
- _(other_info).wont_be :deprecated?
30
- end
31
- end
32
-
33
- describe "upon garbage collection" do
34
- it "calls g_base_info_unref" do
35
- skip "cannot be reliably tested on JRuby and Rubinius" if jruby? || rubinius?
36
-
37
- expect(ptr = Object.new).to receive(:null?).and_return false
38
- expect(lib = Object.new).to receive(:g_base_info_unref).with(ptr).and_return nil
39
- described_class.new ptr, lib
40
-
41
- GC.start
42
-
43
- # Yes, the next three lines are needed. https://gist.github.com/4277829
44
- allow(ptr2 = Object.new).to receive(:null?).and_return false
45
- allow(lib).to receive(:g_base_info_unref).with(ptr2).and_return nil
46
- described_class.new ptr2, lib
47
-
48
- GC.start
49
- GC.start
50
- end
51
- end
52
- end