brew/Library/Homebrew/test/pkg_version_spec.rb
Mike McQuaid 84225d0120
pkg_version: make typed: strict
This required:
- adding signatures/types where missing
- ensuring that we respect the signature of `Version.new`
- remove some non-Sorbet type checks
- fixing the exception in tests
- removing some tests now caught by Sorbet
- fixing `Formula#prefix` so it works as intended with correct type
  usage
2024-12-05 14:01:37 +00:00

127 lines
4.5 KiB
Ruby

# frozen_string_literal: true
require "pkg_version"
RSpec.describe PkgVersion do
describe "::parse" do
it "parses versions from a string" do
expect(described_class.parse("1.0_1")).to eq(described_class.new(Version.new("1.0"), 1))
expect(described_class.parse("1.0_1")).to eq(described_class.new(Version.new("1.0"), 1))
expect(described_class.parse("1.0")).to eq(described_class.new(Version.new("1.0"), 0))
expect(described_class.parse("1.0_0")).to eq(described_class.new(Version.new("1.0"), 0))
expect(described_class.parse("2.1.4_0")).to eq(described_class.new(Version.new("2.1.4"), 0))
expect(described_class.parse("1.0.1e_1")).to eq(described_class.new(Version.new("1.0.1e"), 1))
end
end
specify "#==" do
expect(described_class.parse("1.0_0")).to eq described_class.parse("1.0")
version_to_compare = described_class.parse("1.0_1")
expect(version_to_compare == described_class.parse("1.0_1")).to be true
expect(version_to_compare == described_class.parse("1.0_2")).to be false
end
describe "#>" do
it "returns true if the left version is bigger than the right" do
expect(described_class.parse("1.1")).to be > described_class.parse("1.0_1")
end
it "returns true if the left version is HEAD" do
expect(described_class.parse("HEAD")).to be > described_class.parse("1.0")
end
it "raises an error if the other side isn't of the same class" do
expect do
described_class.new(Version.new("1.0"), 0) > Object.new
end.to raise_error(TypeError)
end
it "is not compatible with Version" do
expect do
described_class.new(Version.new("1.0"), 0) > Version.new("1.0")
end.to raise_error(TypeError)
end
end
describe "#<" do
it "returns true if the left version is smaller than the right" do
expect(described_class.parse("1.0_1")).to be < described_class.parse("2.0_1")
end
it "returns true if the right version is HEAD" do
expect(described_class.parse("1.0")).to be < described_class.parse("HEAD")
end
end
describe "#<=>" do
it "returns nil if the comparison fails" do
expect(Object.new <=> described_class.new(Version.new("1.0"), 0)).to be_nil
end
end
describe "#to_s" do
it "returns a string of the form 'version_revision'" do
expect(described_class.new(Version.new("1.0"), 0).to_s).to eq("1.0")
expect(described_class.new(Version.new("1.0"), 1).to_s).to eq("1.0_1")
expect(described_class.new(Version.new("1.0"), 0).to_s).to eq("1.0")
expect(described_class.new(Version.new("1.0"), 0).to_s).to eq("1.0")
expect(described_class.new(Version.new("HEAD"), 1).to_s).to eq("HEAD_1")
expect(described_class.new(Version.new("HEAD-ffffff"), 1).to_s).to eq("HEAD-ffffff_1")
end
end
describe "#hash" do
let(:version_one_revision_one) { described_class.new(Version.new("1.0"), 1) }
let(:version_one_dot_one_revision_one) { described_class.new(Version.new("1.1"), 1) }
let(:version_one_revision_zero) { described_class.new(Version.new("1.0"), 0) }
it "returns a hash based on the version and revision" do
expect(version_one_revision_one.hash).to eq(described_class.new(Version.new("1.0"), 1).hash)
expect(version_one_revision_one.hash).not_to eq(version_one_dot_one_revision_one.hash)
expect(version_one_revision_one.hash).not_to eq(version_one_revision_zero.hash)
end
end
describe "#version" do
it "returns package version" do
expect(described_class.parse("1.2.3_4").version).to eq Version.new("1.2.3")
end
end
describe "#revision" do
it "returns package revision" do
expect(described_class.parse("1.2.3_4").revision).to eq 4
end
end
describe "#major" do
it "returns major version token" do
expect(described_class.parse("1.2.3_4").major).to eq Version::Token.create("1")
end
end
describe "#minor" do
it "returns minor version token" do
expect(described_class.parse("1.2.3_4").minor).to eq Version::Token.create("2")
end
end
describe "#patch" do
it "returns patch version token" do
expect(described_class.parse("1.2.3_4").patch).to eq Version::Token.create("3")
end
end
describe "#major_minor" do
it "returns major.minor version" do
expect(described_class.parse("1.2.3_4").major_minor).to eq Version.new("1.2")
end
end
describe "#major_minor_patch" do
it "returns major.minor.patch version" do
expect(described_class.parse("1.2.3_4").major_minor_patch).to eq Version.new("1.2.3")
end
end
end