Convert Bash test to spec.
This commit is contained in:
		
							parent
							
								
									46a1e2f22d
								
							
						
					
					
						commit
						f531e63949
					
				
							
								
								
									
										52
									
								
								Library/Homebrew/test/bash_spec.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								Library/Homebrew/test/bash_spec.rb
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,52 @@
 | 
			
		||||
require "open3"
 | 
			
		||||
 | 
			
		||||
RSpec::Matchers.define :have_valid_bash_syntax do
 | 
			
		||||
  match do |file|
 | 
			
		||||
    stdout, stderr, status = Open3.capture3("/bin/bash", "-n", file)
 | 
			
		||||
 | 
			
		||||
    @actual = [file, stderr]
 | 
			
		||||
 | 
			
		||||
    stdout.empty? && status.success?
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  failure_message do |(file, stderr)|
 | 
			
		||||
    "expected that #{file} is a valid Bash file:\n#{stderr}"
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
describe "Bash" do
 | 
			
		||||
  context "brew" do
 | 
			
		||||
    subject { HOMEBREW_LIBRARY_PATH.parent.parent/"bin/brew" }
 | 
			
		||||
    it { is_expected.to have_valid_bash_syntax }
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  context "every `.sh` file" do
 | 
			
		||||
    it "has valid bash syntax" do
 | 
			
		||||
      Pathname.glob("#{HOMEBREW_LIBRARY_PATH}/**/*.sh").each do |path|
 | 
			
		||||
        relative_path = path.relative_path_from(HOMEBREW_LIBRARY_PATH)
 | 
			
		||||
        next if relative_path.to_s.start_with?("shims/", "test/", "vendor/")
 | 
			
		||||
 | 
			
		||||
        expect(path).to have_valid_bash_syntax
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  context "Bash completion" do
 | 
			
		||||
    subject { HOMEBREW_LIBRARY_PATH.parent.parent/"completions/bash/brew" }
 | 
			
		||||
    it { is_expected.to have_valid_bash_syntax }
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  context "every shim script" do
 | 
			
		||||
    it "has valid bash syntax" do
 | 
			
		||||
      # These have no file extension, but can be identified by their shebang.
 | 
			
		||||
      (HOMEBREW_LIBRARY_PATH/"shims").find do |path|
 | 
			
		||||
        next if path.directory?
 | 
			
		||||
        next if path.symlink?
 | 
			
		||||
        next unless path.executable?
 | 
			
		||||
        next unless path.read(12) == "#!/bin/bash\n"
 | 
			
		||||
 | 
			
		||||
        expect(path).to have_valid_bash_syntax
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
@ -1,35 +0,0 @@
 | 
			
		||||
require "testing_env"
 | 
			
		||||
 | 
			
		||||
class BashTests < Homebrew::TestCase
 | 
			
		||||
  def assert_valid_bash_syntax(file)
 | 
			
		||||
    return unless file.exist?
 | 
			
		||||
    output = Utils.popen_read("/bin/bash -n #{file} 2>&1")
 | 
			
		||||
    assert $?.success?, output
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_bin_brew
 | 
			
		||||
    assert_valid_bash_syntax HOMEBREW_LIBRARY_PATH.parent.parent/"bin/brew"
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_bash_code
 | 
			
		||||
    Pathname.glob("#{HOMEBREW_LIBRARY_PATH}/**/*.sh").each do |pn|
 | 
			
		||||
      pn_relative = pn.relative_path_from(HOMEBREW_LIBRARY_PATH)
 | 
			
		||||
      next if pn_relative.to_s.start_with?("shims/", "test/", "vendor/")
 | 
			
		||||
      assert_valid_bash_syntax pn
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_bash_completion
 | 
			
		||||
    script = HOMEBREW_LIBRARY_PATH.parent.parent/"completions/bash/brew"
 | 
			
		||||
    assert_valid_bash_syntax script
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_bash_shims
 | 
			
		||||
    # These have no file extension, but can be identified by their shebang.
 | 
			
		||||
    (HOMEBREW_LIBRARY_PATH/"shims").find do |pn|
 | 
			
		||||
      next if pn.directory? || pn.symlink?
 | 
			
		||||
      next unless pn.executable? && pn.read(12) == "#!/bin/bash\n"
 | 
			
		||||
      assert_valid_bash_syntax pn
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user