gir_ffi 0.0.10 → 0.0.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. data/History.txt +11 -0
  2. data/README.rdoc +28 -14
  3. data/Rakefile +1 -1
  4. data/TODO.rdoc +3 -24
  5. data/examples/05_notification.rb +35 -0
  6. data/lib/gir_ffi/arg_helper.rb +15 -279
  7. data/lib/gir_ffi/builder/argument/base.rb +110 -0
  8. data/lib/gir_ffi/builder/argument/hash_table_base.rb +20 -0
  9. data/lib/gir_ffi/builder/argument/in_base.rb +19 -0
  10. data/lib/gir_ffi/builder/argument/in_out_base.rb +25 -0
  11. data/lib/gir_ffi/builder/argument/list_base.rb +16 -0
  12. data/lib/gir_ffi/builder/argument/out_base.rb +27 -0
  13. data/lib/gir_ffi/builder/argument.rb +167 -357
  14. data/lib/gir_ffi/builder/function.rb +2 -0
  15. data/lib/gir_ffi/builder/module.rb +2 -2
  16. data/lib/gir_ffi/builder/type/base.rb +7 -0
  17. data/lib/gir_ffi/builder/type/callback.rb +1 -8
  18. data/lib/gir_ffi/builder/type/constant.rb +1 -6
  19. data/lib/gir_ffi/builder/type/enum.rb +2 -7
  20. data/lib/gir_ffi/builder/type/interface.rb +12 -14
  21. data/lib/gir_ffi/builder/type/object.rb +32 -13
  22. data/lib/gir_ffi/builder/type/registered_type.rb +1 -78
  23. data/lib/gir_ffi/builder/type/struct.rb +2 -0
  24. data/lib/gir_ffi/builder/type/struct_based.rb +9 -24
  25. data/lib/gir_ffi/builder/type/unintrospectable.rb +63 -0
  26. data/lib/gir_ffi/builder/type/union.rb +8 -7
  27. data/lib/gir_ffi/builder/type/with_layout.rb +43 -0
  28. data/lib/gir_ffi/builder/type/with_methods.rb +61 -0
  29. data/lib/gir_ffi/builder.rb +39 -0
  30. data/lib/gir_ffi/callback_helper.rb +58 -0
  31. data/lib/gir_ffi/class_base.rb +17 -5
  32. data/lib/gir_ffi/i_repository.rb +0 -4
  33. data/lib/gir_ffi/in_out_pointer.rb +76 -0
  34. data/lib/gir_ffi/in_pointer.rb +46 -0
  35. data/lib/gir_ffi/interface_base.rb +12 -0
  36. data/lib/gir_ffi/module_base.rb +7 -3
  37. data/lib/gir_ffi/overrides/glib.rb +14 -3
  38. data/lib/gir_ffi/overrides/gobject.rb +37 -15
  39. data/lib/gir_ffi/overrides/gtk.rb +1 -1
  40. data/lib/gir_ffi/version.rb +1 -1
  41. data/lib/gir_ffi.rb +3 -0
  42. data/tasks/rdoc.rake +6 -0
  43. data/tasks/test.rake +22 -3
  44. data/tasks/yardoc.rake +6 -0
  45. data/test/arg_helper_test.rb +2 -72
  46. data/test/builder_test.rb +15 -19
  47. data/test/function_definition_builder_test.rb +30 -37
  48. data/test/g_object_overrides_test.rb +29 -1
  49. data/test/glib_overrides_test.rb +4 -0
  50. data/test/gtk_overrides_test.rb +21 -15
  51. data/test/i_repository_test.rb +2 -1
  52. data/test/{generated_gimarshallingtests_test.rb → integration/generated_gimarshallingtests_test.rb} +1 -1
  53. data/test/integration/generated_gio_test.rb +98 -0
  54. data/test/integration/generated_gobject_test.rb +30 -0
  55. data/test/{generated_gtk_test.rb → integration/generated_gtk_test.rb} +5 -5
  56. data/test/{generated_regress_test.rb → integration/generated_regress_test.rb} +19 -5
  57. data/test/interface_type_builder_test.rb +1 -1
  58. data/test/module_builder_test.rb +3 -3
  59. data/test/test_helper.rb +4 -9
  60. data/test/type_builder_test.rb +5 -5
  61. data/test/{dynamic_type_builder_test.rb → unintrospectable_type_builder_test.rb} +12 -8
  62. data/test/unit/builder_test.rb +31 -0
  63. data/test/unit/callback_helper_test.rb +19 -0
  64. data/test/unit/constant_builder_test.rb +5 -0
  65. data/test/unit/i_constant_info_test.rb +17 -0
  66. data/test/unit/in_out_pointer_test.rb +118 -0
  67. data/test/unit/in_pointer_test.rb +69 -0
  68. data/test/unit/object_type_builder_test.rb +20 -0
  69. metadata +47 -19
  70. data/lib/gir_ffi/builder/dynamic_type.rb +0 -41
  71. data/test/generated_gio_test.rb +0 -39
  72. data/test/generated_gobject_test.rb +0 -15
  73. data/test/object_type_builder_test.rb +0 -34
