gir_ffi 0.7.2 → 0.7.3
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 +7 -0
- data/DESIGN.md +25 -0
- data/README.md +10 -2
- data/Rakefile +12 -1
- data/lib/ffi-glib/array.rb +5 -6
- data/lib/ffi-glib/byte_array.rb +4 -5
- data/lib/ffi-glib/hash_table.rb +1 -3
- data/lib/ffi-gobject/value.rb +44 -66
- data/lib/ffi-gobject_introspection/i_constant_info.rb +1 -1
- data/lib/gir_ffi/builder_helper.rb +1 -9
- data/lib/gir_ffi/builders/base_type_builder.rb +1 -1
- data/lib/gir_ffi/builders/callback_builder.rb +5 -5
- data/lib/gir_ffi/builders/mapping_method_builder.rb +2 -2
- data/lib/gir_ffi/builders/vfunc_builder.rb +4 -4
- data/lib/gir_ffi/callback_base.rb +4 -2
- data/lib/gir_ffi/ffi_ext/pointer.rb +2 -8
- data/lib/gir_ffi/info_ext/i_arg_info.rb +5 -0
- data/lib/gir_ffi/info_ext/i_callback_info.rb +11 -1
- data/lib/gir_ffi/info_ext/i_signal_info.rb +2 -1
- data/lib/gir_ffi/version.rb +1 -1
- data/lib/gir_ffi.rb +1 -0
- data/tasks/yard.rake +6 -0
- data/test/base_test_helper.rb +6 -0
- data/test/gir_ffi/builders/signal_builder_test.rb +4 -4
- data/test/gir_ffi/version_test.rb +7 -0
- data/test/integration/generated_gio_test.rb +6 -0
- metadata +7 -5
- data/tasks/setup.rb +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 22d6bb7bfc0aa7590953b8286894e4d0e814d70c
|
4
|
+
data.tar.gz: 76f360c36de64f4ec95614b1d80fce35620841eb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b850a1fbc54e68271fbd7928a42cd657743d6e95c28dfecc85851f4ad26247b80c06aacac8a1339e3b6988d2d3fd8a72f32dc4c660ccf9c1cdcac862034d2f47
|
7
|
+
data.tar.gz: 712bd571f53ccf66ef8f26b85b66ccc979a9f65733c2197f0dd982fe0d2d3509c8f0bef48dd2cf289ca85632537e6ebde25828aafc55571e7d01d5f2ce1c72e6
|
data/Changelog.md
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 0.7.3 / 2014-03-23
|
4
|
+
|
5
|
+
* Restore proper handling of enums in callback arguments
|
6
|
+
* Simplify Rake configuration
|
7
|
+
* Various small fixes
|
8
|
+
* Remove remaining Ruby 1.8 version checks
|
9
|
+
|
3
10
|
## 0.7.2 / 2014-01-18
|
4
11
|
|
5
12
|
* Officially drop Ruby 1.8 compatibility.
|
data/DESIGN.md
CHANGED
@@ -61,3 +61,28 @@ introspectable. The interface is specified in terms of structs and
|
|
61
61
|
functions rather than objects and methods. For now, the hard-coded Ruby
|
62
62
|
bindings for this don't follow the introspected specification: Gir-FFI
|
63
63
|
cannot bootstrap itself.
|
64
|
+
|
65
|
+
## Object initialization
|
66
|
+
|
67
|
+
An attempt at making Thing.new less hacky.
|
68
|
+
|
69
|
+
Goals:
|
70
|
+
|
71
|
+
* No aliasing of Ruby's new. Overriding is possible with super being called.
|
72
|
+
* #initialize should behave as expected. We may enforce use of super in Ruby
|
73
|
+
subclasses.
|
74
|
+
|
75
|
+
Schematic depiction of what happens (can happen):
|
76
|
+
|
77
|
+
```ruby
|
78
|
+
class GObject::Object
|
79
|
+
def self.new *args
|
80
|
+
# Stage A
|
81
|
+
super(*other_args)
|
82
|
+
# Stage C
|
83
|
+
end
|
84
|
+
|
85
|
+
def initialize *other_args
|
86
|
+
# Stage B
|
87
|
+
end
|
88
|
+
end
|
data/README.md
CHANGED
@@ -6,10 +6,18 @@ by Matijs van Zuijlen
|
|
6
6
|
|
7
7
|
Ruby bindings for GNOME using the GObject Introspection Repository.
|
8
8
|
|
9
|
-
##
|
9
|
+
## Status
|
10
|
+
|
11
|
+
[](http://badge.fury.io/rb/gir_ffi)
|
12
|
+
[](https://gemnasium.com/mvz/ruby-gir-ffi)
|
13
|
+
[](https://travis-ci.org/mvz/ruby-gir-ffi)
|
14
|
+
[](https://codeclimate.com/github/mvz/ruby-gir-ffi)
|
15
|
+
[](https://coveralls.io/r/mvz/ruby-gir-ffi)
|
16
|
+
|
17
|
+
## Features
|
10
18
|
|
11
19
|
* Create bindings to any GObject-based library.
|
12
|
-
* Bindings generated at runtime.
|
20
|
+
* Bindings are generated at runtime.
|
13
21
|
* Provides overridden bindings for selected methods.
|
14
22
|
* Install `gir_ffi-gtk` and require `gir_ffi-gtk2` or `gir_ffi-gtk3` to
|
15
23
|
load overrides for Gtk2 or Gtk3.
|
data/Rakefile
CHANGED
@@ -1,3 +1,14 @@
|
|
1
|
-
|
1
|
+
require 'rake/clean'
|
2
|
+
require 'bundler/gem_tasks'
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'repl_rake'
|
6
|
+
ReplRake.setup
|
7
|
+
rescue LoadError
|
8
|
+
end
|
9
|
+
|
10
|
+
load 'tasks/test.rake'
|
11
|
+
load 'tasks/valgrind.rake'
|
12
|
+
load 'tasks/yard.rake'
|
2
13
|
|
3
14
|
task :default => 'test:all'
|
data/lib/ffi-glib/array.rb
CHANGED
@@ -13,12 +13,11 @@ module GLib
|
|
13
13
|
|
14
14
|
attr_reader :element_type
|
15
15
|
|
16
|
-
class << self
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
end
|
16
|
+
class << self; undef :new; end
|
17
|
+
|
18
|
+
def self.new type
|
19
|
+
ptr = Lib.g_array_new(0, 0, calculated_element_size(type))
|
20
|
+
wrap type, ptr
|
22
21
|
end
|
23
22
|
|
24
23
|
def append_vals ary
|
data/lib/ffi-glib/byte_array.rb
CHANGED
@@ -13,11 +13,10 @@ module GLib
|
|
13
13
|
self.class.wrap(Lib.g_byte_array_append self.to_ptr, bytes, len)
|
14
14
|
end
|
15
15
|
|
16
|
-
class << self
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
end
|
16
|
+
class << self; undef :new; end
|
17
|
+
|
18
|
+
def self.new
|
19
|
+
wrap(Lib.g_byte_array_new)
|
21
20
|
end
|
22
21
|
end
|
23
22
|
end
|
data/lib/ffi-glib/hash_table.rb
CHANGED
@@ -31,9 +31,7 @@ module GLib
|
|
31
31
|
::GLib::Lib.g_hash_table_insert self.to_ptr, keyptr, valptr
|
32
32
|
end
|
33
33
|
|
34
|
-
class << self
|
35
|
-
remove_method :new
|
36
|
-
end
|
34
|
+
class << self; remove_method :new; end
|
37
35
|
|
38
36
|
def self.new keytype, valtype
|
39
37
|
wrap [keytype, valtype], Lib.g_hash_table_new(
|
data/lib/ffi-gobject/value.rb
CHANGED
@@ -12,26 +12,27 @@ module GObject
|
|
12
12
|
set_value val
|
13
13
|
end
|
14
14
|
|
15
|
-
|
16
|
-
TYPE_BOOLEAN => :set_boolean,
|
17
|
-
TYPE_BOXED
|
18
|
-
TYPE_CHAR
|
19
|
-
TYPE_DOUBLE
|
20
|
-
TYPE_ENUM
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
TYPE_INT
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
15
|
+
METHOD_MAP = {
|
16
|
+
TYPE_BOOLEAN => [:get_boolean, :set_boolean],
|
17
|
+
TYPE_BOXED => [:get_boxed, :set_boxed],
|
18
|
+
TYPE_CHAR => [:get_char, :set_char],
|
19
|
+
TYPE_DOUBLE => [:get_double, :set_double],
|
20
|
+
TYPE_ENUM => [:get_enum_enhanced, :set_enum],
|
21
|
+
TYPE_FLAGS => [:get_flags, :set_flags],
|
22
|
+
TYPE_FLOAT => [:get_float, :set_float],
|
23
|
+
TYPE_GTYPE => [:get_gtype, :set_gtype],
|
24
|
+
TYPE_INT => [:get_int, :set_int],
|
25
|
+
TYPE_INT64 => [:get_int64, :set_int64],
|
26
|
+
TYPE_LONG => [:get_long, :set_long],
|
27
|
+
TYPE_OBJECT => [:get_object, :set_instance_enhanced],
|
28
|
+
TYPE_PARAM => [:get_param, :set_param],
|
29
|
+
TYPE_POINTER => [:get_pointer, :set_pointer],
|
30
|
+
TYPE_STRING => [:get_string, :set_string],
|
31
|
+
TYPE_UCHAR => [:get_uchar, :set_uchar],
|
32
|
+
TYPE_UINT => [:get_uint, :set_uint],
|
33
|
+
TYPE_UINT64 => [:get_uint64, :set_uint64],
|
34
|
+
TYPE_ULONG => [:get_ulong, :set_ulong],
|
35
|
+
TYPE_VARIANT => [:get_variant, :set_variant]
|
35
36
|
}
|
36
37
|
|
37
38
|
def value= val
|
@@ -72,28 +73,6 @@ module GObject
|
|
72
73
|
GObject.type_name current_gtype
|
73
74
|
end
|
74
75
|
|
75
|
-
TYPE_TO_GET_METHOD_MAP = {
|
76
|
-
TYPE_BOOLEAN => :get_boolean,
|
77
|
-
TYPE_BOXED => :get_boxed,
|
78
|
-
TYPE_CHAR => :get_char,
|
79
|
-
TYPE_DOUBLE => :get_double,
|
80
|
-
TYPE_ENUM => :get_enum_enhanced,
|
81
|
-
TYPE_FLAGS => :get_flags,
|
82
|
-
TYPE_FLOAT => :get_float,
|
83
|
-
TYPE_GTYPE => :get_gtype,
|
84
|
-
TYPE_INT64 => :get_int64,
|
85
|
-
TYPE_INT => :get_int,
|
86
|
-
TYPE_LONG => :get_long,
|
87
|
-
TYPE_OBJECT => :get_object,
|
88
|
-
TYPE_POINTER => :get_pointer,
|
89
|
-
TYPE_STRING => :get_string,
|
90
|
-
TYPE_UCHAR => :get_uchar,
|
91
|
-
TYPE_UINT => :get_uint,
|
92
|
-
TYPE_UINT64 => :get_uint64,
|
93
|
-
TYPE_ULONG => :get_ulong,
|
94
|
-
TYPE_VARIANT => :get_variant,
|
95
|
-
}
|
96
|
-
|
97
76
|
def get_value
|
98
77
|
value = get_value_plain
|
99
78
|
if current_fundamental_type == TYPE_BOXED
|
@@ -107,27 +86,25 @@ module GObject
|
|
107
86
|
send get_method
|
108
87
|
end
|
109
88
|
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
end
|
89
|
+
# TODO: Give more generic name
|
90
|
+
def self.wrap_ruby_value val
|
91
|
+
self.new.set_ruby_value val
|
92
|
+
end
|
115
93
|
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
end
|
94
|
+
def self.from val
|
95
|
+
case val
|
96
|
+
when self
|
97
|
+
val
|
98
|
+
when nil
|
99
|
+
nil
|
100
|
+
else
|
101
|
+
wrap_ruby_value val
|
125
102
|
end
|
103
|
+
end
|
126
104
|
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
end
|
105
|
+
def self.for_g_type g_type
|
106
|
+
return nil if g_type == TYPE_NONE
|
107
|
+
self.new.tap {|it| it.init g_type }
|
131
108
|
end
|
132
109
|
|
133
110
|
# TODO: Combine with wrap_ruby_value
|
@@ -168,15 +145,16 @@ module GObject
|
|
168
145
|
end
|
169
146
|
|
170
147
|
def get_method
|
171
|
-
|
172
|
-
TYPE_TO_GET_METHOD_MAP[current_fundamental_type] or
|
173
|
-
raise "Can't find method to get #{current_gtype_name}"
|
148
|
+
method_map_entry.first
|
174
149
|
end
|
175
150
|
|
176
151
|
def set_method
|
177
|
-
|
178
|
-
|
179
|
-
|
152
|
+
method_map_entry.last
|
153
|
+
end
|
154
|
+
|
155
|
+
def method_map_entry
|
156
|
+
METHOD_MAP[current_gtype] || METHOD_MAP[current_fundamental_type] ||
|
157
|
+
fail("No method map entry for #{current_gtype_name}")
|
180
158
|
end
|
181
159
|
end
|
182
160
|
end
|
@@ -1,15 +1,7 @@
|
|
1
1
|
module GirFFI
|
2
2
|
module BuilderHelper
|
3
|
-
def const_defined_for parent, name
|
4
|
-
if RUBY_VERSION < "1.9"
|
5
|
-
parent.const_defined? name
|
6
|
-
else
|
7
|
-
parent.const_defined? name, false
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
3
|
def optionally_define_constant parent, name
|
12
|
-
if
|
4
|
+
if parent.const_defined? name, false
|
13
5
|
parent.const_get name
|
14
6
|
else
|
15
7
|
parent.const_set name, yield
|
@@ -20,7 +20,7 @@ module GirFFI
|
|
20
20
|
|
21
21
|
def setup_callback
|
22
22
|
optionally_define_constant klass, :Callback do
|
23
|
-
lib.callback callback_sym,
|
23
|
+
lib.callback callback_sym, argument_ffi_types, return_ffi_type
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
@@ -36,12 +36,12 @@ module GirFFI
|
|
36
36
|
@classname.to_sym
|
37
37
|
end
|
38
38
|
|
39
|
-
def
|
40
|
-
@
|
39
|
+
def argument_ffi_types
|
40
|
+
@argument_ffi_types ||= @info.argument_ffi_types
|
41
41
|
end
|
42
42
|
|
43
|
-
def
|
44
|
-
@
|
43
|
+
def return_ffi_type
|
44
|
+
@return_ffi_type ||= @info.return_ffi_type
|
45
45
|
end
|
46
46
|
end
|
47
47
|
end
|
@@ -100,8 +100,8 @@ module GirFFI
|
|
100
100
|
end
|
101
101
|
|
102
102
|
def parameter_preparation
|
103
|
-
argument_builders.sort_by {|arg|
|
104
|
-
arg.type_info.array_length}.map(&:pre_conversion).flatten
|
103
|
+
argument_builders.sort_by.with_index {|arg, i|
|
104
|
+
[arg.type_info.array_length, i] }.map(&:pre_conversion).flatten
|
105
105
|
end
|
106
106
|
|
107
107
|
def capture
|
@@ -45,12 +45,12 @@ module GirFFI
|
|
45
45
|
@container_info ||= info.container
|
46
46
|
end
|
47
47
|
|
48
|
-
def
|
49
|
-
@
|
48
|
+
def argument_ffi_types
|
49
|
+
@argument_ffi_types ||= info.argument_ffi_types.unshift(receiver_type_info.to_ffitype)
|
50
50
|
end
|
51
51
|
|
52
|
-
def
|
53
|
-
@
|
52
|
+
def return_ffi_type
|
53
|
+
@return_ffi_type ||= info.return_ffi_type
|
54
54
|
end
|
55
55
|
end
|
56
56
|
end
|
@@ -12,7 +12,8 @@ module GirFFI
|
|
12
12
|
|
13
13
|
def self.from_native(value, _context)
|
14
14
|
return nil if !value || value.null?
|
15
|
-
FFI::Function.new
|
15
|
+
FFI::Function.new(gir_ffi_builder.return_ffi_type,
|
16
|
+
gir_ffi_builder.argument_ffi_types, value)
|
16
17
|
end
|
17
18
|
|
18
19
|
def self.to_native(value, _context)
|
@@ -50,7 +51,8 @@ module GirFFI
|
|
50
51
|
def to_native
|
51
52
|
@to_native ||= begin
|
52
53
|
builder = self.class.gir_ffi_builder
|
53
|
-
FFI::Function.new
|
54
|
+
FFI::Function.new(builder.return_ffi_type,
|
55
|
+
builder.argument_ffi_types, self)
|
54
56
|
end
|
55
57
|
end
|
56
58
|
|
@@ -20,14 +20,8 @@ module GirFFI
|
|
20
20
|
klass.direct_wrap self
|
21
21
|
end
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
null? ? nil : read_string
|
26
|
-
end
|
27
|
-
else
|
28
|
-
def to_utf8
|
29
|
-
null? ? nil : read_string.force_encoding("utf-8")
|
30
|
-
end
|
23
|
+
def to_utf8
|
24
|
+
null? ? nil : read_string.force_encoding("utf-8")
|
31
25
|
end
|
32
26
|
end
|
33
27
|
end
|
@@ -6,8 +6,18 @@ module GirFFI
|
|
6
6
|
Builder.build_class(self)
|
7
7
|
end
|
8
8
|
|
9
|
+
def argument_ffi_types
|
10
|
+
args.map { |arg| arg.to_callback_ffitype }
|
11
|
+
end
|
12
|
+
|
9
13
|
def return_ffi_type
|
10
|
-
return_type.to_callback_ffitype
|
14
|
+
result = return_type.to_callback_ffitype
|
15
|
+
# FIXME: Should this be in ITypeInfo#to_callback_ffitype?
|
16
|
+
if result == GLib::Boolean
|
17
|
+
:bool
|
18
|
+
else
|
19
|
+
result
|
20
|
+
end
|
11
21
|
end
|
12
22
|
end
|
13
23
|
end
|
@@ -16,6 +16,7 @@ module GirFFI
|
|
16
16
|
# from that, instead of vice versa.
|
17
17
|
bldr = Builders::SignalBuilder.new(self)
|
18
18
|
wrapped = bldr.build_class.from(block)
|
19
|
+
# FIXME: Logically, this should use CallbackBase#to_native
|
19
20
|
FFI::Function.new return_ffi_type, ffi_callback_argument_types, &wrapped
|
20
21
|
end
|
21
22
|
|
@@ -44,7 +45,7 @@ module GirFFI
|
|
44
45
|
# types as well?
|
45
46
|
def ffi_callback_argument_types
|
46
47
|
types = args.map do |arg|
|
47
|
-
arg.
|
48
|
+
arg.to_callback_ffitype
|
48
49
|
end
|
49
50
|
types.unshift(:pointer).push(:pointer)
|
50
51
|
end
|
data/lib/gir_ffi/version.rb
CHANGED
data/lib/gir_ffi.rb
CHANGED
data/tasks/yard.rake
ADDED
data/test/base_test_helper.rb
CHANGED
@@ -70,10 +70,10 @@ describe GirFFI::Builders::SignalBuilder do
|
|
70
70
|
expected = <<-CODE.reset_indentation
|
71
71
|
def self.call_with_argument_mapping(_proc, _instance, arr, len, _user_data)
|
72
72
|
_v1 = Regress::TestObj.wrap(_instance)
|
73
|
-
_v2 =
|
74
|
-
_v3 =
|
75
|
-
_v4 = GirFFI::SizedArray.wrap(:guint32,
|
76
|
-
_proc.call(_v1, _v4,
|
73
|
+
_v2 = len
|
74
|
+
_v3 = GirFFI::ArgHelper::OBJECT_STORE[_user_data.address]
|
75
|
+
_v4 = GirFFI::SizedArray.wrap(:guint32, _v2, arr)
|
76
|
+
_proc.call(_v1, _v4, _v3)
|
77
77
|
end
|
78
78
|
CODE
|
79
79
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gir_ffi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matijs van Zuijlen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-03-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ffi
|
@@ -44,14 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - ~>
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 5.2.3
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: 5.2.3
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rr
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -278,6 +278,7 @@ files:
|
|
278
278
|
- test/gir_ffi/builders/user_defined_builder_test.rb
|
279
279
|
- test/gir_ffi/method_stubber_test.rb
|
280
280
|
- test/gir_ffi/variable_name_generator_test.rb
|
281
|
+
- test/gir_ffi/version_test.rb
|
281
282
|
- test/gir_ffi/ffi_ext/pointer_test.rb
|
282
283
|
- test/gir_ffi/class_base_test.rb
|
283
284
|
- test/gir_ffi/type_map_test.rb
|
@@ -319,7 +320,7 @@ files:
|
|
319
320
|
- test/ffi-gobject_introspection/i_enum_info_test.rb
|
320
321
|
- test/gir_ffi_test.rb
|
321
322
|
- test/introspection_test_helper.rb
|
322
|
-
- tasks/
|
323
|
+
- tasks/yard.rake
|
323
324
|
- tasks/valgrind.rake
|
324
325
|
- tasks/test.rake
|
325
326
|
- examples/demo_ffi_nested_struct.rb
|
@@ -430,6 +431,7 @@ test_files:
|
|
430
431
|
- test/gir_ffi/user_defined_property_info_test.rb
|
431
432
|
- test/gir_ffi/user_defined_type_info_test.rb
|
432
433
|
- test/gir_ffi/variable_name_generator_test.rb
|
434
|
+
- test/gir_ffi/version_test.rb
|
433
435
|
- test/gir_ffi/zero_terminated_test.rb
|
434
436
|
- test/gir_ffi_test.rb
|
435
437
|
- test/gir_ffi_test_helper.rb
|