gir_ffi 0.7.7 → 0.7.8
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 +4 -4
- data/Changelog.md +9 -0
- data/lib/ffi-glib/array.rb +1 -1
- data/lib/ffi-glib/error.rb +1 -2
- data/lib/ffi-glib/hash_table.rb +2 -2
- data/lib/ffi-glib/variant.rb +1 -1
- data/lib/ffi-gobject/base.rb +23 -23
- data/lib/ffi-gobject/object.rb +7 -3
- data/lib/ffi-gobject/value.rb +6 -1
- data/lib/ffi-gobject.rb +9 -6
- data/lib/ffi-gobject_introspection/i_base_info.rb +3 -3
- data/lib/ffi-gobject_introspection/i_constant_info.rb +1 -1
- data/lib/ffi-gobject_introspection/i_repository.rb +4 -1
- data/lib/ffi-gobject_introspection/i_type_info.rb +1 -1
- data/lib/ffi-gobject_introspection/i_unresolved_info.rb +7 -0
- data/lib/ffi-gobject_introspection/lib.rb +1 -1
- data/lib/gir_ffi/builders/argument_builder.rb +1 -1
- data/lib/gir_ffi/builders/c_to_ruby_convertor.rb +37 -29
- data/lib/gir_ffi/builders/callback_argument_builder.rb +57 -27
- data/lib/gir_ffi/builders/closure_convertor.rb +12 -8
- data/lib/gir_ffi/builders/closure_to_pointer_convertor.rb +12 -8
- data/lib/gir_ffi/builders/constructor_result_convertor.rb +11 -7
- data/lib/gir_ffi/builders/field_builder.rb +1 -1
- data/lib/gir_ffi/builders/function_builder.rb +1 -1
- data/lib/gir_ffi/builders/mapping_method_builder.rb +1 -1
- data/lib/gir_ffi/builders/marshalling_method_builder.rb +2 -2
- data/lib/gir_ffi/builders/method_template.rb +1 -1
- data/lib/gir_ffi/builders/null_convertor.rb +11 -7
- data/lib/gir_ffi/builders/property_builder.rb +1 -1
- data/lib/gir_ffi/builders/ruby_to_c_convertor.rb +17 -13
- data/lib/gir_ffi/error_argument_info.rb +1 -1
- data/lib/gir_ffi/ffi_ext/pointer.rb +1 -1
- data/lib/gir_ffi/info_ext/i_unresolved_info.rb +12 -0
- data/lib/gir_ffi/info_ext/safe_constant_name.rb +2 -2
- data/lib/gir_ffi/info_ext/safe_function_name.rb +1 -1
- data/lib/gir_ffi/info_ext.rb +1 -0
- data/lib/gir_ffi/module_base.rb +1 -1
- data/lib/gir_ffi/receiver_argument_info.rb +15 -12
- data/lib/gir_ffi/user_data_argument_info.rb +17 -15
- data/lib/gir_ffi/user_data_type_info.rb +14 -12
- data/lib/gir_ffi/version.rb +1 -1
- data/lib/gir_ffi-base/gobject/lib.rb +1 -1
- data/test/base_test_helper.rb +15 -15
- data/test/ffi-glib/array_test.rb +38 -38
- data/test/ffi-glib/byte_array_test.rb +6 -7
- data/test/ffi-glib/bytes_test.rb +9 -9
- data/test/ffi-glib/hash_table_test.rb +26 -23
- data/test/ffi-glib/iconv_test.rb +5 -5
- data/test/ffi-glib/list_test.rb +16 -16
- data/test/ffi-glib/main_loop_test.rb +6 -6
- data/test/ffi-glib/ptr_array_test.rb +45 -45
- data/test/ffi-glib/ruby_closure_test.rb +6 -6
- data/test/ffi-glib/s_list_test.rb +15 -15
- data/test/ffi-glib/strv_test.rb +21 -21
- data/test/ffi-glib/variant_test.rb +4 -4
- data/test/ffi-gobject/gobject_test.rb +35 -35
- data/test/ffi-gobject/object_class_test.rb +1 -1
- data/test/ffi-gobject/object_test.rb +29 -6
- data/test/ffi-gobject/value_test.rb +66 -52
- data/test/ffi-gobject_introspection/i_base_info_test.rb +10 -11
- data/test/ffi-gobject_introspection/i_constant_info_test.rb +6 -6
- data/test/ffi-gobject_introspection/i_enum_info_test.rb +4 -5
- data/test/ffi-gobject_introspection/i_function_info_test.rb +0 -2
- data/test/ffi-gobject_introspection/i_object_info_test.rb +5 -5
- data/test/ffi-gobject_introspection/i_registered_type_info_test.rb +9 -8
- data/test/ffi-gobject_introspection/i_repository_test.rb +16 -16
- data/test/ffi-gobject_introspection/i_type_info_test.rb +16 -2
- data/test/ffi-gobject_introspection/lib_test.rb +2 -2
- data/test/ffi-gobject_test.rb +50 -40
- data/test/gir_ffi/arg_helper_test.rb +5 -5
- data/test/gir_ffi/builder_test.rb +41 -41
- data/test/gir_ffi/builders/argument_builder_test.rb +240 -207
- data/test/gir_ffi/builders/base_argument_builder_test.rb +0 -1
- data/test/gir_ffi/builders/callback_argument_builder_test.rb +81 -15
- data/test/gir_ffi/builders/callback_builder_test.rb +39 -14
- data/test/gir_ffi/builders/callback_return_value_builder_test.rb +41 -33
- data/test/gir_ffi/builders/enum_builder_test.rb +3 -3
- data/test/gir_ffi/builders/field_builder_test.rb +17 -17
- data/test/gir_ffi/builders/function_builder_test.rb +16 -16
- data/test/gir_ffi/builders/interface_builder_test.rb +9 -7
- data/test/gir_ffi/builders/module_builder_test.rb +5 -6
- data/test/gir_ffi/builders/object_builder_test.rb +24 -19
- data/test/gir_ffi/builders/property_builder_test.rb +25 -23
- data/test/gir_ffi/builders/registered_type_builder_test.rb +11 -11
- data/test/gir_ffi/builders/return_value_builder_test.rb +237 -197
- data/test/gir_ffi/builders/signal_closure_builder_test.rb +29 -22
- data/test/gir_ffi/builders/struct_builder_test.rb +10 -10
- data/test/gir_ffi/builders/unintrospectable_builder_test.rb +8 -8
- data/test/gir_ffi/builders/union_builder_test.rb +5 -6
- data/test/gir_ffi/builders/user_defined_builder_test.rb +42 -33
- data/test/gir_ffi/builders/vfunc_builder_test.rb +37 -30
- data/test/gir_ffi/callback_base_test.rb +4 -5
- data/test/gir_ffi/class_base_test.rb +35 -28
- data/test/gir_ffi/error_type_info_test.rb +14 -14
- data/test/gir_ffi/ffi_ext/pointer_test.rb +4 -4
- data/test/gir_ffi/g_type_test.rb +6 -6
- data/test/gir_ffi/in_out_pointer_test.rb +27 -27
- data/test/gir_ffi/in_pointer_test.rb +54 -50
- data/test/gir_ffi/info_ext/i_callable_info_test.rb +8 -7
- data/test/gir_ffi/info_ext/i_callback_info_test.rb +7 -7
- data/test/gir_ffi/info_ext/i_field_info_test.rb +10 -8
- data/test/gir_ffi/info_ext/i_function_info_test.rb +17 -15
- data/test/gir_ffi/info_ext/i_signal_info_test.rb +10 -8
- data/test/gir_ffi/info_ext/i_type_info_test.rb +158 -155
- data/test/gir_ffi/info_ext/i_unresolved_info_test.rb +17 -0
- data/test/gir_ffi/info_ext/safe_constant_name_test.rb +12 -10
- data/test/gir_ffi/info_ext/safe_function_name_test.rb +12 -10
- data/test/gir_ffi/interface_base_test.rb +6 -6
- data/test/gir_ffi/method_stubber_test.rb +16 -13
- data/test/gir_ffi/object_base_test.rb +6 -6
- data/test/gir_ffi/sized_array_test.rb +23 -23
- data/test/gir_ffi/type_map_test.rb +3 -3
- data/test/gir_ffi/unintrospectable_type_info_test.rb +18 -18
- data/test/gir_ffi/user_defined_property_info_test.rb +4 -4
- data/test/gir_ffi/user_defined_type_info_test.rb +16 -16
- data/test/gir_ffi/variable_name_generator_test.rb +6 -6
- data/test/gir_ffi/version_test.rb +1 -1
- data/test/gir_ffi/zero_terminated_test.rb +16 -17
- data/test/gir_ffi-base/glib/boolean_test.rb +13 -13
- data/test/gir_ffi-base/glib/strv_test.rb +11 -11
- data/test/gir_ffi_test.rb +18 -18
- data/test/gir_ffi_test_helper.rb +13 -18
- data/test/integration/derived_classes_test.rb +8 -8
- data/test/integration/generated_gimarshallingtests_test.rb +794 -792
- data/test/integration/generated_gio_test.rb +25 -26
- data/test/integration/generated_glib_test.rb +8 -2
- data/test/integration/generated_gobject_test.rb +16 -9
- data/test/integration/generated_pango_ft2_test.rb +1 -2
- data/test/integration/generated_pango_test.rb +2 -2
- data/test/integration/generated_regress_test.rb +785 -705
- data/test/integration/generated_secret_test.rb +5 -5
- data/test/integration/method_lookup_test.rb +5 -5
- data/test/introspection_test_helper.rb +3 -1
- data/test/minitest/stats_plugin.rb +3 -3
- metadata +6 -3
@@ -4,41 +4,107 @@ describe GirFFI::Builders::CallbackArgumentBuilder do
|
|
4
4
|
let(:var_gen) { GirFFI::VariableNameGenerator.new }
|
5
5
|
let(:builder) { GirFFI::Builders::CallbackArgumentBuilder.new(var_gen, arg_info) }
|
6
6
|
|
7
|
-
describe
|
8
|
-
describe
|
7
|
+
describe 'for an argument with direction :out' do
|
8
|
+
describe 'for :zero_terminated' do
|
9
9
|
let(:vfunc_info) {
|
10
10
|
get_vfunc_introspection_data('GIMarshallingTests', 'Object',
|
11
|
-
'vfunc_array_out_parameter')
|
11
|
+
'vfunc_array_out_parameter')
|
12
|
+
}
|
12
13
|
let(:arg_info) { vfunc_info.args[0] }
|
13
14
|
|
14
15
|
before { skip unless vfunc_info }
|
15
16
|
|
16
|
-
it
|
17
|
-
builder.pre_conversion.must_equal [
|
17
|
+
it 'has the correct value for #pre_conversion' do
|
18
|
+
builder.pre_conversion.must_equal ['_v1 = GirFFI::InOutPointer.new([:pointer, :zero_terminated], a)']
|
18
19
|
end
|
19
20
|
|
20
|
-
it
|
21
|
-
builder.post_conversion.must_equal [
|
21
|
+
it 'has the correct value for #post_conversion' do
|
22
|
+
builder.post_conversion.must_equal ['_v1.set_value GirFFI::ZeroTerminated.from(:gfloat, _v2)']
|
22
23
|
end
|
23
24
|
end
|
24
25
|
end
|
25
26
|
|
26
|
-
describe
|
27
|
+
describe 'for an argument with direction :error' do
|
27
28
|
let(:arg_info) { GirFFI::ErrorArgumentInfo.new }
|
28
29
|
|
29
|
-
it
|
30
|
+
it 'sets up a rescueing block in #pre_conversion' do
|
30
31
|
builder.pre_conversion.must_equal [
|
31
|
-
|
32
|
-
|
32
|
+
'_v1 = GirFFI::InOutPointer.new([:pointer, :error], _error)',
|
33
|
+
'begin'
|
33
34
|
]
|
34
35
|
end
|
35
36
|
|
36
|
-
it
|
37
|
+
it 'converts any exceptions to GLib::Error in #post_conversion' do
|
37
38
|
builder.post_conversion.must_equal [
|
38
|
-
|
39
|
-
|
40
|
-
|
39
|
+
'rescue => _v1',
|
40
|
+
'_v2.set_value GLib::Error.from(_v1)',
|
41
|
+
'end'
|
41
42
|
]
|
42
43
|
end
|
43
44
|
end
|
45
|
+
|
46
|
+
describe 'for an argument with direction :inout' do
|
47
|
+
let(:callback_info) {
|
48
|
+
get_introspection_data('Regress',
|
49
|
+
'TestCallbackArrayInOut')
|
50
|
+
}
|
51
|
+
let(:array_arg_info) { callback_info.args[0] }
|
52
|
+
let(:array_arg_builder) {
|
53
|
+
GirFFI::Builders::CallbackArgumentBuilder.new(var_gen, array_arg_info)
|
54
|
+
}
|
55
|
+
let(:length_arg_info) { callback_info.args[1] }
|
56
|
+
let(:length_arg_builder) {
|
57
|
+
GirFFI::Builders::CallbackArgumentBuilder.new(var_gen, length_arg_info)
|
58
|
+
}
|
59
|
+
|
60
|
+
before do
|
61
|
+
skip unless callback_info
|
62
|
+
length_arg_builder.array_arg = array_arg_builder
|
63
|
+
array_arg_builder.length_arg = length_arg_builder
|
64
|
+
end
|
65
|
+
|
66
|
+
describe 'for arrays with a length argument' do
|
67
|
+
it 'provides a call argument name' do
|
68
|
+
array_arg_builder.call_argument_name.must_equal '_v1'
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'provides a capture variable name' do
|
72
|
+
array_arg_builder.capture_variable_name.must_equal '_v1'
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'has the correct value for #pre_conversion' do
|
76
|
+
array_arg_builder.pre_conversion.
|
77
|
+
must_equal ['_v1 = GirFFI::InOutPointer.new([:pointer, :c], ints)',
|
78
|
+
'_v2 = GirFFI::SizedArray.wrap(:gint32, _v3, _v1.to_value)']
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'has the correct value for #post_conversion' do
|
82
|
+
array_arg_builder.pre_conversion
|
83
|
+
array_arg_builder.post_conversion.
|
84
|
+
must_equal ['_v1.set_value GirFFI::SizedArray.from(:gint32, -1, _v4)']
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
describe 'for an array length argument' do
|
89
|
+
it 'does not provide a call argument name' do
|
90
|
+
length_arg_builder.call_argument_name.must_be_nil
|
91
|
+
end
|
92
|
+
|
93
|
+
it 'does not provide a capture variable name' do
|
94
|
+
length_arg_builder.capture_variable_name.must_be_nil
|
95
|
+
end
|
96
|
+
|
97
|
+
it 'has the correct value for #pre_conversion' do
|
98
|
+
length_arg_builder.pre_conversion.
|
99
|
+
must_equal ['_v1 = GirFFI::InOutPointer.new(:gint32, length)',
|
100
|
+
'_v2 = _v1.to_value']
|
101
|
+
end
|
102
|
+
|
103
|
+
it 'has the correct value for #post_conversion' do
|
104
|
+
length_arg_builder.pre_conversion
|
105
|
+
length_arg_builder.post_conversion.
|
106
|
+
must_equal ['_v1.set_value _v3.length']
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
44
110
|
end
|
@@ -3,10 +3,10 @@ require 'gir_ffi_test_helper'
|
|
3
3
|
describe GirFFI::Builders::CallbackBuilder do
|
4
4
|
let(:builder) { GirFFI::Builders::CallbackBuilder.new callback_info }
|
5
5
|
|
6
|
-
describe
|
7
|
-
describe
|
8
|
-
let(:callback_info) { get_introspection_data
|
9
|
-
it
|
6
|
+
describe '#mapping_method_definition' do
|
7
|
+
describe 'for a callback with arguments and return value' do
|
8
|
+
let(:callback_info) { get_introspection_data 'Regress', 'TestCallbackFull' }
|
9
|
+
it 'returns a valid mapping method' do
|
10
10
|
expected = <<-CODE.reset_indentation
|
11
11
|
def self.call_with_argument_mapping(_proc, foo, bar, path)
|
12
12
|
_v1 = foo
|
@@ -21,9 +21,9 @@ describe GirFFI::Builders::CallbackBuilder do
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
-
describe
|
25
|
-
let(:callback_info) { get_introspection_data
|
26
|
-
it
|
24
|
+
describe 'for a callback with no arguments or return value' do
|
25
|
+
let(:callback_info) { get_introspection_data 'Regress', 'TestSimpleCallback' }
|
26
|
+
it 'returns a valid mapping method' do
|
27
27
|
expected = <<-CODE.reset_indentation
|
28
28
|
def self.call_with_argument_mapping(_proc)
|
29
29
|
_proc.call()
|
@@ -34,9 +34,9 @@ describe GirFFI::Builders::CallbackBuilder do
|
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
|
-
describe
|
38
|
-
let(:callback_info) { get_introspection_data
|
39
|
-
it
|
37
|
+
describe 'for a callback with a closure argument' do
|
38
|
+
let(:callback_info) { get_introspection_data 'Regress', 'TestCallbackUserData' }
|
39
|
+
it 'returns a valid mapping method' do
|
40
40
|
expected = <<-CODE.reset_indentation
|
41
41
|
def self.call_with_argument_mapping(_proc, user_data)
|
42
42
|
_v1 = GirFFI::ArgHelper::OBJECT_STORE.fetch(user_data)
|
@@ -49,10 +49,12 @@ describe GirFFI::Builders::CallbackBuilder do
|
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
52
|
-
describe
|
53
|
-
let(:callback_info) {
|
54
|
-
|
55
|
-
|
52
|
+
describe 'for a callback with one out argument' do
|
53
|
+
let(:callback_info) {
|
54
|
+
get_introspection_data('GIMarshallingTests',
|
55
|
+
'CallbackOneOutParameter')
|
56
|
+
}
|
57
|
+
it 'returns a valid mapping method' do
|
56
58
|
expected = <<-CODE.reset_indentation
|
57
59
|
def self.call_with_argument_mapping(_proc, a)
|
58
60
|
_v1 = GirFFI::InOutPointer.new(:gfloat, a)
|
@@ -64,5 +66,28 @@ describe GirFFI::Builders::CallbackBuilder do
|
|
64
66
|
builder.mapping_method_definition.must_equal expected
|
65
67
|
end
|
66
68
|
end
|
69
|
+
|
70
|
+
describe 'for a callback with an inout array argument' do
|
71
|
+
let(:callback_info) {
|
72
|
+
get_introspection_data('Regress',
|
73
|
+
'TestCallbackArrayInOut')
|
74
|
+
}
|
75
|
+
it 'returns a valid mapping method' do
|
76
|
+
skip unless callback_info
|
77
|
+
expected = <<-CODE.reset_indentation
|
78
|
+
def self.call_with_argument_mapping(_proc, ints, length)
|
79
|
+
_v1 = GirFFI::InOutPointer.new(:gint32, length)
|
80
|
+
_v2 = _v1.to_value
|
81
|
+
_v3 = GirFFI::InOutPointer.new([:pointer, :c], ints)
|
82
|
+
_v4 = GirFFI::SizedArray.wrap(:gint32, _v2, _v3.to_value)
|
83
|
+
_v5 = _proc.call(_v4)
|
84
|
+
_v1.set_value _v5.length
|
85
|
+
_v3.set_value GirFFI::SizedArray.from(:gint32, -1, _v5)
|
86
|
+
end
|
87
|
+
CODE
|
88
|
+
|
89
|
+
builder.mapping_method_definition.must_equal expected
|
90
|
+
end
|
91
|
+
end
|
67
92
|
end
|
68
93
|
end
|
@@ -4,71 +4,79 @@ describe GirFFI::Builders::CallbackReturnValueBuilder do
|
|
4
4
|
let(:var_gen) { GirFFI::VariableNameGenerator.new }
|
5
5
|
let(:return_value_info) { GirFFI::ReturnValueInfo.new(type_info) }
|
6
6
|
let(:type_info) { callback_info.return_type }
|
7
|
-
let(:builder) {
|
8
|
-
|
7
|
+
let(:builder) {
|
8
|
+
GirFFI::Builders::CallbackReturnValueBuilder.new(var_gen,
|
9
|
+
return_value_info)
|
10
|
+
}
|
9
11
|
|
10
12
|
before do
|
11
13
|
skip unless callback_info
|
12
14
|
end
|
13
15
|
|
14
|
-
describe
|
15
|
-
let(:callback_info) { get_introspection_data(
|
16
|
+
describe 'for :gint32' do
|
17
|
+
let(:callback_info) { get_introspection_data('GIMarshallingTests', 'CallbackIntInt') }
|
16
18
|
|
17
|
-
it
|
19
|
+
it 'has no statements in #post_conversion' do
|
18
20
|
builder.post_conversion.must_equal []
|
19
21
|
end
|
20
22
|
|
21
|
-
it
|
22
|
-
builder.capture_variable_name.must_equal
|
23
|
-
builder.return_value_name.must_equal
|
23
|
+
it 'returns the result of the callback directly' do
|
24
|
+
builder.capture_variable_name.must_equal '_v1'
|
25
|
+
builder.return_value_name.must_equal '_v1'
|
24
26
|
end
|
25
27
|
end
|
26
28
|
|
27
|
-
describe
|
28
|
-
let(:callback_info) {
|
29
|
-
|
29
|
+
describe 'for :void' do
|
30
|
+
let(:callback_info) {
|
31
|
+
get_introspection_data('GIMarshallingTests',
|
32
|
+
'CallbackMultipleOutParameters')
|
33
|
+
}
|
30
34
|
|
31
|
-
it
|
35
|
+
it 'has no statements in #post_conversion' do
|
32
36
|
builder.post_conversion.must_equal []
|
33
37
|
end
|
34
38
|
|
35
|
-
it
|
39
|
+
it 'returns nothing' do
|
36
40
|
builder.capture_variable_name.must_be_nil
|
37
41
|
builder.return_value_name.must_be_nil
|
38
42
|
end
|
39
43
|
end
|
40
44
|
|
41
|
-
describe
|
42
|
-
let(:callback_info) {
|
43
|
-
|
44
|
-
|
45
|
+
describe 'for :enum' do
|
46
|
+
let(:callback_info) {
|
47
|
+
get_vfunc_introspection_data('GIMarshallingTests',
|
48
|
+
'Object',
|
49
|
+
'vfunc_return_enum')
|
50
|
+
}
|
45
51
|
|
46
|
-
it
|
52
|
+
it 'converts the result' do
|
47
53
|
# Ensure variable names are generated in order
|
48
|
-
builder.capture_variable_name.must_equal
|
49
|
-
builder.post_conversion.must_equal [
|
54
|
+
builder.capture_variable_name.must_equal '_v1'
|
55
|
+
builder.post_conversion.must_equal ['_v2 = GIMarshallingTests::Enum.from(_v1)']
|
50
56
|
end
|
51
57
|
|
52
|
-
it
|
53
|
-
builder.capture_variable_name.must_equal
|
54
|
-
builder.return_value_name.must_equal
|
58
|
+
it 'returns the result of the conversion' do
|
59
|
+
builder.capture_variable_name.must_equal '_v1'
|
60
|
+
builder.return_value_name.must_equal '_v2'
|
55
61
|
end
|
56
62
|
end
|
57
63
|
|
58
|
-
describe
|
59
|
-
let(:callback_info) {
|
60
|
-
|
61
|
-
|
64
|
+
describe 'for :object' do
|
65
|
+
let(:callback_info) {
|
66
|
+
get_vfunc_introspection_data('GIMarshallingTests',
|
67
|
+
'Object',
|
68
|
+
'vfunc_return_object_transfer_full')
|
69
|
+
}
|
62
70
|
|
63
|
-
it
|
71
|
+
it 'converts the result to a pointer' do
|
64
72
|
# Ensure variable names are generated in order
|
65
|
-
builder.capture_variable_name.must_equal
|
66
|
-
builder.post_conversion.must_equal [
|
73
|
+
builder.capture_variable_name.must_equal '_v1'
|
74
|
+
builder.post_conversion.must_equal ['_v2 = GObject::Object.from(_v1).to_ptr']
|
67
75
|
end
|
68
76
|
|
69
|
-
it
|
70
|
-
builder.capture_variable_name.must_equal
|
71
|
-
builder.return_value_name.must_equal
|
77
|
+
it 'returns the result of the conversion' do
|
78
|
+
builder.capture_variable_name.must_equal '_v1'
|
79
|
+
builder.return_value_name.must_equal '_v2'
|
72
80
|
end
|
73
81
|
end
|
74
82
|
end
|
@@ -1,16 +1,16 @@
|
|
1
1
|
require 'gir_ffi_test_helper'
|
2
2
|
|
3
3
|
describe GirFFI::Builders::EnumBuilder do
|
4
|
-
describe
|
4
|
+
describe 'creating Regress::TestEnum' do
|
5
5
|
before do
|
6
6
|
save_module :Regress
|
7
7
|
end
|
8
8
|
|
9
|
-
it
|
9
|
+
it 'makes the created type know its proper name' do
|
10
10
|
info = get_introspection_data 'Regress', 'TestEnum'
|
11
11
|
builder = GirFFI::Builders::EnumBuilder.new info
|
12
12
|
enum = builder.build_class
|
13
|
-
enum.inspect.must_equal
|
13
|
+
enum.inspect.must_equal 'Regress::TestEnum'
|
14
14
|
end
|
15
15
|
|
16
16
|
after do
|
@@ -3,9 +3,9 @@ require 'gir_ffi_test_helper'
|
|
3
3
|
describe GirFFI::Builders::FieldBuilder do
|
4
4
|
let(:instance) { GirFFI::Builders::FieldBuilder.new field_info }
|
5
5
|
|
6
|
-
describe
|
7
|
-
let(:field_info) { get_field_introspection_data
|
8
|
-
it
|
6
|
+
describe 'for a field of type :gint8 with an offset' do
|
7
|
+
let(:field_info) { get_field_introspection_data 'Regress', 'TestSimpleBoxedA', 'some_int8' }
|
8
|
+
it 'creates the right getter method' do
|
9
9
|
expected = <<-CODE.reset_indentation
|
10
10
|
def some_int8
|
11
11
|
_v1 = @struct.to_ptr + #{field_info.offset}
|
@@ -18,7 +18,7 @@ describe GirFFI::Builders::FieldBuilder do
|
|
18
18
|
instance.getter_def.must_equal expected
|
19
19
|
end
|
20
20
|
|
21
|
-
it
|
21
|
+
it 'creates the right setter method' do
|
22
22
|
expected = <<-CODE.reset_indentation
|
23
23
|
def some_int8= value
|
24
24
|
_v1 = @struct.to_ptr + #{field_info.offset}
|
@@ -31,9 +31,9 @@ describe GirFFI::Builders::FieldBuilder do
|
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
-
describe
|
35
|
-
let(:field_info) { get_field_introspection_data
|
36
|
-
it
|
34
|
+
describe 'for a field of type :struct' do
|
35
|
+
let(:field_info) { get_field_introspection_data 'Regress', 'TestBoxed', 'nested_a' }
|
36
|
+
it 'creates the right getter method' do
|
37
37
|
expected = <<-CODE.reset_indentation
|
38
38
|
def nested_a
|
39
39
|
_v1 = @struct.to_ptr + #{field_info.offset}
|
@@ -47,9 +47,9 @@ describe GirFFI::Builders::FieldBuilder do
|
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
|
-
describe
|
51
|
-
let(:field_info) { get_field_introspection_data
|
52
|
-
it
|
50
|
+
describe 'for a field of type :enum' do
|
51
|
+
let(:field_info) { get_field_introspection_data 'Regress', 'TestStructA', 'some_enum' }
|
52
|
+
it 'creates the right getter method' do
|
53
53
|
expected = <<-CODE.reset_indentation
|
54
54
|
def some_enum
|
55
55
|
_v1 = @struct.to_ptr + #{field_info.offset}
|
@@ -63,9 +63,9 @@ describe GirFFI::Builders::FieldBuilder do
|
|
63
63
|
end
|
64
64
|
end
|
65
65
|
|
66
|
-
describe
|
67
|
-
let(:field_info) { get_field_introspection_data
|
68
|
-
it
|
66
|
+
describe 'for an inline fixed-size array field' do
|
67
|
+
let(:field_info) { get_field_introspection_data 'Regress', 'TestStructE', 'some_union' }
|
68
|
+
it 'creates the right getter method' do
|
69
69
|
expected = <<-CODE.reset_indentation
|
70
70
|
def some_union
|
71
71
|
_v1 = @struct.to_ptr + #{field_info.offset}
|
@@ -78,7 +78,7 @@ describe GirFFI::Builders::FieldBuilder do
|
|
78
78
|
instance.getter_def.must_equal expected
|
79
79
|
end
|
80
80
|
|
81
|
-
it
|
81
|
+
it 'creates the right setter method' do
|
82
82
|
expected = <<-CODE.reset_indentation
|
83
83
|
def some_union= value
|
84
84
|
_v1 = @struct.to_ptr + #{field_info.offset}
|
@@ -92,9 +92,9 @@ describe GirFFI::Builders::FieldBuilder do
|
|
92
92
|
end
|
93
93
|
end
|
94
94
|
|
95
|
-
describe
|
96
|
-
let(:field_info) { get_field_introspection_data
|
97
|
-
it
|
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
98
|
expected = <<-CODE.reset_indentation
|
99
99
|
def class_init= value
|
100
100
|
_v1 = @struct.to_ptr + #{field_info.offset}
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'gir_ffi_test_helper'
|
2
2
|
|
3
3
|
describe GirFFI::Builders::FunctionBuilder do
|
4
|
-
it
|
4
|
+
it 'builds a correct definition of Regress:test_array_fixed_out_objects' do
|
5
5
|
go = get_introspection_data 'Regress', 'test_array_fixed_out_objects'
|
6
6
|
skip unless go
|
7
7
|
fbuilder = GirFFI::Builders::FunctionBuilder.new go
|
@@ -19,7 +19,7 @@ describe GirFFI::Builders::FunctionBuilder do
|
|
19
19
|
assert_equal expected.reset_indentation, code
|
20
20
|
end
|
21
21
|
|
22
|
-
it
|
22
|
+
it 'builds a correct definition for functions having a linked length argument' do
|
23
23
|
go = get_introspection_data 'Regress', 'test_array_gint16_in'
|
24
24
|
fbuilder = GirFFI::Builders::FunctionBuilder.new go
|
25
25
|
code = fbuilder.generate
|
@@ -37,7 +37,7 @@ describe GirFFI::Builders::FunctionBuilder do
|
|
37
37
|
assert_equal expected.reset_indentation, code
|
38
38
|
end
|
39
39
|
|
40
|
-
it
|
40
|
+
it 'builds a correct definition for functions with callbacks' do
|
41
41
|
go = get_introspection_data 'Regress', 'test_callback_destroy_notify'
|
42
42
|
fbuilder = GirFFI::Builders::FunctionBuilder.new go
|
43
43
|
code = fbuilder.generate
|
@@ -55,7 +55,7 @@ describe GirFFI::Builders::FunctionBuilder do
|
|
55
55
|
assert_equal expected.reset_indentation, code
|
56
56
|
end
|
57
57
|
|
58
|
-
it
|
58
|
+
it 'builds correct definition for constructors' do
|
59
59
|
go = get_method_introspection_data 'Regress', 'TestObj', 'new_from_file'
|
60
60
|
fbuilder = GirFFI::Builders::FunctionBuilder.new go
|
61
61
|
code = fbuilder.generate
|
@@ -74,7 +74,7 @@ describe GirFFI::Builders::FunctionBuilder do
|
|
74
74
|
assert_equal expected.reset_indentation, code
|
75
75
|
end
|
76
76
|
|
77
|
-
it
|
77
|
+
it 'creates a call to GObject::Value#from for functions that take a GValue' do
|
78
78
|
go = get_introspection_data 'GIMarshallingTests', 'gvalue_in'
|
79
79
|
fbuilder = GirFFI::Builders::FunctionBuilder.new go
|
80
80
|
code = fbuilder.generate
|
@@ -89,7 +89,7 @@ describe GirFFI::Builders::FunctionBuilder do
|
|
89
89
|
assert_equal expected.reset_indentation, code
|
90
90
|
end
|
91
91
|
|
92
|
-
it
|
92
|
+
it 'builds correct definition for functions with a nullable input array' do
|
93
93
|
go = get_introspection_data 'Regress', 'test_array_int_null_in'
|
94
94
|
fbuilder = GirFFI::Builders::FunctionBuilder.new go
|
95
95
|
code = fbuilder.generate
|
@@ -106,7 +106,7 @@ describe GirFFI::Builders::FunctionBuilder do
|
|
106
106
|
assert_equal expected.reset_indentation, code
|
107
107
|
end
|
108
108
|
|
109
|
-
it
|
109
|
+
it 'builds correct definition for functions with a nullable output array' do
|
110
110
|
go = get_introspection_data 'Regress', 'test_array_int_null_out'
|
111
111
|
fbuilder = GirFFI::Builders::FunctionBuilder.new go
|
112
112
|
code = fbuilder.generate
|
@@ -125,7 +125,7 @@ describe GirFFI::Builders::FunctionBuilder do
|
|
125
125
|
assert_equal expected.reset_indentation, code
|
126
126
|
end
|
127
127
|
|
128
|
-
it
|
128
|
+
it 'builds the correct definition for a method with an inout array with size argument' do
|
129
129
|
go = get_method_introspection_data 'GIMarshallingTests', 'Object', 'method_array_inout'
|
130
130
|
fbuilder = GirFFI::Builders::FunctionBuilder.new go
|
131
131
|
code = fbuilder.generate
|
@@ -147,7 +147,7 @@ describe GirFFI::Builders::FunctionBuilder do
|
|
147
147
|
assert_equal expected.reset_indentation, code
|
148
148
|
end
|
149
149
|
|
150
|
-
it
|
150
|
+
it 'builds a correct definition for a simple method' do
|
151
151
|
go = get_method_introspection_data 'Regress', 'TestObj', 'instance_method'
|
152
152
|
fbuilder = GirFFI::Builders::FunctionBuilder.new go
|
153
153
|
code = fbuilder.generate
|
@@ -162,13 +162,13 @@ describe GirFFI::Builders::FunctionBuilder do
|
|
162
162
|
assert_equal expected.reset_indentation, code
|
163
163
|
end
|
164
164
|
|
165
|
-
describe
|
165
|
+
describe '#generate' do
|
166
166
|
let(:builder) { GirFFI::Builders::FunctionBuilder.new function_info }
|
167
167
|
let(:code) { builder.generate }
|
168
168
|
|
169
|
-
describe
|
169
|
+
describe 'for GLib::Variant.get_strv' do
|
170
170
|
let(:function_info) { get_method_introspection_data 'GLib', 'Variant', 'get_strv' }
|
171
|
-
it
|
171
|
+
it 'builds a correct definition' do
|
172
172
|
size_type = ":guint#{FFI.type_size(:size_t) * 8}"
|
173
173
|
code.must_equal <<-CODE.reset_indentation
|
174
174
|
def get_strv
|
@@ -181,10 +181,10 @@ describe GirFFI::Builders::FunctionBuilder do
|
|
181
181
|
end
|
182
182
|
end
|
183
183
|
|
184
|
-
describe
|
184
|
+
describe 'for Regress.has_parameter_named_attrs' do
|
185
185
|
let(:function_info) { get_introspection_data 'Regress', 'has_parameter_named_attrs' }
|
186
186
|
|
187
|
-
it
|
187
|
+
it 'builds a correct definition' do
|
188
188
|
skip unless function_info
|
189
189
|
code.must_equal <<-CODE.reset_indentation
|
190
190
|
def self.has_parameter_named_attrs(foo, attributes)
|
@@ -197,13 +197,13 @@ describe GirFFI::Builders::FunctionBuilder do
|
|
197
197
|
end
|
198
198
|
end
|
199
199
|
|
200
|
-
describe
|
200
|
+
describe 'for GIMarshallingTests::Object.method_int8_arg_and_out_callee' do
|
201
201
|
let(:function_info) {
|
202
202
|
get_method_introspection_data('GIMarshallingTests', 'Object',
|
203
203
|
'method_int8_arg_and_out_callee')
|
204
204
|
}
|
205
205
|
|
206
|
-
it
|
206
|
+
it 'builds a correct definition' do
|
207
207
|
skip unless function_info
|
208
208
|
code.must_equal <<-CODE.reset_indentation
|
209
209
|
def method_int8_arg_and_out_callee(arg)
|
@@ -1,27 +1,29 @@
|
|
1
1
|
require 'gir_ffi_test_helper'
|
2
2
|
|
3
3
|
describe GirFFI::Builders::InterfaceBuilder do
|
4
|
-
let(:interface_builder) {
|
5
|
-
|
4
|
+
let(:interface_builder) {
|
5
|
+
GirFFI::Builders::InterfaceBuilder.new(
|
6
|
+
get_introspection_data('Regress', 'TestInterface'))
|
7
|
+
}
|
6
8
|
|
7
|
-
describe
|
9
|
+
describe '#build_class' do
|
8
10
|
before do
|
9
11
|
info = get_introspection_data 'GObject', 'TypePlugin'
|
10
12
|
@bldr = GirFFI::Builders::InterfaceBuilder.new info
|
11
13
|
@iface = @bldr.build_class
|
12
14
|
end
|
13
15
|
|
14
|
-
it
|
16
|
+
it 'builds an interface as a module' do
|
15
17
|
assert_instance_of Module, @iface
|
16
18
|
end
|
17
19
|
|
18
|
-
it
|
20
|
+
it 'creates methods on the interface' do
|
19
21
|
assert_defines_instance_method @iface, :complete_interface_info
|
20
22
|
end
|
21
23
|
end
|
22
24
|
|
23
|
-
describe
|
24
|
-
it
|
25
|
+
describe '#interface_struct' do
|
26
|
+
it 'returns the interface struct type' do
|
25
27
|
interface_builder.interface_struct.must_equal Regress::TestInterfaceIface
|
26
28
|
end
|
27
29
|
end
|
@@ -1,14 +1,14 @@
|
|
1
1
|
require 'gir_ffi_test_helper'
|
2
2
|
|
3
3
|
describe GirFFI::Builders::ModuleBuilder do
|
4
|
-
describe
|
5
|
-
it
|
4
|
+
describe '#build_namespaced_class' do
|
5
|
+
it 'raises a clear error if the named class does not exist' do
|
6
6
|
gir = GObjectIntrospection::IRepository.default
|
7
|
-
stub(gir).require(
|
7
|
+
stub(gir).require('Foo', nil) {}
|
8
8
|
|
9
|
-
builder = GirFFI::Builders::ModuleBuilder.new
|
9
|
+
builder = GirFFI::Builders::ModuleBuilder.new 'Foo'
|
10
10
|
|
11
|
-
mock(gir).find_by_name(
|
11
|
+
mock(gir).find_by_name('Foo', 'Bar') { nil }
|
12
12
|
|
13
13
|
assert_raises NameError do
|
14
14
|
builder.build_namespaced_class :Bar
|
@@ -16,4 +16,3 @@ describe GirFFI::Builders::ModuleBuilder do
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end
|
19
|
-
|