gir_ffi 0.15.3 → 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 (183) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +15 -0
  3. data/README.md +5 -6
  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/destroy_notify.rb +2 -2
  10. data/lib/ffi-glib/hash_table.rb +1 -2
  11. data/lib/ffi-glib/list.rb +11 -5
  12. data/lib/ffi-glib/list_methods.rb +12 -0
  13. data/lib/ffi-glib/s_list.rb +10 -4
  14. data/lib/ffi-gobject.rb +0 -3
  15. data/lib/ffi-gobject/object.rb +77 -73
  16. data/lib/ffi-gobject/object_class.rb +1 -1
  17. data/lib/ffi-gobject/value.rb +107 -108
  18. data/lib/ffi-gobject_introspection/i_base_info.rb +20 -19
  19. data/lib/gir_ffi-base/gobject/lib.rb +4 -0
  20. data/lib/gir_ffi/array_element_convertor.rb +1 -2
  21. data/lib/gir_ffi/boxed_base.rb +1 -5
  22. data/lib/gir_ffi/builder.rb +1 -1
  23. data/lib/gir_ffi/builder_helper.rb +7 -4
  24. data/lib/gir_ffi/builders/base_argument_builder.rb +2 -2
  25. data/lib/gir_ffi/builders/base_method_builder.rb +1 -1
  26. data/lib/gir_ffi/builders/base_type_builder.rb +1 -1
  27. data/lib/gir_ffi/builders/callback_argument_builder.rb +2 -0
  28. data/lib/gir_ffi/builders/callback_builder.rb +14 -12
  29. data/lib/gir_ffi/builders/callback_return_value_builder.rb +4 -6
  30. data/lib/gir_ffi/builders/class_struct_builder.rb +24 -0
  31. data/lib/gir_ffi/builders/enum_builder.rb +3 -3
  32. data/lib/gir_ffi/builders/interface_builder.rb +3 -1
  33. data/lib/gir_ffi/builders/mapping_method_builder.rb +1 -1
  34. data/lib/gir_ffi/builders/marshalling_method_builder.rb +5 -2
  35. data/lib/gir_ffi/builders/method_template.rb +4 -4
  36. data/lib/gir_ffi/builders/null_argument_builder.rb +0 -2
  37. data/lib/gir_ffi/builders/null_return_value_builder.rb +0 -2
  38. data/lib/gir_ffi/builders/object_builder.rb +16 -6
  39. data/lib/gir_ffi/builders/property_builder.rb +1 -2
  40. data/lib/gir_ffi/builders/signal_closure_builder.rb +3 -5
  41. data/lib/gir_ffi/builders/struct_builder.rb +5 -5
  42. data/lib/gir_ffi/builders/user_defined_builder.rb +8 -1
  43. data/lib/gir_ffi/builders/vfunc_argument_builder.rb +1 -1
  44. data/lib/gir_ffi/callback_base.rb +3 -3
  45. data/lib/gir_ffi/core.rb +17 -2
  46. data/lib/gir_ffi/glib_error.rb +1 -2
  47. data/lib/gir_ffi/in_pointer.rb +7 -0
  48. data/lib/gir_ffi/object_base.rb +27 -0
  49. data/lib/gir_ffi/return_value_info.rb +1 -2
  50. data/lib/gir_ffi/struct_base.rb +1 -9
  51. data/lib/gir_ffi/struct_like_base.rb +9 -5
  52. data/lib/gir_ffi/unintrospectable_type_info.rb +1 -1
  53. data/lib/gir_ffi/union_base.rb +1 -9
  54. data/lib/gir_ffi/user_defined_object_info.rb +3 -2
  55. data/lib/gir_ffi/version.rb +1 -1
  56. data/lib/gir_ffi/vfunc_implementation.rb +1 -0
  57. metadata +86 -136
  58. data/Gemfile +0 -14
  59. data/Rakefile +0 -9
  60. data/tasks/test.rake +0 -204
  61. data/test/base_test_helper.rb +0 -70
  62. data/test/ffi-glib/array_test.rb +0 -203
  63. data/test/ffi-glib/byte_array_test.rb +0 -28
  64. data/test/ffi-glib/bytes_test.rb +0 -61
  65. data/test/ffi-glib/closure_test.rb +0 -38
  66. data/test/ffi-glib/destroy_notify_test.rb +0 -18
  67. data/test/ffi-glib/hash_table_test.rb +0 -68
  68. data/test/ffi-glib/list_test.rb +0 -86
  69. data/test/ffi-glib/main_loop_test.rb +0 -53
  70. data/test/ffi-glib/ptr_array_test.rb +0 -112
  71. data/test/ffi-glib/ruby_closure_test.rb +0 -62
  72. data/test/ffi-glib/s_list_test.rb +0 -76
  73. data/test/ffi-glib/strv_test.rb +0 -60
  74. data/test/ffi-glib/variant_test.rb +0 -12
  75. data/test/ffi-gobject/gobject_test.rb +0 -76
  76. data/test/ffi-gobject/object_class_test.rb +0 -31
  77. data/test/ffi-gobject/object_test.rb +0 -123
  78. data/test/ffi-gobject/param_spec_test.rb +0 -32
  79. data/test/ffi-gobject/value_test.rb +0 -390
  80. data/test/ffi-gobject_introspection/gobject_type_init_test.rb +0 -26
  81. data/test/ffi-gobject_introspection/i_base_info_test.rb +0 -52
  82. data/test/ffi-gobject_introspection/i_constant_info_test.rb +0 -29
  83. data/test/ffi-gobject_introspection/i_enum_info_test.rb +0 -18
  84. data/test/ffi-gobject_introspection/i_function_info_test.rb +0 -6
  85. data/test/ffi-gobject_introspection/i_interface_info_test.rb +0 -23
  86. data/test/ffi-gobject_introspection/i_object_info_test.rb +0 -49
  87. data/test/ffi-gobject_introspection/i_property_info_test.rb +0 -47
  88. data/test/ffi-gobject_introspection/i_registered_type_info_test.rb +0 -27
  89. data/test/ffi-gobject_introspection/i_repository_test.rb +0 -81
  90. data/test/ffi-gobject_introspection/i_struct_info_test.rb +0 -23
  91. data/test/ffi-gobject_introspection/i_type_info_test.rb +0 -30
  92. data/test/ffi-gobject_introspection/i_union_info_test.rb +0 -17
  93. data/test/ffi-gobject_introspection/i_vfunc_info_test.rb +0 -41
  94. data/test/ffi-gobject_introspection/lib_test.rb +0 -13
  95. data/test/ffi-gobject_introspection/strv_test.rb +0 -46
  96. data/test/ffi-gobject_test.rb +0 -153
  97. data/test/gir_ffi/allocation_helper_test.rb +0 -36
  98. data/test/gir_ffi/arg_helper_test.rb +0 -146
  99. data/test/gir_ffi/boolean_test.rb +0 -43
  100. data/test/gir_ffi/boxed_base_test.rb +0 -65
  101. data/test/gir_ffi/builder_test.rb +0 -168
  102. data/test/gir_ffi/builders/argument_builder_test.rb +0 -691
  103. data/test/gir_ffi/builders/base_argument_builder_test.rb +0 -6
  104. data/test/gir_ffi/builders/callback_argument_builder_test.rb +0 -130
  105. data/test/gir_ffi/builders/callback_builder_test.rb +0 -117
  106. data/test/gir_ffi/builders/callback_return_value_builder_test.rb +0 -84
  107. data/test/gir_ffi/builders/constant_builder_test.rb +0 -6
  108. data/test/gir_ffi/builders/constructor_builder_test.rb +0 -39
  109. data/test/gir_ffi/builders/enum_builder_test.rb +0 -23
  110. data/test/gir_ffi/builders/field_builder_test.rb +0 -140
  111. data/test/gir_ffi/builders/function_builder_test.rb +0 -570
  112. data/test/gir_ffi/builders/initializer_builder_test.rb +0 -56
  113. data/test/gir_ffi/builders/interface_builder_test.rb +0 -32
  114. data/test/gir_ffi/builders/module_builder_test.rb +0 -43
  115. data/test/gir_ffi/builders/object_builder_test.rb +0 -98
  116. data/test/gir_ffi/builders/property_builder_test.rb +0 -161
  117. data/test/gir_ffi/builders/registered_type_builder_test.rb +0 -54
  118. data/test/gir_ffi/builders/return_value_builder_test.rb +0 -444
  119. data/test/gir_ffi/builders/signal_closure_builder_test.rb +0 -199
  120. data/test/gir_ffi/builders/struct_builder_test.rb +0 -96
  121. data/test/gir_ffi/builders/unintrospectable_boxed_builder_test.rb +0 -29
  122. data/test/gir_ffi/builders/unintrospectable_builder_test.rb +0 -84
  123. data/test/gir_ffi/builders/union_builder_test.rb +0 -28
  124. data/test/gir_ffi/builders/user_defined_builder_test.rb +0 -528
  125. data/test/gir_ffi/builders/vfunc_argument_builder_test.rb +0 -107
  126. data/test/gir_ffi/builders/vfunc_builder_test.rb +0 -245
  127. data/test/gir_ffi/callback_base_test.rb +0 -22
  128. data/test/gir_ffi/class_base_test.rb +0 -171
  129. data/test/gir_ffi/core_test.rb +0 -99
  130. data/test/gir_ffi/enum_base_test.rb +0 -43
  131. data/test/gir_ffi/error_type_info_test.rb +0 -50
  132. data/test/gir_ffi/ffi_ext/pointer_test.rb +0 -22
  133. data/test/gir_ffi/g_type_test.rb +0 -31
  134. data/test/gir_ffi/in_pointer_test.rb +0 -203
  135. data/test/gir_ffi/info_ext/i_callable_info_test.rb +0 -26
  136. data/test/gir_ffi/info_ext/i_callback_info_test.rb +0 -22
  137. data/test/gir_ffi/info_ext/i_field_info_test.rb +0 -37
  138. data/test/gir_ffi/info_ext/i_function_info_test.rb +0 -74
  139. data/test/gir_ffi/info_ext/i_signal_info_test.rb +0 -32
  140. data/test/gir_ffi/info_ext/i_type_info_test.rb +0 -712
  141. data/test/gir_ffi/info_ext/i_unresolved_info_test.rb +0 -19
  142. data/test/gir_ffi/info_ext/safe_constant_name_test.rb +0 -26
  143. data/test/gir_ffi/info_ext/safe_function_name_test.rb +0 -26
  144. data/test/gir_ffi/interface_base_test.rb +0 -20
  145. data/test/gir_ffi/method_stubber_test.rb +0 -67
  146. data/test/gir_ffi/object_base_test.rb +0 -64
  147. data/test/gir_ffi/object_store_test.rb +0 -41
  148. data/test/gir_ffi/receiver_argument_info_test.rb +0 -33
  149. data/test/gir_ffi/sized_array_test.rb +0 -206
  150. data/test/gir_ffi/struct_base_test.rb +0 -23
  151. data/test/gir_ffi/struct_like_base_test.rb +0 -167
  152. data/test/gir_ffi/type_map_test.rb +0 -17
  153. data/test/gir_ffi/unintrospectable_type_info_test.rb +0 -121
  154. data/test/gir_ffi/union_base_test.rb +0 -23
  155. data/test/gir_ffi/user_defined_object_info_test.rb +0 -119
  156. data/test/gir_ffi/user_defined_property_info_test.rb +0 -39
  157. data/test/gir_ffi/variable_name_generator_test.rb +0 -18
  158. data/test/gir_ffi/version_test.rb +0 -9
  159. data/test/gir_ffi/zero_terminated_test.rb +0 -108
  160. data/test/gir_ffi_test_helper.rb +0 -84
  161. data/test/integration/callback_exceptions_test.rb +0 -59
  162. data/test/integration/derived_classes_test.rb +0 -54
  163. data/test/integration/generated_everything_test.rb +0 -453
  164. data/test/integration/generated_gimarshallingtests_test.rb +0 -3109
  165. data/test/integration/generated_gio_test.rb +0 -116
  166. data/test/integration/generated_glib_test.rb +0 -10
  167. data/test/integration/generated_gobject_test.rb +0 -124
  168. data/test/integration/generated_gst_test.rb +0 -38
  169. data/test/integration/generated_gtk_source_test.rb +0 -21
  170. data/test/integration/generated_gtop_test.rb +0 -22
  171. data/test/integration/generated_pango_ft2_test.rb +0 -17
  172. data/test/integration/generated_pango_test.rb +0 -24
  173. data/test/integration/generated_regress_test.rb +0 -4076
  174. data/test/integration/generated_secret_test.rb +0 -14
  175. data/test/integration/generated_utility_test.rb +0 -174
  176. data/test/integration/generated_warnlib_test.rb +0 -45
  177. data/test/integration/method_lookup_test.rb +0 -34
  178. data/test/introspection_test_helper.rb +0 -94
  179. data/test/lib/Makefile.am +0 -110
  180. data/test/lib/autogen.sh +0 -4
  181. data/test/lib/configure.ac +0 -34
  182. data/test/lib/m4/jhflags.m4 +0 -21
  183. 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,130 +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)
