gir_ffi 0.6.7 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|