gir_ffi 0.6.7 → 0.7.0
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.
- checksums.yaml +7 -0
- data/{History.txt → Changelog.md} +93 -61
- data/{DESIGN.rdoc → DESIGN.md} +7 -7
- data/README.md +5 -7
- data/TODO.md +90 -0
- data/lib/ffi-glib.rb +0 -1
- data/lib/ffi-glib/array.rb +13 -29
- data/lib/ffi-glib/array_methods.rb +13 -0
- data/lib/ffi-glib/container_class_methods.rb +6 -1
- data/lib/ffi-glib/hash_table.rb +3 -2
- data/lib/ffi-glib/list.rb +3 -17
- data/lib/ffi-glib/list_methods.rb +22 -3
- data/lib/ffi-glib/ptr_array.rb +19 -19
- data/lib/ffi-glib/s_list.rb +3 -17
- data/lib/ffi-gobject.rb +10 -17
- data/lib/ffi-gobject/object.rb +19 -9
- data/lib/ffi-gobject/object_class.rb +14 -0
- data/lib/ffi-gobject/ruby_closure.rb +4 -5
- data/lib/ffi-gobject/value.rb +7 -5
- data/lib/ffi-gobject_introspection/i_vfunc_info.rb +1 -1
- data/lib/gir_ffi-base.rb +0 -2
- data/lib/gir_ffi-base/gobject.rb +1 -0
- data/lib/gir_ffi-base/gobject/lib.rb +1 -1
- data/lib/gir_ffi.rb +2 -0
- data/lib/gir_ffi/arg_helper.rb +18 -8
- data/lib/gir_ffi/builders/argument_builder.rb +62 -55
- data/lib/gir_ffi/builders/base_argument_builder.rb +52 -106
- data/lib/gir_ffi/builders/base_type_builder.rb +3 -3
- data/lib/gir_ffi/builders/c_to_ruby_convertor.rb +34 -0
- data/lib/gir_ffi/builders/callback_argument_builder.rb +73 -0
- data/lib/gir_ffi/builders/callback_builder.rb +19 -9
- data/lib/gir_ffi/builders/callback_return_value_builder.rb +54 -0
- data/lib/gir_ffi/builders/closure_convertor.rb +9 -0
- data/lib/gir_ffi/builders/closure_to_pointer_convertor.rb +9 -0
- data/lib/gir_ffi/builders/constructor_result_convertor.rb +9 -0
- data/lib/gir_ffi/builders/enum_builder.rb +16 -16
- data/lib/gir_ffi/builders/field_builder.rb +36 -15
- data/lib/gir_ffi/builders/function_builder.rb +32 -27
- data/lib/gir_ffi/builders/interface_builder.rb +14 -4
- data/lib/gir_ffi/builders/mapping_method_builder.rb +95 -43
- data/lib/gir_ffi/builders/module_builder.rb +22 -35
- data/lib/gir_ffi/builders/null_convertor.rb +9 -0
- data/lib/gir_ffi/builders/object_builder.rb +11 -14
- data/lib/gir_ffi/builders/property_builder.rb +107 -9
- data/lib/gir_ffi/builders/registered_type_builder.rb +2 -2
- data/lib/gir_ffi/builders/return_value_builder.rb +42 -33
- data/lib/gir_ffi/builders/ruby_to_c_convertor.rb +15 -0
- data/lib/gir_ffi/builders/signal_builder.rb +18 -58
- data/lib/gir_ffi/builders/struct_builder.rb +1 -2
- data/lib/gir_ffi/builders/type_builder.rb +1 -0
- data/lib/gir_ffi/builders/unintrospectable_builder.rb +4 -4
- data/lib/gir_ffi/builders/user_defined_builder.rb +151 -26
- data/lib/gir_ffi/builders/vfunc_builder.rb +57 -0
- data/lib/gir_ffi/builders/with_layout.rb +10 -8
- data/lib/gir_ffi/builders/with_methods.rb +1 -1
- data/lib/gir_ffi/callback_base.rb +42 -8
- data/lib/gir_ffi/class_base.rb +1 -2
- data/lib/gir_ffi/enum_base.rb +26 -4
- data/lib/gir_ffi/error_argument_info.rb +21 -0
- data/lib/gir_ffi/{setter_argument_info.rb → field_argument_info.rb} +2 -1
- data/lib/gir_ffi/g_type.rb +25 -0
- data/lib/gir_ffi/in_out_pointer.rb +3 -14
- data/lib/gir_ffi/in_pointer.rb +20 -21
- data/lib/gir_ffi/info_ext.rb +2 -0
- data/lib/gir_ffi/info_ext/i_callable_info.rb +0 -9
- data/lib/gir_ffi/info_ext/i_callback_info.rb +17 -0
- data/lib/gir_ffi/info_ext/i_function_info.rb +4 -0
- data/lib/gir_ffi/info_ext/i_property_info.rb +4 -0
- data/lib/gir_ffi/info_ext/i_registered_type_info.rb +1 -0
- data/lib/gir_ffi/info_ext/i_signal_info.rb +14 -16
- data/lib/gir_ffi/info_ext/i_type_info.rb +72 -34
- data/lib/gir_ffi/info_ext/i_vfunc_info.rb +12 -0
- data/lib/gir_ffi/info_ext/safe_constant_name.rb +3 -2
- data/lib/gir_ffi/interface_base.rb +8 -3
- data/lib/gir_ffi/module_base.rb +3 -5
- data/lib/gir_ffi/object_base.rb +8 -0
- data/lib/gir_ffi/receiver_argument_info.rb +21 -0
- data/lib/gir_ffi/receiver_type_info.rb +27 -0
- data/lib/gir_ffi/return_value_info.rb +23 -0
- data/lib/gir_ffi/signal_base.rb +1 -1
- data/lib/{ffi-glib → gir_ffi}/sized_array.rb +10 -6
- data/lib/gir_ffi/struct_base.rb +10 -9
- data/lib/gir_ffi/type_base.rb +1 -0
- data/lib/gir_ffi/type_map.rb +3 -0
- data/lib/gir_ffi/unintrospectable_type_info.rb +4 -1
- data/lib/gir_ffi/union_base.rb +4 -21
- data/lib/gir_ffi/user_data_argument_info.rb +21 -0
- data/lib/gir_ffi/user_data_type_info.rb +17 -0
- data/lib/gir_ffi/user_defined_type_info.rb +18 -4
- data/lib/gir_ffi/version.rb +1 -1
- data/lib/gir_ffi/vfunc_base.rb +8 -0
- data/lib/gir_ffi/vfunc_implementation.rb +11 -0
- data/lib/gir_ffi/zero_terminated.rb +18 -24
- data/test/base_test_helper.rb +2 -3
- data/test/ffi-glib/array_test.rb +3 -3
- data/test/ffi-glib/ruby_closure_test.rb +3 -3
- data/test/ffi-gobject/value_test.rb +15 -1
- data/test/ffi-gobject_test.rb +2 -1
- data/test/gir_ffi/arg_helper_test.rb +21 -2
- data/test/gir_ffi/builders/argument_builder_test.rb +213 -287
- data/test/gir_ffi/builders/base_argument_builder_test.rb +1 -1
- data/test/gir_ffi/builders/callback_builder_test.rb +26 -8
- data/test/gir_ffi/builders/field_builder_test.rb +18 -3
- data/test/gir_ffi/builders/function_builder_test.rb +30 -12
- data/test/gir_ffi/builders/interface_builder_test.rb +9 -0
- data/test/gir_ffi/builders/module_builder_test.rb +0 -39
- data/test/gir_ffi/builders/object_builder_test.rb +27 -27
- data/test/gir_ffi/builders/property_builder_test.rb +110 -0
- data/test/gir_ffi/builders/return_value_builder_test.rb +168 -200
- data/test/gir_ffi/builders/signal_builder_test.rb +58 -14
- data/test/gir_ffi/builders/struct_builder_test.rb +2 -41
- data/test/gir_ffi/builders/user_defined_builder_test.rb +88 -20
- data/test/gir_ffi/builders/vfunc_builder_test.rb +44 -0
- data/test/gir_ffi/g_type_test.rb +29 -0
- data/test/gir_ffi/in_pointer_test.rb +28 -9
- data/test/gir_ffi/info_ext/i_callable_info_test.rb +0 -9
- data/test/gir_ffi/info_ext/i_callback_info_test.rb +19 -0
- data/test/gir_ffi/info_ext/i_function_info_test.rb +9 -0
- data/test/gir_ffi/info_ext/i_signal_info_test.rb +8 -11
- data/test/gir_ffi/info_ext/i_type_info_test.rb +140 -16
- data/test/gir_ffi/interface_base_test.rb +9 -3
- data/test/gir_ffi/object_base_test.rb +1 -2
- data/test/{ffi-glib → gir_ffi}/sized_array_test.rb +28 -28
- data/test/gir_ffi/type_map_test.rb +1 -1
- data/test/gir_ffi/user_defined_type_info_test.rb +36 -4
- data/test/gir_ffi_test.rb +5 -5
- data/test/gir_ffi_test_helper.rb +4 -0
- data/test/integration/generated_gimarshallingtests_test.rb +163 -59
- data/test/integration/generated_gobject_test.rb +21 -8
- data/test/integration/generated_pango_test.rb +2 -2
- data/test/integration/generated_regress_test.rb +361 -101
- data/test/lib/autogen.sh +5 -1
- metadata +51 -35
- data/TODO.rdoc +0 -63
- data/lib/gir_ffi-base/gir_ffi/library.rb +0 -17
- data/lib/gir_ffi-base/gir_ffi/struct.rb +0 -27
@@ -8,10 +8,12 @@ describe GirFFI::Builders::CallbackBuilder do
|
|
8
8
|
let(:callback_info) { get_introspection_data "Regress", "TestCallbackFull" }
|
9
9
|
it "returns a valid mapping method" do
|
10
10
|
expected = <<-CODE.reset_indentation
|
11
|
-
def self.call_with_argument_mapping(_proc,
|
12
|
-
|
13
|
-
|
14
|
-
|
11
|
+
def self.call_with_argument_mapping(_proc, foo, bar, path)
|
12
|
+
_v1 = foo
|
13
|
+
_v2 = bar
|
14
|
+
_v3 = path.to_utf8
|
15
|
+
_v4 = _proc.call(_v1, _v2, _v3)
|
16
|
+
return _v4
|
15
17
|
end
|
16
18
|
CODE
|
17
19
|
|
@@ -36,10 +38,26 @@ describe GirFFI::Builders::CallbackBuilder do
|
|
36
38
|
let(:callback_info) { get_introspection_data "Regress", "TestCallbackUserData" }
|
37
39
|
it "returns a valid mapping method" do
|
38
40
|
expected = <<-CODE.reset_indentation
|
39
|
-
def self.call_with_argument_mapping(_proc,
|
40
|
-
|
41
|
-
|
42
|
-
return
|
41
|
+
def self.call_with_argument_mapping(_proc, user_data)
|
42
|
+
_v1 = GirFFI::ArgHelper::OBJECT_STORE[user_data.address]
|
43
|
+
_v2 = _proc.call(_v1)
|
44
|
+
return _v2
|
45
|
+
end
|
46
|
+
CODE
|
47
|
+
|
48
|
+
builder.mapping_method_definition.must_equal expected
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
describe "for a callback with one out argument" do
|
53
|
+
let(:callback_info) { get_introspection_data("GIMarshallingTests",
|
54
|
+
"CallbackOneOutParameter") }
|
55
|
+
it "returns a valid mapping method" do
|
56
|
+
expected = <<-CODE.reset_indentation
|
57
|
+
def self.call_with_argument_mapping(_proc, a)
|
58
|
+
_v1 = GirFFI::InOutPointer.new(:gfloat, a)
|
59
|
+
_v2 = _proc.call()
|
60
|
+
_v1.set_value _v2
|
43
61
|
end
|
44
62
|
CODE
|
45
63
|
|
@@ -39,7 +39,7 @@ describe GirFFI::Builders::FieldBuilder do
|
|
39
39
|
_v1 = @struct.to_ptr + #{field_info.offset}
|
40
40
|
_v2 = GirFFI::InOutPointer.new(Regress::TestSimpleBoxedA, _v1)
|
41
41
|
_v3 = _v2.to_value
|
42
|
-
_v4 =
|
42
|
+
_v4 = Regress::TestSimpleBoxedA.wrap(_v3)
|
43
43
|
_v4
|
44
44
|
end
|
45
45
|
CODE
|
@@ -71,7 +71,7 @@ describe GirFFI::Builders::FieldBuilder do
|
|
71
71
|
_v1 = @struct.to_ptr + #{field_info.offset}
|
72
72
|
_v2 = GirFFI::InOutPointer.new(:c, _v1)
|
73
73
|
_v3 = _v2.to_value
|
74
|
-
_v4 =
|
74
|
+
_v4 = GirFFI::SizedArray.wrap(Regress::TestStructE__some_union__union, 2, _v3)
|
75
75
|
_v4
|
76
76
|
end
|
77
77
|
CODE
|
@@ -84,7 +84,22 @@ describe GirFFI::Builders::FieldBuilder do
|
|
84
84
|
_v1 = @struct.to_ptr + #{field_info.offset}
|
85
85
|
_v2 = GirFFI::InOutPointer.new(:c, _v1)
|
86
86
|
GirFFI::ArgHelper.check_fixed_array_size 2, value, \"value\"
|
87
|
-
_v3 =
|
87
|
+
_v3 = GirFFI::SizedArray.from(Regress::TestStructE__some_union__union, 2, value)
|
88
|
+
_v2.set_value _v3
|
89
|
+
end
|
90
|
+
CODE
|
91
|
+
instance.setter_def.must_equal expected
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
describe "for a field of type :callback" do
|
96
|
+
let(:field_info) { get_field_introspection_data "GObject", "TypeInfo", "class_init" }
|
97
|
+
it "creates the right setter method" do
|
98
|
+
expected = <<-CODE.reset_indentation
|
99
|
+
def class_init= value
|
100
|
+
_v1 = @struct.to_ptr + #{field_info.offset}
|
101
|
+
_v2 = GirFFI::InOutPointer.new(GObject::ClassInitFunc, _v1)
|
102
|
+
_v3 = GObject::ClassInitFunc.from(value)
|
88
103
|
_v2.set_value _v3
|
89
104
|
end
|
90
105
|
CODE
|
@@ -11,7 +11,7 @@ describe GirFFI::Builders::FunctionBuilder do
|
|
11
11
|
def self.test_array_fixed_out_objects
|
12
12
|
_v1 = GirFFI::InOutPointer.for [:pointer, :c]
|
13
13
|
Regress::Lib.regress_test_array_fixed_out_objects _v1
|
14
|
-
_v2 =
|
14
|
+
_v2 = GirFFI::SizedArray.wrap([:pointer, Regress::TestObj], 2, _v1.to_value)
|
15
15
|
return _v2
|
16
16
|
end
|
17
17
|
CODE
|
@@ -28,7 +28,7 @@ describe GirFFI::Builders::FunctionBuilder do
|
|
28
28
|
def self.test_array_gint16_in ints
|
29
29
|
n_ints = ints.nil? ? 0 : ints.length
|
30
30
|
_v1 = n_ints
|
31
|
-
_v2 =
|
31
|
+
_v2 = GirFFI::SizedArray.from(:gint16, -1, ints)
|
32
32
|
_v3 = Regress::Lib.regress_test_array_gint16_in _v1, _v2
|
33
33
|
return _v3
|
34
34
|
end
|
@@ -44,9 +44,9 @@ describe GirFFI::Builders::FunctionBuilder do
|
|
44
44
|
|
45
45
|
expected = <<-CODE
|
46
46
|
def self.test_callback_destroy_notify callback, user_data, notify
|
47
|
-
_v1 =
|
48
|
-
_v2 = GirFFI::InPointer.
|
49
|
-
_v3 =
|
47
|
+
_v1 = Regress::TestCallbackUserData.from(callback)
|
48
|
+
_v2 = GirFFI::InPointer.from_closure_data(user_data)
|
49
|
+
_v3 = GLib::DestroyNotify.from(notify)
|
50
50
|
_v4 = Regress::Lib.regress_test_callback_destroy_notify _v1, _v2, _v3
|
51
51
|
return _v4
|
52
52
|
end
|
@@ -81,7 +81,7 @@ describe GirFFI::Builders::FunctionBuilder do
|
|
81
81
|
|
82
82
|
expected = <<-CODE
|
83
83
|
def self.gvalue_in value
|
84
|
-
_v1 =
|
84
|
+
_v1 = GObject::Value.from(value)
|
85
85
|
GIMarshallingTests::Lib.gi_marshalling_tests_gvalue_in _v1
|
86
86
|
end
|
87
87
|
CODE
|
@@ -96,7 +96,7 @@ describe GirFFI::Builders::FunctionBuilder do
|
|
96
96
|
|
97
97
|
expected = <<-CODE
|
98
98
|
def self.test_array_int_null_in arr
|
99
|
-
_v1 =
|
99
|
+
_v1 = GirFFI::SizedArray.from(:gint32, -1, arr)
|
100
100
|
len = arr.nil? ? 0 : arr.length
|
101
101
|
_v2 = len
|
102
102
|
Regress::Lib.regress_test_array_int_null_in _v1, _v2
|
@@ -117,7 +117,7 @@ describe GirFFI::Builders::FunctionBuilder do
|
|
117
117
|
_v2 = GirFFI::InOutPointer.for :gint32
|
118
118
|
Regress::Lib.regress_test_array_int_null_out _v1, _v2
|
119
119
|
_v3 = _v2.to_value
|
120
|
-
_v4 =
|
120
|
+
_v4 = GirFFI::SizedArray.wrap(:gint32, _v3, _v1.to_value)
|
121
121
|
return _v4
|
122
122
|
end
|
123
123
|
CODE
|
@@ -132,12 +132,14 @@ describe GirFFI::Builders::FunctionBuilder do
|
|
132
132
|
|
133
133
|
expected = <<-CODE
|
134
134
|
def method_array_inout ints
|
135
|
-
_v1 = GirFFI::InOutPointer.
|
135
|
+
_v1 = GirFFI::InOutPointer.for [:pointer, :c]
|
136
|
+
_v1.set_value GirFFI::SizedArray.from(:gint32, -1, ints)
|
136
137
|
length = ints.nil? ? 0 : ints.length
|
137
|
-
_v2 = GirFFI::InOutPointer.
|
138
|
+
_v2 = GirFFI::InOutPointer.for :gint32
|
139
|
+
_v2.set_value length
|
138
140
|
GIMarshallingTests::Lib.gi_marshalling_tests_object_method_array_inout self, _v1, _v2
|
139
141
|
_v3 = _v2.to_value
|
140
|
-
_v4 =
|
142
|
+
_v4 = GirFFI::SizedArray.wrap(:gint32, _v3, _v1.to_value)
|
141
143
|
return _v4
|
142
144
|
end
|
143
145
|
CODE
|
@@ -169,7 +171,7 @@ describe GirFFI::Builders::FunctionBuilder do
|
|
169
171
|
it "builds a correct definition" do
|
170
172
|
code.must_equal <<-CODE.reset_indentation
|
171
173
|
def get_strv
|
172
|
-
_v1 =
|
174
|
+
_v1 = GirFFI::InOutPointer.for :guint64
|
173
175
|
_v2 = GLib::Lib.g_variant_get_strv self, _v1
|
174
176
|
_v3 = GLib::Strv.wrap(_v2)
|
175
177
|
return _v3
|
@@ -177,5 +179,21 @@ describe GirFFI::Builders::FunctionBuilder do
|
|
177
179
|
CODE
|
178
180
|
end
|
179
181
|
end
|
182
|
+
|
183
|
+
describe "for Regress.has_parameter_named_attrs" do
|
184
|
+
let(:function_info) {get_introspection_data 'Regress', 'has_parameter_named_attrs' }
|
185
|
+
|
186
|
+
it "builds a correct definition" do
|
187
|
+
skip unless function_info
|
188
|
+
code.must_equal <<-CODE.reset_indentation
|
189
|
+
def self.has_parameter_named_attrs foo, attributes
|
190
|
+
_v1 = foo
|
191
|
+
GirFFI::ArgHelper.check_fixed_array_size 32, attributes, \"attributes\"
|
192
|
+
_v2 = GirFFI::SizedArray.from([:pointer, :guint32], 32, attributes)
|
193
|
+
Regress::Lib.regress_has_parameter_named_attrs _v1, _v2
|
194
|
+
end
|
195
|
+
CODE
|
196
|
+
end
|
197
|
+
end
|
180
198
|
end
|
181
199
|
end
|
@@ -1,6 +1,9 @@
|
|
1
1
|
require 'gir_ffi_test_helper'
|
2
2
|
|
3
3
|
describe GirFFI::Builders::InterfaceBuilder do
|
4
|
+
let(:interface_builder) { GirFFI::Builders::InterfaceBuilder.new(
|
5
|
+
get_introspection_data('Regress', 'TestInterface')) }
|
6
|
+
|
4
7
|
describe "#build_class" do
|
5
8
|
before do
|
6
9
|
info = get_introspection_data 'GObject', 'TypePlugin'
|
@@ -16,4 +19,10 @@ describe GirFFI::Builders::InterfaceBuilder do
|
|
16
19
|
assert_defines_instance_method @iface, :complete_interface_info
|
17
20
|
end
|
18
21
|
end
|
22
|
+
|
23
|
+
describe "#interface_struct" do
|
24
|
+
it "returns the interface struct type" do
|
25
|
+
interface_builder.interface_struct.must_equal Regress::TestInterfaceIface
|
26
|
+
end
|
27
|
+
end
|
19
28
|
end
|
@@ -1,45 +1,6 @@
|
|
1
1
|
require 'gir_ffi_test_helper'
|
2
2
|
|
3
3
|
describe GirFFI::Builders::ModuleBuilder do
|
4
|
-
describe "#function_definition" do
|
5
|
-
it "delegates to GirFFI::Builders::FunctionBuilder#generate" do
|
6
|
-
builder = GirFFI::Builders::ModuleBuilder.new "Foo"
|
7
|
-
|
8
|
-
mock(fb = Object.new).generate { "function body" }
|
9
|
-
mock(GirFFI::Builders::FunctionBuilder).new("info") { fb }
|
10
|
-
|
11
|
-
result = builder.send :function_definition, "info"
|
12
|
-
|
13
|
-
assert_equal "function body", result
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
describe "#sub_builder" do
|
18
|
-
describe "for a :function argument" do
|
19
|
-
it "creates a GirFFI::Builders::FunctionBuilder object" do
|
20
|
-
builder = GirFFI::Builders::ModuleBuilder.new "Foo"
|
21
|
-
|
22
|
-
stub(info = Object.new).info_type { :function }
|
23
|
-
|
24
|
-
result = builder.send :sub_builder, info
|
25
|
-
assert_instance_of GirFFI::Builders::FunctionBuilder, result
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
describe "for an :object argument" do
|
30
|
-
it "creates a GirFFI::Builders::ObjectBuilder object" do
|
31
|
-
builder = GirFFI::Builders::ModuleBuilder.new "Foo"
|
32
|
-
|
33
|
-
stub(info = Object.new).info_type { :object }
|
34
|
-
stub(info).namespace { "Foo" }
|
35
|
-
stub(info).safe_name { "FooClass" }
|
36
|
-
|
37
|
-
result = builder.send :sub_builder, info
|
38
|
-
assert_instance_of GirFFI::Builders::ObjectBuilder, result
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
4
|
describe "#build_namespaced_class" do
|
44
5
|
it "raises a clear error if the named class does not exist" do
|
45
6
|
gir = GObjectIntrospection::IRepository.default
|
@@ -1,61 +1,61 @@
|
|
1
1
|
require 'gir_ffi_test_helper'
|
2
2
|
|
3
3
|
describe GirFFI::Builders::ObjectBuilder do
|
4
|
+
let(:obj_builder) { GirFFI::Builders::ObjectBuilder.new(
|
5
|
+
get_introspection_data('Regress', 'TestObj')) }
|
6
|
+
let(:sub_obj_builder) { GirFFI::Builders::ObjectBuilder.new(
|
7
|
+
get_introspection_data('Regress', 'TestSubObj')) }
|
8
|
+
|
4
9
|
describe '#find_signal' do
|
5
10
|
it 'finds the signal "test" for TestObj' do
|
6
|
-
|
7
|
-
sig
|
8
|
-
assert_equal 'test', sig.name
|
11
|
+
sig = obj_builder.find_signal 'test'
|
12
|
+
sig.name.must_equal 'test'
|
9
13
|
end
|
10
14
|
|
11
15
|
it 'finds the signal "test" for TestSubObj' do
|
12
|
-
|
13
|
-
sig
|
14
|
-
assert_equal 'test', sig.name
|
16
|
+
sig = sub_obj_builder.find_signal 'test'
|
17
|
+
sig.name.must_equal 'test'
|
15
18
|
end
|
16
19
|
|
17
20
|
it 'finds the signal "changed" for Gtk::Entry' do
|
18
21
|
builder = GirFFI::Builders::ObjectBuilder.new get_introspection_data('Gtk', 'Entry')
|
19
22
|
sig = builder.find_signal 'changed'
|
20
|
-
|
23
|
+
sig.name.must_equal 'changed'
|
21
24
|
end
|
22
25
|
end
|
23
26
|
|
24
27
|
describe "#find_property" do
|
25
28
|
it "finds a property specified on the class itself" do
|
26
|
-
|
27
|
-
|
28
|
-
prop = builder.find_property("int")
|
29
|
-
assert_equal "int", prop.name
|
29
|
+
prop = obj_builder.find_property("int")
|
30
|
+
prop.name.must_equal "int"
|
30
31
|
end
|
31
32
|
|
32
33
|
it "finds a property specified on the parent class" do
|
33
|
-
|
34
|
-
|
35
|
-
prop = builder.find_property("int")
|
36
|
-
assert_equal "int", prop.name
|
34
|
+
prop = sub_obj_builder.find_property("int")
|
35
|
+
prop.name.must_equal "int"
|
37
36
|
end
|
38
37
|
|
39
38
|
it "raises an error if the property is not found" do
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
builder.find_property("this-property-does-not-exist")
|
44
|
-
end
|
39
|
+
proc {
|
40
|
+
sub_obj_builder.find_property("this-property-does-not-exist")
|
41
|
+
}.must_raise RuntimeError
|
45
42
|
end
|
46
43
|
end
|
47
44
|
|
48
45
|
describe "#function_definition" do
|
49
|
-
|
50
|
-
|
51
|
-
@go = get_method_introspection_data 'Regress', 'TestObj', 'instance_method'
|
52
|
-
end
|
46
|
+
let(:method_info) {
|
47
|
+
get_method_introspection_data 'Regress', 'TestObj', 'instance_method' }
|
53
48
|
|
54
49
|
it "delegates definition to FunctionBuilder" do
|
55
|
-
code =
|
56
|
-
expected = GirFFI::Builders::FunctionBuilder.new(
|
57
|
-
|
50
|
+
code = obj_builder.send :function_definition, method_info
|
51
|
+
expected = GirFFI::Builders::FunctionBuilder.new(method_info).generate
|
52
|
+
code.must_equal expected
|
58
53
|
end
|
54
|
+
end
|
59
55
|
|
56
|
+
describe "#object_class_struct" do
|
57
|
+
it "returns the class struct type" do
|
58
|
+
obj_builder.object_class_struct.must_equal Regress::TestObjClass
|
59
|
+
end
|
60
60
|
end
|
61
61
|
end
|
@@ -0,0 +1,110 @@
|
|
1
|
+
require 'gir_ffi_test_helper'
|
2
|
+
|
3
|
+
describe GirFFI::Builders::PropertyBuilder do
|
4
|
+
let(:builder) { GirFFI::Builders::PropertyBuilder.new property_info }
|
5
|
+
|
6
|
+
describe "for a property of type :glist" do
|
7
|
+
let(:property_info) { get_property_introspection_data("Regress", "TestObj", "list") }
|
8
|
+
it "generates the correct getter definition" do
|
9
|
+
expected = <<-CODE.reset_indentation
|
10
|
+
def list
|
11
|
+
_v1 = get_property("list").get_value_plain
|
12
|
+
_v2 = GLib::List.wrap(:utf8, _v1)
|
13
|
+
_v2
|
14
|
+
end
|
15
|
+
CODE
|
16
|
+
|
17
|
+
builder.getter_def.must_equal expected
|
18
|
+
end
|
19
|
+
|
20
|
+
it "generates the correct setter definition" do
|
21
|
+
expected = <<-CODE.reset_indentation
|
22
|
+
def list= value
|
23
|
+
_v1 = GLib::List.from(:utf8, value)
|
24
|
+
set_property("list", _v1)
|
25
|
+
end
|
26
|
+
CODE
|
27
|
+
|
28
|
+
builder.setter_def.must_equal expected
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "for a property of type :ghash" do
|
33
|
+
let(:property_info) { get_property_introspection_data("Regress", "TestObj", "hash-table") }
|
34
|
+
it "generates the correct getter definition" do
|
35
|
+
expected = <<-CODE.reset_indentation
|
36
|
+
def hash_table
|
37
|
+
_v1 = get_property("hash-table").get_value_plain
|
38
|
+
_v2 = GLib::HashTable.wrap([:utf8, :gint8], _v1)
|
39
|
+
_v2
|
40
|
+
end
|
41
|
+
CODE
|
42
|
+
|
43
|
+
builder.getter_def.must_equal expected
|
44
|
+
end
|
45
|
+
|
46
|
+
it "generates the correct setter definition" do
|
47
|
+
expected = <<-CODE.reset_indentation
|
48
|
+
def hash_table= value
|
49
|
+
_v1 = GLib::HashTable.from([:utf8, :gint8], value)
|
50
|
+
set_property("hash-table", _v1)
|
51
|
+
end
|
52
|
+
CODE
|
53
|
+
|
54
|
+
builder.setter_def.must_equal expected
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe "for a property of type :strv" do
|
59
|
+
let(:property_info) { get_property_introspection_data("GIMarshallingTests",
|
60
|
+
"PropertiesObject",
|
61
|
+
"some-strv") }
|
62
|
+
before do
|
63
|
+
skip unless property_info
|
64
|
+
end
|
65
|
+
|
66
|
+
it "generates the correct getter definition" do
|
67
|
+
expected = <<-CODE.reset_indentation
|
68
|
+
def some_strv
|
69
|
+
get_property("some-strv").get_value
|
70
|
+
end
|
71
|
+
CODE
|
72
|
+
|
73
|
+
builder.getter_def.must_equal expected
|
74
|
+
end
|
75
|
+
|
76
|
+
it "generates the correct setter definition" do
|
77
|
+
expected = <<-CODE.reset_indentation
|
78
|
+
def some_strv= value
|
79
|
+
_v1 = GLib::Strv.from(value)
|
80
|
+
set_property("some-strv", _v1)
|
81
|
+
end
|
82
|
+
CODE
|
83
|
+
|
84
|
+
builder.setter_def.must_equal expected
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
describe "for a property of type :utf8" do
|
89
|
+
let(:property_info) { get_property_introspection_data("Regress", "TestObj", "string") }
|
90
|
+
it "generates the correct getter definition" do
|
91
|
+
expected = <<-CODE.reset_indentation
|
92
|
+
def string
|
93
|
+
get_property("string").get_value
|
94
|
+
end
|
95
|
+
CODE
|
96
|
+
|
97
|
+
builder.getter_def.must_equal expected
|
98
|
+
end
|
99
|
+
|
100
|
+
it "generates the correct setter definition" do
|
101
|
+
expected = <<-CODE.reset_indentation
|
102
|
+
def string= value
|
103
|
+
set_property("string", value)
|
104
|
+
end
|
105
|
+
CODE
|
106
|
+
|
107
|
+
builder.setter_def.must_equal expected
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|