23
- .must_equal ["_v1.put_pointer 0, GirFFI::ZeroTerminated.from(:gfloat, _v2)"]
24
- end
25
- end
26
-
27
- describe "when the argument is allocated by us, the callee" do
28
- let(:vfunc_info) do
29
- get_vfunc_introspection_data("GIMarshallingTests", "Object",
30
- "method_int8_arg_and_out_callee")
31
- end
32
-
33
- let(:arg_info) { vfunc_info.args[1] }
34
-
35
- it "has the correct value for #pre_conversion" do
36
- _(builder.pre_conversion)
37
- .must_equal [
38
- "_v1 = FFI::MemoryPointer.new(:int8).tap { |ptr| out.put_pointer 0, ptr }"
39
- ]
40
- end
41
-
42
- it "has the correct value for #post_conversion" do
43
- _(builder.post_conversion).must_equal ["_v1.put_int8 0, _v2"]
44
- end
45
- end
46
- end
47
-
48
- describe "for an argument with direction :error" do
49
- let(:arg_info) { GirFFI::ErrorArgumentInfo.new }
50
-
51
- it "sets up a rescueing block in #pre_conversion" do
52
- _(builder.pre_conversion).must_equal [
53
- "_v1 = _error",
54
- "begin"
55
- ]
56
- end
57
-
58
- it "converts any exceptions to GLib::Error in #post_conversion" do
59
- _(builder.post_conversion).must_equal [
60
- "rescue => _v1",
61
- "_v2.put_pointer 0, GLib::Error.from(_v1)",
62
- "end"
63
- ]
64
- end
65
- end
66
-
67
- describe "for an argument with direction :inout" do
68
- let(:callback_info) do
69
- get_introspection_data("Regress",
70
- "TestCallbackArrayInOut")
71
- end
72
- let(:array_arg_info) { callback_info.args[0] }
73
- let(:array_arg_builder) do
74
- GirFFI::Builders::CallbackArgumentBuilder.new(var_gen, array_arg_info)
75
- end
76
- let(:length_arg_info) { callback_info.args[1] }
77
- let(:length_arg_builder) do
78
- GirFFI::Builders::CallbackArgumentBuilder.new(var_gen, length_arg_info)
79
- end
80
-
81
- before do
82
- length_arg_builder.array_arg = array_arg_builder
83
- array_arg_builder.length_arg = length_arg_builder
84
- end
85
-
86
- describe "for arrays with a length argument" do
87
- it "provides a call argument name" do
88
- _(array_arg_builder.call_argument_name).must_equal "_v1"
89
- end
90
-
91
- it "provides a capture variable name" do
92
- _(array_arg_builder.capture_variable_name).must_equal "_v1"
93
- end
94
-
95
- it "has the correct value for #pre_conversion" do
96
- _(array_arg_builder.pre_conversion)
97
- .must_equal ["_v1 = ints",
98
- "_v2 = GirFFI::SizedArray.wrap(:gint32, _v3, _v1.get_pointer(0))"]
99
- end
100
-
101
- it "has the correct value for #post_conversion" do
102
- array_arg_builder.pre_conversion
103
- _(array_arg_builder.post_conversion)
104
- .must_equal ["_v1.put_pointer 0, GirFFI::SizedArray.from(:gint32, -1, _v4)"]
105
- end
106
- end
107
-
108
- describe "for an array length argument" do
109
- it "does not provide a call argument name" do
110
- _(length_arg_builder.call_argument_name).must_be_nil
111
- end
112
-
113
- it "does not provide a capture variable name" do
114
- _(length_arg_builder.capture_variable_name).must_be_nil
115
- end
116
-
117
- it "has the correct value for #pre_conversion" do
118
- _(length_arg_builder.pre_conversion)
119
- .must_equal ["_v1 = length",
120
- "_v2 = _v1.get_int32(0)"]
121
- end
122
-
123
- it "has the correct value for #post_conversion" do
124
- length_arg_builder.pre_conversion
125
- _(length_arg_builder.post_conversion)
126
- .must_equal ["_v1.put_int32 0, _v3.length"]
127
- end
128
- end
129
- end
130
- 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,84 +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) do
8
- GirFFI::ReturnValueInfo.new(type_info, ownership_transfer, false)
9
- end
10
- let(:type_info) { callback_info.return_type }
11
- let(:ownership_transfer) { callback_info.caller_owns }
12
- let(:builder) do
13
- GirFFI::Builders::CallbackReturnValueBuilder.new(var_gen,
14
- return_value_info)
15
- end
16
-
17
- describe "for :gint32" do
18
- let(:callback_info) { get_introspection_data("GIMarshallingTests", "CallbackIntInt") }
19
-
20
- it "has no statements in #post_conversion" do
21
- _(builder.post_conversion).must_equal []
22
- end
23
-
24
- it "returns the result of the callback directly" do
25
- _(builder.capture_variable_name).must_equal "_v1"
26
- _(builder.return_value_name).must_equal "_v1"
27
- end
28
- end
29
-
30
- describe "for :void" do
31
- let(:callback_info) do
32
- get_introspection_data("GIMarshallingTests",
33
- "CallbackMultipleOutParameters")
34
- end
35
-
36
- it "has no statements in #post_conversion" do
37
- _(builder.post_conversion).must_equal []
38
- end
39
-
40
- it "returns nothing" do
41
- _(builder.capture_variable_name).must_be_nil
42
- _(builder.return_value_name).must_be_nil
43
- end
44
- end
45
-
46
- describe "for :enum" do
47
- let(:callback_info) do
48
- get_vfunc_introspection_data("GIMarshallingTests",
49
- "Object",
50
- "vfunc_return_enum")
51
- end
52
-
53
- it "converts the result" do
54
- # Ensure variable names are generated in order
55
- _(builder.capture_variable_name).must_equal "_v1"
56
- _(builder.post_conversion).must_equal ["_v2 = GIMarshallingTests::Enum.to_int(_v1)"]
57
- end
58
-
59
- it "returns the result of the conversion" do
60
- _(builder.capture_variable_name).must_equal "_v1"
61
- _(builder.return_value_name).must_equal "_v2"
62
- end
63
- end
64
-
65
- describe "for :object with full transfer" do
66
- let(:callback_info) do
67
- get_vfunc_introspection_data("GIMarshallingTests",
68
- "Object",
69
- "vfunc_return_object_transfer_full")
70
- end
71
-
72
- it "increases the refcount of the result and converts it to a pointer" do
73
- # Ensure variable names are generated in order
74
- _(builder.capture_variable_name).must_equal "_v1"
75
- _(builder.post_conversion)
76
- .must_equal ["_v1.ref", "_v2 = GObject::Object.from(_v1).to_ptr"]
77
- end
78
-
79
- it "returns the result of the conversion" do
80
- _(builder.capture_variable_name).must_equal "_v1"
81
- _(builder.return_value_name).must_equal "_v2"
82
- end
83
- end
84
- 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,39 +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) do
25
- get_method_introspection_data "Regress", "TestObj", "new_from_file"
26
- end
27
- it "builds a custom constructor" do
28
- _(code).must_equal <<~CODE
29
- def self.new_from_file(*args, &block)
30
- raise NoMethodError unless self == Regress::TestObj
31
- obj = allocate
32
- obj.__send__ :initialize_from_file, *args, &block
33
- obj
34
- end
35
- CODE
36
- end
37
- end
38
- end
39
- 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,140 +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) do
11
- get_field_introspection_data "Regress", "TestSimpleBoxedA", "some_int8"
12
- end
13
- it "creates the right getter method" do
14
- expected = <<~CODE
15
- def some_int8
16
- _v1 = @struct.to_ptr
17
- _v2 = _v1.get_int8(#{field_info.offset})
18
- _v2
19
- end
20
- CODE
21
- _(instance.getter_def).must_equal expected
22
- end
23
-
24
- it "creates the right setter method" do
25
- expected = <<~CODE
26
- def some_int8= value
27
- _v1 = @struct.to_ptr
28
- _v2 = value
29
- _v1.put_int8 #{field_info.offset}, _v2
30
- end
31
- CODE
32
- _(instance.setter_def).must_equal expected
33
- end
34
- end
35
-
36
- describe "for a field of type :struct" do
37
- let(:field_info) { get_field_introspection_data "Regress", "TestBoxed", "nested_a" }
38
- it "creates the right getter method" do
39
- expected = <<~CODE
40
- def nested_a
41
- _v1 = @struct.to_ptr
42
- _v2 = Regress::TestSimpleBoxedA.get_value_from_pointer(_v1, #{field_info.offset})
43
- _v3 = Regress::TestSimpleBoxedA.wrap(_v2)
44
- _v3
45
- end
46
- CODE
47
- _(instance.getter_def).must_equal expected
48
- end
49
-
50
- it "creates the right setter method" do
51
- expected = <<~CODE
52
- def nested_a= value
53
- _v1 = @struct.to_ptr
54
- _v2 = Regress::TestSimpleBoxedA.copy_from(value)
55
- Regress::TestSimpleBoxedA.copy_value_to_pointer(_v2, _v1, #{field_info.offset})
56
- end
57
- CODE
58
- _(instance.setter_def).must_equal expected
59
- end
60
- end
61
-
62
- describe "for a field of type :enum" do
63
- let(:field_info) { get_field_introspection_data "Regress", "TestStructA", "some_enum" }
64
- it "creates the right getter method" do
65
- expected = <<~CODE
66
- def some_enum
67
- _v1 = @struct.to_ptr
68
- _v2 = Regress::TestEnum.get_value_from_pointer(_v1, #{field_info.offset})
69
- _v2
70
- end
71
- CODE
72
- _(instance.getter_def).must_equal expected
73
- end
74
- end
75
-
76
- describe "for an inline fixed-size array field" do
77
- let(:field_info) { get_field_introspection_data "Regress", "TestStructE", "some_union" }
78
- it "creates the right getter method" do
79
- expected = <<~CODE
80
- def some_union
81
- _v1 = @struct.to_ptr
82
- _v2 = GirFFI::SizedArray.get_value_from_pointer(_v1, #{field_info.offset})
83
- _v3 = GirFFI::SizedArray.wrap(Regress::TestStructE__some_union__union, 2, _v2)
84
- _v3
85
- end
86
- CODE
87
- _(instance.getter_def).must_equal expected
88
- end
89
-
90
- it "creates the right setter method" do
91
- expected = <<~CODE
92
- def some_union= value
93
- _v1 = @struct.to_ptr
94
- GirFFI::ArgHelper.check_fixed_array_size 2, value, \"value\"
95
- _v2 = GirFFI::SizedArray.copy_from(Regress::TestStructE__some_union__union, 2, value)
96
- GirFFI::SizedArray.copy_value_to_pointer(_v2, _v1, #{field_info.offset})
97
- end
98
- CODE
99
- _(instance.setter_def).must_equal expected
100
- end
101
- end
102
-
103
- describe "for a field of type :callback" do
104
- let(:field_info) { get_field_introspection_data "GObject", "TypeInfo", "class_init" }
105
- it "creates the right setter method" do
106
- expected = <<~CODE
107
- def class_init= value
108
- _v1 = @struct.to_ptr
109
- _v2 = GObject::ClassInitFunc.from(value)
110
- GObject::ClassInitFunc.copy_value_to_pointer(_v2, _v1, #{field_info.offset})
111
- end
112
- CODE
113
- _(instance.setter_def).must_equal expected
114
- end
115
- end
116
-
117
- describe "for a field with a related array length field" do
118
- let(:field_info) do
119
- get_field_introspection_data "GObject", "SignalQuery", "param_types"
120
- end
121
- let(:n_params_field_info) do
122
- get_field_introspection_data "GObject", "SignalQuery", "n_params"
123
- end
124
-
125
- it "creates the right getter method" do
126
- skip if field_info.field_type.array_length < 0
127
- expected = <<~CODE
128
- def param_types
129
- _v1 = @struct.to_ptr
130
- _v2 = _v1.get_uint32(#{n_params_field_info.offset})
131
- _v3 = @struct.to_ptr
132
- _v4 = _v3.get_pointer(#{field_info.offset})
133
- _v5 = GirFFI::SizedArray.wrap(:GType, _v2, _v4)
134
- _v5
135
- end
136
- CODE
137
- _(instance.getter_def).must_equal expected
138
- end
139
- end
140
- end