gir_ffi 0.7.7 → 0.7.8
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 +9 -0
- data/lib/ffi-glib/array.rb +1 -1
- data/lib/ffi-glib/error.rb +1 -2
- data/lib/ffi-glib/hash_table.rb +2 -2
- data/lib/ffi-glib/variant.rb +1 -1
- data/lib/ffi-gobject/base.rb +23 -23
- data/lib/ffi-gobject/object.rb +7 -3
- data/lib/ffi-gobject/value.rb +6 -1
- data/lib/ffi-gobject.rb +9 -6
- data/lib/ffi-gobject_introspection/i_base_info.rb +3 -3
- data/lib/ffi-gobject_introspection/i_constant_info.rb +1 -1
- data/lib/ffi-gobject_introspection/i_repository.rb +4 -1
- data/lib/ffi-gobject_introspection/i_type_info.rb +1 -1
- data/lib/ffi-gobject_introspection/i_unresolved_info.rb +7 -0
- data/lib/ffi-gobject_introspection/lib.rb +1 -1
- data/lib/gir_ffi/builders/argument_builder.rb +1 -1
- data/lib/gir_ffi/builders/c_to_ruby_convertor.rb +37 -29
- data/lib/gir_ffi/builders/callback_argument_builder.rb +57 -27
- data/lib/gir_ffi/builders/closure_convertor.rb +12 -8
- data/lib/gir_ffi/builders/closure_to_pointer_convertor.rb +12 -8
- data/lib/gir_ffi/builders/constructor_result_convertor.rb +11 -7
- data/lib/gir_ffi/builders/field_builder.rb +1 -1
- data/lib/gir_ffi/builders/function_builder.rb +1 -1
- data/lib/gir_ffi/builders/mapping_method_builder.rb +1 -1
- data/lib/gir_ffi/builders/marshalling_method_builder.rb +2 -2
- data/lib/gir_ffi/builders/method_template.rb +1 -1
- data/lib/gir_ffi/builders/null_convertor.rb +11 -7
- data/lib/gir_ffi/builders/property_builder.rb +1 -1
- data/lib/gir_ffi/builders/ruby_to_c_convertor.rb +17 -13
- data/lib/gir_ffi/error_argument_info.rb +1 -1
- data/lib/gir_ffi/ffi_ext/pointer.rb +1 -1
- data/lib/gir_ffi/info_ext/i_unresolved_info.rb +12 -0
- data/lib/gir_ffi/info_ext/safe_constant_name.rb +2 -2
- data/lib/gir_ffi/info_ext/safe_function_name.rb +1 -1
- data/lib/gir_ffi/info_ext.rb +1 -0
- data/lib/gir_ffi/module_base.rb +1 -1
- data/lib/gir_ffi/receiver_argument_info.rb +15 -12
- data/lib/gir_ffi/user_data_argument_info.rb +17 -15
- data/lib/gir_ffi/user_data_type_info.rb +14 -12
- data/lib/gir_ffi/version.rb +1 -1
- data/lib/gir_ffi-base/gobject/lib.rb +1 -1
- data/test/base_test_helper.rb +15 -15
- data/test/ffi-glib/array_test.rb +38 -38
- data/test/ffi-glib/byte_array_test.rb +6 -7
- data/test/ffi-glib/bytes_test.rb +9 -9
- data/test/ffi-glib/hash_table_test.rb +26 -23
- data/test/ffi-glib/iconv_test.rb +5 -5
- data/test/ffi-glib/list_test.rb +16 -16
- data/test/ffi-glib/main_loop_test.rb +6 -6
- data/test/ffi-glib/ptr_array_test.rb +45 -45
- data/test/ffi-glib/ruby_closure_test.rb +6 -6
- data/test/ffi-glib/s_list_test.rb +15 -15
- data/test/ffi-glib/strv_test.rb +21 -21
- data/test/ffi-glib/variant_test.rb +4 -4
- data/test/ffi-gobject/gobject_test.rb +35 -35
- data/test/ffi-gobject/object_class_test.rb +1 -1
- data/test/ffi-gobject/object_test.rb +29 -6
- data/test/ffi-gobject/value_test.rb +66 -52
- data/test/ffi-gobject_introspection/i_base_info_test.rb +10 -11
- data/test/ffi-gobject_introspection/i_constant_info_test.rb +6 -6
- data/test/ffi-gobject_introspection/i_enum_info_test.rb +4 -5
- data/test/ffi-gobject_introspection/i_function_info_test.rb +0 -2
- data/test/ffi-gobject_introspection/i_object_info_test.rb +5 -5
- data/test/ffi-gobject_introspection/i_registered_type_info_test.rb +9 -8
- data/test/ffi-gobject_introspection/i_repository_test.rb +16 -16
- data/test/ffi-gobject_introspection/i_type_info_test.rb +16 -2
- data/test/ffi-gobject_introspection/lib_test.rb +2 -2
- data/test/ffi-gobject_test.rb +50 -40
- data/test/gir_ffi/arg_helper_test.rb +5 -5
- data/test/gir_ffi/builder_test.rb +41 -41
- data/test/gir_ffi/builders/argument_builder_test.rb +240 -207
- data/test/gir_ffi/builders/base_argument_builder_test.rb +0 -1
- data/test/gir_ffi/builders/callback_argument_builder_test.rb +81 -15
- data/test/gir_ffi/builders/callback_builder_test.rb +39 -14
- data/test/gir_ffi/builders/callback_return_value_builder_test.rb +41 -33
- data/test/gir_ffi/builders/enum_builder_test.rb +3 -3
- data/test/gir_ffi/builders/field_builder_test.rb +17 -17
- data/test/gir_ffi/builders/function_builder_test.rb +16 -16
- data/test/gir_ffi/builders/interface_builder_test.rb +9 -7
- data/test/gir_ffi/builders/module_builder_test.rb +5 -6
- data/test/gir_ffi/builders/object_builder_test.rb +24 -19
- data/test/gir_ffi/builders/property_builder_test.rb +25 -23
- data/test/gir_ffi/builders/registered_type_builder_test.rb +11 -11
- data/test/gir_ffi/builders/return_value_builder_test.rb +237 -197
- data/test/gir_ffi/builders/signal_closure_builder_test.rb +29 -22
- data/test/gir_ffi/builders/struct_builder_test.rb +10 -10
- data/test/gir_ffi/builders/unintrospectable_builder_test.rb +8 -8
- data/test/gir_ffi/builders/union_builder_test.rb +5 -6
- data/test/gir_ffi/builders/user_defined_builder_test.rb +42 -33
- data/test/gir_ffi/builders/vfunc_builder_test.rb +37 -30
- data/test/gir_ffi/callback_base_test.rb +4 -5
- data/test/gir_ffi/class_base_test.rb +35 -28
- data/test/gir_ffi/error_type_info_test.rb +14 -14
- data/test/gir_ffi/ffi_ext/pointer_test.rb +4 -4
- data/test/gir_ffi/g_type_test.rb +6 -6
- data/test/gir_ffi/in_out_pointer_test.rb +27 -27
- data/test/gir_ffi/in_pointer_test.rb +54 -50
- data/test/gir_ffi/info_ext/i_callable_info_test.rb +8 -7
- data/test/gir_ffi/info_ext/i_callback_info_test.rb +7 -7
- data/test/gir_ffi/info_ext/i_field_info_test.rb +10 -8
- data/test/gir_ffi/info_ext/i_function_info_test.rb +17 -15
- data/test/gir_ffi/info_ext/i_signal_info_test.rb +10 -8
- data/test/gir_ffi/info_ext/i_type_info_test.rb +158 -155
- data/test/gir_ffi/info_ext/i_unresolved_info_test.rb +17 -0
- data/test/gir_ffi/info_ext/safe_constant_name_test.rb +12 -10
- data/test/gir_ffi/info_ext/safe_function_name_test.rb +12 -10
- data/test/gir_ffi/interface_base_test.rb +6 -6
- data/test/gir_ffi/method_stubber_test.rb +16 -13
- data/test/gir_ffi/object_base_test.rb +6 -6
- data/test/gir_ffi/sized_array_test.rb +23 -23
- data/test/gir_ffi/type_map_test.rb +3 -3
- data/test/gir_ffi/unintrospectable_type_info_test.rb +18 -18
- data/test/gir_ffi/user_defined_property_info_test.rb +4 -4
- data/test/gir_ffi/user_defined_type_info_test.rb +16 -16
- data/test/gir_ffi/variable_name_generator_test.rb +6 -6
- data/test/gir_ffi/version_test.rb +1 -1
- data/test/gir_ffi/zero_terminated_test.rb +16 -17
- data/test/gir_ffi-base/glib/boolean_test.rb +13 -13
- data/test/gir_ffi-base/glib/strv_test.rb +11 -11
- data/test/gir_ffi_test.rb +18 -18
- data/test/gir_ffi_test_helper.rb +13 -18
- data/test/integration/derived_classes_test.rb +8 -8
- data/test/integration/generated_gimarshallingtests_test.rb +794 -792
- data/test/integration/generated_gio_test.rb +25 -26
- data/test/integration/generated_glib_test.rb +8 -2
- data/test/integration/generated_gobject_test.rb +16 -9
- data/test/integration/generated_pango_ft2_test.rb +1 -2
- data/test/integration/generated_pango_test.rb +2 -2
- data/test/integration/generated_regress_test.rb +785 -705
- data/test/integration/generated_secret_test.rb +5 -5
- data/test/integration/method_lookup_test.rb +5 -5
- data/test/introspection_test_helper.rb +3 -1
- data/test/minitest/stats_plugin.rb +3 -3
- metadata +6 -3
| @@ -4,165 +4,177 @@ describe GirFFI::Builders::ArgumentBuilder do | |
| 4 4 | 
             
              let(:var_gen) { GirFFI::VariableNameGenerator.new }
         | 