data/test/builder_test.rb CHANGED
@@ -9,7 +9,7 @@ class BuilderTest < MiniTest::Spec
9
9
  context "building GObject::Object" do
10
10
  before do
11
11
  save_module :GObject
12
- GirFFI::Builder.build_class get_function_introspection_data('GObject', 'Object')
12
+ GirFFI::Builder.build_class get_introspection_data('GObject', 'Object')
13
13
  end
14
14
 
15
15
  should "create a Lib module in the parent namespace ready to attach functions from gobject-2.0" do
@@ -23,7 +23,7 @@ class BuilderTest < MiniTest::Spec
23
23
 
24
24
  should "not replace existing classes" do
25
25
  oldclass = GObject::Object
26
- GirFFI::Builder.build_class get_function_introspection_data('GObject', 'Object')
26
+ GirFFI::Builder.build_class get_introspection_data('GObject', 'Object')
27
27
  assert_equal oldclass, GObject::Object
28
28
  end
29
29
 
@@ -36,7 +36,7 @@ class BuilderTest < MiniTest::Spec
36
36
  before do
37
37
  save_module :Gtk
38
38
  save_module :GObject
39
- GirFFI::Builder.build_class get_function_introspection_data('Gtk', 'Window')
39
+ GirFFI::Builder.build_class get_introspection_data('Gtk', 'Window')
40
40
  end
41
41
 
42
42
  should "build Gtk namespace" do
@@ -67,10 +67,6 @@ class BuilderTest < MiniTest::Spec
67
67
  assert Gtk::Window.instance_methods.map(&:to_sym).include? :to_ptr
68
68
  end
69
69
 
70
- should "result in Gtk::Window.new to succeed" do
71
- assert_nothing_raised {Gtk::Window.new(:toplevel)}
72
- end
73
-
74
70
  after do
75
71
  restore_module :Gtk
76
72
  restore_module :GObject
@@ -112,7 +108,7 @@ class BuilderTest < MiniTest::Spec
112
108
 
113
109
  context "looking at Gtk.main" do
114
110
  setup do
115
- @go = get_function_introspection_data 'Gtk', 'main'
111
+ @go = get_introspection_data 'Gtk', 'main'
116
112
  end
117
113
 
118
114
  should "have correct introspection data" do
@@ -137,7 +133,7 @@ class BuilderTest < MiniTest::Spec
137
133
  context "looking at Gtk.init" do
138
134
  setup do
139
135
  GirFFI::Builder.build_module 'Gtk'
140
- @go = get_function_introspection_data 'Gtk', 'init'
136
+ @go = get_introspection_data 'Gtk', 'init'
141
137
  end
142
138
 
143
139
  should "have :pointer, :pointer as types of the arguments for the attached function" do
@@ -168,7 +164,7 @@ class BuilderTest < MiniTest::Spec
168
164
  GirFFI::Builder.build_module 'GLib'
169
165
  GirFFI::Builder.build_module 'GObject'
170
166
  GirFFI::Builder.build_module 'Regress'
171
- @go = get_function_introspection_data 'Regress', 'test_callback_destroy_notify'
167
+ @go = get_introspection_data 'Regress', 'test_callback_destroy_notify'
172
168
  end
173
169
 
174
170
  should "have the correct types of the arguments for the attached function" do
@@ -178,7 +174,7 @@ class BuilderTest < MiniTest::Spec
178
174
  end
179
175
 
180
176
  should "define ffi callback types :Callback and :ClosureNotify" do
181
- Regress.gir_ffi_builder.setup_function 'test_callback_destroy_notify'
177
+ Regress._setup_method 'test_callback_destroy_notify'
182
178
  tcud = Regress::Lib.find_type :TestCallbackUserData
183
179
  dn = GLib::Lib.find_type :DestroyNotify
184
180
 
@@ -202,7 +198,7 @@ class BuilderTest < MiniTest::Spec
202
198
 
