# frozen_string_literal: true

require "gir_ffi_test_helper"

describe GirFFI::Builders::ModuleBuilder do
  let(:gir) { GObjectIntrospection::IRepository.default }

  describe "#find_namespaced_class_info" do
    it "finds the info in the GIR" do
      allow(gir).to receive(:require).with("Foo", nil)

      builder = GirFFI::Builders::ModuleBuilder.new "Foo"

      expect(gir).to receive(:find_by_name).with("Foo", "Bar").and_return "gir info"

      _(builder.find_namespaced_class_info(:Bar)).must_equal "gir info"
    end

    it "checks downcased class name as an alternative" do
      allow(gir).to receive(:require).with("Foo", nil)

      builder = GirFFI::Builders::ModuleBuilder.new "Foo"

      expect(gir).to receive(:find_by_name).with("Foo", "Bar").and_return nil
      expect(gir).to receive(:find_by_name).with("Foo", "bar").and_return "gir info"

      _(builder.find_namespaced_class_info(:Bar)).must_equal "gir info"
    end

    it "raises a clear error if the named class does not exist" do
      allow(gir).to receive(:require).with("Foo", nil)

      builder = GirFFI::Builders::ModuleBuilder.new "Foo"

      expect(gir).to receive(:find_by_name).with("Foo", "Bar").and_return nil
      expect(gir).to receive(:find_by_name).with("Foo", "bar").and_return nil

      assert_raises NameError do
        builder.find_namespaced_class_info :Bar
      end
    end
  end
end
