From 87935f8d0f3bf7e9a20257b2b7cd2de52f24ac7d Mon Sep 17 00:00:00 2001 From: Sam Ford <1584702+samford@users.noreply.github.com> Date: Mon, 14 Aug 2023 20:26:09 -0400 Subject: [PATCH] perl: expand and refactor tests This brings coverage of `Language::Perl::Shebang` to 100%. --- .../test/language/perl/shebang_spec.rb | 47 +++++++++++++++---- 1 file changed, 39 insertions(+), 8 deletions(-) diff --git a/Library/Homebrew/test/language/perl/shebang_spec.rb b/Library/Homebrew/test/language/perl/shebang_spec.rb index a6dee15226..06ee219825 100644 --- a/Library/Homebrew/test/language/perl/shebang_spec.rb +++ b/Library/Homebrew/test/language/perl/shebang_spec.rb @@ -5,17 +5,30 @@ require "utils/shebang" describe Language::Perl::Shebang do let(:file) { Tempfile.new("perl-shebang") } - let(:perl_f) do - formula "perl" do + let(:f) do + f = {} + + f[:perl] = formula "perl" do url "https://brew.sh/perl-1.0.tgz" end - end - let(:f) do - formula "foo" do + + f[:depends_on] = formula "foo" do + url "https://brew.sh/foo-1.0.tgz" + + depends_on "perl" + end + + f[:uses_from_macos] = formula "foo" do url "https://brew.sh/foo-1.0.tgz" uses_from_macos "perl" end + + f[:no_deps] = formula "foo" do + url "https://brew.sh/foo-1.0.tgz" + end + + f end before do @@ -31,10 +44,23 @@ describe Language::Perl::Shebang do after { file.unlink } describe "#detected_perl_shebang" do - it "can be used to replace Perl shebangs" do + it "can be used to replace Perl shebangs when depends_on \"perl\" is used" do allow(Formulary).to receive(:factory) - allow(Formulary).to receive(:factory).with(perl_f.name).and_return(perl_f) - Utils::Shebang.rewrite_shebang described_class.detected_perl_shebang(f), file.path + allow(Formulary).to receive(:factory).with(f[:perl].name).and_return(f[:perl]) + Utils::Shebang.rewrite_shebang described_class.detected_perl_shebang(f[:depends_on]), file.path + + expect(File.read(file)).to eq <<~EOS + #!#{HOMEBREW_PREFIX}/opt/perl/bin/perl + a + b + c + EOS + end + + it "can be used to replace Perl shebangs when uses_from_macos \"perl\" is used" do + allow(Formulary).to receive(:factory) + allow(Formulary).to receive(:factory).with(f[:perl].name).and_return(f[:perl]) + Utils::Shebang.rewrite_shebang described_class.detected_perl_shebang(f[:uses_from_macos]), file.path expected_shebang = if OS.mac? "/usr/bin/perl#{MacOS.preferred_perl_version}" @@ -49,5 +75,10 @@ describe Language::Perl::Shebang do c EOS end + + it "errors if formula doesn't depend on perl" do + expect { Utils::Shebang.rewrite_shebang described_class.detected_perl_shebang(f[:no_deps]), file.path } + .to raise_error(ShebangDetectionError, "Cannot detect Perl shebang: formula does not depend on Perl.") + end end end