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,6 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "gir_ffi_test_helper"
4
-
5
- describe GirFFI::Builders::BaseArgumentBuilder do
6
- end
@@ -1,126 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "gir_ffi_test_helper"
4
-
5
- describe GirFFI::Builders::CallbackArgumentBuilder do
6
- let(:var_gen) { GirFFI::VariableNameGenerator.new }
7
- let(:builder) { GirFFI::Builders::CallbackArgumentBuilder.new(var_gen, arg_info) }
8
-
9
- describe "for an argument with direction :out" do
10
- describe "for :zero_terminated" do
11
- let(:vfunc_info) do
12
- get_vfunc_introspection_data("GIMarshallingTests", "Object",
13
- "vfunc_array_out_parameter")
14
- end
15
- let(:arg_info) { vfunc_info.args[0] }
16
-
17
- it "has the correct value for #pre_conversion" do
18
- _(builder.pre_conversion).must_equal ["_v1 = a"]
19
- end
20
-
21
- it "has the correct value for #post_conversion" do
22
- _(builder.post_conversion).must_equal ["_v1.put_pointer 0, GirFFI::ZeroTerminated.from(:gfloat, _v2)"]
23
- end
24
- end
25
-
26
- describe "when the argument is allocated by us, the callee" do
27
- let(:vfunc_info) do
28
- get_vfunc_introspection_data("GIMarshallingTests", "Object",
29
- "method_int8_arg_and_out_callee")
30
- end
31
-
32
- let(:arg_info) { vfunc_info.args[1] }
33
-
34
- it "has the correct value for #pre_conversion" do
35
- _(builder.pre_conversion).must_equal ["_v1 = FFI::MemoryPointer.new(:int8).tap { |ptr| out.put_pointer 0, ptr }"]
36
- end
37
-
38
- it "has the correct value for #post_conversion" do
39
- _(builder.post_conversion).must_equal ["_v1.put_int8 0, _v2"]
40
- end
41
- end
42
- end
43
-
44
- describe "for an argument with direction :error" do
45
- let(:arg_info) { GirFFI::ErrorArgumentInfo.new }
46
-
47
- it "sets up a rescueing block in #pre_conversion" do
48
- _(builder.pre_conversion).must_equal [
49
- "_v1 = _error",
50
- "begin"
51
- ]
52
- end
53
-
54
- it "converts any exceptions to GLib::Error in #post_conversion" do
55
- _(builder.post_conversion).must_equal [
56
- "rescue => _v1",
57
- "_v2.put_pointer 0, GLib::Error.from(_v1)",
58
- "end"
59
- ]
60
- end
61
- end
62
-
63
- describe "for an argument with direction :inout" do
64
- let(:callback_info) do
65
- get_introspection_data("Regress",
66
- "TestCallbackArrayInOut")
67
- end
68
- let(:array_arg_info) { callback_info.args[0] }
69
- let(:array_arg_builder) do
70
- GirFFI::Builders::CallbackArgumentBuilder.new(var_gen, array_arg_info)
71
- end
72
- let(:length_arg_info) { callback_info.args[1] }
73
- let(:length_arg_builder) do
74
- GirFFI::Builders::CallbackArgumentBuilder.new(var_gen, length_arg_info)
75
- end
76
-
77
- before do
78
- length_arg_builder.array_arg = array_arg_builder
79
- array_arg_builder.length_arg = length_arg_builder
80
- end
81
-
82
- describe "for arrays with a length argument" do
83
- it "provides a call argument name" do
84
- _(array_arg_builder.call_argument_name).must_equal "_v1"
85
- end
86
-
87
- it "provides a capture variable name" do
88
- _(array_arg_builder.capture_variable_name).must_equal "_v1"
89
- end
90
-
91
- it "has the correct value for #pre_conversion" do
92
- _(array_arg_builder.pre_conversion)
93
- .must_equal ["_v1 = ints",
94
- "_v2 = GirFFI::SizedArray.wrap(:gint32, _v3, _v1.get_pointer(0))"]
95
- end
96
-
97
- it "has the correct value for #post_conversion" do
98
- array_arg_builder.pre_conversion
99
- _(array_arg_builder.post_conversion)
100
- .must_equal ["_v1.put_pointer 0, GirFFI::SizedArray.from(:gint32, -1, _v4)"]
101
- end
102
- end
103
-
104
- describe "for an array length argument" do
105
- it "does not provide a call argument name" do
106
- _(length_arg_builder.call_argument_name).must_be_nil
107
- end
108
-
109
- it "does not provide a capture variable name" do
110
- _(length_arg_builder.capture_variable_name).must_be_nil
111
- end
112
-
113
- it "has the correct value for #pre_conversion" do
114
- _(length_arg_builder.pre_conversion)
115
- .must_equal ["_v1 = length",
116
- "_v2 = _v1.get_int32(0)"]
117
- end
118
-
119
- it "has the correct value for #post_conversion" do
120
- length_arg_builder.pre_conversion
121
- _(length_arg_builder.post_conversion)
122
- .must_equal ["_v1.put_int32 0, _v3.length"]
123
- end
124
- end
125
- end
126
- end
@@ -1,117 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "gir_ffi_test_helper"
4
-
5
- describe GirFFI::Builders::CallbackBuilder do
6
- let(:builder) { GirFFI::Builders::CallbackBuilder.new callback_info }
7
-
8
- describe "#mapping_method_definition" do
9
- describe "for a callback with arguments and return value" do
10
- let(:callback_info) { get_introspection_data "Regress", "TestCallbackFull" }
11
- it "returns a valid mapping method" do
12
- expected = <<~CODE
13
- def self.call_with_argument_mapping(_proc, foo, bar, path)
14
- _v1 = foo
15
- _v2 = bar
16
- _v3 = path.to_utf8
17
- _v4 = _proc.call(_v1, _v2, _v3)
18
- return _v4
19
- end
20
- CODE
21
-
22
- _(builder.mapping_method_definition).must_equal expected
23
- end
24
- end
25
-
26
- describe "for a callback with no arguments or return value" do
27
- let(:callback_info) { get_introspection_data "Regress", "TestSimpleCallback" }
28
- it "returns a valid mapping method" do
29
- expected = <<~CODE
30
- def self.call_with_argument_mapping(_proc)
31
- _proc.call()
32
- end
33
- CODE
34
-
35
- _(builder.mapping_method_definition).must_equal expected
36
- end
37
- end
38
-
39
- describe "for a callback with a closure argument" do
40
- let(:callback_info) { get_introspection_data "Regress", "TestCallbackUserData" }
41
- it "returns a valid mapping method" do
42
- expected = <<~CODE
43
- def self.call_with_argument_mapping(_proc, user_data)
44
- _v1 = GirFFI::ArgHelper::OBJECT_STORE.fetch(user_data)
45
- _v2 = _proc.call(_v1)
46
- return _v2
47
- end
48
- CODE
49
-
50
- _(builder.mapping_method_definition).must_equal expected
51
- end
52
- end
53
-
54
- describe "for a callback with one out argument" do
55
- let(:callback_info) do
56
- get_introspection_data("GIMarshallingTests",
57
- "CallbackOneOutParameter")
58
- end
59
- it "returns a valid mapping method" do
60
- expected = <<~CODE
61
- def self.call_with_argument_mapping(_proc, a)
62
- _v1 = a
63
- _v2 = _proc.call()
64
- _v1.put_float 0, _v2
65
- end
66
- CODE
67
-
68
- _(builder.mapping_method_definition).must_equal expected
69
- end
70
- end
71
-
72
- describe "for a callback with an inout array argument" do
73
- let(:callback_info) do
74
- get_introspection_data("Regress",
75
- "TestCallbackArrayInOut")
76
- end
77
- it "returns a valid mapping method" do
78
- expected = <<~CODE
79
- def self.call_with_argument_mapping(_proc, ints, length)
80
- _v1 = length
81
- _v2 = _v1.get_int32(0)
82
- _v3 = ints
83
- _v4 = GirFFI::SizedArray.wrap(:gint32, _v2, _v3.get_pointer(0))
84
- _v5 = _proc.call(_v4)
85
- _v1.put_int32 0, _v5.length
86
- _v3.put_pointer 0, GirFFI::SizedArray.from(:gint32, -1, _v5)
87
- end
88
- CODE
89
-
90
- _(builder.mapping_method_definition).must_equal expected
91
- end
92
- end
93
-
94
- describe "for a callback with a value in argument" do
95
- let(:field_info) do
96
- get_field_introspection_data("GObject",
97
- "ObjectClass", "get_property")
98
- end
99
- let(:callback_info) do
100
- field_info.field_type.interface
101
- end
102
- it "returns a valid mapping method" do
103
- expected = <<~CODE
104
- def self.call_with_argument_mapping(_proc, object, property_id, value, pspec)
105
- _v1 = GObject::Object.wrap(object)
106
- _v2 = property_id
107
- _v3 = GObject::Value.wrap(value)
108
- _v4 = GObject::ParamSpec.wrap(pspec)
109
- _proc.call(_v1, _v2, _v3, _v4)
110
- end
111
- CODE
112
-
113
- _(builder.mapping_method_definition).must_equal expected
114
- end
115
- end
116
- end
117
- end
@@ -1,81 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "gir_ffi_test_helper"
4
-
5
- describe GirFFI::Builders::CallbackReturnValueBuilder do
6
- let(:var_gen) { GirFFI::VariableNameGenerator.new }
7
- let(:return_value_info) { GirFFI::ReturnValueInfo.new(type_info, ownership_transfer, false) }
8
- let(:type_info) { callback_info.return_type }
9
- let(:ownership_transfer) { callback_info.caller_owns }
10
- let(:builder) do
11
- GirFFI::Builders::CallbackReturnValueBuilder.new(var_gen,
12
- return_value_info)
13
- end
14
-
15
- describe "for :gint32" do
16
- let(:callback_info) { get_introspection_data("GIMarshallingTests", "CallbackIntInt") }
17
-
18
- it "has no statements in #post_conversion" do
19
- _(builder.post_conversion).must_equal []
20
- end
21
-
22
- it "returns the result of the callback directly" do
23
- _(builder.capture_variable_name).must_equal "_v1"
24
- _(builder.return_value_name).must_equal "_v1"
25
- end
26
- end
27
-
28
- describe "for :void" do
29
- let(:callback_info) do
30
- get_introspection_data("GIMarshallingTests",
31
- "CallbackMultipleOutParameters")
32
- end
33
-
34
- it "has no statements in #post_conversion" do
35
- _(builder.post_conversion).must_equal []
36
- end
37
-
38
- it "returns nothing" do
39
- _(builder.capture_variable_name).must_be_nil
40
- _(builder.return_value_name).must_be_nil
41
- end
42
- end
43
-
44
- describe "for :enum" do
45
- let(:callback_info) do
46
- get_vfunc_introspection_data("GIMarshallingTests",
47
- "Object",
48
- "vfunc_return_enum")
49
- end
50
-
51
- it "converts the result" do
52
- # Ensure variable names are generated in order
53
- _(builder.capture_variable_name).must_equal "_v1"
54
- _(builder.post_conversion).must_equal ["_v2 = GIMarshallingTests::Enum.to_int(_v1)"]
55
- end
56
-
57
- it "returns the result of the conversion" do
58
- _(builder.capture_variable_name).must_equal "_v1"
59
- _(builder.return_value_name).must_equal "_v2"
60
- end
61
- end
62
-
63
- describe "for :object with full transfer" do
64
- let(:callback_info) do
65
- get_vfunc_introspection_data("GIMarshallingTests",
66
- "Object",
67
- "vfunc_return_object_transfer_full")
68
- end
69
-
70
- it "increases the refcount of the result and converts it to a pointer" do
71
- # Ensure variable names are generated in order
72
- _(builder.capture_variable_name).must_equal "_v1"
73
- _(builder.post_conversion).must_equal ["_v1.ref", "_v2 = GObject::Object.from(_v1).to_ptr"]
74
- end
75
-
76
- it "returns the result of the conversion" do
77
- _(builder.capture_variable_name).must_equal "_v1"
78
- _(builder.return_value_name).must_equal "_v2"
79
- end
80
- end
81
- end
@@ -1,6 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "gir_ffi_test_helper"
4
-
5
- describe GirFFI::Builders::ConstantBuilder do
6
- end
@@ -1,37 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "gir_ffi_test_helper"
4
-
5
- describe GirFFI::Builders::ConstructorBuilder do
6
- describe "#method_definition" do
7
- let(:builder) { GirFFI::Builders::ConstructorBuilder.new function_info }
8
- let(:code) { builder.method_definition }
9
-
10
- describe "for constructors with the default name" do
11
- let(:function_info) { get_method_introspection_data "Regress", "TestObj", "new" }
12
- it "builds a constructor" do
13
- _(code).must_equal <<~CODE
14
- def self.new(*args, &block)
15
- obj = allocate
16
- obj.__send__ :initialize, *args, &block
17
- obj
18
- end
19
- CODE
20
- end
21
- end
22
-
23
- describe "for constructors with a custom name" do
24
- let(:function_info) { get_method_introspection_data "Regress", "TestObj", "new_from_file" }
25
- it "builds a custom constructor" do
26
- _(code).must_equal <<~CODE
27
- def self.new_from_file(*args, &block)
28
- raise NoMethodError unless self == Regress::TestObj
29
- obj = allocate
30
- obj.__send__ :initialize_from_file, *args, &block
31
- obj
32
- end
33
- CODE
34
- end
35
- end
36
- end
37
- end
@@ -1,23 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "gir_ffi_test_helper"
4
-
5
- describe GirFFI::Builders::EnumBuilder do
6
- describe "#build_class" do
7
- let(:info) { get_introspection_data "Regress", "TestEnum" }
8
- let(:builder) { GirFFI::Builders::EnumBuilder.new info }
9
-
10
- it "makes the created type know its proper name" do
11
- enum = builder.build_class
12
- _(enum.inspect).must_equal "Regress::TestEnum"
13
- end
14
-
15
- it "adds constants for the values" do
16
- enum = builder.build_class
17
- _(enum::VALUE1).must_equal enum[:value1]
18
- _(enum::VALUE2).must_equal enum[:value2]
19
- _(enum::VALUE3).must_equal enum[:value3]
20
- _(enum::VALUE4).must_equal enum[:value4]
21
- end
22
- end
23
- end
@@ -1,134 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "gir_ffi_test_helper"
4
-
5
- describe GirFFI::Builders::FieldBuilder do
6
- let(:target_class) { "dummy" }
7
- let(:instance) { GirFFI::Builders::FieldBuilder.new field_info, target_class }
8
-
9
- describe "for a field of type :gint8 with an offset" do
10
- let(:field_info) { get_field_introspection_data "Regress", "TestSimpleBoxedA", "some_int8" }
11
- it "creates the right getter method" do
12
- expected = <<~CODE
13
- def some_int8
14
- _v1 = @struct.to_ptr
15
- _v2 = _v1.get_int8(#{field_info.offset})
16
- _v2
17
- end
18
- CODE
19
- _(instance.getter_def).must_equal expected
20
- end
21
-
22
- it "creates the right setter method" do
23
- expected = <<~CODE
24
- def some_int8= value
25
- _v1 = @struct.to_ptr
26
- _v2 = value
27
- _v1.put_int8 #{field_info.offset}, _v2
28
- end
29
- CODE
30
- _(instance.setter_def).must_equal expected
31
- end
32
- end
33
-
34
- describe "for a field of type :struct" do
35
- let(:field_info) { get_field_introspection_data "Regress", "TestBoxed", "nested_a" }
36
- it "creates the right getter method" do
37
- expected = <<~CODE
38
- def nested_a
39
- _v1 = @struct.to_ptr
40
- _v2 = Regress::TestSimpleBoxedA.get_value_from_pointer(_v1, #{field_info.offset})
41
- _v3 = Regress::TestSimpleBoxedA.wrap(_v2)
42
- _v3
43
- end
44
- CODE
45
- _(instance.getter_def).must_equal expected
46
- end
47
-
48
- it "creates the right setter method" do
49
- expected = <<~CODE
50
- def nested_a= value
51
- _v1 = @struct.to_ptr
52
- _v2 = Regress::TestSimpleBoxedA.copy_from(value)
53
- Regress::TestSimpleBoxedA.copy_value_to_pointer(_v2, _v1, #{field_info.offset})
54
- end
55
- CODE
56
- _(instance.setter_def).must_equal expected
57
- end
58
- end
59
-
60
- describe "for a field of type :enum" do
61
- let(:field_info) { get_field_introspection_data "Regress", "TestStructA", "some_enum" }
62
- it "creates the right getter method" do
63
- expected = <<~CODE
64
- def some_enum
65
- _v1 = @struct.to_ptr
66
- _v2 = Regress::TestEnum.get_value_from_pointer(_v1, #{field_info.offset})
67
- _v2
68
- end
69
- CODE
70
- _(instance.getter_def).must_equal expected
71
- end
72
- end
73
-
74
- describe "for an inline fixed-size array field" do
75
- let(:field_info) { get_field_introspection_data "Regress", "TestStructE", "some_union" }
76
- it "creates the right getter method" do
77
- expected = <<~CODE
78
- def some_union
79
- _v1 = @struct.to_ptr
80
- _v2 = GirFFI::SizedArray.get_value_from_pointer(_v1, #{field_info.offset})
81
- _v3 = GirFFI::SizedArray.wrap(Regress::TestStructE__some_union__union, 2, _v2)
82
- _v3
83
- end
84
- CODE
85
- _(instance.getter_def).must_equal expected
86
- end
87
-
88
- it "creates the right setter method" do
89
- expected = <<~CODE
90
- def some_union= value
91
- _v1 = @struct.to_ptr
92
- GirFFI::ArgHelper.check_fixed_array_size 2, value, \"value\"
93
- _v2 = GirFFI::SizedArray.copy_from(Regress::TestStructE__some_union__union, 2, value)
94
- GirFFI::SizedArray.copy_value_to_pointer(_v2, _v1, #{field_info.offset})
95
- end
96
- CODE
97
- _(instance.setter_def).must_equal expected
98
- end
99
- end
100
-
101
- describe "for a field of type :callback" do
102
- let(:field_info) { get_field_introspection_data "GObject", "TypeInfo", "class_init" }
103
- it "creates the right setter method" do
104
- expected = <<~CODE
105
- def class_init= value
106
- _v1 = @struct.to_ptr
107
- _v2 = GObject::ClassInitFunc.from(value)
108
- GObject::ClassInitFunc.copy_value_to_pointer(_v2, _v1, #{field_info.offset})
109
- end
110
- CODE
111
- _(instance.setter_def).must_equal expected
112
- end
113
- end
114
-
115
- describe "for a field with a related array length field" do
116
- let(:field_info) { get_field_introspection_data "GObject", "SignalQuery", "param_types" }
117
- let(:n_params_field_info) { get_field_introspection_data "GObject", "SignalQuery", "n_params" }
118
-
119
- it "creates the right getter method" do
120
- skip if field_info.field_type.array_length < 0
121
- expected = <<~CODE
122
- def param_types
123
- _v1 = @struct.to_ptr
124
- _v2 = _v1.get_uint32(#{n_params_field_info.offset})
125
- _v3 = @struct.to_ptr
126
- _v4 = _v3.get_pointer(#{field_info.offset})
127
- _v5 = GirFFI::SizedArray.wrap(:GType, _v2, _v4)
128
- _v5
129
- end
130
- CODE
131
- _(instance.getter_def).must_equal expected
132
- end
133
- end
134
- end