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,101 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "gir_ffi_test_helper"
4
-
5
- describe GirFFI::Builders::VFuncArgumentBuilder do
6
- let(:var_gen) { GirFFI::VariableNameGenerator.new }
7
- let(:builder) { GirFFI::Builders::VFuncArgumentBuilder.new(var_gen, arg_info) }
8
-
9
- describe "for a plain in argument" do
10
- let(:vfunc_info) do
11
- get_vfunc_introspection_data "GIMarshallingTests", "Object", "method_int8_in"
12
- end
13
- let(:arg_info) { vfunc_info.args[0] }
14
-
15
- it "has the correct value for #pre_conversion" do
16
- _(builder.pre_conversion).must_equal ["_v1 = in_"]
17
- end
18
-
19
- it "has the correct value for #post_conversion" do
20
- _(builder.post_conversion).must_equal []
21
- end
22
- end
23
-
24
- describe "for a transfer-none in argument" do
25
- let(:vfunc_info) do
26
- get_vfunc_introspection_data "GIMarshallingTests", "Object", "vfunc_in_object_transfer_none"
27
- end
28
- let(:arg_info) { vfunc_info.args[0] }
29
-
30
- it "has the correct value for #pre_conversion" do
31
- _(builder.pre_conversion).must_equal ["_v1 = GObject::Object.wrap(object)", "_v1.ref"]
32
- end
33
-
34
- it "has the correct value for #post_conversion" do
35
- _(builder.post_conversion).must_equal []
36
- end
37
- end
38
-
39
- describe "for a transfer-none outgoing object argument" do
40
- let(:vfunc_info) do
41
- get_vfunc_introspection_data "GIMarshallingTests", "Object", "vfunc_out_object_transfer_none"
42
- end
43
- let(:arg_info) { vfunc_info.args[0] }
44
-
45
- it "has the correct value for #pre_conversion" do
46
- _(builder.pre_conversion).must_equal ["_v1 = object"]
47
- end
48
-
49
- it "has the correct value for #post_conversion" do
50
- _(builder.post_conversion).must_equal ["_v1.put_pointer 0, GObject::Object.from(_v2)"]
51
- end
52
- end
53
-
54
- describe "for a full-transfer outgoing object argument" do
55
- let(:vfunc_info) do
56
- get_vfunc_introspection_data "GIMarshallingTests", "Object", "vfunc_out_object_transfer_full"
57
- end
58
- let(:arg_info) { vfunc_info.args[0] }
59
-
60
- it "has the correct value for #pre_conversion" do
61
- _(builder.pre_conversion).must_equal ["_v1 = object"]
62
- end
63
-
64
- it "has the correct value for #post_conversion" do
65
- builder.pre_conversion
66
- _(builder.post_conversion).must_equal ["_v2.ref", "_v1.put_pointer 0, GObject::Object.from(_v2)"]
67
- end
68
- end
69
-
70
- describe "for a full-transfer outgoing non-object argument" do
71
- let(:vfunc_info) do
72
- get_vfunc_introspection_data("GIMarshallingTests", "Object",
73
- "method_int8_arg_and_out_callee")
74
- end
75
- let(:arg_info) { vfunc_info.args[1] }
76
-
77
- it "has the correct value for #pre_conversion" do
78
- _(builder.pre_conversion)
79
- .must_equal ["_v1 = FFI::MemoryPointer.new(:int8).tap { |ptr| out.put_pointer 0, ptr }"]
80
- end
81
-
82
- it "has the correct value for #post_conversion" do
83
- _(builder.post_conversion).must_equal ["_v1.put_int8 0, _v2"]
84
- end
85
- end
86
-
87
- describe "for a receiver argument" do
88
- let(:object_info) { get_introspection_data("GIMarshallingTests", "Object") }
89
- let(:type_info) { GirFFI::ReceiverTypeInfo.new(object_info) }
90
- let(:arg_info) { GirFFI::ReceiverArgumentInfo.new(type_info) }
91
-
92
- it "has the correct value for #pre_conversion" do
93
- _(builder.pre_conversion)
94
- .must_equal ["_v1 = GIMarshallingTests::Object.wrap(_instance)"]
95
- end
96
-
97
- it "has the correct value for #post_conversion" do
98
- _(builder.post_conversion).must_equal []
99
- end
100
- end
101
- end
@@ -1,241 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "gir_ffi_test_helper"
4
-
5
- describe GirFFI::Builders::VFuncBuilder do
6
- let(:builder) { GirFFI::Builders::VFuncBuilder.new vfunc_info }
7
-
8
- describe "#mapping_method_definition" do
9
- let(:result) { builder.mapping_method_definition }
10
-
11
- describe "for a vfunc with only one argument" do
12
- let(:vfunc_info) do
13
- get_vfunc_introspection_data "GIMarshallingTests", "Object", "method_int8_in"
14
- end
15
-
16
- it "returns a valid mapping method including receiver" do
17
- expected = <<~CODE
18
- def self.call_with_argument_mapping(_proc, _instance, in_)
19
- _v1 = GIMarshallingTests::Object.wrap(_instance)
20
- _v2 = in_
21
- _proc.call(_v1, _v2)
22
- end
23
- CODE
24
-
25
- _(result).must_equal expected
26
- end
27
- end
28
-
29
- describe "for a vfunc returning an enum" do
30
- let(:vfunc_info) do
31
- get_vfunc_introspection_data "GIMarshallingTests", "Object", "vfunc_return_enum"
32
- end
33
-
34
- it "returns a valid mapping method including receiver" do
35
- expected = <<~CODE
36
- def self.call_with_argument_mapping(_proc, _instance)
37
- _v1 = GIMarshallingTests::Object.wrap(_instance)
38
- _v2 = _proc.call(_v1)
39
- _v3 = GIMarshallingTests::Enum.to_int(_v2)
40
- return _v3
41
- end
42
- CODE
43
-
44
- _(result).must_equal expected
45
- end
46
- end
47
-
48
- describe "for a vfunc with a callback argument" do
49
- let(:vfunc_info) do
50
- get_vfunc_introspection_data "GIMarshallingTests", "Object", "vfunc_with_callback"
51
- end
52
-
53
- it "returns a valid mapping method including receiver" do
54
- expected = <<~CODE
55
- def self.call_with_argument_mapping(_proc, _instance, callback, callback_data)
56
- _v1 = GIMarshallingTests::Object.wrap(_instance)
57
- _v2 = GIMarshallingTests::CallbackIntInt.wrap(callback)
58
- _v3 = GirFFI::ArgHelper::OBJECT_STORE.fetch(callback_data)
59
- _proc.call(_v1, _v2, _v3)
60
- end
61
- CODE
62
-
63
- _(result).must_equal expected
64
- end
65
- end
66
-
67
- describe "for a vfunc with an out argument allocated by them, the caller" do
68
- let(:vfunc_info) do
69
- get_vfunc_introspection_data("GIMarshallingTests", "Object",
70
- "method_int8_arg_and_out_caller")
71
- end
72
-
73
- it "returns a valid mapping method including receiver" do
74
- expected = <<~CODE
75
- def self.call_with_argument_mapping(_proc, _instance, arg, out)
76
- _v1 = GIMarshallingTests::Object.wrap(_instance)
77
- _v2 = arg
78
- _v3 = out
79
- _v4 = _proc.call(_v1, _v2)
80
- _v3.put_int8 0, _v4
81
- end
82
- CODE
83
-
84
- _(result).must_equal expected
85
- end
86
- end
87
-
88
- describe "for a vfunc with an out argument allocated by us, the callee" do
89
- let(:vfunc_info) do
90
- get_vfunc_introspection_data("GIMarshallingTests", "Object",
91
- "method_int8_arg_and_out_callee")
92
- end
93
-
94
- it "returns a valid mapping method including receiver" do
95
- expected = <<~CODE
96
- def self.call_with_argument_mapping(_proc, _instance, arg, out)
97
- _v1 = GIMarshallingTests::Object.wrap(_instance)
98
- _v2 = arg
99
- _v3 = FFI::MemoryPointer.new(:int8).tap { |ptr| out.put_pointer 0, ptr }
100
- _v4 = _proc.call(_v1, _v2)
101
- _v3.put_int8 0, _v4
102
- end
103
- CODE
104
-
105
- _(result).must_equal expected
106
- end
107
- end
108
-
109
- describe "for a vfunc with a GObject::Value out argument allocated by them, the caller" do
110
- let(:vfunc_info) do
111
- get_vfunc_introspection_data("GIMarshallingTests", "Object",
112
- "vfunc_caller_allocated_out_parameter")
113
- end
114
-
115
- it "returns a valid mapping method including receiver" do
116
- expected = <<~CODE
117
- def self.call_with_argument_mapping(_proc, _instance, a)
118
- _v1 = GIMarshallingTests::Object.wrap(_instance)
119
- _v2 = a
120
- _v3 = _proc.call(_v1)
121
- GObject::Value.copy_value_to_pointer(GObject::Value.from(_v3), _v2)
122
- end
123
- CODE
124
-
125
- _(result).must_equal expected
126
- end
127
- end
128
-
129
- describe "for a vfunc with an error argument" do
130
- let(:vfunc_info) do
131
- get_vfunc_introspection_data("GIMarshallingTests", "Object",
132
- "vfunc_meth_with_err")
133
- end
134
-
135
- it "returns a valid mapping method including receiver" do
136
- expected = <<~CODE
137
- def self.call_with_argument_mapping(_proc, _instance, x, _error)
138
- _v1 = GIMarshallingTests::Object.wrap(_instance)
139
- _v2 = x
140
- _v3 = _error
141
- begin
142
- _v4 = _proc.call(_v1, _v2)
143
- rescue => _v5
144
- _v3.put_pointer 0, GLib::Error.from(_v5)
145
- end
146
- return _v4
147
- end
148
- CODE
149
-
150
- _(result).must_equal expected
151
- end
152
- end
153
-
154
- describe "for a vfunc with a full-transfer return value" do
155
- let(:vfunc_info) do
156
- get_vfunc_introspection_data "GIMarshallingTests", "Object", "vfunc_return_object_transfer_full"
157
- end
158
-
159
- it "returns a valid mapping method" do
160
- expected = <<~CODE
161
- def self.call_with_argument_mapping(_proc, _instance)
162
- _v1 = GIMarshallingTests::Object.wrap(_instance)
163
- _v2 = _proc.call(_v1)
164
- _v2.ref
165
- _v3 = GObject::Object.from(_v2).to_ptr
166
- return _v3
167
- end
168
- CODE
169
-
170
- _(result).must_equal expected
171
- end
172
- end
173
-
174
- describe "for a vfunc with a transfer-none in argument" do
175
- let(:vfunc_info) do
176
- get_vfunc_introspection_data "GIMarshallingTests", "Object", "vfunc_in_object_transfer_none"
177
- end
178
-
179
- it "returns a valid mapping method" do
180
- expected = <<~CODE
181
- def self.call_with_argument_mapping(_proc, _instance, object)
182
- _v1 = GIMarshallingTests::Object.wrap(_instance)
183
- _v2 = GObject::Object.wrap(object)
184
- _v2.ref
185
- _proc.call(_v1, _v2)
186
- end
187
- CODE
188
-
189
- _(result).must_equal expected
190
- end
191
- end
192
-
193
- describe "for a vfunc with a full-transfer outgoing argument" do
194
- let(:vfunc_info) do
195
- get_vfunc_introspection_data "GIMarshallingTests", "Object", "vfunc_out_object_transfer_full"
196
- end
197
-
198
- it "returns a valid mapping method" do
199
- expected = <<~CODE
200
- def self.call_with_argument_mapping(_proc, _instance, object)
201
- _v1 = GIMarshallingTests::Object.wrap(_instance)
202
- _v2 = object
203
- _v3 = _proc.call(_v1)
204
- _v3.ref
205
- _v2.put_pointer 0, GObject::Object.from(_v3)
206
- end
207
- CODE
208
-
209
- _(result).must_equal expected
210
- end
211
- end
212
- end
213
-
214
- describe "#argument_ffi_types" do
215
- let(:result) { builder.argument_ffi_types }
216
-
217
- describe "for a vfunc with only one argument" do
218
- let(:vfunc_info) do
219
- get_vfunc_introspection_data "GIMarshallingTests", "Object", "method_int8_in"
220
- end
221
-
222
- it "returns the correct FFI types including :pointer for the receiver" do
223
- _(result).must_equal [:pointer, :int8]
224
- end
225
- end
226
- end
227
-
228
- describe "#return_ffi_type" do
229
- let(:result) { builder.return_ffi_type }
230
-
231
- describe "for a vfunc returning an object" do
232
- let(:vfunc_info) do
233
- get_vfunc_introspection_data "GIMarshallingTests", "Object", "vfunc_return_object_transfer_full"
234
- end
235
-
236
- it "returns :pointer" do
237
- _(result).must_equal :pointer
238
- end
239
- end
240
- end
241
- end
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "gir_ffi_test_helper"
4
-
5
- describe GirFFI::CallbackBase do
6
- describe ".store_callback" do
7
- it "stores the passed in proc in CALLBACKS" do
8
- dummy_proc = "some-callback"
9
- GirFFI::CallbackBase.store_callback dummy_proc
10
- _(GirFFI::CallbackBase::CALLBACKS[dummy_proc.object_id]).must_equal dummy_proc
11
- end
12
- end
13
-
14
- describe ".drop_callback" do
15
- it "removes the corresponding proc from CALLBACKS" do
16
- dummy_proc = "some-callback"
17
- GirFFI::CallbackBase.store_callback dummy_proc
18
- GirFFI::CallbackBase.drop_callback dummy_proc
19
- _(GirFFI::CallbackBase::CALLBACKS[dummy_proc.object_id]).must_be_nil
20
- end
21
- end
22
- end
@@ -1,166 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "gir_ffi_test_helper"
4
-
5
- describe GirFFI::ClassBase do
6
- describe "a simple descendant" do
7
- let(:object_class) do
8
- Class.new(GirFFI::ClassBase) do
9
- self::Struct = Class.new(GirFFI::Struct) do
10
- layout :foo, :int32
11
- end
12
- end
13
- end
14
- let(:object) { object_class.wrap FFI::MemoryPointer.new(:int32) }
15
-
16
- it "has #from as a pass-through method" do
17
- result = object_class.from :foo
18
- _(result).must_equal :foo
19
- end
20
-
21
- describe "#==" do
22
- it "returns true when comparing to an object of the same class and pointer" do
23
- other = object_class.wrap object.to_ptr
24
-
25
- _(object).must_be :==, other
26
- _(other).must_be :==, object
27
- end
28
-
29
- it "returns true when comparing to an object of the same class and a pointer with the same address" do
30
- ptr = FFI::Pointer.new object.to_ptr
31
- other = object_class.wrap ptr
32
-
33
- _(object).must_be :==, other
34
- _(other).must_be :==, object
35
- end
36
-
37
- it "returns false when comparing to an object of a sub/superclass and the same pointer" do
38
- subclass = Class.new(object_class)
39
- other = subclass.wrap object.to_ptr
40
-
41
- _(object).wont_be :==, other
42
- _(other).wont_be :==, object
43
- end
44
-
45
- it "returns false when comparing to an object of the same class and different pointer" do
46
- other = object_class.wrap FFI::MemoryPointer.new(:int32)
47
-
48
- _(object).wont_be :==, other
49
- _(other).wont_be :==, object
50
- end
51
-
52
- it "returns false when comparing to an object that doesn't respond to #to_ptr" do
53
- other = Object.new
54
-
55
- _(object).wont_be :==, other
56
- _(other).wont_be :==, object
57
- end
58
-
59
- it "returns false when comparing to an object of a different class and same pointer" do
60
- allow(other = Object.new).to receive(:to_ptr).and_return object.to_ptr
61
-
62
- _(object).wont_be :==, other
63
- _(other).wont_be :==, object
64
- end
65
-
66
- it "returns false when comparing to an object of a different class and different pointer" do
67
- allow(other = Object.new).to receive(:to_ptr).and_return FFI::MemoryPointer.new(:int32)
68
-
69
- _(object).wont_be :==, other
70
- _(other).wont_be :==, object
71
- end
72
- end
73
- end
74
-
75
- describe ".setup_and_call" do
76
- it "looks up class methods in all builders" do
77
- expect(builder = Object.new).to receive(:setup_method).with("foo").and_return "foo"
78
- klass = Class.new GirFFI::ClassBase
79
- klass.const_set :GIR_FFI_BUILDER, builder
80
-
81
- expect(sub_builder = Object.new).to receive(:setup_method).with("foo").and_return nil
82
- sub_klass = Class.new klass do
83
- def self.foo; end
84
- end
85
- sub_klass.const_set :GIR_FFI_BUILDER, sub_builder
86
-
87
- sub_klass.setup_and_call :foo, []
88
- end
89
-
90
- it "calls the method given by the result of .setup_method" do
91
- expect(builder = Object.new).to receive(:setup_method).with("foo").and_return "bar"
92
- klass = Class.new GirFFI::ClassBase do
93
- def self.bar
94
- "correct-result"
95
- end
96
-
97
- def initialize; end
98
- end
99
- klass.const_set :GIR_FFI_BUILDER, builder
100
-
101
- result = klass.setup_and_call :foo, []
102
- _(result).must_equal "correct-result"
103
- end
104
-
105
- it "raises a sensible error if the method is not found" do
106
- expect(builder = Object.new).to receive(:setup_method).with("foo").and_return nil
107
- klass = Class.new GirFFI::ClassBase do
108
- def initialize; end
109
- end
110
- klass.const_set :GIR_FFI_BUILDER, builder
111
-
112
- exception = _(proc { klass.setup_and_call :foo, [] }).must_raise(NoMethodError)
113
- _(exception.message).must_match(/^undefined method `foo' for/)
114
- end
115
- end
116
-
117
- describe "#setup_and_call" do
118
- it "looks up instance methods in all builders" do
119
- expect(builder = Object.new).to receive(:setup_instance_method).with("foo").and_return "foo"
120
- klass = Class.new GirFFI::ClassBase
121
- klass.const_set :GIR_FFI_BUILDER, builder
122
-
123
- expect(sub_builder = Object.new).to receive(:setup_instance_method).with("foo").and_return nil
124
- sub_klass = Class.new klass do
125
- def foo; end
126
-
127
- def initialize; end
128
- end
129
- sub_klass.const_set :GIR_FFI_BUILDER, sub_builder
130
-
131
- obj = sub_klass.new
132
-
133
- obj.setup_and_call :foo, []
134
- end
135
-
136
- it "calls the method given by the result of .setup_instance_method" do
137
- expect(builder = Object.new).to receive(:setup_instance_method).with("foo").and_return "bar"
138
- klass = Class.new GirFFI::ClassBase do
139
- def bar
140
- "correct-result"
141
- end
142
-
143
- def initialize; end
144
- end
145
- klass.const_set :GIR_FFI_BUILDER, builder
146
-
147
- obj = klass.new
148
-
149
- result = obj.setup_and_call :foo, []
150
- _(result).must_equal "correct-result"
151
- end
152
-
153
- it "raises a sensible error if the method is not found" do
154
- expect(builder = Object.new).to receive(:setup_instance_method).with("foo").and_return nil
155
- klass = Class.new GirFFI::ClassBase do
156
- def initialize; end
157
- end
158
- klass.const_set :GIR_FFI_BUILDER, builder
159
-
160
- obj = klass.new
161
-
162
- exception = _(proc { obj.setup_and_call :foo, [] }).must_raise(NoMethodError)
163
- _(exception.message).must_match(/^undefined method `foo' for/)
164
- end
165
- end
166
- end