gir_ffi 0.0.1

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.
Files changed (65) hide show
  1. data/DESIGN.rdoc +54 -0
  2. data/History.txt +3 -0
  3. data/README.rdoc +59 -0
  4. data/Rakefile +21 -0
  5. data/TODO.rdoc +40 -0
  6. data/examples/01_empty_window.rb +15 -0
  7. data/examples/02_hello_world.rb +30 -0
  8. data/examples/03_upgraded_hello_world.rb +45 -0
  9. data/examples/demo_ffi_inherited_layout.rb +21 -0
  10. data/examples/demo_ffi_nested_struct.rb +17 -0
  11. data/examples/demo_ffi_safe_inherited_layout.rb +43 -0
  12. data/examples/hard_coded.rb +144 -0
  13. data/lib/gir_ffi.rb +47 -0
  14. data/lib/gir_ffi/allocation_helper.rb +12 -0
  15. data/lib/gir_ffi/arg_helper.rb +77 -0
  16. data/lib/gir_ffi/base.rb +23 -0
  17. data/lib/gir_ffi/builder.rb +159 -0
  18. data/lib/gir_ffi/builder_helper.rb +32 -0
  19. data/lib/gir_ffi/class_base.rb +11 -0
  20. data/lib/gir_ffi/class_builder.rb +116 -0
  21. data/lib/gir_ffi/constructor_definition_builder.rb +20 -0
  22. data/lib/gir_ffi/function_definition_builder.rb +148 -0
  23. data/lib/gir_ffi/g_error.rb +8 -0
  24. data/lib/gir_ffi/g_type.rb +14 -0
  25. data/lib/gir_ffi/i_arg_info.rb +16 -0
  26. data/lib/gir_ffi/i_base_info.rb +45 -0
  27. data/lib/gir_ffi/i_callable_info.rb +18 -0
  28. data/lib/gir_ffi/i_callback_info.rb +7 -0
  29. data/lib/gir_ffi/i_constant_info.rb +6 -0
  30. data/lib/gir_ffi/i_enum_info.rb +13 -0
  31. data/lib/gir_ffi/i_field_info.rb +10 -0
  32. data/lib/gir_ffi/i_flags_info.rb +5 -0
  33. data/lib/gir_ffi/i_function_info.rb +16 -0
  34. data/lib/gir_ffi/i_interface_info.rb +7 -0
  35. data/lib/gir_ffi/i_object_info.rb +50 -0
  36. data/lib/gir_ffi/i_property_info.rb +7 -0
  37. data/lib/gir_ffi/i_registered_type_info.rb +8 -0
  38. data/lib/gir_ffi/i_repository.rb +108 -0
  39. data/lib/gir_ffi/i_signal_info.rb +7 -0
  40. data/lib/gir_ffi/i_struct_info.rb +22 -0
  41. data/lib/gir_ffi/i_type_info.rb +25 -0
  42. data/lib/gir_ffi/i_union_info.rb +7 -0
  43. data/lib/gir_ffi/i_value_info.rb +8 -0
  44. data/lib/gir_ffi/i_vfunc_info.rb +7 -0
  45. data/lib/gir_ffi/lib.rb +174 -0
  46. data/lib/gir_ffi/lib_c.rb +11 -0
  47. data/lib/gir_ffi/method_missing_definition_builder.rb +62 -0
  48. data/lib/gir_ffi/module_builder.rb +66 -0
  49. data/lib/gir_ffi/overrides/gtk.rb +12 -0
  50. data/lib/gir_ffi/version.rb +4 -0
  51. data/tasks/bones.rake +87 -0
  52. data/tasks/notes.rake +134 -0
  53. data/tasks/post_load.rake +25 -0
  54. data/tasks/setup.rb +138 -0
  55. data/tasks/test.rake +22 -0
  56. data/test/arg_helper_test.rb +112 -0
  57. data/test/builder_test.rb +328 -0
  58. data/test/constructor_definition_builder_test.rb +19 -0
  59. data/test/function_definition_builder_test.rb +60 -0
  60. data/test/g_type_test.rb +22 -0
  61. data/test/girffi_test.rb +11 -0
  62. data/test/gtk_overrides_test.rb +22 -0
  63. data/test/i_repository_test.rb +54 -0
  64. data/test/test_helper.rb +39 -0
  65. metadata +174 -0
