blob: 685e250e08f1f06dbe9813841e8853f323b1368b (
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
 | require "requirements/java_requirement"
describe JavaRequirement do
  subject { described_class.new([]) }
  before(:each) do
    ENV["JAVA_HOME"] = nil
  end
  describe "#message" do
    its(:message) { is_expected.to match(/Java is required to install this formula./) }
  end
  describe "#inspect" do
    subject { described_class.new(%w[1.7+]) }
    its(:inspect) { is_expected.to eq('#<JavaRequirement: "java" [] version="1.7+">') }
  end
  describe "#display_s" do
    context "without specific version" do
      its(:display_s) { is_expected.to eq("java") }
    end
    context "with version 1.8" do
      subject { described_class.new(%w[1.8]) }
      its(:display_s) { is_expected.to eq("java = 1.8") }
    end
    context "with version 1.8+" do
      subject { described_class.new(%w[1.8+]) }
      its(:display_s) { is_expected.to eq("java >= 1.8") }
    end
  end
  describe "#satisfied?" do
    subject { described_class.new(%w[1.8]) }
    it "returns false if no `java` executable can be found" do
      allow(File).to receive(:executable?).and_return(false)
      expect(subject).not_to be_satisfied
    end
    it "returns true if #preferred_java returns a path" do
      allow(subject).to receive(:preferred_java).and_return(Pathname.new("/usr/bin/java"))
      expect(subject).to be_satisfied
    end
    context "when #possible_javas contains paths" do
      let(:path) { mktmpdir }
      let(:java) { path/"java" }
      def setup_java_with_version(version)
        IO.write java, <<~EOS
          #!/bin/sh
          echo 'java version "#{version}"'
        EOS
        FileUtils.chmod "+x", java
      end
      before(:each) do
        allow(subject).to receive(:possible_javas).and_return([java])
      end
      context "and 1.7 is required" do
        subject { described_class.new(%w[1.7]) }
        it "returns false if all are lower" do
          setup_java_with_version "1.6.0_5"
          expect(subject).not_to be_satisfied
        end
        it "returns true if one is equal" do
          setup_java_with_version "1.7.0_5"
          expect(subject).to be_satisfied
        end
        it "returns false if all are higher" do
          setup_java_with_version "1.8.0_5"
          expect(subject).not_to be_satisfied
        end
      end
      context "and 1.7+ is required" do
        subject { described_class.new(%w[1.7+]) }
        it "returns false if all are lower" do
          setup_java_with_version "1.6.0_5"
          expect(subject).not_to be_satisfied
        end
        it "returns true if one is equal" do
          setup_java_with_version "1.7.0_5"
          expect(subject).to be_satisfied
        end
        it "returns true if one is higher" do
          setup_java_with_version "1.8.0_5"
          expect(subject).to be_satisfied
        end
      end
    end
  end
end
 |