| 5 5 | 
             
              let(:builder) { GirFFI::Builders::ArgumentBuilder.new(var_gen, arg_info) }
         | 
| 6 6 |  | 
| 7 | 
            -
              describe  | 
| 8 | 
            -
                describe  | 
| 7 | 
            +
              describe 'for an argument with direction :in' do
         | 
| 8 | 
            +
                describe 'for :callback' do
         | 
| 9 9 | 
             
                  let(:arg_info) {
         | 
| 10 | 
            -
                    get_introspection_data('Regress', 'test_callback_destroy_notify').args[0] | 
| 10 | 
            +
                    get_introspection_data('Regress', 'test_callback_destroy_notify').args[0]
         | 
| 11 | 
            +
                  }
         | 
| 11 12 |  | 
| 12 | 
            -
                  it  | 
| 13 | 
            -
                    builder.pre_conversion.must_equal [ | 
| 13 | 
            +
                  it 'has the correct value for #pre_conversion' do
         | 
| 14 | 
            +
                    builder.pre_conversion.must_equal ['_v1 = Regress::TestCallbackUserData.from(callback)']
         | 
| 14 15 | 
             
                  end
         | 
| 15 16 |  | 
| 16 | 
            -
                  it  | 
| 17 | 
            -
                    builder.post_conversion.must_equal [ | 
| 17 | 
            +
                  it 'has the correct value for #post_conversion' do
         | 
| 18 | 
            +
                    builder.post_conversion.must_equal []
         | 
| 18 19 | 
             
                  end
         | 
| 19 20 | 
             
                end
         | 
| 20 21 |  | 
| 21 | 
            -
                describe  | 
| 22 | 
            -
                  let(:arg_info) { | 
| 23 | 
            -
             | 
| 22 | 
            +
                describe 'for :zero_terminated' do
         | 
| 23 | 
            +
                  let(:arg_info) {
         | 
| 24 | 
            +
                    get_introspection_data('GIMarshallingTests',
         | 
| 25 | 
            +
                                                          'array_in_len_zero_terminated').args[0]
         | 
| 26 | 
            +
                  }
         | 
| 24 27 |  | 
| 25 | 
            -
                  it  | 
| 26 | 
            -
                    builder.pre_conversion.must_equal [ | 
| 28 | 
            +
                  it 'has the correct value for #pre_conversion' do
         | 
| 29 | 
            +
                    builder.pre_conversion.must_equal ['_v1 = GirFFI::ZeroTerminated.from(:gint32, ints)']
         | 
| 27 30 | 
             
                  end
         | 
| 28 31 |  | 
| 29 | 
            -
                  it  | 
| 30 | 
            -
                    builder.post_conversion.must_equal [ | 
| 32 | 
            +
                  it 'has the correct value for #post_conversion' do
         | 
| 33 | 
            +
                    builder.post_conversion.must_equal []
         | 
| 31 34 | 
             
                  end
         | 
| 32 35 | 
             
                end
         | 
| 33 36 |  | 
| 34 | 
            -
                describe  | 
| 35 | 
            -
                  let(:arg_info) { get_introspection_data( | 
| 37 | 
            +
                describe 'for :void' do
         | 
| 38 | 
            +
                  let(:arg_info) { get_introspection_data('Regress', 'test_callback_user_data').args[1] }
         | 
| 36 39 |  | 
| 37 | 
            -
                  describe  | 
| 40 | 
            +
                  describe 'when it is a regular argument' do
         | 
| 38 41 | 
             
                    before do
         | 
| 39 42 | 
             
                      builder.closure = false
         | 
| 40 43 | 
             
                    end
         | 
| 41 44 |  | 
| 42 | 
            -
                    it  | 
| 43 | 
            -
                      builder.pre_conversion.must_equal [ | 
| 45 | 
            +
                    it 'has the correct value for #pre_conversion' do
         | 
| 46 | 
            +
                      builder.pre_conversion.must_equal ['_v1 = GirFFI::InPointer.from(:void, user_data)']
         | 
| 44 47 | 
             
                    end
         | 
| 45 48 |  | 
| 46 | 
            -
                    it  | 
| 47 | 
            -
                      builder.post_conversion.must_equal [ | 
| 49 | 
            +
                    it 'has the correct value for #post_conversion' do
         | 
| 50 | 
            +
                      builder.post_conversion.must_equal []
         | 
| 48 51 | 
             
                    end
         | 
| 49 52 | 
             
                  end
         | 
| 50 53 |  | 
| 51 | 
            -
                  describe  | 
| 54 | 
            +
                  describe 'when it is a closure' do
         | 
| 52 55 | 
             
                    before do
         | 
| 53 56 | 
             
                      builder.closure = true
         | 
| 54 57 | 
             
                    end
         | 
| 55 58 |  | 
| 56 | 
            -
                    it  | 
| 57 | 
            -
                      builder.pre_conversion.must_equal [ | 
| 59 | 
            +
                    it 'has the correct value for #pre_conversion' do
         | 
| 60 | 
            +
                      builder.pre_conversion.must_equal ['_v1 = GirFFI::InPointer.from_closure_data(user_data)']
         | 
| 58 61 | 
             
                    end
         | 
| 59 62 |  | 
| 60 | 
            -
                    it  | 
| 61 | 
            -
                      builder.post_conversion.must_equal [ | 
| 63 | 
            +
                    it 'has the correct value for #post_conversion' do
         | 
| 64 | 
            +
                      builder.post_conversion.must_equal []
         | 
| 62 65 | 
             
                    end
         | 
| 63 66 | 
             
                  end
         | 
| 64 67 | 
             
                end
         | 
| 65 68 | 
             
              end
         | 
| 66 69 |  | 
| 67 | 
            -
              describe  | 
| 68 | 
            -
                describe  | 
| 69 | 
            -
                  let(:arg_info) { get_introspection_data( | 
| 70 | 
            +
              describe 'for an argument with direction :out' do
         | 
| 71 | 
            +
                describe 'for :enum' do
         | 
| 72 | 
            +
                  let(:arg_info) { get_introspection_data('GIMarshallingTests', 'genum_out').args[0] }
         | 
| 70 73 |  | 
| 71 | 
            -
                  it  | 
| 72 | 
            -
                    builder.pre_conversion.must_equal [ | 
| 74 | 
            +
                  it 'has the correct value for #pre_conversion' do
         | 
| 75 | 
            +
                    builder.pre_conversion.must_equal ['_v1 = GirFFI::InOutPointer.for GIMarshallingTests::GEnum']
         | 
| 73 76 | 
             
                  end
         | 
| 74 77 |  | 
| 75 | 
            -
                  it  | 
| 76 | 
            -
                    builder.post_conversion.must_equal [ | 
| 78 | 
            +
                  it 'has the correct value for #post_conversion' do
         | 
| 79 | 
            +
                    builder.post_conversion.must_equal ['_v2 = _v1.to_value']
         | 
| 77 80 | 
             
                  end
         | 
| 78 81 | 
             
                end
         | 
| 79 82 |  | 
| 80 | 
            -
                describe  | 
| 83 | 
            +
                describe 'for :flags' do
         | 
| 81 84 | 
             
                  let(:arg_info) {
         | 
| 82 | 
            -
                    get_introspection_data( | 
| 85 | 
            +
                    get_introspection_data('GIMarshallingTests', 'flags_out').args[0]
         | 
| 86 | 
            +
                  }
         | 
| 83 87 |  | 
| 84 | 
            -
                  it  | 
| 85 | 
            -
                    builder.pre_conversion.must_equal [ | 
| 88 | 
            +
                  it 'has the correct value for #pre_conversion' do
         | 
| 89 | 
            +
                    builder.pre_conversion.must_equal ['_v1 = GirFFI::InOutPointer.for GIMarshallingTests::Flags']
         | 
| 86 90 | 
             
                  end
         | 
| 87 91 |  | 
| 88 | 
            -
                  it  | 
| 89 | 
            -
                    builder.post_conversion.must_equal [ | 
| 92 | 
            +
                  it 'has the correct value for #post_conversion' do
         | 
| 93 | 
            +
                    builder.post_conversion.must_equal ['_v2 = _v1.to_value']
         | 
| 90 94 | 
             
                  end
         | 
| 91 95 | 
             
                end
         | 
| 92 96 |  | 
| 93 | 
            -
                describe  | 
| 97 | 
            +
                describe 'for :object' do
         | 
| 94 98 | 
             
                  let(:arg_info) {
         | 
| 95 | 
            -
                    get_method_introspection_data( | 
| 99 | 
            +
                    get_method_introspection_data('Regress', 'TestObj', 'null_out').args[0]
         | 
| 100 | 
            +
                  }
         | 
| 96 101 |  | 
| 97 | 
            -
                  it  | 
| 98 | 
            -
                    builder.pre_conversion.must_equal [ | 
| 102 | 
            +
                  it 'has the correct value for #pre_conversion' do
         | 
| 103 | 
            +
                    builder.pre_conversion.must_equal ['_v1 = GirFFI::InOutPointer.for [:pointer, Regress::TestObj]']
         | 
| 99 104 | 
             
                  end
         | 
| 100 105 |  | 
| 101 | 
            -
                  it  | 
| 102 | 
            -
                    builder.post_conversion.must_equal [ | 
| 106 | 
            +
                  it 'has the correct value for #post_conversion' do
         | 
| 107 | 
            +
                    builder.post_conversion.must_equal ['_v2 = Regress::TestObj.wrap(_v1.to_value)']
         | 
| 103 108 | 
             
                  end
         | 
| 104 109 | 
             
                end
         | 
| 105 110 |  | 
| 106 | 
            -
                describe  | 
| 111 | 
            +
                describe 'for :struct' do
         | 
| 107 112 |  | 
| 108 | 
            -
                  describe  | 
| 113 | 
            +
                  describe 'when not allocated by the caller' do
         | 
| 109 114 | 
             
                    let(:arg_info) {
         | 
| 110 | 
            -
                      get_introspection_data( | 
| 115 | 
            +
                      get_introspection_data('GIMarshallingTests', 'boxed_struct_out').args[0]
         | 
| 116 | 
            +
                    }
         | 
| 111 117 |  | 
| 112 | 
            -
                    it  | 
| 113 | 
            -
                      builder.pre_conversion.must_equal [ | 
| 118 | 
            +
                    it 'has the correct value for #pre_conversion' do
         | 
| 119 | 
            +
                      builder.pre_conversion.must_equal [
         | 
| 120 | 
            +
                        '_v1 = GirFFI::InOutPointer.for [:pointer, GIMarshallingTests::BoxedStruct]'
         | 
| 121 | 
            +
                      ]
         | 
| 114 122 | 
             
                    end
         | 
| 115 123 |  | 
| 116 | 
            -
                    it  | 
| 117 | 
            -
                      builder.post_conversion.must_equal [ | 
| 124 | 
            +
                    it 'has the correct value for #post_conversion' do
         | 
| 125 | 
            +
                      builder.post_conversion.must_equal ['_v2 = GIMarshallingTests::BoxedStruct.wrap(_v1.to_value)']
         | 
| 118 126 | 
             
                    end
         | 
| 119 127 | 
             
                  end
         | 
| 120 128 |  | 
| 121 | 
            -
                  describe  | 
| 129 | 
            +
                  describe 'when allocated by the caller' do
         | 
| 122 130 | 
             
                    let(:arg_info) {
         | 
| 123 | 
            -
                      get_method_introspection_data( | 
| 131 | 
            +
                      get_method_introspection_data('Regress', 'TestStructA', 'clone').args[0]
         | 
| 132 | 
            +
                    }
         | 
| 124 133 |  | 
| 125 | 
            -
                    it  | 
| 126 | 
            -
                      builder.pre_conversion.must_equal [ | 
| 134 | 
            +
                    it 'has the correct value for #pre_conversion' do
         | 
| 135 | 
            +
                      builder.pre_conversion.must_equal ['_v1 = Regress::TestStructA.new']
         | 
| 127 136 | 
             
                    end
         | 
| 128 137 |  | 
| 129 | 
            -
                    it  | 
| 138 | 
            +
                    it 'has empty #post_conversion' do
         | 
| 130 139 | 
             
                      builder.post_conversion.must_equal []
         | 
| 131 140 | 
             
                    end
         | 
| 132 141 | 
             
                  end
         | 
| 133 142 | 
             
                end
         | 
| 134 143 |  | 
| 135 | 
            -
                describe  | 
| 144 | 
            +
                describe 'for :strv' do
         | 
| 136 145 | 
             
                  let(:arg_info) {
         | 
| 137 | 
            -
                    get_introspection_data( | 
| 146 | 
            +
                    get_introspection_data('GIMarshallingTests', 'gstrv_out').args[0]
         | 
| 147 | 
            +
                  }
         | 
| 138 148 |  | 
| 139 | 
            -
                  it  | 
| 140 | 
            -
                    builder.pre_conversion.must_equal [ | 
| 149 | 
            +
                  it 'has the correct value for #pre_conversion' do
         | 
| 150 | 
            +
                    builder.pre_conversion.must_equal ['_v1 = GirFFI::InOutPointer.for [:pointer, :strv]']
         | 
| 141 151 | 
             
                  end
         | 
| 142 152 |  | 
| 143 | 
            -
                  it  | 
| 144 | 
            -
                    builder.post_conversion.must_equal [ | 
| 153 | 
            +
                  it 'has the correct value for #post_conversion' do
         | 
| 154 | 
            +
                    builder.post_conversion.must_equal ['_v2 = GLib::Strv.wrap(_v1.to_value)']
         | 
| 145 155 | 
             
                  end
         | 
| 146 156 | 
             
                end
         | 
| 147 157 |  | 
| 148 | 
            -
                describe  | 
| 158 | 
            +
                describe 'for :array' do
         | 
| 149 159 |  | 
| 150 | 
            -
                  describe  | 
| 160 | 
            +
                  describe 'when allocated by the callee' do
         | 
| 151 161 | 
             
                    let(:arg_info) {
         | 
| 152 | 
            -
                      get_introspection_data( | 
| 162 | 
            +
                      get_introspection_data('GIMarshallingTests', 'garray_utf8_none_out').args[0]
         | 
| 163 | 
            +
                    }
         | 
| 153 164 |  | 
| 154 | 
            -
                    it  | 
| 155 | 
            -
                      builder.pre_conversion.must_equal [ | 
| 165 | 
            +
                    it 'has the correct value for #pre_conversion' do
         | 
| 166 | 
            +
                      builder.pre_conversion.must_equal ['_v1 = GirFFI::InOutPointer.for [:pointer, :array]']
         | 
| 156 167 | 
             
                    end
         | 
| 157 168 |  | 
| 158 | 
            -
                    it  | 
| 159 | 
            -
                      builder.post_conversion.must_equal [ | 
| 169 | 
            +
                    it 'has the correct value for #post_conversion' do
         | 
| 170 | 
            +
                      builder.post_conversion.must_equal ['_v2 = GLib::Array.wrap(:utf8, _v1.to_value)']
         | 
| 160 171 | 
             
                    end
         | 
| 161 172 | 
             
                  end
         | 
| 162 173 |  | 
| 163 | 
            -
                  describe  | 
| 174 | 
            +
                  describe 'when allocated by the caller' do
         | 
| 164 175 | 
             
                    let(:function_info) {
         | 
| 165 | 
            -
                      get_introspection_data( | 
| 176 | 
            +
                      get_introspection_data('GIMarshallingTests', 'garray_utf8_full_out_caller_allocated')
         | 
| 177 | 
            +
                    }
         | 
| 166 178 |  | 
| 167 179 | 
             
                    let(:arg_info) { function_info.args[0] }
         | 
| 168 180 |  | 
| @@ -170,321 +182,342 @@ describe GirFFI::Builders::ArgumentBuilder do | |
| 170 182 | 
             
                      skip unless function_info
         | 
| 171 183 | 
             
                    end
         | 
| 172 184 |  | 
| 173 | 
            -
                    it  | 
| 174 | 
            -
                      builder.pre_conversion.must_equal [ | 
| 185 | 
            +
                    it 'has the correct value for #pre_conversion' do
         | 
| 186 | 
            +
                      builder.pre_conversion.must_equal ['_v1 = GLib::Array.new :utf8']
         | 
| 175 187 | 
             
                    end
         | 
| 176 188 |  | 
| 177 | 
            -
                    it  | 
| 189 | 
            +
                    it 'has empty #post_conversion' do
         | 
| 178 190 | 
             
                      builder.post_conversion.must_equal []
         | 
| 179 191 | 
             
                    end
         | 
| 180 192 | 
             
                  end
         | 
| 181 193 | 
             
                end
         | 
| 182 194 |  | 
| 183 | 
            -
                describe  | 
| 195 | 
            +
                describe 'for :ptr_array' do
         | 
| 184 196 | 
             
                  let(:arg_info) {
         | 
| 185 | 
            -
                    get_introspection_data( | 
| 197 | 
            +
                    get_introspection_data('GIMarshallingTests', 'gptrarray_utf8_none_out').args[0]
         | 
| 198 | 
            +
                  }
         | 
| 186 199 |  | 
| 187 | 
            -
                  it  | 
| 188 | 
            -
                    builder.pre_conversion.must_equal [ | 
| 200 | 
            +
                  it 'has the correct value for #pre_conversion' do
         | 
| 201 | 
            +
                    builder.pre_conversion.must_equal ['_v1 = GirFFI::InOutPointer.for [:pointer, :ptr_array]']
         | 
| 189 202 | 
             
                  end
         | 
| 190 203 |  | 
| 191 | 
            -
                  it  | 
| 192 | 
            -
                    builder.post_conversion.must_equal [ | 
| 204 | 
            +
                  it 'has the correct value for #post_conversion' do
         | 
| 205 | 
            +
                    builder.post_conversion.must_equal ['_v2 = GLib::PtrArray.wrap(:utf8, _v1.to_value)']
         | 
| 193 206 | 
             
                  end
         | 
| 194 207 | 
             
                end
         | 
| 195 208 |  | 
| 196 | 
            -
                describe  | 
| 209 | 
            +
                describe 'for :error' do
         | 
| 197 210 | 
             
                  let(:arg_info) {
         | 
| 198 | 
            -
                    get_introspection_data( | 
| 211 | 
            +
                    get_introspection_data('GIMarshallingTests', 'gerror_out').args[0]
         | 
| 212 | 
            +
                  }
         | 
| 199 213 |  | 
| 200 | 
            -
                  it  | 
| 201 | 
            -
                    builder.pre_conversion.must_equal [ | 
| 214 | 
            +
                  it 'has the correct value for #pre_conversion' do
         | 
| 215 | 
            +
                    builder.pre_conversion.must_equal ['_v1 = GirFFI::InOutPointer.for [:pointer, :error]']
         | 
| 202 216 | 
             
                  end
         | 
| 203 217 |  | 
| 204 | 
            -
                  it  | 
| 205 | 
            -
                    builder.post_conversion.must_equal [ | 
| 218 | 
            +
                  it 'has the correct value for #post_conversion' do
         | 
| 219 | 
            +
                    builder.post_conversion.must_equal ['_v2 = GLib::Error.wrap(_v1.to_value)']
         | 
| 206 220 | 
             
                  end
         | 
| 207 221 | 
             
                end
         | 
| 208 222 |  | 
| 209 | 
            -
                describe  | 
| 223 | 
            +
                describe 'for :c' do
         | 
| 210 224 |  | 
| 211 | 
            -
                  describe  | 
| 225 | 
            +
                  describe 'with fixed size' do
         | 
| 212 226 | 
             
                    let(:arg_info) {
         | 
| 213 | 
            -
                      get_introspection_data( | 
| 227 | 
            +
                      get_introspection_data('GIMarshallingTests', 'array_fixed_out').args[0]
         | 
| 228 | 
            +
                    }
         | 
| 214 229 |  | 
| 215 | 
            -
                    it  | 
| 216 | 
            -
                      builder.pre_conversion.must_equal [ | 
| 230 | 
            +
                    it 'has the correct value for #pre_conversion' do
         | 
| 231 | 
            +
                      builder.pre_conversion.must_equal ['_v1 = GirFFI::InOutPointer.for [:pointer, :c]']
         | 
| 217 232 | 
             
                    end
         | 
| 218 233 |  | 
| 219 | 
            -
                    it  | 
| 220 | 
            -
                      builder.post_conversion.must_equal [ | 
| 234 | 
            +
                    it 'has the correct value for #post_conversion' do
         | 
| 235 | 
            +
                      builder.post_conversion.must_equal ['_v2 = GirFFI::SizedArray.wrap(:gint32, 4, _v1.to_value)']
         | 
| 221 236 | 
             
                    end
         | 
| 222 237 | 
             
                  end
         | 
| 223 238 |  | 
| 224 | 
            -
                  describe  | 
| 239 | 
            +
                  describe 'with separate size parameter' do
         | 
| 225 240 | 
             
                    let(:arg_info) {
         | 
| 226 | 
            -
                      get_introspection_data( | 
| 241 | 
            +
                      get_introspection_data('GIMarshallingTests', 'array_out').args[0]
         | 
| 242 | 
            +
                    }
         | 
| 227 243 |  | 
| 228 244 | 
             
                    let(:length_argument) { Object.new }
         | 
| 229 245 | 
             
                    before do
         | 
| 230 | 
            -
                      stub(length_argument).post_converted_name {  | 
| 246 | 
            +
                      stub(length_argument).post_converted_name { 'bar' }
         | 
| 231 247 | 
             
                      builder.length_arg = length_argument
         | 
| 232 248 | 
             
                    end
         | 
| 233 249 |  | 
| 234 | 
            -
                    it  | 
| 235 | 
            -
                      builder.pre_conversion.must_equal [ | 
| 250 | 
            +
                    it 'has the correct value for #pre_conversion' do
         | 
| 251 | 
            +
                      builder.pre_conversion.must_equal ['_v1 = GirFFI::InOutPointer.for [:pointer, :c]']
         | 
| 236 252 | 
             
                    end
         | 
| 237 253 |  | 
| 238 | 
            -
                    it  | 
| 239 | 
            -
                      builder.post_conversion.must_equal [ | 
| 254 | 
            +
                    it 'has the correct value for #post_conversion' do
         | 
| 255 | 
            +
                      builder.post_conversion.must_equal ['_v2 = GirFFI::SizedArray.wrap(:gint32, bar, _v1.to_value)']
         | 
| 240 256 | 
             
                    end
         | 
| 241 257 | 
             
                  end
         | 
| 242 258 | 
             
                end
         | 
| 243 259 |  | 
| 244 | 
            -
                describe  | 
| 260 | 
            +
                describe 'for :glist' do
         | 
| 245 261 | 
             
                  let(:arg_info) {
         | 
| 246 | 
            -
                    get_introspection_data( | 
| 262 | 
            +
                    get_introspection_data('GIMarshallingTests', 'glist_utf8_none_out').args[0]
         | 
| 263 | 
            +
                  }
         | 
| 247 264 |  | 
| 248 | 
            -
                  it  | 
| 249 | 
            -
                    builder.pre_conversion.must_equal [ | 
| 265 | 
            +
                  it 'has the correct value for #pre_conversion' do
         | 
| 266 | 
            +
                    builder.pre_conversion.must_equal ['_v1 = GirFFI::InOutPointer.for [:pointer, :glist]']
         | 
| 250 267 | 
             
                  end
         | 
| 251 268 |  | 
| 252 | 
            -
                  it  | 
| 253 | 
            -
                    builder.post_conversion.must_equal [ | 
| 269 | 
            +
                  it 'has the correct value for #post_conversion' do
         | 
| 270 | 
            +
                    builder.post_conversion.must_equal ['_v2 = GLib::List.wrap(:utf8, _v1.to_value)']
         | 
| 254 271 | 
             
                  end
         | 
| 255 272 | 
             
                end
         | 
| 256 273 |  | 
| 257 | 
            -
                describe  | 
| 274 | 
            +
                describe 'for :gslist' do
         | 
| 258 275 | 
             
                  let(:arg_info) {
         | 
| 259 | 
            -
                    get_introspection_data( | 
| 276 | 
            +
                    get_introspection_data('GIMarshallingTests', 'gslist_utf8_none_out').args[0]
         | 
| 277 | 
            +
                  }
         | 
| 260 278 |  | 
| 261 | 
            -
                  it  | 
| 262 | 
            -
                    builder.pre_conversion.must_equal [ | 
| 279 | 
            +
                  it 'has the correct value for #pre_conversion' do
         | 
| 280 | 
            +
                    builder.pre_conversion.must_equal ['_v1 = GirFFI::InOutPointer.for [:pointer, :gslist]']
         | 
| 263 281 | 
             
                  end
         | 
| 264 282 |  | 
| 265 | 
            -
                  it  | 
| 266 | 
            -
                    builder.post_conversion.must_equal [ | 
| 283 | 
            +
                  it 'has the correct value for #post_conversion' do
         | 
| 284 | 
            +
                    builder.post_conversion.must_equal ['_v2 = GLib::SList.wrap(:utf8, _v1.to_value)']
         | 
| 267 285 | 
             
                  end
         | 
| 268 286 | 
             
                end
         | 
| 269 287 |  | 
| 270 | 
            -
                describe  | 
| 288 | 
            +
                describe 'for :ghash' do
         | 
| 271 289 | 
             
                  let(:arg_info) {
         | 
| 272 | 
            -
                    get_introspection_data( | 
| 290 | 
            +
                    get_introspection_data('GIMarshallingTests', 'ghashtable_utf8_none_out').args[0]
         | 
| 291 | 
            +
                  }
         | 
| 273 292 |  | 
| 274 | 
            -
                  it  | 
| 275 | 
            -
                    builder.pre_conversion.must_equal [ | 
| 293 | 
            +
                  it 'has the correct value for #pre_conversion' do
         | 
| 294 | 
            +
                    builder.pre_conversion.must_equal ['_v1 = GirFFI::InOutPointer.for [:pointer, [:ghash, :utf8, :utf8]]']
         | 
| 276 295 | 
             
                  end
         | 
| 277 296 |  | 
| 278 | 
            -
                  it  | 
| 279 | 
            -
                    builder.post_conversion.must_equal [ | 
| 297 | 
            +
                  it 'has the correct value for #post_conversion' do
         | 
| 298 | 
            +
                    builder.post_conversion.must_equal ['_v2 = GLib::HashTable.wrap([:utf8, :utf8], _v1.to_value)']
         | 
| 280 299 | 
             
                  end
         | 
| 281 300 | 
             
                end
         | 
| 282 301 | 
             
              end
         | 
| 283 302 |  | 
| 284 | 
            -
              describe  | 
| 285 | 
            -
                describe  | 
| 303 | 
            +
              describe 'for an argument with direction :inout' do
         | 
| 304 | 
            +
                describe 'for :enum' do
         | 
| 286 305 | 
             
                  let(:arg_info) {
         | 
| 287 | 
            -
                    get_introspection_data( | 
| 306 | 
            +
                    get_introspection_data('GIMarshallingTests', 'enum_inout').args[0]
         | 
| 307 | 
            +
                  }
         | 
| 288 308 |  | 
| 289 | 
            -
                  it  | 
| 290 | 
            -
                    builder.pre_conversion.must_equal [ | 
| 291 | 
            -
             | 
| 309 | 
            +
                  it 'has the correct value for #pre_conversion' do
         | 
| 310 | 
            +
                    builder.pre_conversion.must_equal ['_v1 = GirFFI::InOutPointer.for GIMarshallingTests::Enum',
         | 
| 311 | 
            +
                                                       "_v1.set_value #{arg_info.name}"]
         | 
| 292 312 | 
             
                  end
         | 
| 293 313 |  | 
| 294 | 
            -
                  it  | 
| 295 | 
            -
                    builder.post_conversion.must_equal [ | 
| 314 | 
            +
                  it 'has the correct value for #post_conversion' do
         | 
| 315 | 
            +
                    builder.post_conversion.must_equal ['_v2 = _v1.to_value']
         | 
| 296 316 | 
             
                  end
         | 
| 297 317 | 
             
                end
         | 
| 298 318 |  | 
| 299 | 
            -
                describe  | 
| 319 | 
            +
                describe 'for :flags' do
         | 
| 300 320 | 
             
                  let(:arg_info) {
         | 
| 301 | 
            -
                    get_introspection_data( | 
| 321 | 
            +
                    get_introspection_data('GIMarshallingTests', 'no_type_flags_inout').args[0]
         | 
| 322 | 
            +
                  }
         | 
| 302 323 |  | 
| 303 | 
            -
                  it  | 
| 304 | 
            -
                    builder.pre_conversion.must_equal [ | 
| 305 | 
            -
             | 
| 324 | 
            +
                  it 'has the correct value for #pre_conversion' do
         | 
| 325 | 
            +
                    builder.pre_conversion.must_equal ['_v1 = GirFFI::InOutPointer.for GIMarshallingTests::NoTypeFlags',
         | 
| 326 | 
            +
                                                       "_v1.set_value #{arg_info.name}"]
         | 
| 306 327 | 
             
                  end
         | 
| 307 328 |  | 
| 308 | 
            -
                  it  | 
| 309 | 
            -
                    builder.post_conversion.must_equal [ | 
| 329 | 
            +
                  it 'has the correct value for #post_conversion' do
         | 
| 330 | 
            +
                    builder.post_conversion.must_equal ['_v2 = _v1.to_value']
         | 
| 310 331 | 
             
                  end
         | 
| 311 332 | 
             
                end
         | 
| 312 333 |  | 
| 313 | 
            -
                describe  | 
| 334 | 
            +
                describe 'for :gint32' do
         | 
| 314 335 | 
             
                  let(:arg_info) {
         | 
| 315 | 
            -
                    get_introspection_data( | 
| 336 | 
            +
                    get_introspection_data('GIMarshallingTests', 'int32_inout_min_max').args[0]
         | 
| 337 | 
            +
                  }
         | 
| 316 338 |  | 
| 317 | 
            -
                  it  | 
| 339 | 
            +
                  it 'has the correct value for method_argument_name' do
         | 
| 318 340 | 
             
                    builder.method_argument_name.must_equal "#{arg_info.name}"
         | 
| 319 341 | 
             
                  end
         | 
| 320 342 |  | 
| 321 | 
            -
                  it  | 
| 322 | 
            -
                    builder.pre_conversion.must_equal [ | 
| 323 | 
            -
             | 
| 343 | 
            +
                  it 'has the correct value for #pre_conversion' do
         | 
| 344 | 
            +
                    builder.pre_conversion.must_equal ['_v1 = GirFFI::InOutPointer.for :gint32',
         | 
| 345 | 
            +
                                                       "_v1.set_value #{arg_info.name}"]
         | 
| 324 346 | 
             
                  end
         | 
| 325 347 |  | 
| 326 | 
            -
                  it  | 
| 327 | 
            -
                    builder.post_conversion.must_equal [ | 
| 348 | 
            +
                  it 'has the correct value for #post_conversion' do
         | 
| 349 | 
            +
                    builder.post_conversion.must_equal ['_v2 = _v1.to_value']
         | 
| 328 350 | 
             
                  end
         | 
| 329 351 | 
             
                end
         | 
| 330 352 |  | 
| 331 | 
            -
                describe  | 
| 353 | 
            +
                describe 'for an array length' do
         | 
| 332 354 | 
             
                  let(:function_info) {
         | 
| 333 | 
            -
                    get_introspection_data('Regress', 'test_array_int_inout') | 
| 355 | 
            +
                    get_introspection_data('Regress', 'test_array_int_inout')
         | 
| 356 | 
            +
                  }
         | 
| 334 357 | 
             
                  let(:arg_info) { function_info.args[0] }
         | 
| 335 358 | 
             
                  let(:array_arg_info) { function_info.args[1] }
         | 
| 336 359 | 
             
                  let(:array_arg_builder) {
         | 
| 337 | 
            -
                    GirFFI::Builders::ArgumentBuilder.new(var_gen, array_arg_info) | 
| 360 | 
            +
                    GirFFI::Builders::ArgumentBuilder.new(var_gen, array_arg_info)
         | 
| 361 | 
            +
                  }
         | 
| 338 362 |  | 
| 339 363 | 
             
                  before do
         | 
| 340 364 | 
             
                    builder.array_arg = array_arg_builder
         | 
| 341 365 | 
             
                  end
         | 
| 342 366 |  | 
| 343 | 
            -
                  it  | 
| 344 | 
            -
                    builder.pre_conversion.must_equal [ | 
| 345 | 
            -
             | 
| 346 | 
            -
             | 
| 367 | 
            +
                  it 'has the correct value for #pre_conversion' do
         | 
| 368 | 
            +
                    builder.pre_conversion.must_equal ['n_ints = ints.nil? ? 0 : ints.length',
         | 
| 369 | 
            +
                                                       '_v1 = GirFFI::InOutPointer.for :gint32',
         | 
| 370 | 
            +
                                                       '_v1.set_value n_ints']
         | 
| 347 371 | 
             
                  end
         | 
| 348 372 |  | 
| 349 | 
            -
                  it  | 
| 350 | 
            -
                    builder.post_conversion.must_equal [ | 
| 373 | 
            +
                  it 'has the correct value for #post_conversion' do
         | 
| 374 | 
            +
                    builder.post_conversion.must_equal ['_v2 = _v1.to_value']
         | 
| 351 375 | 
             
                  end
         | 
| 352 376 | 
             
                end
         | 
| 353 377 |  | 
| 354 | 
            -
                describe  | 
| 378 | 
            +
                describe 'for :strv' do
         | 
| 355 379 | 
             
                  let(:arg_info) {
         | 
| 356 | 
            -
                    get_introspection_data( | 
| 380 | 
            +
                    get_introspection_data('GIMarshallingTests', 'gstrv_inout').args[0]
         | 
| 381 | 
            +
                  }
         | 
| 357 382 |  | 
| 358 | 
            -
                  it  | 
| 359 | 
            -
                    builder.pre_conversion.must_equal [ | 
| 360 | 
            -
             | 
| 383 | 
            +
                  it 'has the correct value for #pre_conversion' do
         | 
| 384 | 
            +
                    builder.pre_conversion.must_equal ['_v1 = GirFFI::InOutPointer.for [:pointer, :strv]',
         | 
| 385 | 
            +
                                                       '_v1.set_value GLib::Strv.from(g_strv)']
         | 
| 361 386 | 
             
                  end
         | 
| 362 387 |  | 
| 363 | 
            -
                  it  | 
| 364 | 
            -
                    builder.post_conversion.must_equal [ | 
| 388 | 
            +
                  it 'has the correct value for #post_conversion' do
         | 
| 389 | 
            +
                    builder.post_conversion.must_equal ['_v2 = GLib::Strv.wrap(_v1.to_value)']
         | 
| 365 390 | 
             
                  end
         | 
| 366 391 | 
             
                end
         | 
| 367 392 |  | 
| 368 | 
            -
                describe  | 
| 393 | 
            +
                describe 'for :ptr_array' do
         | 
| 369 394 | 
             
                  let(:arg_info) {
         | 
| 370 | 
            -
                    get_introspection_data( | 
| 395 | 
            +
                    get_introspection_data('GIMarshallingTests', 'gptrarray_utf8_none_inout').args[0]
         | 
| 396 | 
            +
                  }
         | 
| 371 397 |  | 
| 372 | 
            -
                  it  | 
| 373 | 
            -
                    builder.pre_conversion.must_equal [ | 
| 374 | 
            -
             | 
| 398 | 
            +
                  it 'has the correct value for #pre_conversion' do
         | 
| 399 | 
            +
                    builder.pre_conversion.must_equal ['_v1 = GirFFI::InOutPointer.for [:pointer, :ptr_array]',
         | 
| 400 | 
            +
                                                       '_v1.set_value GLib::PtrArray.from(:utf8, parray_)']
         | 
| 375 401 | 
             
                  end
         | 
| 376 402 |  | 
| 377 | 
            -
                  it  | 
| 378 | 
            -
                    builder.post_conversion.must_equal [ | 
| 403 | 
            +
                  it 'has the correct value for #post_conversion' do
         | 
| 404 | 
            +
                    builder.post_conversion.must_equal ['_v2 = GLib::PtrArray.wrap(:utf8, _v1.to_value)']
         | 
| 379 405 | 
             
                  end
         | 
| 380 406 | 
             
                end
         | 
| 381 407 |  | 
| 382 | 
            -
                describe  | 
| 408 | 
            +
                describe 'for :utf8' do
         | 
| 383 409 | 
             
                  let(:arg_info) {
         | 
| 384 | 
            -
                    get_introspection_data( | 
| 410 | 
            +
                    get_introspection_data('GIMarshallingTests', 'utf8_none_inout').args[0]
         | 
| 411 | 
            +
                  }
         | 
| 385 412 |  | 
| 386 | 
            -
                  it  | 
| 387 | 
            -
                    builder.pre_conversion.must_equal [ | 
| 388 | 
            -
             | 
| 413 | 
            +
                  it 'has the correct value for #pre_conversion' do
         | 
| 414 | 
            +
                    builder.pre_conversion.must_equal ['_v1 = GirFFI::InOutPointer.for :utf8',
         | 
| 415 | 
            +
                                                       '_v1.set_value GirFFI::InPointer.from(:utf8, utf8)']
         | 
| 389 416 | 
             
                  end
         | 
| 390 417 |  | 
| 391 | 
            -
                  it  | 
| 392 | 
            -
                    builder.post_conversion.must_equal [ | 
| 418 | 
            +
                  it 'has the correct value for #post_conversion' do
         | 
| 419 | 
            +
                    builder.post_conversion.must_equal ['_v2 = _v1.to_value.to_utf8']
         | 
| 393 420 | 
             
                  end
         | 
| 394 421 | 
             
                end
         | 
| 395 422 |  | 
| 396 | 
            -
                describe  | 
| 397 | 
            -
                  describe  | 
| 423 | 
            +
                describe 'for :c' do
         | 
| 424 | 
            +
                  describe 'with fixed size' do
         | 
| 398 425 | 
             
                    let(:arg_info) {
         | 
| 399 | 
            -
                      get_introspection_data( | 
| 426 | 
            +
                      get_introspection_data('GIMarshallingTests', 'array_fixed_inout').args[0]
         | 
| 427 | 
            +
                    }
         | 
| 400 428 |  | 
| 401 | 
            -
                    it  | 
| 429 | 
            +
                    it 'has the correct value for #pre_conversion' do
         | 
| 402 430 | 
             
                      builder.pre_conversion.must_equal [
         | 
| 403 431 | 
             
                        "GirFFI::ArgHelper.check_fixed_array_size 4, ints, \"ints\"",
         | 
| 404 | 
            -
                         | 
| 405 | 
            -
                         | 
| 432 | 
            +
                        '_v1 = GirFFI::InOutPointer.for [:pointer, :c]',
         | 
| 433 | 
            +
                        '_v1.set_value GirFFI::SizedArray.from(:gint32, 4, ints)'
         | 
| 406 434 | 
             
                      ]
         | 
| 407 435 | 
             
                    end
         | 
| 408 436 |  | 
| 409 | 
            -
                    it  | 
| 410 | 
            -
                      builder.post_conversion.must_equal [ | 
| 437 | 
            +
                    it 'has the correct value for #post_conversion' do
         | 
| 438 | 
            +
                      builder.post_conversion.must_equal ['_v2 = GirFFI::SizedArray.wrap(:gint32, 4, _v1.to_value)']
         | 
| 411 439 | 
             
                    end
         | 
| 412 440 | 
             
                  end
         | 
| 413 441 |  | 
| 414 | 
            -
                  describe  | 
| 442 | 
            +
                  describe 'with separate size parameter' do
         | 
| 415 443 | 
             
                    let(:function_info) {
         | 
| 416 | 
            -
                      get_introspection_data('Regress', 'test_array_int_inout') | 
| 444 | 
            +
                      get_introspection_data('Regress', 'test_array_int_inout')
         | 
| 445 | 
            +
                    }
         | 
| 417 446 | 
             
                    let(:length_arg_info) { function_info.args[0] }
         | 
| 418 447 | 
             
                    let(:arg_info) { function_info.args[1] }
         | 
| 419 448 | 
             
                    let(:length_arg_builder) {
         | 
| 420 | 
            -
                      GirFFI::Builders::ArgumentBuilder.new(var_gen, length_arg_info) | 
| 449 | 
            +
                      GirFFI::Builders::ArgumentBuilder.new(var_gen, length_arg_info)
         | 
| 450 | 
            +
                    }
         | 
| 421 451 |  | 
| 422 452 | 
             
                    before do
         | 
| 423 453 | 
             
                      builder.length_arg = length_arg_builder
         | 
| 424 454 | 
             
                    end
         | 
| 425 455 |  | 
| 426 | 
            -
                    it  | 
| 456 | 
            +
                    it 'has the correct value for #pre_conversion' do
         | 
| 427 457 | 
             
                      builder.pre_conversion.must_equal [
         | 
| 428 | 
            -
                         | 
| 429 | 
            -
                         | 
| 458 | 
            +
                        '_v1 = GirFFI::InOutPointer.for [:pointer, :c]',
         | 
| 459 | 
            +
                        '_v1.set_value GirFFI::SizedArray.from(:gint32, -1, ints)'
         | 
| 430 460 | 
             
                      ]
         | 
| 431 461 | 
             
                    end
         | 
| 432 462 |  | 
| 433 | 
            -
                    it  | 
| 434 | 
            -
                      builder.post_conversion.must_equal [ | 
| 463 | 
            +
                    it 'has the correct value for #post_conversion' do
         | 
| 464 | 
            +
                      builder.post_conversion.must_equal ['_v3 = GirFFI::SizedArray.wrap(:gint32, _v2, _v1.to_value)']
         | 
| 435 465 | 
             
                    end
         | 
| 436 466 | 
             
                  end
         | 
| 437 467 | 
             
                end
         | 
| 438 468 | 
             
              end
         | 
| 439 469 |  | 
| 440 | 
            -
              describe  | 
| 470 | 
            +
              describe 'for a skipped argument with direction :in' do
         | 
| 441 471 | 
             
                let(:arg_info) {
         | 
| 442 | 
            -
                  get_method_introspection_data( | 
| 472 | 
            +
                  get_method_introspection_data('Regress', 'TestObj', 'skip_param').args[2]
         | 
| 473 | 
            +
                }
         | 
| 443 474 |  | 
| 444 | 
            -
                it  | 
| 475 | 
            +
                it 'has the correct value for method_argument_name' do
         | 
| 445 476 | 
             
                  builder.method_argument_name.must_be_nil
         | 
| 446 477 | 
             
                end
         | 
| 447 478 |  | 
| 448 | 
            -
                it  | 
| 449 | 
            -
                  builder.pre_conversion.must_equal [ | 
| 479 | 
            +
                it 'has the correct value for #pre_conversion' do
         | 
| 480 | 
            +
                  builder.pre_conversion.must_equal ['_v1 = 0']
         | 
| 450 481 | 
             
                end
         | 
| 451 482 |  | 
| 452 | 
            -
                it  | 
| 483 | 
            +
                it 'has the correct value for #post_conversion' do
         | 
| 453 484 | 
             
                  builder.post_conversion.must_equal []
         | 
| 454 485 | 
             
                end
         | 
| 455 486 | 
             
              end
         | 
| 456 487 |  | 
| 457 | 
            -
              describe  | 
| 488 | 
            +
              describe 'for a skipped argument with direction :inout' do
         | 
| 458 489 | 
             
                let(:arg_info) {
         | 
| 459 | 
            -
                  get_method_introspection_data( | 
| 490 | 
            +
                  get_method_introspection_data('Regress', 'TestObj', 'skip_inout_param').args[3]
         | 
| 491 | 
            +
                }
         | 
| 460 492 |  | 
| 461 | 
            -
                it  | 
| 493 | 
            +
                it 'has the correct value for method_argument_name' do
         | 
| 462 494 | 
             
                  builder.method_argument_name.must_be_nil
         | 
| 463 495 | 
             
                end
         | 
| 464 496 |  | 
| 465 | 
            -
                it  | 
| 466 | 
            -
                  builder.pre_conversion.must_equal [ | 
| 467 | 
            -
             | 
| 497 | 
            +
                it 'has the correct value for #pre_conversion' do
         | 
| 498 | 
            +
                  builder.pre_conversion.must_equal ['_v1 = GirFFI::InOutPointer.for :gint32',
         | 
| 499 | 
            +
                                                     '_v1.set_value 0']
         | 
| 468 500 | 
             
                end
         | 
| 469 501 |  | 
| 470 | 
            -
                it  | 
| 502 | 
            +
                it 'has the correct value for #post_conversion' do
         | 
| 471 503 | 
             
                  builder.post_conversion.must_equal []
         | 
| 472 504 | 
             
                end
         | 
| 473 505 | 
             
              end
         | 
| 474 506 |  | 
| 475 | 
            -
              describe  | 
| 507 | 
            +
              describe 'for a skipped argument with direction :out' do
         | 
| 476 508 | 
             
                let(:arg_info) {
         | 
| 477 | 
            -
                  get_method_introspection_data( | 
| 509 | 
            +
                  get_method_introspection_data('Regress', 'TestObj', 'skip_out_param').args[1]
         | 
| 510 | 
            +
                }
         | 
| 478 511 |  | 
| 479 | 
            -
                it  | 
| 512 | 
            +
                it 'has the correct value for method_argument_name' do
         | 
| 480 513 | 
             
                  builder.method_argument_name.must_be_nil
         | 
| 481 514 | 
             
                end
         | 
| 482 515 |  | 
| 483 | 
            -
                it  | 
| 484 | 
            -
                  builder.pre_conversion.must_equal [ | 
| 516 | 
            +
                it 'has the correct value for #pre_conversion' do
         | 
| 517 | 
            +
                  builder.pre_conversion.must_equal ['_v1 = GirFFI::InOutPointer.for :gint32']
         | 
| 485 518 | 
             
                end
         | 
| 486 519 |  | 
| 487 | 
            -
                it  | 
| 520 | 
            +
                it 'has the correct value for #post_conversion' do
         | 
| 488 521 | 
             
                  builder.post_conversion.must_equal []
         | 
| 489 522 | 
             
                end
         | 
| 490 523 | 
             
              end
         |