2019-04-19 15:38:03 +09:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2017-02-16 19:53:32 +01:00
|
|
|
require "pkg_version"
|
|
|
|
|
|
|
|
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.create("1.0"), 1))
|
|
|
|
expect(described_class.parse("1.0_1")).to eq(described_class.new(Version.create("1.0"), 1))
|
|
|
|
expect(described_class.parse("1.0")).to eq(described_class.new(Version.create("1.0"), 0))
|
|
|
|
expect(described_class.parse("1.0_0")).to eq(described_class.new(Version.create("1.0"), 0))
|
|
|
|
expect(described_class.parse("2.1.4_0")).to eq(described_class.new(Version.create("2.1.4"), 0))
|
|
|
|
expect(described_class.parse("1.0.1e_1")).to eq(described_class.new(Version.create("1.0.1e"), 1))
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
specify "#==" do
|
|
|
|
expect(described_class.parse("1.0_0")).to be == described_class.parse("1.0")
|
2021-06-10 13:42:33 +05:30
|
|
|
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
|
2017-02-16 19:53:32 +01:00
|
|
|
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
|
2023-03-08 23:14:46 +00:00
|
|
|
expect do
|
2017-02-16 19:53:32 +01:00
|
|
|
described_class.new(Version.create("1.0"), 0) > Object.new
|
2023-03-08 23:14:46 +00:00
|
|
|
end.to raise_error(ArgumentError)
|
2017-02-16 19:53:32 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
it "is not compatible with Version" do
|
2023-03-08 23:14:46 +00:00
|
|
|
expect do
|
2017-02-16 19:53:32 +01:00
|
|
|
described_class.new(Version.create("1.0"), 0) > Version.create("1.0")
|
2023-03-08 23:14:46 +00:00
|
|
|
end.to raise_error(ArgumentError)
|
2017-02-16 19:53:32 +01:00
|
|
|
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
|
2022-03-01 00:01:13 +00:00
|
|
|
expect(described_class.new(Version.create("1.0"), 0) <=> Object.new).to be_nil
|
|
|
|
expect(Object.new <=> described_class.new(Version.create("1.0"), 0)).to be_nil
|
|
|
|
expect(Object.new <=> described_class.new(Version.create("1.0"), 0)).to be_nil
|
|
|
|
expect(described_class.new(Version.create("1.0"), 0) <=> nil).to be_nil
|
2020-03-03 10:43:54 -07:00
|
|
|
# This one used to fail due to dereferencing a null `self`
|
2022-03-01 00:01:13 +00:00
|
|
|
expect(described_class.new(nil, 0) <=> described_class.new(Version.create("1.0"), 0)).to be_nil
|
2017-02-16 19:53:32 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "#to_s" do
|
|
|
|
it "returns a string of the form 'version_revision'" do
|
|
|
|
expect(described_class.new(Version.create("1.0"), 0).to_s).to eq("1.0")
|
|
|
|
expect(described_class.new(Version.create("1.0"), 1).to_s).to eq("1.0_1")
|
|
|
|
expect(described_class.new(Version.create("1.0"), 0).to_s).to eq("1.0")
|
|
|
|
expect(described_class.new(Version.create("1.0"), 0).to_s).to eq("1.0")
|
|
|
|
expect(described_class.new(Version.create("HEAD"), 1).to_s).to eq("HEAD_1")
|
|
|
|
expect(described_class.new(Version.create("HEAD-ffffff"), 1).to_s).to eq("HEAD-ffffff_1")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "#hash" do
|
2023-04-20 12:14:45 +00:00
|
|
|
let(:version_one_revision_one) { described_class.new(Version.create("1.0"), 1) }
|
|
|
|
let(:version_one_dot_one_revision_one) { described_class.new(Version.create("1.1"), 1) }
|
|
|
|
let(:version_one_revision_zero) { described_class.new(Version.create("1.0"), 0) }
|
2017-02-16 19:53:32 +01:00
|
|
|
|
|
|
|
it "returns a hash based on the version and revision" do
|
2023-04-20 12:14:45 +00:00
|
|
|
expect(version_one_revision_one.hash).to eq(described_class.new(Version.create("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)
|
2017-02-16 19:53:32 +01:00
|
|
|
end
|
|
|
|
end
|
2020-08-11 13:13:53 -07:00
|
|
|
|
|
|
|
describe "#version" do
|
|
|
|
it "returns package version" do
|
|
|
|
expect(described_class.parse("1.2.3_4").version).to be == Version.create("1.2.3")
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "#revision" do
|
|
|
|
it "returns package revision" do
|
|
|
|
expect(described_class.parse("1.2.3_4").revision).to be == 4
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "#major" do
|
|
|
|
it "returns major version token" do
|
|
|
|
expect(described_class.parse("1.2.3_4").major).to be == 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 be == 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 be == 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 be == Version.create("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 be == Version.create("1.2.3")
|
|
|
|
end
|
|
|
|
end
|
2017-02-16 19:53:32 +01:00
|
|
|
end
|