203
199
  context "building Regress::TestStructA" do
204
200
  setup do
205
- GirFFI::Builder.build_class get_function_introspection_data('Regress', 'TestStructA')
201
+ GirFFI::Builder.build_class get_introspection_data('Regress', 'TestStructA')
206
202
  end
207
203
 
208
204
  should "set up the correct struct members" do
@@ -225,7 +221,7 @@ class BuilderTest < MiniTest::Spec
225
221
 
226
222
  context "building GObject::TypeCValue" do
227
223
  setup do
228
- GirFFI::Builder.build_class get_function_introspection_data('GObject', 'TypeCValue')
224
+ GirFFI::Builder.build_class get_introspection_data('GObject', 'TypeCValue')
229
225
  end
230
226
 
231
227
  should "set up the correct union members" do
@@ -245,7 +241,7 @@ class BuilderTest < MiniTest::Spec
245
241
 
246
242
  context "building GObject::ValueArray" do
247
243
  should "use provided constructor if present" do
248
- GirFFI::Builder.build_class get_function_introspection_data('GObject', 'ValueArray')
244
+ GirFFI::Builder.build_class get_introspection_data('GObject', 'ValueArray')
249
245
  assert_nothing_raised {
250
246
  GObject::ValueArray.new 2
251
247
  }
@@ -254,7 +250,7 @@ class BuilderTest < MiniTest::Spec
254
250
 
255
251
  context "building Regress::TestBoxed" do
256
252
  setup do
257
- GirFFI::Builder.build_class get_function_introspection_data('Regress', 'TestBoxed')
253
+ GirFFI::Builder.build_class get_introspection_data('Regress', 'TestBoxed')
258
254
  end
259
255
 
260
256
  should "set up #wrap" do
@@ -284,7 +280,7 @@ class BuilderTest < MiniTest::Spec
284
280
  end
285
281
 
286
282
  should "know its own module builder" do
287
- assert GirFFI::Builder::Module === Regress.gir_ffi_builder
283
+ assert GirFFI::Builder::Module === Regress._builder
288
284
  end
289
285
 
290
286
  after do
@@ -295,7 +291,7 @@ class BuilderTest < MiniTest::Spec
295
291
  context "built Regress::TestObj" do
296
292
  before do
297
293
  save_module :Regress
298
- GirFFI::Builder.build_class get_function_introspection_data('Regress', 'TestObj')
294
+ GirFFI::Builder.build_class get_introspection_data('Regress', 'TestObj')
299
295
  end
300
296
 
301
297
  should "make autocreated instance method available to all instances" do
@@ -319,7 +315,7 @@ class BuilderTest < MiniTest::Spec
319
315
  end
320
316
 
321
317
  should "know its own class builder" do
322
- assert GirFFI::Builder::Type::Base === Regress::TestObj.gir_ffi_builder
318
+ assert GirFFI::Builder::Type::Base === Regress::TestObj._builder
323
319
  end
324
320
 
325
321
  context "its #torture_signature_0 method" do
@@ -339,7 +335,7 @@ class BuilderTest < MiniTest::Spec
339
335
  context "built Regress::TestSubObj" do
340
336
  before do
341
337
  save_module :Regress
342
- GirFFI::Builder.build_class get_function_introspection_data('Regress', 'TestSubObj')
338
+ GirFFI::Builder.build_class get_introspection_data('Regress', 'TestSubObj')
343
339
  end
344
340
 
345
341
  should "autocreate parent class' set_bare inside the parent class" do
@@ -3,20 +3,18 @@ require File.expand_path('test_helper.rb', File.dirname(__FILE__))
3
3
  class FunctionDefinitionBuilderTest < MiniTest::Spec
4
4
  context "The Builder::Function class" do
5
5
  should "build correct definition of Gtk.init" do
6
- go = get_function_introspection_data 'Gtk', 'init'
6
+ go = get_introspection_data 'Gtk', 'init'
7
7
  fbuilder = GirFFI::Builder::Function.new go, Lib
8
8
  code = fbuilder.generate
9
9
 
10
10
  expected = "
11
11
  def init argv
12
12
  argc = argv.length
