aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/test/bash_spec.rb
diff options
context:
space:
mode:
authorMarkus Reiter2017-02-11 16:53:11 +0100
committerMarkus Reiter2017-02-11 16:53:11 +0100
commitf531e63949683a7bf33ec96014901e3c6d5eaf61 (patch)
tree0bf42efd90347263a5c658629b442c4c98c64d40 /Library/Homebrew/test/bash_spec.rb
parent46a1e2f22d866275da68d11b871883f34669705f (diff)
downloadbrew-f531e63949683a7bf33ec96014901e3c6d5eaf61.tar.bz2
Convert Bash test to spec.
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