# frozen_string_literal: true

RSpec.describe Bundler::DepProxy do
  let(:dep) { Bundler::Dependency.new("rake", ">= 0") }
  subject { described_class.get_proxy(dep, Gem::Platform::RUBY) }
  let(:same) { subject }
  let(:other) { described_class.get_proxy(dep, Gem::Platform::RUBY) }
  let(:different) { described_class.get_proxy(dep, Gem::Platform::JAVA) }

  describe "#eql?" do
    it { expect(subject.eql?(same)).to be true }
    it { expect(subject.eql?(other)).to be true }
    it { expect(subject.eql?(different)).to be false }
    it { expect(subject.eql?(nil)).to be false }
    it { expect(subject.eql?("foobar")).to be false }
  end

  describe "must use factory methods" do
    it { expect { described_class.new(dep, Gem::Platform::RUBY) }.to raise_error NoMethodError }
    it { expect { subject.dup }.to raise_error NoMethodError }
    it { expect { subject.clone }.to raise_error NoMethodError }
  end

  describe "frozen" do
    if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("2.5.0")
      error = Object.const_get("FrozenError")
    else
      error = RuntimeError
    end
    it { expect { subject.instance_variable_set(:@__platform, {}) }.to raise_error error }
  end
end