@@ -0,0 +1,19 @@
1
+ require File.expand_path('test_helper.rb', File.dirname(__FILE__))
2
+ require 'gir_ffi/builder'
3
+
4
+ class ConstructorDefinitionBuilderTest < Test::Unit::TestCase
5
+ context "The ConstructorDefinitionBuilder" do
6
+ should "build correct definition of Gtk::Window#new" do
7
+ go = get_method_introspection_data 'Gtk', 'Window', 'new'
8
+ cbuilder = GirFFI::ConstructorDefinitionBuilder.new go, Lib
9
+ code = cbuilder.generate
10
+
11
+ expected =
12
+ "def new type
13
+ _real_new Lib.gtk_window_new(type)
14
+ end"
15
+
16
+ assert_equal cws(expected), cws(code)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,60 @@
1
+ require File.expand_path('test_helper.rb', File.dirname(__FILE__))
2
+ require 'gir_ffi/builder'
3
+ require 'gir_ffi/function_definition_builder'
4
+
5
+ class FunctionDefinitionBuilderTest < Test::Unit::TestCase
6
+ context "The FunctionDefinition builder" do
7
+ should "build correct definition of Gtk.init" do
8
+ go = get_function_introspection_data 'Gtk', 'init'
9
+ fbuilder = GirFFI::FunctionDefinitionBuilder.new go, Lib
10
+ code = fbuilder.generate
11
+
12
+ expected = "
13
+ def init argc, argv
14
+ _v1 = GirFFI::ArgHelper.int_to_inoutptr argc
15
+ _v3 = GirFFI::ArgHelper.string_array_to_inoutptr argv
16
+ Lib.gtk_init _v1, _v3
17
+ _v2 = GirFFI::ArgHelper.outptr_to_int _v1
18
+ _v4 = GirFFI::ArgHelper.outptr_to_string_array _v3, argv.nil? ? 0 : argv.size
19
+ return _v2, _v4
20
+ end
21
+ "
22
+
23
+ assert_equal cws(expected), cws(code)
24
+ end
25
+
26
+ should "build correct definition of Gtk::Widget.show" do
27
+ go = get_method_introspection_data 'Gtk', 'Widget', 'show'
28
+ fbuilder = GirFFI::FunctionDefinitionBuilder.new go, Lib
29
+ code = fbuilder.generate
30
+
31
+ expected = "
32
+ def show
33
+ Lib.gtk_widget_show self
34
+ end
35
+ "
36
+
37
+ assert_equal cws(expected), cws(code)
38
+ end
39
+
40
+ should "build correct definition of GObject.signal_connect_data" do
41
+ go = get_function_introspection_data 'GObject', 'signal_connect_data'
42
+ fbuilder = GirFFI::FunctionDefinitionBuilder.new go, Lib
43
+ code = fbuilder.generate
44
+
45
+ expected =
46
+ "def signal_connect_data instance, detailed_signal, c_handler, data, destroy_data, connect_flags
47
+ _v2 = GirFFI::ArgHelper.object_to_inptr instance
48
+ _v3 = GirFFI::ArgHelper.mapped_callback_args c_handler
49
+ Lib::CALLBACKS << _v3
50
+ _v4 = GirFFI::ArgHelper.object_to_inptr data
51
+ _v5 = GirFFI::ArgHelper.mapped_callback_args destroy_data
52
+ Lib::CALLBACKS << _v5
53
+ _v1 = Lib.g_signal_connect_data _v2, detailed_signal, _v3, _v4, _v5, connect_flags
54
+ return _v1
55
+ end"
56
+
57
+ assert_equal cws(expected), cws(code)
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,22 @@
1
+ require File.expand_path('test_helper.rb', File.dirname(__FILE__))
2
+ require 'gir_ffi/g_type'
3
+
4
+ class HelperGTypeTest < Test::Unit::TestCase
5
+ context "The GType module" do
6
+ should "have init as a public method" do
7
+ assert GirFFI::GType.respond_to?('init')
8
+ end
9
+
10
+ should "not have g_type_init as a public method" do
11
+ assert GirFFI::GType.respond_to?('g_type_init') == false
12
+ end
13
+
14
+ end
15
+ context "the init method" do
16
+ should "not raise an error" do
17
+ assert_nothing_raised do
18
+ GirFFI::GType.init
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,11 @@
1
+ require File.expand_path('test_helper.rb', File.dirname(__FILE__))
2
+ require 'gir_ffi'
3
+
4
+ class GirFFITest < Test::Unit::TestCase
5
+ context "GirFFI" do
6
+ should "not be tested yet" do
7
+ assert true
8
+ end
9
+ end
10
+ end
11
+
@@ -0,0 +1,22 @@
1
+ require File.expand_path('test_helper.rb', File.dirname(__FILE__))
2
+ require 'gir_ffi'
3
+ GirFFI.setup :Gtk
4
+
5
+ class GtkOverridesTest < Test::Unit::TestCase
6
+ context "The Gtk.init function" do
7
+ should "not take any arguments" do
8
+ assert_raises(ArgumentError) { Gtk.init 1, ["foo"] }
9
+ assert_nothing_raised { Gtk.init }
10
+ end
11
+ # FIXME: The following test doesn't actually work.
12
+ # In practice however, the Gtk.init function does exactly this.
13
+ if false
14
+ should "process ARGV, removing Gtk+ options" do
15
+ ARGV.replace ["foo", "--g-fatal-warnings"]
16
+ Gtk.init
17
+ assert_same_elements ["foo"], ARGV
18
+ end
19
+ end
20
+ end
21
+ end
22
+
@@ -0,0 +1,54 @@
1
+ require File.expand_path('test_helper.rb', File.dirname(__FILE__))
2
+ require 'gir_ffi/i_repository'
3
+
4
+ module GirFFI
5
+ class IRepositoryTest < Test::Unit::TestCase
6
+ context "An IRepository object" do
7
+ should "not be created by calling new()" do
8
+ assert_raise NoMethodError do
9
+ IRepository.new
10
+ end
11
+ end
12
+
13
+ should "be created by calling default()" do
14
+ gir = IRepository.default
15
+ assert_kind_of IRepository, gir
16
+ end
17
+
18
+ should "be a singleton" do
19
+ gir = IRepository.default
20
+ gir2 = IRepository.default
21
+ assert_equal gir, gir2
22
+ end
23
+ end
24
+
25
+ context "The namespace method" do
26
+ should "raise an error if the namespace doesn't exist" do
27
+ assert_raise RuntimeError do
28
+ IRepository.default.require 'VeryUnlikelyGObjectNamespaceName', nil
29
+ end
30
+ end
31
+
32
+ should "allow version to be nil" do
33
+ assert_nothing_raised do
34
+ IRepository.default.require 'Gtk', nil
35
+ end
36
+ end
37
+ end
38
+
39
+ context "Enumerating the infos" do
40
+ setup do
41
+ @gir = IRepository.default
42
+ @gir.require 'Gtk', nil
43
+ end
44
+
45
+ should "yield more than one object" do
46
+ assert_operator @gir.n_infos('Gtk'), :>, 0
47
+ end
48
+
49
+ should "yield IBaseInfo objects" do
50
+ assert_kind_of IBaseInfo, @gir.info('Gtk', 0)
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,39 @@
1
+ require 'shoulda'
2
+ require 'ffi'
3
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
4
+
5
+ # Since the tests will call Gtk+ functions, Gtk+ must be initialized.
6
+ module DummyGtk
7
+ module Lib
8
+ extend FFI::Library
9
+
10
+ ffi_lib "gtk-x11-2.0"
11
+ attach_function :gtk_init, [:pointer, :pointer], :void
12
+ end
13
+
14
+ def self.init
15
+ Lib.gtk_init nil, nil
16
+ end
17
+ end
18
+
19
+ DummyGtk.init
20
+
21
+ # Need a dummy module for some tests.
22
+ module Lib
23
+ end
24
+
25
+ class Test::Unit::TestCase
26
+ def cws code
27
+ code.gsub(/(^\s*|\s*$)/, "")
28
+ end
29
+
30
+ def get_function_introspection_data namespace, function
31
+ GirFFI::IRepository.default.require namespace, nil
32
+ GirFFI::Builder.send :function_introspection_data, namespace, function
33
+ end
34
+
35
+ def get_method_introspection_data namespace, klass, function
36
+ GirFFI::IRepository.default.require namespace, nil
37
+ GirFFI::Builder.send :method_introspection_data, namespace, klass, function
38
+ end
39
+ end
metadata ADDED
@@ -0,0 +1,174 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gir_ffi
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Matijs van Zuijlen
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-10-25 00:00:00 +02:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: ffi
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ hash: 1
30
+ segments:
31
+ - 0
32
+ - 6
33
+ - 3
34
+ version: 0.6.3
35
+ type: :runtime
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: shoulda
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ hash: 37
46
+ segments:
47
+ - 2
48
+ - 11
49
+ - 3
50
+ version: 2.11.3
51
+ type: :development
52
+ version_requirements: *id002
53
+ description: Ruby-FFI-based binding of the GObject Introspection Repository
54
+ email:
55
+ - matijs@matijs.net
56
+ executables: []
57
+
58
+ extensions: []
59
+
60
+ extra_rdoc_files:
61
+ - DESIGN.rdoc
62
+ - History.txt
63
+ - README.rdoc
64
+ - TODO.rdoc
65
+ files:
66
+ - lib/gir_ffi.rb
67
+ - lib/gir_ffi/lib_c.rb
68
+ - lib/gir_ffi/builder_helper.rb
69
+ - lib/gir_ffi/i_field_info.rb
70
+ - lib/gir_ffi/i_flags_info.rb
71
+ - lib/gir_ffi/g_error.rb
72
+ - lib/gir_ffi/i_object_info.rb
73
+ - lib/gir_ffi/builder.rb
74
+ - lib/gir_ffi/constructor_definition_builder.rb
75
+ - lib/gir_ffi/i_enum_info.rb
76
+ - lib/gir_ffi/base.rb
77
+ - lib/gir_ffi/i_value_info.rb
78
+ - lib/gir_ffi/i_signal_info.rb
79
+ - lib/gir_ffi/g_type.rb
80
+ - lib/gir_ffi/i_callback_info.rb
81
+ - lib/gir_ffi/lib.rb
82
+ - lib/gir_ffi/i_property_info.rb
83
+ - lib/gir_ffi/i_registered_type_info.rb
84
+ - lib/gir_ffi/i_repository.rb
85
+ - lib/gir_ffi/i_vfunc_info.rb
86
+ - lib/gir_ffi/i_constant_info.rb
87
+ - lib/gir_ffi/class_base.rb
88
+ - lib/gir_ffi/i_struct_info.rb
89
+ - lib/gir_ffi/i_callable_info.rb
90
+ - lib/gir_ffi/function_definition_builder.rb
91
+ - lib/gir_ffi/i_function_info.rb
92
+ - lib/gir_ffi/version.rb
93
+ - lib/gir_ffi/overrides/gtk.rb
94
+ - lib/gir_ffi/allocation_helper.rb
95
+ - lib/gir_ffi/i_base_info.rb
96
+ - lib/gir_ffi/module_builder.rb
97
+ - lib/gir_ffi/method_missing_definition_builder.rb
98
+ - lib/gir_ffi/arg_helper.rb
99
+ - lib/gir_ffi/i_union_info.rb
100
+ - lib/gir_ffi/class_builder.rb
101
+ - lib/gir_ffi/i_interface_info.rb
102
+ - lib/gir_ffi/i_arg_info.rb
103
+ - lib/gir_ffi/i_type_info.rb
104
+ - test/i_repository_test.rb
105
+ - test/g_type_test.rb
106
+ - test/function_definition_builder_test.rb
107
+ - test/arg_helper_test.rb
108
+ - test/test_helper.rb
109
+ - test/girffi_test.rb
110
+ - test/constructor_definition_builder_test.rb
111
+ - test/builder_test.rb
112
+ - test/gtk_overrides_test.rb
113
+ - tasks/bones.rake
114
+ - tasks/test.rake
115
+ - tasks/post_load.rake
116
+ - tasks/setup.rb
117
+ - tasks/notes.rake
118
+ - examples/demo_ffi_safe_inherited_layout.rb
119
+ - examples/demo_ffi_nested_struct.rb
120
+ - examples/demo_ffi_inherited_layout.rb
121
+ - examples/hard_coded.rb
122
+ - examples/03_upgraded_hello_world.rb
123
+ - examples/02_hello_world.rb
124
+ - examples/01_empty_window.rb
125
+ - TODO.rdoc
126
+ - DESIGN.rdoc
127
+ - README.rdoc
128
+ - History.txt
129
+ - Rakefile
130
+ has_rdoc: true
131
+ homepage: http://www.github.com/mvz/ruby-gir-ffi
132
+ licenses: []
133
+
134
+ post_install_message:
135
+ rdoc_options:
136
+ - --main
137
+ - README.rdoc
138
+ require_paths:
139
+ - lib
140
+ required_ruby_version: !ruby/object:Gem::Requirement
141
+ none: false
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ hash: 3
146
+ segments:
147
+ - 0
148
+ version: "0"
149
+ required_rubygems_version: !ruby/object:Gem::Requirement
150
+ none: false
151
+ requirements:
152
+ - - ">="
153
+ - !ruby/object:Gem::Version
154
+ hash: 3
155
+ segments:
156
+ - 0
157
+ version: "0"
158
+ requirements: []
159
+
160
+ rubyforge_project:
161
+ rubygems_version: 1.3.7
162
+ signing_key:
163
+ specification_version: 3
164
+ summary: Ruby-FFI-based binding of the GObject Introspection Repository
165
+ test_files:
166
+ - test/arg_helper_test.rb
167
+ - test/builder_test.rb
168
+ - test/constructor_definition_builder_test.rb
169
+ - test/function_definition_builder_test.rb
170
+ - test/g_type_test.rb
171
+ - test/girffi_test.rb
172
+ - test/gtk_overrides_test.rb
173
+ - test/i_repository_test.rb
174
+ - test/test_helper.rb