gir_ffi 0.15.1 → 0.15.6

Sign up to get free protection for your applications and to get access to all the features.
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,197 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "gir_ffi_test_helper"
4
-
5
- describe GirFFI::Builders::SignalClosureBuilder do
6
- let(:builder) { GirFFI::Builders::SignalClosureBuilder.new signal_info }
7
-
8
- describe "#build_class" do
9
- let(:signal_info) do
10
- get_signal_introspection_data "Regress", "TestObj", "test"
11
- end
12
-
13
- it "builds a descendant of RubyClosure" do
14
- klass = builder.build_class
15
- _(klass.superclass).must_equal GObject::RubyClosure
16
- end
17
- end
18
-
19
- describe "#marshaller_definition" do
20
- describe "for a signal with no arguments or return value" do
21
- let(:signal_info) do
22
- get_signal_introspection_data "Regress", "TestObj", "test"
23
- end
24
-
25
- it "returns a valid marshaller converting only the receiver" do
26
- expected = <<~CODE
27
- def self.marshaller(closure, return_value, param_values, _invocation_hint, _marshal_data)
28
- _instance = param_values.first.get_value_plain
29
- _v1 = _instance
30
- wrap(closure.to_ptr).invoke_block(_v1)
31
- end
32
- CODE
33
-
34
- _(builder.marshaller_definition).must_equal expected
35
- end
36
- end
37
-
38
- describe "for a signal with an argument and a return value" do
39
- let(:signal_info) do
40
- get_signal_introspection_data "Regress", "TestObj", "sig-with-int64-prop"
41
- end
42
-
43
- it "returns a valid mapping method" do
44
- expected = <<~CODE
45
- def self.marshaller(closure, return_value, param_values, _invocation_hint, _marshal_data)
46
- _instance, i = param_values.map(&:get_value_plain)
47
- _v1 = _instance
48
- _v2 = i
49
- _v3 = wrap(closure.to_ptr).invoke_block(_v1, _v2)
50
- return_value.set_value _v3
51
- end
52
- CODE
53
-
54
- _(builder.marshaller_definition).must_equal expected
55
- end
56
- end
57
-
58
- describe "for a signal with an enum argument" do
59
- let(:signal_info) do
60
- get_signal_introspection_data "Gio", "MountOperation", "reply"
61
- end
62
-
63
- it "returns a valid mapping method" do
64
- expected = <<~CODE
65
- def self.marshaller(closure, return_value, param_values, _invocation_hint, _marshal_data)
66
- _instance, result = param_values.map(&:get_value_plain)
67
- _v1 = _instance
68
- _v2 = result
69
- wrap(closure.to_ptr).invoke_block(_v1, _v2)
70
- end
71
- CODE
72
-
73
- _(builder.marshaller_definition).must_equal expected
74
- end
75
- end
76
-
77
- describe "for a signal with a array plus length arguments" do
78
- let(:signal_info) do
79
- get_signal_introspection_data "Regress", "TestObj", "sig-with-array-len-prop"
80
- end
81
-
82
- it "returns a valid mapping method" do
83
- expected = <<~CODE
84
- def self.marshaller(closure, return_value, param_values, _invocation_hint, _marshal_data)
85
- _instance, arr, len = param_values.map(&:get_value_plain)
86
- _v1 = _instance
87
- _v2 = len
88
- _v3 = GirFFI::SizedArray.wrap(:guint32, _v2, arr)
89
- wrap(closure.to_ptr).invoke_block(_v1, _v3)
90
- end
91
- CODE
92
-
93
- _(builder.marshaller_definition).must_equal expected
94
- end
95
- end
96
-
97
- describe "for a signal with a struct argument" do
98
- let(:signal_info) do
99
- get_signal_introspection_data "Regress", "TestObj", "test-with-static-scope-arg"
100
- end
101
-
102
- it "returns a valid mapping method" do
103
- expected = <<~CODE
104
- def self.marshaller(closure, return_value, param_values, _invocation_hint, _marshal_data)
105
- _instance, object = param_values.map(&:get_value_plain)
106
- _v1 = _instance
107
- _v2 = Regress::TestSimpleBoxedA.wrap(object)
108
- wrap(closure.to_ptr).invoke_block(_v1, _v2)
109
- end
110
- CODE
111
-
112
- _(builder.marshaller_definition).must_equal expected
113
- end
114
- end
115
-
116
- describe "for a signal returning an array of integers" do
117
- let(:signal_info) do
118
- get_signal_introspection_data "Regress", "TestObj", "sig-with-intarray-ret"
119
- end
120
-
121
- it "returns a valid mapping method" do
122
- expected = <<~CODE
123
- def self.marshaller(closure, return_value, param_values, _invocation_hint, _marshal_data)
124
- _instance, i = param_values.map(&:get_value_plain)
125
- _v1 = _instance
126
- _v2 = i
127
- _v3 = wrap(closure.to_ptr).invoke_block(_v1, _v2)
128
- _v4 = GLib::Array.from(:gint32, _v3)
129
- return_value.set_value _v4
130
- end
131
- CODE
132
-
133
- _(builder.marshaller_definition).must_equal expected
134
- end
135
- end
136
-
137
- describe "for a signal returning an string" do
138
- let(:signal_info) do
139
- get_signal_introspection_data "Gtk", "Scale", "format-value"
140
- end
141
-
142
- it "returns a mapping method that passes the string result to return_value directly" do
143
- expected = <<~CODE
144
- def self.marshaller(closure, return_value, param_values, _invocation_hint, _marshal_data)
145
- _instance, value = param_values.map(&:get_value_plain)
146
- _v1 = _instance
147
- _v2 = value
148
- _v3 = wrap(closure.to_ptr).invoke_block(_v1, _v2)
149
- return_value.set_value _v3
150
- end
151
- CODE
152
-
153
- _(builder.marshaller_definition).must_equal expected
154
- end
155
- end
156
-
157
- describe "for a signal with GList argument" do
158
- let(:signal_info) do
159
- get_signal_introspection_data "Regress", "AnnotationObject", "list-signal"
160
- end
161
-
162
- it "returns a valid mapping method" do
163
- expected = <<~CODE
164
- def self.marshaller(closure, return_value, param_values, _invocation_hint, _marshal_data)
165
- _instance, list = param_values.map(&:get_value_plain)
166
- _v1 = _instance
167
- _v2 = GLib::List.wrap(:utf8, list)
168
- wrap(closure.to_ptr).invoke_block(_v1, _v2)
169
- end
170
- CODE
171
-
172
- _(builder.marshaller_definition).must_equal expected
173
- end
174
- end
175
-
176
- describe "for a signal with GError argument" do
177
- let(:signal_info) do
178
- get_signal_introspection_data "Regress", "TestObj", "sig-with-gerror"
179
- end
180
-
181
- it "returns a valid mapping method" do
182
- skip_below "1.61.1"
183
-
184
- expected = <<~CODE
185
- def self.marshaller(closure, return_value, param_values, _invocation_hint, _marshal_data)
186
- _instance, error = param_values.map(&:get_value_plain)
187
- _v1 = _instance
188
- _v2 = GLib::Error.wrap(error)
189
- wrap(closure.to_ptr).invoke_block(_v1, _v2)
190
- end
191
- CODE
192
-
193
- _(builder.marshaller_definition).must_equal expected
194
- end
195
- end
196
- end
197
- end
@@ -1,93 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "gir_ffi_test_helper"
4
-
5
- describe GirFFI::Builders::StructBuilder do
6
- describe "#layout_specification" do
7
- it "returns the correct layout for Regress::TestStructA" do
8
- info = get_introspection_data "Regress", "TestStructA"
9
- builder = GirFFI::Builders::StructBuilder.new info
10
- _(builder.layout_specification).must_equal [:some_int, :int32, 0,
11
- :some_int8, :int8, 4,
12
- :some_double, :double, 8,
13
- :some_enum, Regress::TestEnum, 16]
14
- end
15
-
16
- describe "for a struct with a simple layout" do
17
- before do
18
- @field = Object.new
19
-
20
- @struct = Object.new
21
- allow(@struct).to receive(:namespace).and_return "Foo"
22
- allow(@struct).to receive(:safe_name).and_return "Bar"
23
- allow(@struct).to receive(:fields).and_return [@field]
24
-
25
- @builder = GirFFI::Builders::StructBuilder.new @struct
26
- end
27
-
28
- it "creates the correct layout specification" do
29
- expect(@field).to receive(:layout_specification).and_return [:bar, :int32, 0]
30
- spec = @builder.layout_specification
31
- assert_equal [:bar, :int32, 0], spec
32
- end
33
- end
34
-
35
- describe "for a struct with a layout with a complex type" do
36
- it "does not flatten the complex type specification" do
37
- expect(simplefield = Object.new).to receive(:layout_specification).and_return [:bar, :foo, 0]
38
- expect(complexfield = Object.new).to receive(:layout_specification).and_return [:baz, [:qux, 2], 0]
39
- expect(struct = Object.new).to receive(:fields).and_return [simplefield, complexfield]
40
-
41
- allow(struct).to receive(:safe_name).and_return "Bar"
42
- allow(struct).to receive(:namespace).and_return "Foo"
43
-
44
- builder = GirFFI::Builders::StructBuilder.new struct
45
- spec = builder.layout_specification
46
- assert_equal [:bar, :foo, 0, :baz, [:qux, 2], 0], spec
47
- end
48
- end
49
- end
50
-
51
- describe "#superclass" do
52
- it "returns StructBase for a normal struct" do
53
- info = get_introspection_data "Regress", "TestStructA"
54
- builder = GirFFI::Builders::StructBuilder.new info
55
- _(builder.superclass).must_equal GirFFI::StructBase
56
- end
57
-
58
- it "returns BoxedBase for a boxed type" do
59
- info = get_introspection_data "Regress", "TestSimpleBoxedB"
60
- builder = GirFFI::Builders::StructBuilder.new info
61
- _(builder.superclass).must_equal GirFFI::BoxedBase
62
- end
63
-
64
- it "returns the GObject parent class for a type class" do
65
- info = get_introspection_data "GIMarshallingTests", "SubSubObjectClass"
66
- builder = GirFFI::Builders::StructBuilder.new info
67
- _(builder.superclass).must_equal GIMarshallingTests::SubObjectClass
68
- end
69
-
70
- it "returns ObjectClass for InitiallyUnownedClass" do
71
- info = get_introspection_data "GObject", "InitiallyUnownedClass"
72
- builder = GirFFI::Builders::StructBuilder.new info
73
- _(builder.superclass).must_equal GObject::ObjectClass
74
- end
75
- end
76
-
77
- describe "#setup_class" do
78
- before do
79
- save_module :Regress
80
- end
81
-
82
- it "stubs the structs methods" do
83
- info = get_introspection_data "Regress", "TestStructA"
84
- builder = GirFFI::Builders::StructBuilder.new info
85
- builder.setup_class
86
- assert_defines_instance_method Regress::TestStructA, :clone
87
- end
88
-
89
- after do
90
- restore_module :Regress
91
- end
92
- end
93
- end
@@ -1,29 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "gir_ffi_test_helper"
4
-
5
- GirFFI.setup :GIMarshallingTests
6
-
7
- describe GirFFI::Builders::UnintrospectableBoxedBuilder do
8
- let(:instance) { GIMarshallingTests::PropertiesObject.new }
9
- let(:property) { instance.object_class.find_property "some-boxed-glist" }
10
- let(:gtype) { property.value_type }
11
- let(:info) { GirFFI::UnintrospectableBoxedInfo.new(gtype) }
12
- let(:bldr) { GirFFI::Builders::UnintrospectableBoxedBuilder.new(info) }
13
- let(:boxed_class) { bldr.build_class }
14
-
15
- it "builds a class" do
16
- _(boxed_class).must_be_instance_of Class
17
- end
18
-
19
- it "builds a class derived from GirFFI::BoxedBase" do
20
- _(boxed_class.superclass).must_equal GirFFI::BoxedBase
21
- end
22
-
23
- it "returns the same class when built again" do
24
- other_bldr = GirFFI::Builders::UnintrospectableBoxedBuilder.new(info)
25
- other_class = other_bldr.build_class
26
-
27
- _(other_class).must_equal boxed_class
28
- end
29
- end
@@ -1,84 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "gir_ffi_test_helper"
4
-
5
- GirFFI.setup :Gio
6
- GirFFI.setup :Gst
7
-
8
- describe GirFFI::Builders::UnintrospectableBuilder do
9
- describe "building the GLocalFile type" do
10
- before do
11
- Gio.file_new_for_path "/"
12
-
13
- @gtype = GObject.type_from_name "GLocalFile"
14
- @info = GirFFI::UnintrospectableTypeInfo.new(@gtype)
15
- @bldr = GirFFI::Builders::UnintrospectableBuilder.new(@info)
16
- @klass = @bldr.build_class
17
- end
18
-
19
- it "builds a class" do
20
- assert_instance_of Class, @klass
21
- end
22
-
23
- it "builds a class derived from GObject::Object" do
24
- assert_includes @klass.registered_ancestors, GObject::Object
25
- end
26
-
27
- it "builds a class derived from Gio::File" do
28
- assert_includes @klass.registered_ancestors, Gio::File
29
- end
30
-
31
- it "returns the same class when built again" do
32
- other_bldr = GirFFI::Builders::UnintrospectableBuilder.new(@info)
33
- other_klass = other_bldr.build_class
34
-
35
- assert_equal @klass, other_klass
36
- end
37
-
38
- describe "its #find_signal method" do
39
- it "returns nil for a signal that doesn't exist" do
40
- _(@bldr.find_signal("foo")).must_be_nil
41
- end
42
-
43
- it "finds signals in ancestor classes" do
44
- signal = @bldr.find_signal "notify"
45
- _(signal.name).must_equal "notify"
46
- end
47
- end
48
-
49
- describe "#object_class_struct" do
50
- it "returns the parent class struct" do
51
- _(@bldr.object_class_struct).must_equal GObject::ObjectClass
52
- end
53
- end
54
- end
55
-
56
- describe "building the GstFakeSink type" do
57
- let(:instance) { Gst::ElementFactory.make("fakesink", "sink") }
58
- let(:sink_class) { instance.class }
59
- let(:builder) { sink_class.gir_ffi_builder }
60
-
61
- before do
62
- Gst.init []
63
- end
64
-
65
- describe "its #find_signal method" do
66
- it "finds signals that are not defined in the GIR" do
67
- signal = builder.find_signal "handoff"
68
- _(signal).wont_be_nil
69
- _(signal.name).must_equal "handoff"
70
- end
71
- end
72
-
73
- describe "its #find_property method" do
74
- it "returns nil for a property that doesn't exist" do
75
- _(builder.find_property("foo")).must_be_nil
76
- end
77
-
78
- it "finds properies in ancestor classes" do
79
- property = builder.find_property "name"
80
- _(property.name).must_equal "name"
81
- end
82
- end
83
- end
84
- end
@@ -1,28 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "gir_ffi_test_helper"
4
-
5
- describe GirFFI::Builders::UnionBuilder do
6
- let(:union_info) { get_introspection_data("Regress", "FooBUnion") }
7
- let(:builder) { GirFFI::Builders::UnionBuilder.new union_info }
8
-
9
- describe "#setup_instance_method" do
10
- it "returns nil looking for a method that doesn't exist" do
11
- _(builder.setup_instance_method("blub")).must_be_nil
12
- end
13
- end
14
-
15
- describe "#layout_specification" do
16
- it "returns the correct layout for Regress::FooBUnion" do
17
- _(builder.layout_specification).must_equal [:type, :int32, 0,
18
- :v, :double, 0,
19
- :rect, :pointer, 0]
20
- end
21
- end
22
-
23
- describe "#layout_superclass" do
24
- it "returns GirFFI::Union" do
25
- _(builder.layout_superclass).must_equal GirFFI::Union
26
- end
27
- end
28
- end
@@ -1,524 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "gir_ffi_test_helper"
4
-
5
- GirFFI.setup :GIMarshallingTests
6
- GirFFI.setup :Regress
7
-
8
- describe GirFFI::Builders::UserDefinedBuilder do
9
- let(:base_class) { GIMarshallingTests::Object }
10
- let(:derived_class) do
11
- Object.const_set("DerivedClass#{Sequence.next}", Class.new(base_class))
12
- end
13
- let(:builder) { GirFFI::Builders::UserDefinedBuilder.new info }
14
- let(:info) { GirFFI::UserDefinedObjectInfo.new derived_class }
15
-
16
- describe "#build_class" do
17
- before do
18
- builder.build_class
19
- end
20
-
21
- describe "with type info containing one integer property" do
22
- let(:info) do
23
- GirFFI::UserDefinedObjectInfo.new derived_class do |it|
24
- it.install_property GObject.param_spec_int("foo-bar", "foo bar",
25
- "The Foo Bar Property",
26
- 10, 20, 15,
27
- readable: true, writable: true)
28
- end
29
- end
30
-
31
- it "registers a type that is bigger than the parent" do
32
- gtype = derived_class.gtype
33
- q = GObject.type_query gtype
34
- _(q.instance_size).must_be :>, GIMarshallingTests::Object::Struct.size
35
- end
36
-
37
- it "gives the type's Struct fields for the parent and the property" do
38
- _(derived_class::Struct.members).must_equal [:parent, :foo_bar]
39
- end
40
-
41
- it "creates accessor functions for the property" do
42
- obj = derived_class.new
43
- obj.foo_bar = 13
44
- _(obj.foo_bar).must_equal 13
45
- end
46
-
47
- it "makes the property retrievable using #get_property" do
48
- obj = derived_class.new
49
- obj.foo_bar = 13
50
- _(obj.get_property("foo-bar")).must_equal 13
51
- end
52
-
53
- it "makes the property settable using #set_property" do
54
- obj = derived_class.new
55
- obj.set_property("foo-bar", 20)
56
- _(obj.foo_bar).must_equal 20
57
- end
58
-
59
- it "keeps parent properties accessible through their accessors" do
60
- obj = derived_class.new
61
- obj.int = 24
62
- _(obj.int).must_equal 24
63
- end
64
-
65
- it "keeps parent properties accessible through get_property and set_property" do
66
- obj = derived_class.new
67
- obj.set_property("int", 24)
68
- _(obj.get_property("int")).must_equal 24
69
- end
70
- end
71
-
72
- describe "with type info containing properties of several different types" do
73
- let(:info) do
74
- GirFFI::UserDefinedObjectInfo.new derived_class do |it|
75
- it.install_property GObject.param_spec_string("string-prop", "string property",
76
- "The String Property",
77
- "this is the default value",
78
- readable: true, writable: true)
79
- it.install_property GObject.param_spec_int("int-prop", "integer property",
80
- "The Integer Property",
81
- 10, 20, 15,
82
- readable: true, writable: true)
83
- it.install_property GObject.param_spec_long("long-prop", "long property",
84
- "The Long Property",
85
- 10.0, 50.0, 42.0,
86
- readable: true, writable: true)
87
- end
88
- end
89
-
90
- it "registers a type of the proper size" do
91
- expected_size = derived_class::Struct.size
92
- gtype = derived_class.gtype
93
- q = GObject.type_query gtype
94
- _(q.instance_size).must_equal expected_size
95
- end
96
-
97
- it "gives the type's Struct fields for the parent and the properties with the correct offsets" do
98
- offsets = derived_class::Struct.offsets
99
- alignment = derived_class::Struct.alignment
100
- _(alignment).must_equal 8 # TODO: Fix tests for platforms where this fails.
101
- _(offsets).must_equal [[:parent, 0], [:string_prop, 32], [:int_prop, 40], [:long_prop, 48]]
102
- end
103
-
104
- it "creates accessor functions for the string property" do
105
- obj = derived_class.new
106
- obj.string_prop = "hello!"
107
- _(obj.string_prop).must_equal "hello!"
108
- end
109
-
110
- it "creates accessor functions for the integer property" do
111
- obj = derived_class.new
112
- obj.int_prop = 13
113
- _(obj.int_prop).must_equal 13
114
- end
115
- end
116
-
117
- describe "with a boxed property" do
118
- let(:boxed_gtype) { GIMarshallingTests::BoxedStruct.gtype }
119
- let(:info) do
120
- GirFFI::UserDefinedObjectInfo.new derived_class do |it|
121
- it.install_property GObject.param_spec_boxed("boxed-prop", "boxed property",
122
- "The Boxed Property",
123
- boxed_gtype,
124
- readable: true, writable: true)
125
- end
126
- end
127
-
128
- it "registers a type of the proper size" do
129
- expected_size = derived_class::Struct.size
130
- gtype = derived_class.gtype
131
- q = GObject.type_query gtype
132
- _(q.instance_size).must_equal expected_size
133
- end
134
-
135
- it "gives the type's Struct fields for the parent and the property" do
136
- _(derived_class::Struct.members).must_equal [:parent, :boxed_prop]
137
- end
138
-
139
- it "creates accessor functions for the property" do
140
- obj = derived_class.new
141
- boxed = GIMarshallingTests::BoxedStruct.new
142
- boxed.long_ = 423
143
- obj.boxed_prop = boxed
144
- _(obj.boxed_prop.long_).must_equal 423
145
- end
146
- end
147
-
148
- describe "with an object property" do
149
- let(:object_gtype) { GIMarshallingTests::Object.gtype }
150
- let(:info) do
151
- GirFFI::UserDefinedObjectInfo.new derived_class do |it|
152
- it.install_property GObject.param_spec_object("object-prop", "object property",
153
- "The Object Property",
154
- object_gtype,
155
- readable: true, writable: true)
156
- end
157
- end
158
-
159
- it "registers a type of the proper size" do
160
- expected_size = derived_class::Struct.size
161
- gtype = derived_class.gtype
162
- q = GObject.type_query gtype
163
- _(q.instance_size).must_equal expected_size
164
- end
165
-
166
- it "gives the type's Struct fields for the parent and the property" do
167
- _(derived_class::Struct.members).must_equal [:parent, :object_prop]
168
- end
169
-
170
- it "creates accessor functions for the property" do
171
- obj = derived_class.new
172
- object = GIMarshallingTests::Object.new 42
173
- object.int = 423
174
- obj.object_prop = object
175
- _(obj.object_prop.int).must_equal 423
176
- end
177
-
178
- it "allows clearing the property throught the setter method" do
179
- obj = derived_class.new
180
- obj.object_prop = nil
181
- _(obj.object_prop).must_be_nil
182
- end
183
-
184
- it "handles reference counting correctly when using the accessor" do
185
- obj = derived_class.new
186
- object = GIMarshallingTests::Object.new 42
187
- obj.object_prop = object
188
- _(object_ref_count(object)).must_equal 2
189
- end
190
-
191
- it "handles reference counting correctly when using the set_property method" do
192
- obj = derived_class.new
193
- object = GIMarshallingTests::Object.new 42
194
-
195
- _(object_ref_count(object)).must_equal 1
196
- obj.set_property("object_prop", object)
197
- _(object_ref_count(object)).must_equal 4 # Due to extra Value#set_value + Value#get_value
198
- end
199
- end
200
-
201
- describe "with a boolean property" do
202
- let(:object_gtype) { GIMarshallingTests::Object.gtype }
203
- let(:info) do
204
- GirFFI::UserDefinedObjectInfo.new derived_class do |it|
205
- it.install_property GObject.param_spec_boolean("the-prop", "the property",
206
- "The Property",
207
- true,
208
- readable: true, writable: true)
209
- end
210
- end
211
-
212
- it "creates accessor functions for the property" do
213
- obj = derived_class.new
214
- obj.the_prop = true
215
- _(obj.the_prop).must_equal true
216
- end
217
- end
218
-
219
- describe "with a char property" do
220
- let(:object_gtype) { GIMarshallingTests::Object.gtype }
221
- let(:info) do
222
- GirFFI::UserDefinedObjectInfo.new derived_class do |it|
223
- it.install_property GObject.param_spec_char("the-prop", "the property",
224
- "The Property",
225
- -20, 100, 15,
226
- readable: true, writable: true)
227
- end
228
- end
229
-
230
- it "creates accessor functions for the property" do
231
- obj = derived_class.new
232
- obj.the_prop = -13
233
- _(obj.the_prop).must_equal(-13)
234
- end
235
- end
236
-
237
- describe "with a uchar property" do
238
- let(:object_gtype) { GIMarshallingTests::Object.gtype }
239
- let(:info) do
240
- GirFFI::UserDefinedObjectInfo.new derived_class do |it|
241
- it.install_property GObject.param_spec_uchar("the-prop", "the property",
242
- "The Property",
243
- 10, 100, 15,
244
- readable: true, writable: true)
245
- end
246
- end
247
-
248
- it "creates accessor functions for the property" do
249
- obj = derived_class.new
250
- obj.the_prop = 13
251
- _(obj.the_prop).must_equal 13
252
- end
253
- end
254
-
255
- describe "with a uint property" do
256
- let(:object_gtype) { GIMarshallingTests::Object.gtype }
257
- let(:info) do
258
- GirFFI::UserDefinedObjectInfo.new derived_class do |it|
259
- it.install_property GObject.param_spec_uint("the-prop", "the property",
260
- "The Property",
261
- 10, 100, 15,
262
- readable: true, writable: true)
263
- end
264
- end
265
-
266
- it "creates accessor functions for the property" do
267
- obj = derived_class.new
268
- obj.the_prop = 423
269
- _(obj.the_prop).must_equal 423
270
- end
271
- end
272
-
273
- describe "with a ulong property" do
274
- let(:object_gtype) { GIMarshallingTests::Object.gtype }
275
- let(:info) do
276
- GirFFI::UserDefinedObjectInfo.new derived_class do |it|
277
- it.install_property GObject.param_spec_ulong("the-prop", "the property",
278
- "The Property",
279
- 10, 100, 15,
280
- readable: true, writable: true)
281
- end
282
- end
283
-
284
- it "creates accessor functions for the property" do
285
- obj = derived_class.new
286
- obj.the_prop = 423_432
287
- _(obj.the_prop).must_equal 423_432
288
- end
289
- end
290
-
291
- describe "with a int64 property" do
292
- let(:object_gtype) { GIMarshallingTests::Object.gtype }
293
- let(:info) do
294
- GirFFI::UserDefinedObjectInfo.new derived_class do |it|
295
- it.install_property GObject.param_spec_int64("the-prop", "the property",
296
- "The Property",
297
- 10, 100, 15,
298
- readable: true, writable: true)
299
- end
300
- end
301
-
302
- it "creates accessor functions for the property" do
303
- obj = derived_class.new
304
- obj.the_prop = -423_432
305
- _(obj.the_prop).must_equal(-423_432)
306
- end
307
- end
308
-
309
- describe "with a uint64 property" do
310
- let(:object_gtype) { GIMarshallingTests::Object.gtype }
311
- let(:info) do
312
- GirFFI::UserDefinedObjectInfo.new derived_class do |it|
313
- it.install_property GObject.param_spec_uint64("the-prop", "the property",
314
- "The Property",
315
- 10, 100, 15,
316
- readable: true, writable: true)
317
- end
318
- end
319
-
320
- it "creates accessor functions for the property" do
321
- obj = derived_class.new
322
- obj.the_prop = 423_432
323
- _(obj.the_prop).must_equal 423_432
324
- end
325
- end
326
-
327
- describe "with a float property" do
328
- let(:object_gtype) { GIMarshallingTests::Object.gtype }
329
- let(:info) do
330
- GirFFI::UserDefinedObjectInfo.new derived_class do |it|
331
- it.install_property GObject.param_spec_float("the-prop", "the property",
332
- "The Property",
333
- 10.0, 100.0, 15.0,
334
- readable: true, writable: true)
335
- end
336
- end
337
-
338
- it "creates accessor functions for the property" do
339
- obj = derived_class.new
340
- obj.the_prop = 42.23
341
- _(obj.the_prop).must_be_within_epsilon 42.23
342
- end
343
- end
344
-
345
- describe "with a double property" do
346
- let(:object_gtype) { GIMarshallingTests::Object.gtype }
347
- let(:info) do
348
- GirFFI::UserDefinedObjectInfo.new derived_class do |it|
349
- it.install_property GObject.param_spec_double("the-prop", "the property",
350
- "The Property",
351
- 10.0, 100.0, 15.0,
352
- readable: true, writable: true)
353
- end
354
- end
355
-
356
- it "creates accessor functions for the property" do
357
- obj = derived_class.new
358
- obj.the_prop = 42.23
359
- _(obj.the_prop).must_equal 42.23
360
- end
361
- end
362
-
363
- describe "with an enum property" do
364
- let(:object_gtype) { GIMarshallingTests::Object.gtype }
365
- let(:info) do
366
- GirFFI::UserDefinedObjectInfo.new derived_class do |it|
367
- prop = GObject.param_spec_enum("the-prop", "the property",
368
- "The Property",
369
- GIMarshallingTests::GEnum.gtype, 0,
370
- readable: true, writable: true)
371
- it.install_property prop
372
- end
373
- end
374
-
375
- it "creates accessor functions for the property" do
376
- obj = derived_class.new
377
- obj.the_prop = :value2
378
- _(obj.the_prop).must_equal :value2
379
- end
380
- end
381
-
382
- describe "with a flags property" do
383
- let(:object_gtype) { GIMarshallingTests::Object.gtype }
384
- let(:info) do
385
- GirFFI::UserDefinedObjectInfo.new derived_class do |it|
386
- prop = GObject.param_spec_flags("the-prop", "the property",
387
- "The Property",
388
- GIMarshallingTests::Flags.gtype, 0,
389
- readable: true, writable: true)
390
- it.install_property prop
391
- end
392
- end
393
-
394
- it "creates accessor functions for the property" do
395
- obj = derived_class.new
396
- obj.the_prop = { value2: true }
397
- _(obj.the_prop).must_equal value2: true
398
- end
399
- end
400
-
401
- describe "when deriving from a class with hidden struct size" do
402
- let(:parent_class) { Regress::TestInheritDrawable }
403
- let(:parent_size) do
404
- GObject.type_query(parent_class.gtype).instance_size
405
- end
406
- let(:derived_class) do
407
- Object.const_set("DerivedClass#{Sequence.next}", Class.new(parent_class))
408
- end
409
- let(:info) do
410
- GirFFI::UserDefinedObjectInfo.new derived_class do |it|
411
- it.install_property GObject.param_spec_int("int-prop", "integer property",
412
- "Integer Property",
413
- 10, 20, 15,
414
- readable: true, writable: true)
415
- end
416
- end
417
-
418
- it "registers a type that is bigger than the parent" do
419
- class_size = GObject.type_query(derived_class.gtype).instance_size
420
- _(class_size).must_be :>, parent_size
421
- end
422
-
423
- it "leaves enough space in derived struct layout" do
424
- struct_size = derived_class::Struct.size
425
- _(struct_size).must_be :>, parent_size
426
- end
427
- end
428
-
429
- describe "with type info containing an overridden g_name" do
430
- let(:info) do
431
- GirFFI::UserDefinedObjectInfo.new derived_class do |it|
432
- it.g_name = "OtherName#{Sequence.next}"
433
- end
434
- end
435
-
436
- it "registers a type under the overridden name" do
437
- registered_name = GObject.type_name(derived_class.gtype)
438
- _(registered_name).must_equal info.g_name
439
- _(registered_name).wont_equal derived_class.name
440
- end
441
- end
442
-
443
- describe "with type info containing a vfunc" do
444
- let(:info) do
445
- GirFFI::UserDefinedObjectInfo.new derived_class do |it|
446
- it.install_vfunc_implementation :method_int8_in, proc { |instance, in_|
447
- instance.int = in_
448
- }
449
- end
450
- end
451
-
452
- it "allows the vfunc to be called through its invoker" do
453
- obj = derived_class.new
454
- obj.method_int8_in 12
455
- _(obj.int).must_equal 12
456
- end
457
- end
458
-
459
- describe "when using a default vfunc implementation" do
460
- let(:base_class) { Regress::TestObj }
461
- let(:info) do
462
- GirFFI::UserDefinedObjectInfo.new derived_class do |it|
463
- it.install_vfunc_implementation :matrix
464
- end
465
- end
466
-
467
- before do
468
- derived_class.class_eval do
469
- def matrix(_arg)
470
- 44
471
- end
472
- end
473
- end
474
-
475
- it "allows the vfunc to be called through its invoker" do
476
- obj = derived_class.new
477
- _(obj.do_matrix("bar")).must_equal 44
478
- end
479
- end
480
-
481
- describe "with type info containing a vfunc from an included Interface" do
482
- let(:info) do
483
- derived_class.class_eval { include GIMarshallingTests::Interface }
484
- GirFFI::UserDefinedObjectInfo.new derived_class do |it|
485
- it.install_vfunc_implementation :test_int8_in,
486
- proc { |instance, in_| instance.int = in_ }
487
- end
488
- end
489
-
490
- it "marks the type as conforming to the included Interface" do
491
- iface_gtype = GIMarshallingTests::Interface.gtype
492
- _(GObject.type_interfaces(derived_class.gtype).to_a).must_equal [iface_gtype]
493
- end
494
-
495
- it "allows the vfunc to be called through its invoker" do
496
- obj = derived_class.new
497
- obj.test_int8_in 12
498
- _(obj.int).must_equal 12
499
- end
500
- end
501
-
502
- it "keeps the gtype for an already registered class" do
503
- gtype = derived_class.gtype
504
- other_builder = GirFFI::Builders::UserDefinedBuilder.new info
505
- other_class = other_builder.build_class
506
- _(other_class.gtype).must_equal gtype
507
- end
508
-
509
- it "creates a class with a new GType" do
510
- _(derived_class.gtype).wont_equal GIMarshallingTests::Object.gtype
511
- end
512
-
513
- it "makes the registered class return objects with the correct GType" do
514
- obj = derived_class.new
515
- _(GObject.type_from_instance(obj)).must_equal derived_class.gtype
516
- end
517
- end
518
-
519
- describe "#object_class_struct" do
520
- it "returns the parent class struct" do
521
- _(builder.object_class_struct).must_equal GIMarshallingTests::ObjectClass
522
- end
523
- end
524
- end