13
- _v1 = GirFFI::ArgHelper.gint32_to_inoutptr argc
14
- _v3 = GirFFI::ArgHelper.utf8_array_to_inoutptr argv
15
- ::Lib.gtk_init _v1, _v3
16
- _v2 = GirFFI::ArgHelper.outptr_to_gint32 _v1
17
- GirFFI::ArgHelper.cleanup_ptr _v1
18
- _v4 = GirFFI::ArgHelper.outptr_to_utf8_array _v3, _v2
19
- GirFFI::ArgHelper.cleanup_ptr_array_ptr _v3, _v2
13
+ _v1 = GirFFI::InOutPointer.from :gint32, argc
14
+ _v2 = GirFFI::InOutPointer.from_array :utf8, argv
15
+ ::Lib.gtk_init _v1, _v2
16
+ _v3 = _v1.to_value
17
+ _v4 = GirFFI::ArgHelper.outptr_to_utf8_array _v2, _v3
20
18
  return _v4
21
19
  end
22
20
  "
@@ -39,16 +37,16 @@ class FunctionDefinitionBuilderTest < MiniTest::Spec
39
37
  end
40
38
 
41
39
  should "build correct definition of Regress.test_callback_destroy_notify" do
42
- go = get_function_introspection_data 'Regress', 'test_callback_destroy_notify'
40
+ go = get_introspection_data 'Regress', 'test_callback_destroy_notify'
43
41
  fbuilder = GirFFI::Builder::Function.new go, Lib
44
42
  code = fbuilder.generate
45
43
 
46
44
  expected =
47
45
  "def test_callback_destroy_notify callback, user_data, notify
48
- _v1 = GirFFI::ArgHelper.wrap_in_callback_args_mapper \"Regress\", \"TestCallbackUserData\", callback
46
+ _v1 = GirFFI::CallbackHelper.wrap_in_callback_args_mapper \"Regress\", \"TestCallbackUserData\", callback
49
47
  ::Lib::CALLBACKS << _v1
50
48
  _v2 = GirFFI::ArgHelper.object_to_inptr user_data
51
- _v3 = GirFFI::ArgHelper.wrap_in_callback_args_mapper \"GLib\", \"DestroyNotify\", notify
49
+ _v3 = GirFFI::CallbackHelper.wrap_in_callback_args_mapper \"GLib\", \"DestroyNotify\", notify
52
50
  ::Lib::CALLBACKS << _v3
53
51
  _v4 = ::Lib.regress_test_callback_destroy_notify _v1, _v2, _v3
54
52
  return _v4
@@ -64,49 +62,46 @@ class FunctionDefinitionBuilderTest < MiniTest::Spec
64
62
 
65
63
  expected =
66
64
  "def new_from_file x
67
- _v1 = GirFFI::ArgHelper.utf8_to_inptr x
68
- _v4 = FFI::MemoryPointer.new(:pointer).write_pointer nil
69
- _v2 = ::Lib.regress_test_obj_new_from_file _v1, _v4
70
- GirFFI::ArgHelper.check_error(_v4)
71
- _v3 = self.constructor_wrap(_v2)
72
- return _v3
65
+ _v1 = GirFFI::InPointer.from :utf8, x
66
+ _v2 = FFI::MemoryPointer.new(:pointer).write_pointer nil
67
+ _v3 = ::Lib.regress_test_obj_new_from_file _v1, _v2
68
+ GirFFI::ArgHelper.check_error(_v2)
69
+ _v4 = self.constructor_wrap(_v3)
70
+ return _v4
73
71
  end"
74
72
 
75
73
  assert_equal cws(expected), cws(code)
76
74
  end
77
75
 
78
76
  should "build correct definition of Regress:test_array_int_null_in" do
79
- go = get_function_introspection_data 'Regress', 'test_array_int_null_in'
77
+ go = get_introspection_data 'Regress', 'test_array_int_null_in'
80
78
  fbuilder = GirFFI::Builder::Function.new go, Lib
81
79
  code = fbuilder.generate
82
80
 
83
81
  expected =
84
82
  "def test_array_int_null_in arr
85
- _v1 = GirFFI::ArgHelper.gint32_array_to_inptr arr
83
+ _v1 = GirFFI::InPointer.from_array :gint32, arr
86
84
  len = arr.nil? ? 0 : arr.length
87
85
  _v2 = len
88
86
  ::Lib.regress_test_array_int_null_in _v1, _v2
89
- GirFFI::ArgHelper.cleanup_ptr _v1
90
87
  end"
91
88
 
92
89
  assert_equal cws(expected), cws(code)
93
90
  end
94
91
 
95
92
  should "build correct definition of Regress:test_array_int_null_out" do
96
- go = get_function_introspection_data 'Regress', 'test_array_int_null_out'
93
+ go = get_introspection_data 'Regress', 'test_array_int_null_out'
97
94
  fbuilder = GirFFI::Builder::Function.new go, Lib
