From c016aedaab3a5b10207eb05d6b53199e6fcdb761 Mon Sep 17 00:00:00 2001 From: Martin Afanasjew Date: Mon, 8 Aug 2016 15:04:21 +0200 Subject: [PATCH] tests: check all our Bash code for syntax errors Additionally include our bootstrap code in `brew.sh`, Bash utilities in `utils.sh` and `utils/*.sh`, `superenv` shims, and the Bash completion. Closes #654. Signed-off-by: Martin Afanasjew --- Library/Homebrew/test/test_bash.rb | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/Library/Homebrew/test/test_bash.rb b/Library/Homebrew/test/test_bash.rb index 7c312f62a3..e965aaf218 100644 --- a/Library/Homebrew/test/test_bash.rb +++ b/Library/Homebrew/test/test_bash.rb @@ -1,20 +1,34 @@ require "testing_env" class BashTests < Homebrew::TestCase - def assert_valid_bash_syntax(files) - output = Utils.popen_read("/bin/bash -n #{files} 2>&1") + def assert_valid_bash_syntax(file) + 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" + assert_valid_bash_syntax HOMEBREW_LIBRARY_PATH.parent.parent/"bin/brew" end - def test_bash_cmds - %w[cmd dev-cmd].each do |dir| - Dir["#{HOMEBREW_LIBRARY_PATH}/#{dir}/*.sh"].each do |cmd| - assert_valid_bash_syntax cmd - 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/"etc/bash_completion.d/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