gir_ffi 0.14.1 → 0.15.4

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 (281) hide show
  1. checksums.yaml +4 -4
  2. data/Changelog.md +56 -0
  3. data/README.md +12 -12
  4. data/TODO.md +14 -35
  5. data/docs/Documentation.md +6 -0
  6. data/docs/Subclassing.md +38 -0
  7. data/lib/ffi-glib.rb +26 -21
  8. data/lib/ffi-glib/array.rb +14 -4
  9. data/lib/ffi-glib/byte_array.rb +9 -3
  10. data/lib/ffi-glib/container_class_methods.rb +1 -1
  11. data/lib/ffi-glib/destroy_notify.rb +2 -2
  12. data/lib/ffi-glib/error.rb +1 -1
  13. data/lib/ffi-glib/hash_table.rb +4 -5
  14. data/lib/ffi-glib/list.rb +12 -6
  15. data/lib/ffi-glib/list_methods.rb +13 -1
  16. data/lib/ffi-glib/main_loop.rb +3 -3
  17. data/lib/ffi-glib/ptr_array.rb +30 -8
  18. data/lib/ffi-glib/s_list.rb +11 -5
  19. data/lib/ffi-glib/variant.rb +1 -1
  20. data/lib/ffi-gobject.rb +13 -16
  21. data/lib/ffi-gobject/object.rb +82 -87
  22. data/lib/ffi-gobject/object_class.rb +1 -1
  23. data/lib/ffi-gobject/param_spec.rb +1 -1
  24. data/lib/ffi-gobject/ruby_closure.rb +2 -2
  25. data/lib/ffi-gobject/value.rb +136 -126
  26. data/lib/ffi-gobject_introspection.rb +20 -20
  27. data/lib/ffi-gobject_introspection/gobject_type_init.rb +2 -2
  28. data/lib/ffi-gobject_introspection/i_arg_info.rb +2 -2
  29. data/lib/ffi-gobject_introspection/i_base_info.rb +34 -23
  30. data/lib/ffi-gobject_introspection/i_callable_info.rb +4 -4
  31. data/lib/ffi-gobject_introspection/i_constant_info.rb +2 -2
  32. data/lib/ffi-gobject_introspection/i_enum_info.rb +1 -0
  33. data/lib/ffi-gobject_introspection/i_field_info.rb +1 -1
  34. data/lib/ffi-gobject_introspection/i_function_info.rb +1 -1
  35. data/lib/ffi-gobject_introspection/i_interface_info.rb +1 -1
  36. data/lib/ffi-gobject_introspection/i_object_info.rb +2 -2
  37. data/lib/ffi-gobject_introspection/i_property_info.rb +2 -2
  38. data/lib/ffi-gobject_introspection/i_repository.rb +9 -6
  39. data/lib/ffi-gobject_introspection/i_struct_info.rb +2 -1
  40. data/lib/ffi-gobject_introspection/i_type_info.rb +13 -7
  41. data/lib/ffi-gobject_introspection/i_unresolved_info.rb +1 -1
  42. data/lib/ffi-gobject_introspection/i_vfunc_info.rb +1 -1
  43. data/lib/ffi-gobject_introspection/lib.rb +30 -19
  44. data/lib/ffi-gobject_introspection/strv.rb +1 -1
  45. data/lib/gir_ffi-base.rb +1 -1
  46. data/lib/gir_ffi-base/gobject.rb +26 -25
  47. data/lib/gir_ffi-base/gobject/lib.rb +7 -2
  48. data/lib/gir_ffi.rb +3 -3
  49. data/lib/gir_ffi/allocation_helper.rb +1 -1
  50. data/lib/gir_ffi/arg_helper.rb +4 -4
  51. data/lib/gir_ffi/{in_out_pointer.rb → array_element_convertor.rb} +16 -24
  52. data/lib/gir_ffi/boolean.rb +1 -1
  53. data/lib/gir_ffi/boxed_base.rb +2 -6
  54. data/lib/gir_ffi/builder.rb +19 -11
  55. data/lib/gir_ffi/builder_helper.rb +10 -2
  56. data/lib/gir_ffi/builders/argument_builder.rb +19 -19
  57. data/lib/gir_ffi/builders/argument_builder_collection.rb +2 -2
  58. data/lib/gir_ffi/builders/base_argument_builder.rb +2 -1
  59. data/lib/gir_ffi/builders/base_method_builder.rb +8 -8
  60. data/lib/gir_ffi/builders/base_return_value_builder.rb +1 -1
  61. data/lib/gir_ffi/builders/base_type_builder.rb +2 -2
  62. data/lib/gir_ffi/builders/c_to_ruby_convertor.rb +5 -5
  63. data/lib/gir_ffi/builders/callback_argument_builder.rb +10 -8
  64. data/lib/gir_ffi/builders/callback_builder.rb +28 -14
  65. data/lib/gir_ffi/builders/callback_return_value_builder.rb +6 -8
  66. data/lib/gir_ffi/builders/class_struct_builder.rb +24 -0
  67. data/lib/gir_ffi/builders/closure_argument_builder.rb +1 -1
  68. data/lib/gir_ffi/builders/closure_return_value_builder.rb +1 -1
  69. data/lib/gir_ffi/builders/constant_builder.rb +1 -1
  70. data/lib/gir_ffi/builders/constructor_builder.rb +9 -9
  71. data/lib/gir_ffi/builders/enum_builder.rb +11 -7
  72. data/lib/gir_ffi/builders/field_builder.rb +20 -18
  73. data/lib/gir_ffi/builders/flags_builder.rb +2 -2
  74. data/lib/gir_ffi/builders/full_c_to_ruby_convertor.rb +1 -1
  75. data/lib/gir_ffi/builders/function_builder.rb +11 -5
  76. data/lib/gir_ffi/builders/initializer_builder.rb +3 -3
  77. data/lib/gir_ffi/builders/initializer_return_value_builder.rb +2 -2
  78. data/lib/gir_ffi/builders/interface_builder.rb +5 -3
  79. data/lib/gir_ffi/builders/mapping_method_builder.rb +10 -10
  80. data/lib/gir_ffi/builders/marshalling_method_builder.rb +12 -9
  81. data/lib/gir_ffi/builders/method_template.rb +5 -5
  82. data/lib/gir_ffi/builders/module_builder.rb +7 -7
  83. data/lib/gir_ffi/builders/null_argument_builder.rb +0 -2
  84. data/lib/gir_ffi/builders/null_return_value_builder.rb +0 -2
  85. data/lib/gir_ffi/builders/object_builder.rb +22 -12
  86. data/lib/gir_ffi/builders/property_argument_builder.rb +1 -1
  87. data/lib/gir_ffi/builders/property_builder.rb +14 -14
  88. data/lib/gir_ffi/builders/property_return_value_builder.rb +1 -1
  89. data/lib/gir_ffi/builders/registered_type_builder.rb +14 -5
  90. data/lib/gir_ffi/builders/return_value_builder.rb +4 -4
  91. data/lib/gir_ffi/builders/ruby_to_c_convertor.rb +6 -6
  92. data/lib/gir_ffi/builders/signal_closure_builder.rb +5 -7
  93. data/lib/gir_ffi/builders/struct_builder.rb +8 -6
  94. data/lib/gir_ffi/builders/struct_like.rb +1 -1
  95. data/lib/gir_ffi/builders/type_builder.rb +12 -12
  96. data/lib/gir_ffi/builders/unintrospectable_boxed_builder.rb +2 -2
  97. data/lib/gir_ffi/builders/unintrospectable_builder.rb +2 -2
  98. data/lib/gir_ffi/builders/union_builder.rb +4 -4
  99. data/lib/gir_ffi/builders/user_defined_builder.rb +10 -3
  100. data/lib/gir_ffi/builders/vfunc_argument_builder.rb +2 -2
  101. data/lib/gir_ffi/builders/vfunc_builder.rb +8 -8
  102. data/lib/gir_ffi/builders/with_layout.rb +2 -2
  103. data/lib/gir_ffi/callback_base.rb +7 -9
  104. data/lib/gir_ffi/class_base.rb +6 -5
  105. data/lib/gir_ffi/core.rb +36 -22
  106. data/lib/gir_ffi/enum_base.rb +1 -1
  107. data/lib/gir_ffi/enum_like_base.rb +2 -2
  108. data/lib/gir_ffi/error_argument_info.rb +2 -2
  109. data/lib/gir_ffi/error_type_info.rb +1 -1
  110. data/lib/gir_ffi/ffi_ext.rb +1 -1
  111. data/lib/gir_ffi/ffi_ext/pointer.rb +1 -1
  112. data/lib/gir_ffi/flags_base.rb +1 -1
  113. data/lib/gir_ffi/glib_error.rb +1 -2
  114. data/lib/gir_ffi/in_pointer.rb +17 -0
  115. data/lib/gir_ffi/info_ext.rb +15 -15
  116. data/lib/gir_ffi/info_ext/full_type_name.rb +3 -3
  117. data/lib/gir_ffi/info_ext/i_arg_info.rb +1 -1
  118. data/lib/gir_ffi/info_ext/i_callable_info.rb +1 -1
  119. data/lib/gir_ffi/info_ext/i_callback_info.rb +1 -1
  120. data/lib/gir_ffi/info_ext/i_field_info.rb +1 -1
  121. data/lib/gir_ffi/info_ext/i_function_info.rb +1 -1
  122. data/lib/gir_ffi/info_ext/i_property_info.rb +2 -2
  123. data/lib/gir_ffi/info_ext/i_registered_type_info.rb +4 -5
  124. data/lib/gir_ffi/info_ext/i_signal_info.rb +7 -3
  125. data/lib/gir_ffi/info_ext/i_type_info.rb +48 -26
  126. data/lib/gir_ffi/info_ext/i_unresolved_info.rb +1 -1
  127. data/lib/gir_ffi/info_ext/i_value_info.rb +2 -2
  128. data/lib/gir_ffi/info_ext/i_vfunc_info.rb +2 -2
  129. data/lib/gir_ffi/info_ext/safe_constant_name.rb +8 -8
  130. data/lib/gir_ffi/info_ext/safe_function_name.rb +2 -2
  131. data/lib/gir_ffi/interface_base.rb +3 -3
  132. data/lib/gir_ffi/lib_c.rb +1 -1
  133. data/lib/gir_ffi/method_stubber.rb +1 -1
  134. data/lib/gir_ffi/module_base.rb +1 -1
  135. data/lib/gir_ffi/object_base.rb +30 -4
  136. data/lib/gir_ffi/receiver_argument_info.rb +1 -1
  137. data/lib/gir_ffi/receiver_type_info.rb +2 -2
  138. data/lib/gir_ffi/registered_type_base.rb +1 -1
  139. data/lib/gir_ffi/return_value_info.rb +1 -2
  140. data/lib/gir_ffi/sized_array.rb +4 -2
  141. data/lib/gir_ffi/struct.rb +1 -1
  142. data/lib/gir_ffi/struct_base.rb +2 -10
  143. data/lib/gir_ffi/struct_like_base.rb +9 -5
  144. data/lib/gir_ffi/type_map.rb +2 -23
  145. data/lib/gir_ffi/unintrospectable_boxed_info.rb +2 -2
  146. data/lib/gir_ffi/unintrospectable_type_info.rb +6 -2
  147. data/lib/gir_ffi/union.rb +1 -1
  148. data/lib/gir_ffi/union_base.rb +2 -10
  149. data/lib/gir_ffi/user_defined_object_info.rb +9 -4
  150. data/lib/gir_ffi/user_defined_property_info.rb +33 -33
  151. data/lib/gir_ffi/version.rb +1 -1
  152. data/lib/gir_ffi/vfunc_implementation.rb +1 -0
  153. metadata +102 -155
  154. data/Gemfile +0 -12
  155. data/Rakefile +0 -9
  156. data/lib/ffi-glib/array_methods.rb +0 -16
  157. data/tasks/test.rake +0 -203
  158. data/test/base_test_helper.rb +0 -63
  159. data/test/ffi-glib/array_test.rb +0 -188
  160. data/test/ffi-glib/byte_array_test.rb +0 -22
  161. data/test/ffi-glib/bytes_test.rb +0 -56
  162. data/test/ffi-glib/closure_test.rb +0 -38
  163. data/test/ffi-glib/destroy_notify_test.rb +0 -18
  164. data/test/ffi-glib/hash_table_test.rb +0 -68
  165. data/test/ffi-glib/list_test.rb +0 -86
  166. data/test/ffi-glib/main_loop_test.rb +0 -53
  167. data/test/ffi-glib/ptr_array_test.rb +0 -112
  168. data/test/ffi-glib/ruby_closure_test.rb +0 -62
  169. data/test/ffi-glib/s_list_test.rb +0 -76
  170. data/test/ffi-glib/strv_test.rb +0 -60
  171. data/test/ffi-glib/variant_test.rb +0 -12
  172. data/test/ffi-gobject/gobject_test.rb +0 -72
  173. data/test/ffi-gobject/object_class_test.rb +0 -31
  174. data/test/ffi-gobject/object_test.rb +0 -140
  175. data/test/ffi-gobject/param_spec_test.rb +0 -32
  176. data/test/ffi-gobject/value_test.rb +0 -370
  177. data/test/ffi-gobject_introspection/gobject_type_init_test.rb +0 -26
  178. data/test/ffi-gobject_introspection/i_base_info_test.rb +0 -53
  179. data/test/ffi-gobject_introspection/i_constant_info_test.rb +0 -33
  180. data/test/ffi-gobject_introspection/i_enum_info_test.rb +0 -18
  181. data/test/ffi-gobject_introspection/i_function_info_test.rb +0 -6
  182. data/test/ffi-gobject_introspection/i_interface_info_test.rb +0 -23
  183. data/test/ffi-gobject_introspection/i_object_info_test.rb +0 -49
  184. data/test/ffi-gobject_introspection/i_property_info_test.rb +0 -47
  185. data/test/ffi-gobject_introspection/i_registered_type_info_test.rb +0 -27
  186. data/test/ffi-gobject_introspection/i_repository_test.rb +0 -81
  187. data/test/ffi-gobject_introspection/i_struct_info_test.rb +0 -23
  188. data/test/ffi-gobject_introspection/i_type_info_test.rb +0 -33
  189. data/test/ffi-gobject_introspection/i_union_info_test.rb +0 -17
  190. data/test/ffi-gobject_introspection/i_vfunc_info_test.rb +0 -41
  191. data/test/ffi-gobject_introspection/lib_test.rb +0 -13
  192. data/test/ffi-gobject_introspection/strv_test.rb +0 -46
  193. data/test/ffi-gobject_test.rb +0 -151
  194. data/test/gir_ffi/allocation_helper_test.rb +0 -36
  195. data/test/gir_ffi/arg_helper_test.rb +0 -140
  196. data/test/gir_ffi/boolean_test.rb +0 -43
  197. data/test/gir_ffi/boxed_base_test.rb +0 -65
  198. data/test/gir_ffi/builder_test.rb +0 -300
  199. data/test/gir_ffi/builders/argument_builder_test.rb +0 -657
  200. data/test/gir_ffi/builders/base_argument_builder_test.rb +0 -6
  201. data/test/gir_ffi/builders/callback_argument_builder_test.rb +0 -129
  202. data/test/gir_ffi/builders/callback_builder_test.rb +0 -118
  203. data/test/gir_ffi/builders/callback_return_value_builder_test.rb +0 -85
  204. data/test/gir_ffi/builders/constant_builder_test.rb +0 -6
  205. data/test/gir_ffi/builders/constructor_builder_test.rb +0 -37
  206. data/test/gir_ffi/builders/enum_builder_test.rb +0 -23
  207. data/test/gir_ffi/builders/field_builder_test.rb +0 -134
  208. data/test/gir_ffi/builders/function_builder_test.rb +0 -538
  209. data/test/gir_ffi/builders/initializer_builder_test.rb +0 -54
  210. data/test/gir_ffi/builders/interface_builder_test.rb +0 -32
  211. data/test/gir_ffi/builders/module_builder_test.rb +0 -43
  212. data/test/gir_ffi/builders/object_builder_test.rb +0 -98
  213. data/test/gir_ffi/builders/property_builder_test.rb +0 -161
  214. data/test/gir_ffi/builders/registered_type_builder_test.rb +0 -30
  215. data/test/gir_ffi/builders/return_value_builder_test.rb +0 -440
  216. data/test/gir_ffi/builders/signal_closure_builder_test.rb +0 -188
  217. data/test/gir_ffi/builders/struct_builder_test.rb +0 -93
  218. data/test/gir_ffi/builders/unintrospectable_boxed_builder_test.rb +0 -35
  219. data/test/gir_ffi/builders/unintrospectable_builder_test.rb +0 -73
  220. data/test/gir_ffi/builders/union_builder_test.rb +0 -31
  221. data/test/gir_ffi/builders/user_defined_builder_test.rb +0 -524
  222. data/test/gir_ffi/builders/vfunc_argument_builder_test.rb +0 -101
  223. data/test/gir_ffi/builders/vfunc_builder_test.rb +0 -253
  224. data/test/gir_ffi/callback_base_test.rb +0 -22
  225. data/test/gir_ffi/class_base_test.rb +0 -168
  226. data/test/gir_ffi/core_test.rb +0 -98
  227. data/test/gir_ffi/enum_base_test.rb +0 -43
  228. data/test/gir_ffi/error_type_info_test.rb +0 -50
  229. data/test/gir_ffi/ffi_ext/pointer_test.rb +0 -20
  230. data/test/gir_ffi/g_type_test.rb +0 -31
  231. data/test/gir_ffi/in_out_pointer_test.rb +0 -56
  232. data/test/gir_ffi/in_pointer_test.rb +0 -183
  233. data/test/gir_ffi/info_ext/i_callable_info_test.rb +0 -26
  234. data/test/gir_ffi/info_ext/i_callback_info_test.rb +0 -21
  235. data/test/gir_ffi/info_ext/i_field_info_test.rb +0 -37
  236. data/test/gir_ffi/info_ext/i_function_info_test.rb +0 -74
  237. data/test/gir_ffi/info_ext/i_signal_info_test.rb +0 -32
  238. data/test/gir_ffi/info_ext/i_type_info_test.rb +0 -697
  239. data/test/gir_ffi/info_ext/i_unresolved_info_test.rb +0 -19
  240. data/test/gir_ffi/info_ext/safe_constant_name_test.rb +0 -26
  241. data/test/gir_ffi/info_ext/safe_function_name_test.rb +0 -26
  242. data/test/gir_ffi/interface_base_test.rb +0 -20
  243. data/test/gir_ffi/method_stubber_test.rb +0 -65
  244. data/test/gir_ffi/object_base_test.rb +0 -64
  245. data/test/gir_ffi/object_store_test.rb +0 -41
  246. data/test/gir_ffi/receiver_argument_info_test.rb +0 -33
  247. data/test/gir_ffi/sized_array_test.rb +0 -206
  248. data/test/gir_ffi/struct_base_test.rb +0 -23
  249. data/test/gir_ffi/struct_like_base_test.rb +0 -167
  250. data/test/gir_ffi/type_map_test.rb +0 -17
  251. data/test/gir_ffi/unintrospectable_type_info_test.rb +0 -121
  252. data/test/gir_ffi/union_base_test.rb +0 -23
  253. data/test/gir_ffi/user_defined_object_info_test.rb +0 -119
  254. data/test/gir_ffi/user_defined_property_info_test.rb +0 -39
  255. data/test/gir_ffi/variable_name_generator_test.rb +0 -18
  256. data/test/gir_ffi/version_test.rb +0 -9
  257. data/test/gir_ffi/zero_terminated_test.rb +0 -108
  258. data/test/gir_ffi_test_helper.rb +0 -84
  259. data/test/integration/callback_exceptions_test.rb +0 -63
  260. data/test/integration/derived_classes_test.rb +0 -53
  261. data/test/integration/generated_everything_test.rb +0 -452
  262. data/test/integration/generated_gimarshallingtests_test.rb +0 -2995
  263. data/test/integration/generated_gio_test.rb +0 -116
  264. data/test/integration/generated_glib_test.rb +0 -12
  265. data/test/integration/generated_gobject_test.rb +0 -116
  266. data/test/integration/generated_gst_test.rb +0 -34
  267. data/test/integration/generated_gtk_source_test.rb +0 -27
  268. data/test/integration/generated_gtop_test.rb +0 -29
  269. data/test/integration/generated_pango_ft2_test.rb +0 -17
  270. data/test/integration/generated_pango_test.rb +0 -24
  271. data/test/integration/generated_regress_test.rb +0 -3850
  272. data/test/integration/generated_secret_test.rb +0 -17
  273. data/test/integration/generated_utility_test.rb +0 -174
  274. data/test/integration/generated_warnlib_test.rb +0 -49
  275. data/test/integration/method_lookup_test.rb +0 -34
  276. data/test/introspection_test_helper.rb +0 -52
  277. data/test/lib/Makefile.am +0 -110
  278. data/test/lib/autogen.sh +0 -4
  279. data/test/lib/configure.ac +0 -34
  280. data/test/lib/m4/jhflags.m4 +0 -21
  281. data/test/minitest/stats_plugin.rb +0 -30