98
95
  code = fbuilder.generate
99
96
 
100
97
  expected =
101
98
  "def test_array_int_null_out
102
- _v1 = GirFFI::ArgHelper.pointer_outptr
103
- _v3 = GirFFI::ArgHelper.gint32_outptr
104
- ::Lib.regress_test_array_int_null_out _v1, _v3
105
- _v4 = GirFFI::ArgHelper.outptr_to_gint32 _v3
106
- GirFFI::ArgHelper.cleanup_ptr _v3
107
- _v2 = GirFFI::ArgHelper.outptr_to_gint32_array _v1, _v4
108
- GirFFI::ArgHelper.cleanup_ptr_ptr _v1
109
- return _v2
99
+ _v1 = GirFFI::InOutPointer.for :pointer
100
+ _v2 = GirFFI::InOutPointer.for :gint32
101
+ ::Lib.regress_test_array_int_null_out _v1, _v2
102
+ _v3 = _v2.to_value
103
+ _v4 = GirFFI::ArgHelper.outptr_to_gint32_array _v1, _v3
104
+ return _v4
110
105
  end"
111
106
 
112
107
  assert_equal cws(expected), cws(code)
@@ -119,15 +114,13 @@ class FunctionDefinitionBuilderTest < MiniTest::Spec
119
114
 
120
115
  expected =
121
116
  "def method_array_inout ints
122
- _v1 = GirFFI::ArgHelper.gint32_array_to_inoutptr ints
117
+ _v1 = GirFFI::InOutPointer.from_array :gint32, ints
123
118
  length = ints.length
124
- _v3 = GirFFI::ArgHelper.gint32_to_inoutptr length
125
- ::Lib.gi_marshalling_tests_object_method_array_inout self, _v1, _v3
126
- _v4 = GirFFI::ArgHelper.outptr_to_gint32 _v3
127
- GirFFI::ArgHelper.cleanup_ptr _v3
128
- _v2 = GirFFI::ArgHelper.outptr_to_gint32_array _v1, _v4
129
- GirFFI::ArgHelper.cleanup_ptr _v1
130
- return _v2
119
+ _v2 = GirFFI::InOutPointer.from :gint32, length
120
+ ::Lib.gi_marshalling_tests_object_method_array_inout self, _v1, _v2
121
+ _v3 = _v2.to_value
122
+ _v4 = GirFFI::ArgHelper.outptr_to_gint32_array _v1, _v3
123
+ return _v4
131
124
  end"
132
125
 
133
126
  assert_equal cws(expected), cws(code)
@@ -180,6 +180,18 @@ class GObjectOverridesTest < MiniTest::Spec
180
180
  end
181
181
  end
182
182
 
183
+ describe "#signal_argument_to_gvalue" do
184
+ it "maps a :utf8 argument to a string-valued GValue" do
185
+ stub(arg_t = Object.new).tag { :utf8 }
186
+ stub(info = Object.new).argument_type { arg_t }
187
+ val =
188
+ GirFFI::Overrides::GObject::Helper.signal_argument_to_gvalue(
189
+ info, "foo")
190
+ assert_instance_of GObject::Value, val
191
+ assert_equal "foo", val.get_string
192
+ end
193
+ end
194
+
183
195
  context "#cast_back_signal_arguments" do
184
196
  context "the result of casting pointers for the test-with-static-scope-arg signal" do
185
197
  setup do
@@ -187,7 +199,7 @@ class GObjectOverridesTest < MiniTest::Spec
187
199
  o = Regress::TestSubObj.new
188
200
  b = Regress::TestSimpleBoxedA.new
189
201
  ud = GirFFI::ArgHelper.object_to_inptr "Hello!"
190
- sig = o.class.gir_ffi_builder.find_signal sig_name
202
+ sig = o.class._find_signal sig_name
191
203
 
192
204
  @gva =
