Sha256: a9ac943fc849d8c9ce757b9fe99168ac8abb626ed2977819bada0c2f73466720

Contents?: true

Size: 1.43 KB

Versions: 4

Compression:

Stored size: 1.43 KB

Contents

require 'gir_ffi_test_helper'

describe GirFFI::Builders::CallbackArgumentBuilder do
  let(:var_gen) { GirFFI::VariableNameGenerator.new }
  let(:builder) { GirFFI::Builders::CallbackArgumentBuilder.new(var_gen, arg_info) }

  describe "for an argument with direction :out" do
    describe "for :zero_terminated" do
      let(:vfunc_info) {
        get_vfunc_introspection_data('GIMarshallingTests', 'Object',
                                     'vfunc_array_out_parameter') }
      let(:arg_info) { vfunc_info.args[0] }

      before { skip unless vfunc_info }

      it "has the correct value for #pre_conversion" do
        builder.pre_conversion.must_equal [ "_v1 = GirFFI::InOutPointer.new([:pointer, :zero_terminated], a)" ]
      end

      it "has the correct value for #post_conversion" do
        builder.post_conversion.must_equal [ "_v1.set_value GirFFI::ZeroTerminated.from(:gfloat, _v2)" ]
      end
    end
  end

  describe "for an argument with direction :error" do
    let(:arg_info) { GirFFI::ErrorArgumentInfo.new }

    it "sets up a rescueing block in #pre_conversion" do
      builder.pre_conversion.must_equal [
        "_v1 = GirFFI::InOutPointer.new([:pointer, :error], _error)",
        "begin"
      ]
    end

    it "converts any exceptions to GLib::Error in #post_conversion" do
      builder.post_conversion.must_equal [
        "rescue => _v1",
        "_v2.set_value GLib::Error.from(_v1)",
        "end"
      ]
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
gir_ffi-0.7.7 test/gir_ffi/builders/callback_argument_builder_test.rb
gir_ffi-0.7.6 test/gir_ffi/builders/callback_argument_builder_test.rb
gir_ffi-0.7.5 test/gir_ffi/builders/callback_argument_builder_test.rb
gir_ffi-0.7.4 test/gir_ffi/builders/callback_argument_builder_test.rb