data/Gemfile DELETED
@@ -1,12 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- source 'https://rubygems.org'
4
-
5
- # The gem's dependencies are specified in gir_ffi.gemspec
6
- gemspec
7
-
8
- gem 'pry', '~> 0.11.0'
9
-
10
- if ENV['CI']
11
- gem 'coveralls', group: :development if ENV['TRAVIS_RUBY_VERSION'] == '2.4'
12
- end
data/Rakefile DELETED
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rake/clean'
4
- require 'bundler/gem_tasks'
5
-
6
- load 'tasks/test.rake'
7
-
8
- task default: 'test:all'
9
- task default: 'test:features'
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module GLib
4
- # Common methods for GLib::Array and GLib::PtrArray
5
- module ArrayMethods
6
- # Re-implementation of the g_array_index and g_ptr_array_index macros
7
- def index(idx)
8
- unless (0...length).cover? idx
9
- raise IndexError, "Index #{idx} outside of bounds 0..#{length - 1}"
10
- end
11
-
12
- ptr = GirFFI::InOutPointer.new element_type, data_ptr + idx * element_size
13
- ptr.to_ruby_value
14
- end
15
- end
16
- end
@@ -1,203 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rake/testtask'
4
- require 'cucumber/rake/task'
5
-
6
- require 'rexml/document'
7
- require 'rexml/streamlistener'
8
-
9
- # Listener class used to process GIR xml data, for creating test stubs.
10
- class Listener
11
- include REXML::StreamListener
12
-
13
- def initialize
14
- @inside_class = false
15
- @stack = []
16
- @skip_state = []
17
- end
18
-
19
- attr_accessor :result
20
- attr_accessor :namespace
21
-
22
- def tag_start(name, attrs)
23
- @stack.push [name, attrs]
24
- if @skip_state.last || skippable?(attrs)
25
- @skip_state.push true
26
- return
27
- else
28
- @skip_state.push false
29
- end
30
-
31
- obj_name = attrs['name']
32
- case name
33
- when 'constant'
34
- result.puts " it 'has the constant #{obj_name}' do"
35
- when 'record', 'class', 'enumeration', 'bitfield', 'interface', 'union'
36
- result.puts " describe '#{namespace}::#{obj_name}' do"
37
- @inside_class = name
38
- when 'constructor'
39
- result.puts " it 'creates an instance using ##{obj_name}' do"
40
- when 'field'
41
- if @inside_class != 'class'
42
- if attrs['private'] == '1'
43
- result.puts " it 'has a private field #{obj_name}' do"
44
- elsif attrs['writable'] == '1'
45
- result.puts " it 'has a writable field #{obj_name}' do"
46
- else
47
- result.puts " it 'has a read-only field #{obj_name}' do"
48
- end
49
- end
50
- when 'function', 'method'
51
- spaces = @inside_class ? ' ' : ''
52
- result.puts " #{spaces}it 'has a working #{name} ##{obj_name}' do"
53
- when 'member'
54
- result.puts " it 'has the member :#{obj_name}' do"
55
- when 'namespace'
56
- result.puts "describe #{obj_name} do"
57
- when 'property'
58
- accessor_name = obj_name.tr('-', '_')
59
- result.puts " describe \"its '#{obj_name}' property\" do"
60
- result.puts " it 'can be retrieved with #get_property' do"
61
- result.puts ' end'
62
- result.puts " it 'can be retrieved with ##{accessor_name}' do"
63
- result.puts ' end'
64
- if attrs['writable'] == '1'
65
- result.puts " it 'can be set with #set_property' do"
66
- result.puts ' end'
67
- result.puts " it 'can be set with ##{accessor_name}=' do"
68
- result.puts ' end'
69
- end
70
- when 'glib:signal'
71
- result.puts " it \"handles the '#{obj_name}' signal\" do"
72
- when 'type', 'alias', 'return-value', 'parameters',
73
- 'instance-parameter', 'parameter', 'doc', 'array',
74
- 'repository', 'include', 'package'
75
- # Not printed"
76
- else
77
- puts "Skipping #{name}: #{attrs}"
78
- end
79
- end
80
-
81
- def tag_end(name)
82
- org_name, = *@stack.pop
83
- skipping = @skip_state.pop
84
- raise "Expected #{org_name}, got #{name}" if org_name != name
85
- return if skipping
86
-
87
- case name
88
- when 'constant'
89
- result.puts ' end'
90
- when 'record', 'class', 'enumeration', 'bitfield',
91
- 'interface', 'union'
92
- result.puts ' end'
93
- @inside_class = false
94
- when 'function', 'method'
95
- if @inside_class
96
- result.puts ' end'
97
- else
98
- result.puts ' end'
99
- end
100
- when 'constructor', 'member', 'property', 'glib:signal'
101
- result.puts ' end'
102
- when 'field'
103
- result.puts ' end' if @inside_class != 'class'
104
- when 'namespace'
105
- result.puts 'end'
106
- end
107
- end
108
-
109
- def skippable?(attrs)
110
- return true if attrs['disguised'] == '1'
111
- return true if attrs['introspectable'] == '0'
112
- return true if attrs['glib:is-gtype-struct-for']
113
-
114
- false
115
- end
116
- end
117
-
118
- namespace :test do
119
- def define_test_task(name)
120
- Rake::TestTask.new(name) do |t|
121
- t.libs = ['lib']
122
- t.ruby_opts += ['-w -Itest']
123
- yield t
124
- end
125
- end
126
-
127
- define_test_task(:base) do |t|
128
- t.test_files = FileList['test/gir_ffi-base/**/*_test.rb']
129
- end
130
-
131
- define_test_task(:introspection) do |t|
132
- t.test_files = FileList['test/ffi-gobject_introspection/**/*_test.rb']
133
- end
134
-
135
- define_test_task(:main) do |t|
136
- t.test_files = FileList['test/gir_ffi/**/*_test.rb']
137
- end
138
-
139
- define_test_task(:overrides) do |t|
140
- t.test_files = FileList['test/ffi-gobject_test.rb',
141
- 'test/ffi-glib/**/*_test.rb',
142
- 'test/ffi-gobject/**/*_test.rb']
143
- end
144
-
145
- define_test_task(:integration) do |t|
146
- t.test_files = FileList['test/integration/**/*_test.rb']
147
- end
148
-
149
- desc 'Build test libraries and typelibs'
150
- task lib: 'test/lib/Makefile' do
151
- sh %(cd test/lib && make)
152
- end
153
-
154
- task introspection: :lib
155
- task main: :lib
156
- task overrides: :lib
157
- task integration: :lib
158
-
159
- desc 'Run the entire test suite as one'
160
- define_test_task(:all) do |t|
161
- t.test_files = FileList['test/**/*_test.rb']
162
- end
163
-
164
- task all: :lib
165
-
166
- desc 'Run all individual test suites separately'
167
- task suites: [:base,
168
- :introspection,
169
- :main,
170
- :overrides,
171
- :integration]
172
-
173
- def make_stub_file(libname)
174
- file = File.new "test/lib/#{libname}-1.0.gir"
175
- listener = Listener.new
176
- listener.result = File.open("tmp/#{libname.downcase}_lines.rb", 'w')
177
- listener.namespace = libname
178
- REXML::Document.parse_stream file, listener
179
- end
180
-
181
- desc 'Create stubs for integration tests'
182
- task stub: :lib do
183
- make_stub_file 'Everything'
184
- make_stub_file 'GIMarshallingTests'
185
- make_stub_file 'Regress'
186
- make_stub_file 'Utility'
187
- make_stub_file 'WarnLib'
188
- end
189
-
190
- Cucumber::Rake::Task.new(:features) do |t|
191
- t.cucumber_opts = 'features --format pretty'
192
- end
193
- end
194
-
195
- file 'test/lib/Makefile' => 'test/lib/configure' do
196
- sh %(cd test/lib && ./configure --enable-maintainer-mode)
197
- end
198
-
199
- file 'test/lib/configure' => ['test/lib/autogen.sh', 'test/lib/configure.ac'] do
200
- sh %(cd test/lib && ./autogen.sh)
201
- end
202
-
203
- task test: 'test:all'
@@ -1,63 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'simplecov'
4
- SimpleCov.start do
5
- track_files 'lib/**/*.rb'
6
- add_filter '/test/'
7
- end
8
-
9
- if ENV['CI']
10
- begin
11
- require 'coveralls'
12
- Coveralls.wear!
13
- rescue LoadError
14
- nil
15
- end
16
- end
17
-
18
- require 'minitest/autorun'
19
- require 'rspec/mocks/minitest_integration'
20
-
21
- Thread.abort_on_exception = true
22
-
23
- module BaseTestExtensions
24
- def assert_defines_singleton_method(klass, method, msg = nil)
25
- method = method.to_sym
26
- methods = klass.singleton_methods(false).map(&:to_sym)
27
- msg = message(msg) do
28
- "Expected #{mu_pp(klass)} to define singleton method #{mu_pp(method)}, " \
29
- "but only found #{mu_pp(methods)}"
30
- end
31
- assert_includes methods, method, msg
32
- end
33
-
34
- def refute_defines_singleton_method(klass, method, msg = nil)
35
- method = method.to_sym
36
- methods = klass.singleton_methods(false).map(&:to_sym)
37
- msg = message(msg) do
38
- "Expected #{mu_pp(klass)} not to define singleton method #{mu_pp(method)}"
39
- end
40
- refute_includes methods, method, msg
41
- end
42
-
43
- def assert_defines_instance_method(klass, method, msg = nil)
44
- method = method.to_sym
45
- methods = klass.instance_methods(false).map(&:to_sym)
46
- msg = message(msg) do
47
- "Expected #{mu_pp(klass)} to define instance method #{mu_pp(method)}, " \
48
- "but only found #{mu_pp(methods)}"
49
- end
50
- assert_includes methods, method, msg
51
- end
52
-
53
- def refute_defines_instance_method(klass, method, msg = nil)
54
- method = method.to_sym
55
- methods = klass.instance_methods(false).map(&:to_sym)
56
- msg = message(msg) do
57
- "Expected #{mu_pp(klass)} not to define instance method #{mu_pp(method)}"
58
- end
59
- refute_includes methods, method, msg
60
- end
61
- end
62
-
63
- Minitest::Test.send :include, BaseTestExtensions
@@ -1,188 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'gir_ffi_test_helper'
4
-
5
- describe GLib::Array do
6
- it 'knows its element type' do
7
- arr = GLib::Array.new :gint32
8
- assert_equal :gint32, arr.element_type
9
- end
10
-
11
- describe '#append_vals' do
12
- before do
13
- @arr = GLib::Array.new :gint32
14
- @result = @arr.append_vals [1, 2, 3]
15
- end
16
-
17
- it 'appends values' do
18
- assert_equal 3, @arr.len
19
- end
20
-
21
- it 'returns self' do
22
- assert_equal @result, @arr
23
- end
24
- end
25
-
26
- describe '#each' do
27
- before do
28
- @arr = GLib::Array.new(:gint32).append_vals [1, 2, 3]
29
- end
30
-
31
- it 'iterates over the values' do
32
- a = []
33
- @arr.each { |v| a << v }
34
-
35
- assert_equal [1, 2, 3], a
36
- end
37
- end
38
-
39
- describe '::wrap' do
40
- it 'wraps a pointer, taking the element type as the first argument' do
41
- arr = GLib::Array.new :gint32
42
- arr.append_vals [1, 2, 3]
43
- arr2 = GLib::Array.wrap :gint32, arr.to_ptr
44
- assert_equal arr.to_a, arr2.to_a
45
- end
46
-
47
- it "warns the element sizes don't match" do
48
- arr = GLib::Array.new :gint32
49
- arr.append_vals [1, 2, 3]
50
- proc { GLib::Array.wrap :gint8, arr.to_ptr }.must_output nil, /sizes do not match/
51
- end
52
-
53
- it 'handles a struct as the element type' do
54
- vals = [1, 2, 3].map { |i| GObject::EnumValue.new.tap { |ev| ev.value = i } }
55
- arr = GLib::Array.new GObject::EnumValue
56
- arr.append_vals vals
57
- arr2 = GLib::Array.wrap GObject::EnumValue, arr.to_ptr
58
- arr2.to_a.must_equal arr.to_a
59
- end
60
- end
61
-
62
- it 'includes Enumerable' do
63
- GLib::Array.must_include Enumerable
64
- end
65
-
66
- it 'has a working #to_a method' do
67
- arr = GLib::Array.new :gint32
68
- arr.append_vals [1, 2, 3]
69
- assert_equal [1, 2, 3], arr.to_a
70
- end
71
-
72
- describe '.from' do
73
- it 'creates a GArray from an array of :gint32' do
74
- arr = GLib::Array.from :gint32, [3, 2, 1]
75
- arr.must_be_instance_of GLib::Array
76
- arr.to_a.must_equal [3, 2, 1]
77
- end
78
-
79
- it 'creates a GArray from an array of :gboolean' do
80
- arr = GLib::Array.from :gboolean, [true, false, true]
81
- arr.must_be_instance_of GLib::Array
82
- arr.to_a.must_equal [true, false, true]
83
- end
84
-
85
- it 'return its argument if given a GArray' do
86
- arr = GLib::Array.new :gint32
87
- arr.append_vals [3, 2, 1]
88
- arr2 = GLib::Array.from :gint32, arr
89
- assert arr2.equal? arr
90
- end
91
-
92
- it 'wraps its argument if given a pointer' do
93
- arr = GLib::Array.new :gint32
94
- arr.append_vals [3, 2, 1]
95
- pointer = arr.to_ptr
96
- assert_instance_of FFI::Pointer, pointer
97
- arr2 = GLib::Array.from :gint32, pointer
98
- assert_instance_of GLib::Array, arr2
99
- refute arr2.equal? arr
100
- arr2.to_a.must_equal arr.to_a
101
- end
102
- end
103
-
104
- describe '#==' do
105
- it 'returns true when comparing to an array with the same elements' do
106
- arr = GLib::Array.from :gint32, [1, 2, 3]
107
-
108
- arr.must_be :==, [1, 2, 3]
109
- end
110
-
111
- it 'returns false when comparing to an array with different elements' do
112
- arr = GLib::Array.from :gint32, [1, 2, 3]
113
-
114
- arr.wont_be :==, [1, 2]
115
- end
116
-
117
- it 'returns true when comparing to a GArray with the same elements' do
118
- arr = GLib::Array.from :gint32, [1, 2, 3]
119
- other = GLib::Array.from :gint32, [1, 2, 3]
120
-
121
- arr.must_be :==, other
122
- end
123
-
124
- it 'returns false when comparing to a GArray with different elements' do
125
- arr = GLib::Array.from :gint32, [1, 2, 3]
126
- other = GLib::Array.from :gint32, [1, 2]
127
-
128
- arr.wont_be :==, other
129
- end
130
- end
131
-
132
- describe '#index' do
133
- it 'returns the proper element for an array of :gint32' do
134
- arr = GLib::Array.from :gint32, [1, 2, 3]
135
- arr.index(2).must_equal 3
136
- end
137
-
138
- it 'returns the proper element for an array of :utf8' do
139
- arr = GLib::Array.from :utf8, %w(a b c)
140
- arr.index(1).must_equal 'b'
141
- end
142
-
143
- it 'returns the proper element for an array of :gboolean' do
144
- arr = GLib::Array.from :gboolean, [true, false, true]
145
- arr.index(1).must_equal false
146
- end
147
-
148
- it 'returns the proper element for an array of struct' do
149
- vals = [1, 2, 3].map { |i| GObject::EnumValue.new.tap { |ev| ev.value = i } }
150
- arr = GLib::Array.from GObject::EnumValue, vals
151
- arr.index(1).value.must_equal 2
152
- end
153
-
154
- it 'raises an error if the index is out of bounds' do
155
- arr = GLib::Array.from :gint32, [1, 2, 3]
156
- proc { arr.index(16) }.must_raise IndexError
157
- proc { arr.index(-1) }.must_raise IndexError
158
- end
159
- end
160
-
161
- describe '#reset_typespec' do
162
- describe 'when it needs to guess the type' do
163
- it 'guesses :uint8 for size 1' do
164
- arr = GLib::Array.from :int8, [1, 2, 3]
165
- arr.reset_typespec
166
- arr.element_type.must_equal :uint8
167
- end
168
-
169
- it 'guesses :uint16 for size 2' do
170
- arr = GLib::Array.from :int16, [1, 2, 3]
171
- arr.reset_typespec
172
- arr.element_type.must_equal :uint16
173
- end
174
-
175
- it 'guesses :uint32 for size 4' do
176
- arr = GLib::Array.from :int32, [1, 2, 3]
177
- arr.reset_typespec
178
- arr.element_type.must_equal :uint32
179
- end
180
-
181
- it 'guesses :uint64 for size 8' do
182
- arr = GLib::Array.from :int64, [1, 2, 3]
183
- arr.reset_typespec
184
- arr.element_type.must_equal :uint64
185
- end
186
- end
187
- end
188
- end