aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/test/bash_spec.rb
diff options
context:
space:
mode:
authorMarkus Reiter2017-02-11 18:22:06 +0100
committerGitHub2017-02-11 18:22:06 +0100
commitcf18a999f1b6b0d8932260ed1ff9ede30c338515 (patch)
tree46af83f81f85494fbe13a44126fb96ba99881ed5 /Library/Homebrew/test/bash_spec.rb
parentfa9a2b1a3885046d59b5eea847506e5ec5de1c4e (diff)
parent7be5a6a3d2cdb68870a37bdaa2d0c5cdec20c70b (diff)
downloadbrew-cf18a999f1b6b0d8932260ed1ff9ede30c338515.tar.bz2
Merge pull request #1984 from reitermarkus/brew-tests-rspec
Add RSpec support to `brew tests`.
Diffstat (limited to 'Library/Homebrew/test/bash_spec.rb')
-rw-r--r--Library/Homebrew/test/bash_spec.rb52
1 files changed, 52 insertions, 0 deletions
diff --git a/Library/Homebrew/test/bash_spec.rb b/Library/Homebrew/test/bash_spec.rb
new file mode 100644
index 000000000..1b0f15066
--- /dev/null
+++ b/Library/Homebrew/test/bash_spec.rb
@@ -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