aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/test/pkg_version_spec.rb
blob: b1cceb32ce35eeea4755562cd0207b8e41984e4c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
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")
    expect(described_class.parse("1.0_1")).to be == described_class.parse("1.0_1")
  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 {
        described_class.new(Version.create("1.0"), 0) > Object.new
      }.to raise_error(ArgumentError)
    end

    it "is not compatible with Version" do
      expect {
        described_class.new(Version.create("1.0"), 0) > Version.create("1.0")
      }.to raise_error(ArgumentError)
    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(described_class.new(Version.create("1.0"), 0) <=> Object.new).to be nil
    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
    let(:p1) { described_class.new(Version.create("1.0"), 1) }
    let(:p2) { described_class.new(Version.create("1.0"), 1) }
    let(:p3) { described_class.new(Version.create("1.1"), 1) }
    let(:p4) { described_class.new(Version.create("1.0"), 0) }

    it "returns a hash based on the version and revision" do
      expect(p1.hash).to eq(p2.hash)
      expect(p1.hash).not_to eq(p3.hash)
      expect(p1.hash).not_to eq(p4.hash)
    end
  end
end