193
205
  GirFFI::Overrides::GObject::Helper.cast_back_signal_arguments(
@@ -217,6 +229,22 @@ class GObjectOverridesTest < MiniTest::Spec
217
229
  end
218
230
  end
219
231
  end
232
+
233
+ describe "#cast_signal_argument" do
234
+ describe "with info for an enum" do
235
+ before do
236
+ enuminfo = get_introspection_data 'GLib', 'DateMonth'
237
+ stub(arg_t = Object.new).interface { enuminfo }
238
+ stub(arg_t).tag { :interface }
239
+ stub(@info = Object.new).argument_type { arg_t }
240
+ end
241
+
242
+ it "casts an integer to its enum symbol" do
243
+ res = GirFFI::Overrides::GObject::Helper.cast_signal_argument @info, 7
244
+ assert_equal :july, res
245
+ end
246
+ end
247
+ end
220
248
  end
221
249
 
222
250
  context "The RubyClosure class" do
@@ -1,6 +1,10 @@
1
1
  require File.expand_path('test_helper.rb', File.dirname(__FILE__))
2
2
 
3
3
  describe "With the GLib overrides" do
4
+ before do
5
+ GirFFI.setup :GLib
6
+ end
7
+
4
8
  describe "a HashTable provided by the system" do
5
9
  before do
6
10
  GirFFI.setup :Regress
@@ -1,25 +1,31 @@
1
1
  require File.expand_path('test_helper.rb', File.dirname(__FILE__))
2
+ require 'gir_ffi/overrides/gtk'
2
3
 
3
- class GtkOverridesTest < MiniTest::Spec
4
- context "The Gtk.init function" do
5
- setup do
6
- GirFFI.setup :Gtk, '2.0'
4
+ describe GirFFI::Overrides::Gtk do
5
+ before do
6
+ @gtk = Module.new do
7
+ def self.init arr
8
+ ["baz", "qux", "zonk"]
9
+ end
7
10
  end
11
+ stub(@gtk)._setup_method { }
8
12
 
9
- should "not take any arguments" do
10
- assert_raises(ArgumentError) { Gtk.init 1, ["foo"] }
11
- assert_raises(ArgumentError) { Gtk.init ["foo"] }
12
- assert_nothing_raised { Gtk.init }
13
+ @gtk.instance_eval do
14
+ include GirFFI::Overrides::Gtk
13
15
  end
16
+ end
14
17
 
15
- # FIXME: The following test doesn't actually work.
16
- # In practice however, the Gtk.init function does exactly this.
17
- if false
18
- should "process ARGV, removing Gtk+ options" do
19
- ARGV.replace ["foo", "--g-fatal-warnings"]
20
- Gtk.init
21
- assert_same_elements ["foo"], ARGV
18
+ context "The .init function" do
19
+ should "not take any arguments" do
20
+ assert_raises(ArgumentError) { @gtk.init 1, ["foo"] }
21
+ assert_raises(ArgumentError) { @gtk.init ["foo"] }
22
+ assert_nothing_raised { @gtk.init }
22
23
  end
24
+
25
+ should "replace ARGV with the tail of the result of the original init function" do
26
+ ARGV.replace ["foo", "bar"]
27
+ @gtk.init
28
+ assert_equal ["qux", "zonk"], ARGV.to_a
23
29
  end
24
30
  end
25
31
  end
@@ -41,9 +41,10 @@ module GirFFI
41
41
  end
42
42
  end
43
43
 
44
- context "Enumerating the infos" do
44
+ context "Enumerating the infos for Gtk" do
45
45
  setup do
46
46
  @gir = IRepository.default
47
+ @gir.require 'Gtk'
47
48
  end
48
49
 
49
50
  should "yield more than one object" do
@@ -1,5 +1,5 @@
1
1
  # coding: utf-8
2
- require File.expand_path('test_helper.rb', File.dirname(__FILE__))
2
+ require File.expand_path('../test_helper.rb', File.dirname(__FILE__))
3
3
 
4
4
  # Tests generated methods and functions in the GIMarshallingTests namespace.
5
5
  describe "GIMarshallingTests" do
@@ -0,0 +1,98 @@
1
+ require File.expand_path('../test_helper.rb', File.dirname(__FILE__))
2
+
3
+ # Tests generated methods and functions in the Gio namespace.
4
+ describe "The generated Gio module" do
5
+ setup do
6
+ GirFFI.setup :Gio
7
+ end
8
+
9
+ describe "#file_new_for_path, a method returning an interface," do
10
+ it "does not throw an error when generated" do
11
+ assert_nothing_raised {
12
+ Gio.file_new_for_path('/')
13
+ }
14
+ end
15
+
16
+ it "returns an object of a more specific class" do
17
+ file = Gio.file_new_for_path('/')
18
+ refute_instance_of Gio::File, file
19
+ assert_includes file.class.ancestors, Gio::File
20
+ end
21
+ end
22
+
23
+ describe "the result of #file_new_from_path" do
24
+ before do
25
+ @it = Gio.file_new_for_path('/')
26
+ end
27
+
28
+ it "is able to set up a method in a class that is not the first ancestor" do
29
+ anc = @it.class.ancestors
30
+ assert_equal Gio::File, anc[1]
31
+ assert_equal GObject::Object, anc[2]
32
+ refute_includes Gio::File.instance_methods.map(&:to_s),
33
+ 'get_qdata'
34
+ assert_includes GObject::Object.instance_methods.map(&:to_s),
35
+ 'get_qdata'
36
+ @it.setup_and_call :get_qdata, 1
37
+ end
38
+ end
39
+
40
+ context "the FileInfo class" do
41
+ context "an instance" do
42
+ setup do
43
+ file = Gio.file_new_for_path('/')
44
+ @fileinfo = file.query_info "*", :none, nil
45
+ end
46
+
47
+ should "hava a working #get_attribute_type method" do
48
+ type = @fileinfo.get_attribute_type "standard::display-name"
49
+ assert_equal :string, type
50
+ end
51
+ end
52
+ end
53
+
54
+ describe "the action-added signal" do
55
+ before do
56
+ @grp = Gio::SimpleActionGroup.new
57
+ end
58
+
59
+ it "correctly passes on the string parameter 'action_name'" do
60
+ a = nil
61
+ GObject.signal_connect @grp, "action-added" do |grp, action_name, user_data|
62
+ a = action_name
63
+ end
64
+ GObject.signal_emit @grp, "action-added", "foo"
65
+ assert_equal "foo", a
66
+ end
67
+ end
68
+
69
+ describe "the reply signal" do
70
+ before do
71
+ @mo = Gio::MountOperation.new
72
+ end
73
+
74
+ it "correctly passes on the enum parameter 'result'" do
75
+ a = nil
76
+ GObject.signal_connect @mo, "reply" do |mnt, result, user_data|
77
+ a = result
78
+ end
79
+ GObject.signal_emit @mo, "reply", 2
80
+ assert_equal :unhandled, a
81
+ end
82
+ end
83
+
84
+ describe "the CharsetConverter class" do
85
+ it "includes two interfaces" do
86
+ klass = Gio::CharsetConverter
87
+ assert_includes klass.ancestors, Gio::Converter
88
+ assert_includes klass.ancestors, Gio::Initable
89
+ end
90
+
91
+ it "allows an instance to find the #reset method" do
92
+ cnv = Gio::CharsetConverter.new "utf8", "utf8"
93
+ cnv.reset
94
+ pass
95
+ end
96
+ end
97
+ end
98
+
@@ -0,0 +1,30 @@
1
+ require File.expand_path('../test_helper.rb', File.dirname(__FILE__))
2
+
3
+ describe "The generated GObject module" do
4
+ before do
5
+ GirFFI.setup :GObject
6
+ end
7
+
8
+ describe "#type_interfaces" do
9
+ it "works, showing that returning an array of GType works" do
10
+ tp = GObject.type_from_name 'GTypeModule'
11
+ ifcs = GObject.type_interfaces tp
12
+ assert_equal 1, ifcs.size
13
+ end
14
+ end
15
+
16
+ describe "the TypePlugin interface" do
17
+ it "is implemented as a module" do
18
+ mod = GObject::TypePlugin
19
+ assert_instance_of Module, mod
20
+ refute_instance_of Class, mod
21
+ end
22
+ end
23
+
24
+ describe "the TypeModule class" do
25
+ it "has the GObject::TypePlugin module as an ancestor" do
26
+ klass = GObject::TypeModule
27
+ assert_includes klass.ancestors, GObject::TypePlugin
28
+ end
29
+ end
30
+ end
@@ -1,12 +1,12 @@
1
- require File.expand_path('test_helper.rb', File.dirname(__FILE__))
1
+ require File.expand_path('../test_helper.rb', File.dirname(__FILE__))
2
+
3
+ # Since the tests will call Gtk+ functions, Gtk+ must be initialized.
4
+ GirFFI.setup :Gtk, '2.0'
5
+ Gtk.init
2
6
 
3
7
  # Tests generated methods and functions in the Gtk namespace.
4
8
  class GeneratedGtkTest < MiniTest::Spec
5
9
  context "In the generated Gtk module" do
6
- setup do
7
- GirFFI.setup :Gtk, '2.0'
8
- end
9
-
10
10
  context "a Gtk::Builder instance" do
11
11
  setup do
12
12
  @builder = Gtk::Builder.new
@@ -1,5 +1,5 @@
1
1
  # coding: utf-8
2
- require File.expand_path('test_helper.rb', File.dirname(__FILE__))
2
+ require File.expand_path('../test_helper.rb', File.dirname(__FILE__))
3
3
 
4
4
  # Tests generated methods and functions in the Regress namespace.
5
5
  class GeneratedRegressTest < MiniTest::Spec
@@ -129,6 +129,7 @@ class GeneratedRegressTest < MiniTest::Spec
129
129
  assert_instance_of Regress::TestObj, o
130
130
  end
131
131
 
132
+ # TODO: Test that callback is called
132
133
  should "create an instance using #new_callback" do
133
134
  o = Regress::TestObj.new_callback Proc.new { }, nil, nil
134
135
  assert_instance_of Regress::TestObj, o
@@ -212,7 +213,21 @@ class GeneratedRegressTest < MiniTest::Spec
212
213
  should "not respond to #static_method" do
213
214
  assert_raises(NoMethodError) { @o.static_method 1 }
214
215
  end
216
+ # TODO: Test instance's fields and properies.
215
217
  end
218
+
219
+ describe "its 'test' signal" do
220
+ it "properly passes its arguments" do
221
+ a = b = nil
222
+ o = Regress::TestSubObj.new
223
+ GObject.signal_connect(o, "test", 2) { |i, d| a = d; b = i }
224
+ GObject.signal_emit o, "test"
225
+ # TODO: store o's identity somewhere so we can make o == b.
226
+ assert_equal [2, o.to_ptr], [a, b.to_ptr]
227
+ end
228
+ end
229
+
230
+ # TODO: Test other signals.
216
231
  end
217
232
 
218
233
  context "the Regress::TestSimpleBoxedA class" do
@@ -467,15 +482,15 @@ class GeneratedRegressTest < MiniTest::Spec
467
482
  end
468
483
 
469
484
  should "have correct test_async_ready_callback" do
470
- GirFFI.setup :Gtk, '2.0'
471
485
  a = 1
486
+ main_loop = GLib.main_loop_new nil, false
472
487
 
473
488
  Regress.test_async_ready_callback Proc.new {
474
- Gtk.main_quit
489
+ main_loop.quit
475
490
  a = 2
476
491
  }
477
492
 
478
- Gtk.main
493
+ main_loop.run
479
494
 
480
495
  assert_equal 2, a
481
496
  end
@@ -975,7 +990,6 @@ class GeneratedRegressTest < MiniTest::Spec
975
990
  end
976
991
 
977
992
  should "have correct test_utf8_const_in" do
978
- # TODO: Capture stderr to automatically look for error messages.
979
993
  assert_nothing_raised do
980
994
  Regress.test_utf8_const_in("const \xe2\x99\xa5 utf8")
981
995
  end
@@ -2,7 +2,7 @@ require File.expand_path('test_helper.rb', File.dirname(__FILE__))
2
2
 
3
3
  describe GirFFI::Builder::Type::Interface do
4
4
  before do
5
- info = get_function_introspection_data 'GObject', 'TypePlugin'
5
+ info = get_introspection_data 'GObject', 'TypePlugin'
6
6
  @bldr = GirFFI::Builder::Type::Interface.new info
7
7
  @iface = @bldr.build_class
8
8
  end
@@ -9,7 +9,7 @@ class ModuleBuilderTest < MiniTest::Spec
9
9
 
10
10
  context "looking at Gtk.main" do
11
11
  setup do
12
- @go = get_function_introspection_data 'Gtk', 'main'
12
+ @go = get_introspection_data 'Gtk', 'main'
13
13
  end
14
14
 
15
15
  should "build correct definition of Gtk.main" do
@@ -21,7 +21,7 @@ class ModuleBuilderTest < MiniTest::Spec
21
21
 
22
22
  context "looking at Gtk.init" do
23
23
  setup do
24
- @go = get_function_introspection_data 'Gtk', 'init'
24
+ @go = get_introspection_data 'Gtk', 'init'
25
25
  end
26
26
 
27
27
  should "delegate definition to Builder::Function" do
@@ -39,7 +39,7 @@ class ModuleBuilderTest < MiniTest::Spec
39
39
 
40
40
  context "looking at Regress.test_callback_destroy_notify" do
41
41
  setup do
42
- @go = get_function_introspection_data 'Regress', 'test_callback_destroy_notify'
42
+ @go = get_introspection_data 'Regress', 'test_callback_destroy_notify'
43
43
  end
44
44
 
45
45
  should "delegate definition to Builder::Function" do