# frozen_string_literal: true

RSpec.describe "Gem::Specification#match_platform" do
  it "does not match platforms other than the gem platform" do
    darwin = gem "lol", "1.0", "platform_specific-1.0-x86-darwin-10"
    expect(darwin.match_platform(pl("java"))).to eq(false)
  end

  context "when platform is a string" do
    it "matches when platform is a string" do
      lazy_spec = Bundler::LazySpecification.new("lol", "1.0", "universal-mingw32")
      expect(lazy_spec.match_platform(pl("x86-mingw32"))).to eq(true)
      expect(lazy_spec.match_platform(pl("x64-mingw32"))).to eq(true)
    end
  end
end

RSpec.describe "Bundler::GemHelpers#generic" do
  include Bundler::GemHelpers

  it "converts non-windows platforms into ruby" do
    expect(generic(pl("x86-darwin-10"))).to eq(pl("ruby"))
    expect(generic(pl("ruby"))).to eq(pl("ruby"))
  end

  it "converts java platform variants into java" do
    expect(generic(pl("universal-java-17"))).to eq(pl("java"))
    expect(generic(pl("java"))).to eq(pl("java"))
  end

  it "converts mswin platform variants into x86-mswin32" do
    expect(generic(pl("mswin32"))).to eq(pl("x86-mswin32"))
    expect(generic(pl("i386-mswin32"))).to eq(pl("x86-mswin32"))
    expect(generic(pl("x86-mswin32"))).to eq(pl("x86-mswin32"))
  end

  it "converts 32-bit mingw platform variants into x86-mingw32" do
    expect(generic(pl("mingw32"))).to eq(pl("x86-mingw32"))
    expect(generic(pl("i386-mingw32"))).to eq(pl("x86-mingw32"))
    expect(generic(pl("x86-mingw32"))).to eq(pl("x86-mingw32"))
  end

  it "converts 64-bit mingw platform variants into x64-mingw32" do
    expect(generic(pl("x64-mingw32"))).to eq(pl("x64-mingw32"))
    expect(generic(pl("x86_64-mingw32"))).to eq(pl("x64-mingw32"))
  end

  it "converts 64-bit mingw UCRT platform variants into x64-mingw-ucrt" do
    expect(generic(pl("x64-mingw-ucrt"))).to eq(pl("x64-mingw-ucrt"))
  end
end

RSpec.describe "Gem::SourceIndex#refresh!" do
  before do
    install_gemfile <<-G
      source "#{file_uri_for(gem_repo1)}"
      gem "rack"
    G
  end

  it "does not explode when called" do
    run "Gem.source_index.refresh!", :raise_on_error => false
    run "Gem::SourceIndex.new([]).refresh!", :raise_on_error => false
  end
end
