# frozen_string_literal: true

RSpec.describe Bundler::Dependency do
  let(:options) do
    {}
  end
  let(:dependency) do
    described_class.new(
      "test_gem",
      "1.0.0",
      options
    )
  end

  describe "to_lock" do
    it "returns formatted string" do
      expect(dependency.to_lock).to eq("  test_gem (= 1.0.0)")
    end

    it "matches format of Gem::Dependency#to_lock" do
      gem_dependency = Gem::Dependency.new("test_gem", "1.0.0")
      expect(dependency.to_lock).to eq(gem_dependency.to_lock)
    end

    context "when source is passed" do
      let(:options) do
        {
          "source" => Bundler::Source::Git.new({}),
        }
      end

      it "returns formatted string with exclamation mark" do
        expect(dependency.to_lock).to eq("  test_gem (= 1.0.0)!")
      end
    end
  end

  describe "PLATFORM_MAP" do
    subject { described_class::PLATFORM_MAP }

    # rubocop:disable Naming/VariableNumber
    let(:platforms) do
      { ruby: Gem::Platform::RUBY,
        ruby_18: Gem::Platform::RUBY,
        ruby_19: Gem::Platform::RUBY,
        ruby_20: Gem::Platform::RUBY,
        ruby_21: Gem::Platform::RUBY,
        ruby_22: Gem::Platform::RUBY,
        ruby_23: Gem::Platform::RUBY,
        ruby_24: Gem::Platform::RUBY,
        ruby_25: Gem::Platform::RUBY,
        ruby_26: Gem::Platform::RUBY,
        ruby_27: Gem::Platform::RUBY,
        ruby_30: Gem::Platform::RUBY,
        ruby_31: Gem::Platform::RUBY,
        ruby_32: Gem::Platform::RUBY,
        ruby_33: Gem::Platform::RUBY,
        ruby_34: Gem::Platform::RUBY,
        mri: Gem::Platform::RUBY,
        mri_18: Gem::Platform::RUBY,
        mri_19: Gem::Platform::RUBY,
        mri_20: Gem::Platform::RUBY,
        mri_21: Gem::Platform::RUBY,
        mri_22: Gem::Platform::RUBY,
        mri_23: Gem::Platform::RUBY,
        mri_24: Gem::Platform::RUBY,
        mri_25: Gem::Platform::RUBY,
        mri_26: Gem::Platform::RUBY,
        mri_27: Gem::Platform::RUBY,
        mri_30: Gem::Platform::RUBY,
        mri_31: Gem::Platform::RUBY,
        mri_32: Gem::Platform::RUBY,
        mri_33: Gem::Platform::RUBY,
        mri_34: Gem::Platform::RUBY,
        rbx: Gem::Platform::RUBY,
        truffleruby: Gem::Platform::RUBY,
        jruby: Gem::Platform::JAVA,
        jruby_18: Gem::Platform::JAVA,
        jruby_19: Gem::Platform::JAVA,
        windows: Gem::Platform::WINDOWS,
        windows_18: Gem::Platform::WINDOWS,
        windows_19: Gem::Platform::WINDOWS,
        windows_20: Gem::Platform::WINDOWS,
        windows_21: Gem::Platform::WINDOWS,
        windows_22: Gem::Platform::WINDOWS,
        windows_23: Gem::Platform::WINDOWS,
        windows_24: Gem::Platform::WINDOWS,
        windows_25: Gem::Platform::WINDOWS,
        windows_26: Gem::Platform::WINDOWS,
        windows_27: Gem::Platform::WINDOWS,
        windows_30: Gem::Platform::WINDOWS,
        windows_31: Gem::Platform::WINDOWS,
        windows_32: Gem::Platform::WINDOWS,
        windows_33: Gem::Platform::WINDOWS,
        windows_34: Gem::Platform::WINDOWS }
    end

    let(:deprecated) do
      { mswin: Gem::Platform::MSWIN,
        mswin_18: Gem::Platform::MSWIN,
        mswin_19: Gem::Platform::MSWIN,
        mswin_20: Gem::Platform::MSWIN,
        mswin_21: Gem::Platform::MSWIN,
        mswin_22: Gem::Platform::MSWIN,
        mswin_23: Gem::Platform::MSWIN,
        mswin_24: Gem::Platform::MSWIN,
        mswin_25: Gem::Platform::MSWIN,
        mswin_26: Gem::Platform::MSWIN,
        mswin_27: Gem::Platform::MSWIN,
        mswin_30: Gem::Platform::MSWIN,
        mswin_31: Gem::Platform::MSWIN,
        mswin_32: Gem::Platform::MSWIN,
        mswin_33: Gem::Platform::MSWIN,
        mswin_34: Gem::Platform::MSWIN,
        mswin64: Gem::Platform::MSWIN64,
        mswin64_19: Gem::Platform::MSWIN64,
        mswin64_20: Gem::Platform::MSWIN64,
        mswin64_21: Gem::Platform::MSWIN64,
        mswin64_22: Gem::Platform::MSWIN64,
        mswin64_23: Gem::Platform::MSWIN64,
        mswin64_24: Gem::Platform::MSWIN64,
        mswin64_25: Gem::Platform::MSWIN64,
        mswin64_26: Gem::Platform::MSWIN64,
        mswin64_27: Gem::Platform::MSWIN64,
        mswin64_30: Gem::Platform::MSWIN64,
        mswin64_31: Gem::Platform::MSWIN64,
        mswin64_32: Gem::Platform::MSWIN64,
        mswin64_33: Gem::Platform::MSWIN64,
        mswin64_34: Gem::Platform::MSWIN64,
        mingw: Gem::Platform::MINGW,
        mingw_18: Gem::Platform::MINGW,
        mingw_19: Gem::Platform::MINGW,
        mingw_20: Gem::Platform::MINGW,
        mingw_21: Gem::Platform::MINGW,
        mingw_22: Gem::Platform::MINGW,
        mingw_23: Gem::Platform::MINGW,
        mingw_24: Gem::Platform::MINGW,
        mingw_25: Gem::Platform::MINGW,
        mingw_26: Gem::Platform::MINGW,
        mingw_27: Gem::Platform::MINGW,
        mingw_30: Gem::Platform::MINGW,
        mingw_31: Gem::Platform::MINGW,
        mingw_32: Gem::Platform::MINGW,
        mingw_33: Gem::Platform::MINGW,
        mingw_34: Gem::Platform::MINGW,
        x64_mingw: Gem::Platform::X64_MINGW,
        x64_mingw_20: Gem::Platform::X64_MINGW,
        x64_mingw_21: Gem::Platform::X64_MINGW,
        x64_mingw_22: Gem::Platform::X64_MINGW,
        x64_mingw_23: Gem::Platform::X64_MINGW,
        x64_mingw_24: Gem::Platform::X64_MINGW,
        x64_mingw_25: Gem::Platform::X64_MINGW,
        x64_mingw_26: Gem::Platform::X64_MINGW,
        x64_mingw_27: Gem::Platform::X64_MINGW,
        x64_mingw_30: Gem::Platform::X64_MINGW,
        x64_mingw_31: Gem::Platform::X64_MINGW,
        x64_mingw_32: Gem::Platform::X64_MINGW,
        x64_mingw_33: Gem::Platform::X64_MINGW,
        x64_mingw_34: Gem::Platform::X64_MINGW }
    end
    # rubocop:enable Naming/VariableNumber

    it "includes all platforms" do
      expect(subject).to eq(platforms.merge(deprecated))
    end
  end
end
