gir_ffi 0.0.11 → 0.0.12
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +5 -0
- data/examples/print_class.rb +59 -0
- data/lib/gir_ffi/arg_helper.rb +4 -0
- data/lib/gir_ffi/callback_helper.rb +1 -6
- data/lib/gir_ffi/in_out_pointer.rb +10 -1
- data/lib/gir_ffi/overrides/gobject.rb +1 -9
- data/lib/gir_ffi/version.rb +1 -1
- data/tasks/rdoc.rake +7 -4
- data/tasks/yardoc.rake +7 -4
- data/test/builder_test.rb +2 -1
- data/test/test_helper.rb +4 -0
- data/test/unit/i_repository_test.rb +57 -0
- data/test/unit/in_out_pointer_test.rb +2 -2
- metadata +7 -6
- data/test/i_repository_test.rb +0 -59
data/History.txt
CHANGED
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'gir_ffi'
|
2
|
+
|
3
|
+
# File activesupport/lib/active_support/inflector/methods.rb, line 48
|
4
|
+
def underscore(camel_cased_word)
|
5
|
+
word = camel_cased_word.to_s.dup
|
6
|
+
word.gsub!(/::/, '/')
|
7
|
+
word.gsub!(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
|
8
|
+
word.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
|
9
|
+
word.tr!("-", "_")
|
10
|
+
word.downcase!
|
11
|
+
word
|
12
|
+
end
|
13
|
+
|
14
|
+
namespace = 'Tracker'
|
15
|
+
GirFFI.setup namespace
|
16
|
+
|
17
|
+
gir = GirFFI::IRepository.default
|
18
|
+
gir.require namespace, nil
|
19
|
+
infos = gir.infos namespace
|
20
|
+
|
21
|
+
main_file = File.open(File.join('.', "#{underscore(namespace)}.rb"), 'w')
|
22
|
+
|
23
|
+
main_file.write "module #{namespace}\n"
|
24
|
+
|
25
|
+
infos.each do |info|
|
26
|
+
case info.info_type
|
27
|
+
when :function
|
28
|
+
fbuilder = GirFFI::Builder::Function.new info, Tracker::Lib
|
29
|
+
main_file.write "\n"
|
30
|
+
main_file.write fbuilder.generate
|
31
|
+
main_file.write "\n"
|
32
|
+
when :object
|
33
|
+
main_file.write "class #{info.name} < #{info.parent.name}\n"
|
34
|
+
info.get_methods.each do |minfo|
|
35
|
+
main_file.write "\n"
|
36
|
+
unless minfo.method?
|
37
|
+
main_file.write "class << self\n"
|
38
|
+
end
|
39
|
+
if minfo.constructor?
|
40
|
+
main_file.write "# This method is a constructor\n"
|
41
|
+
end
|
42
|
+
main_file.write "# @return [#{minfo.return_type.tag}]\n"
|
43
|
+
|
44
|
+
fbuilder = GirFFI::Builder::Function.new minfo, Tracker::Lib
|
45
|
+
main_file.write fbuilder.generate
|
46
|
+
unless minfo.method?
|
47
|
+
main_file.write "end\n"
|
48
|
+
end
|
49
|
+
main_file.write "\n"
|
50
|
+
end
|
51
|
+
main_file.write "end\n"
|
52
|
+
else
|
53
|
+
puts "#{info.info_type}: #{info.name}\n"
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
main_file.write "end\n"
|
58
|
+
main_file.close
|
59
|
+
|
data/lib/gir_ffi/arg_helper.rb
CHANGED
@@ -4,6 +4,8 @@ require 'gir_ffi/builder'
|
|
4
4
|
|
5
5
|
module GirFFI
|
6
6
|
module ArgHelper
|
7
|
+
OBJECT_STORE = {}
|
8
|
+
|
7
9
|
POINTER_SIZE = FFI.type_size(:pointer)
|
8
10
|
|
9
11
|
SIMPLE_G_TYPES = [
|
@@ -16,6 +18,8 @@ module GirFFI
|
|
16
18
|
return obj.to_ptr if obj.respond_to? :to_ptr
|
17
19
|
return nil if obj.nil?
|
18
20
|
return obj if obj.is_a? FFI::Pointer
|
21
|
+
|
22
|
+
OBJECT_STORE[obj.object_id] = obj
|
19
23
|
FFI::Pointer.new(obj.object_id)
|
20
24
|
end
|
21
25
|
|
@@ -29,7 +29,7 @@ module GirFFI
|
|
29
29
|
def self.for type
|
30
30
|
ffi_type = type_to_ffi_type type
|
31
31
|
ptr = AllocationHelper.safe_malloc(FFI.type_size ffi_type)
|
32
|
-
ptr.send "put_#{ffi_type}", 0,
|
32
|
+
ptr.send "put_#{ffi_type}", 0, nil_value_for(type)
|
33
33
|
self.new ptr, type, ffi_type
|
34
34
|
end
|
35
35
|
|
@@ -70,6 +70,15 @@ module GirFFI
|
|
70
70
|
value
|
71
71
|
end
|
72
72
|
end
|
73
|
+
|
74
|
+
def nil_value_for type
|
75
|
+
case type
|
76
|
+
when :utf8, :pointer
|
77
|
+
nil
|
78
|
+
else
|
79
|
+
0
|
80
|
+
end
|
81
|
+
end
|
73
82
|
end
|
74
83
|
end
|
75
84
|
end
|
@@ -218,15 +218,7 @@ module GirFFI
|
|
218
218
|
|
219
219
|
# User Data
|
220
220
|
arg = args.shift
|
221
|
-
|
222
|
-
begin
|
223
|
-
ObjectSpace._id2ref arg.address
|
224
|
-
rescue RangeError
|
225
|
-
arg
|
226
|
-
end
|
227
|
-
else
|
228
|
-
arg
|
229
|
-
end
|
221
|
+
arg = GirFFI::ArgHelper::OBJECT_STORE[arg.address]
|
230
222
|
result << arg
|
231
223
|
|
232
224
|
return result
|
data/lib/gir_ffi/version.rb
CHANGED
data/tasks/rdoc.rake
CHANGED
@@ -1,6 +1,9 @@
|
|
1
|
-
|
1
|
+
begin
|
2
|
+
require "rdoc/task"
|
2
3
|
|
3
|
-
RDoc::Task.new(:rdoc => "rdoc", :clobber_rdoc => "rdoc:clean", :rerdoc => "rdoc:force") do |rdoc|
|
4
|
-
|
5
|
-
|
4
|
+
RDoc::Task.new(:rdoc => "rdoc", :clobber_rdoc => "rdoc:clean", :rerdoc => "rdoc:force") do |rdoc|
|
5
|
+
rdoc.main = "README.rdoc"
|
6
|
+
rdoc.rdoc_files.include "README.rdoc", "DESIGN.rdoc", "TODO.rdoc", "lib/**/*.rb"
|
7
|
+
end
|
8
|
+
rescue LoadError
|
6
9
|
end
|
data/tasks/yardoc.rake
CHANGED
@@ -1,6 +1,9 @@
|
|
1
|
-
|
1
|
+
begin
|
2
|
+
require 'yard'
|
2
3
|
|
3
|
-
YARD::Rake::YardocTask.new do |t|
|
4
|
-
|
5
|
-
|
4
|
+
YARD::Rake::YardocTask.new do |t|
|
5
|
+
t.files = ['lib/**/*.rb']
|
6
|
+
t.options = ['--private', '--protected', '--readme', 'README.rdoc', "--files", "DESIGN.rdoc,TODO.rdoc"]
|
7
|
+
end
|
8
|
+
rescue LoadError
|
6
9
|
end
|
data/test/builder_test.rb
CHANGED
@@ -112,7 +112,7 @@ class BuilderTest < MiniTest::Spec
|
|
112
112
|
end
|
113
113
|
|
114
114
|
should "have correct introspection data" do
|
115
|
-
@gir.require "Gtk",
|
115
|
+
@gir.require "Gtk", "2.0"
|
116
116
|
go2 = @gir.find_by_name "Gtk", "main"
|
117
117
|
assert_equal go2, @go
|
118
118
|
end
|
@@ -213,6 +213,7 @@ class BuilderTest < MiniTest::Spec
|
|
213
213
|
end
|
214
214
|
|
215
215
|
should "set up struct members with the correct types" do
|
216
|
+
skip "JRuby creates new type wrappers every time, so this test fails" if RUBY_PLATFORM == 'java'
|
216
217
|
tags = [:int, :int8, :double, Regress::TestEnum]
|
217
218
|
assert_equal tags.map {|t| FFI.find_type t},
|
218
219
|
Regress::TestStructA::Struct.layout.fields.map {|f| f.type}
|
data/test/test_helper.rb
CHANGED
@@ -0,0 +1,57 @@
|
|
1
|
+
require File.expand_path('../test_helper.rb', File.dirname(__FILE__))
|
2
|
+
|
3
|
+
describe GirFFI::IRepository do
|
4
|
+
describe "an instance" do
|
5
|
+
should "not be created by calling new()" do
|
6
|
+
assert_raises NoMethodError do
|
7
|
+
GirFFI::IRepository.new
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
should "be created by calling default()" do
|
12
|
+
gir = GirFFI::IRepository.default
|
13
|
+
assert_kind_of GirFFI::IRepository, gir
|
14
|
+
end
|
15
|
+
|
16
|
+
should "be a singleton" do
|
17
|
+
gir = GirFFI::IRepository.default
|
18
|
+
gir2 = GirFFI::IRepository.default
|
19
|
+
assert_equal gir, gir2
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "#namespace" do
|
24
|
+
should "raise an error if the namespace doesn't exist" do
|
25
|
+
assert_raises RuntimeError do
|
26
|
+
GirFFI::IRepository.default.require 'VeryUnlikelyGObjectNamespaceName', nil
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
should "allow version to be nil" do
|
31
|
+
assert_nothing_raised do
|
32
|
+
GirFFI::IRepository.default.require 'GObject', nil
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
should "allow version to be left out" do
|
37
|
+
assert_nothing_raised do
|
38
|
+
GirFFI::IRepository.default.require 'GObject'
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "enumerating the infos for Gtk" do
|
44
|
+
setup do
|
45
|
+
@gir = GirFFI::IRepository.default
|
46
|
+
@gir.require 'Gtk', "2.0"
|
47
|
+
end
|
48
|
+
|
49
|
+
should "yield more than one object" do
|
50
|
+
assert_operator @gir.n_infos('Gtk'), :>, 0
|
51
|
+
end
|
52
|
+
|
53
|
+
should "yield IBaseInfo objects" do
|
54
|
+
assert_kind_of GirFFI::IBaseInfo, @gir.info('Gtk', 0)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -9,7 +9,7 @@ describe GirFFI::InOutPointer do
|
|
9
9
|
end
|
10
10
|
|
11
11
|
it "holds a pointer to the given value" do
|
12
|
-
assert_equal 23, @result.
|
12
|
+
assert_equal 23, @result.get_int32(0)
|
13
13
|
end
|
14
14
|
|
15
15
|
it "is an instance of GirFFI::InOutPointer" do
|
@@ -72,7 +72,7 @@ describe GirFFI::InOutPointer do
|
|
72
72
|
end
|
73
73
|
|
74
74
|
it "holds a pointer to a null value" do
|
75
|
-
assert_equal 0, @result.
|
75
|
+
assert_equal 0, @result.get_int32(0)
|
76
76
|
end
|
77
77
|
|
78
78
|
it "is an instance of GirFFI::InOutPointer" do
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gir_ffi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 7
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 12
|
10
|
+
version: 0.0.12
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Matijs van Zuijlen
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-09-04 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: ffi
|
@@ -141,7 +141,6 @@ files:
|
|
141
141
|
- lib/gir_ffi/i_interface_info.rb
|
142
142
|
- lib/gir_ffi/i_arg_info.rb
|
143
143
|
- lib/gir_ffi/i_type_info.rb
|
144
|
-
- test/i_repository_test.rb
|
145
144
|
- test/unintrospectable_type_builder_test.rb
|
146
145
|
- test/function_definition_builder_test.rb
|
147
146
|
- test/g_object_test.rb
|
@@ -157,6 +156,7 @@ files:
|
|
157
156
|
- test/module_builder_test.rb
|
158
157
|
- test/i_object_info_test.rb
|
159
158
|
- test/g_object_overrides_test.rb
|
159
|
+
- test/unit/i_repository_test.rb
|
160
160
|
- test/unit/constant_builder_test.rb
|
161
161
|
- test/unit/in_out_pointer_test.rb
|
162
162
|
- test/unit/callback_helper_test.rb
|
@@ -178,6 +178,7 @@ files:
|
|
178
178
|
- tasks/test.rake
|
179
179
|
- tasks/setup.rb
|
180
180
|
- tasks/notes.rake
|
181
|
+
- examples/print_class.rb
|
181
182
|
- examples/05_notification.rb
|
182
183
|
- examples/demo_ffi_safe_inherited_layout.rb
|
183
184
|
- examples/04_webkit.rb
|
@@ -237,7 +238,6 @@ test_files:
|
|
237
238
|
- test/glib_overrides_test.rb
|
238
239
|
- test/gtk_overrides_test.rb
|
239
240
|
- test/i_object_info_test.rb
|
240
|
-
- test/i_repository_test.rb
|
241
241
|
- test/integration/generated_gimarshallingtests_test.rb
|
242
242
|
- test/integration/generated_gio_test.rb
|
243
243
|
- test/integration/generated_gobject_test.rb
|
@@ -256,6 +256,7 @@ test_files:
|
|
256
256
|
- test/unit/callback_helper_test.rb
|
257
257
|
- test/unit/constant_builder_test.rb
|
258
258
|
- test/unit/i_constant_info_test.rb
|
259
|
+
- test/unit/i_repository_test.rb
|
259
260
|
- test/unit/in_out_pointer_test.rb
|
260
261
|
- test/unit/in_pointer_test.rb
|
261
262
|
- test/unit/object_type_builder_test.rb
|
data/test/i_repository_test.rb
DELETED
@@ -1,59 +0,0 @@
|
|
1
|
-
require File.expand_path('test_helper.rb', File.dirname(__FILE__))
|
2
|
-
|
3
|
-
module GirFFI
|
4
|
-
class IRepositoryTest < MiniTest::Spec
|
5
|
-
context "An IRepository object" do
|
6
|
-
should "not be created by calling new()" do
|
7
|
-
assert_raises NoMethodError do
|
8
|
-
IRepository.new
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
should "be created by calling default()" do
|
13
|
-
gir = IRepository.default
|
14
|
-
assert_kind_of IRepository, gir
|
15
|
-
end
|
16
|
-
|
17
|
-
should "be a singleton" do
|
18
|
-
gir = IRepository.default
|
19
|
-
gir2 = IRepository.default
|
20
|
-
assert_equal gir, gir2
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
context "The namespace method" do
|
25
|
-
should "raise an error if the namespace doesn't exist" do
|
26
|
-
assert_raises RuntimeError do
|
27
|
-
IRepository.default.require 'VeryUnlikelyGObjectNamespaceName', nil
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
should "allow version to be nil" do
|
32
|
-
assert_nothing_raised do
|
33
|
-
IRepository.default.require 'GObject', nil
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
should "allow version to be left out" do
|
38
|
-
assert_nothing_raised do
|
39
|
-
IRepository.default.require 'GObject'
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
context "Enumerating the infos for Gtk" do
|
45
|
-
setup do
|
46
|
-
@gir = IRepository.default
|
47
|
-
@gir.require 'Gtk'
|
48
|
-
end
|
49
|
-
|
50
|
-
should "yield more than one object" do
|
51
|
-
assert_operator @gir.n_infos('Gtk'), :>, 0
|
52
|
-
end
|
53
|
-
|
54
|
-
should "yield IBaseInfo objects" do
|
55
|
-
assert_kind_of IBaseInfo, @gir.info('Gtk', 0)
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|