aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarkus Reiter2017-02-11 16:53:11 +0100
committerMarkus Reiter2017-02-11 16:53:11 +0100
commitf531e63949683a7bf33ec96014901e3c6d5eaf61 (patch)
tree0bf42efd90347263a5c658629b442c4c98c64d40
parent46a1e2f22d866275da68d11b871883f34669705f (diff)
downloadbrew-f531e63949683a7bf33ec96014901e3c6d5eaf61.tar.bz2
Convert Bash test to spec.
-rw-r--r--Library/Homebrew/test/bash_spec.rb52
-rw-r--r--Library/Homebrew/test/bash_test.rb35
2 files changed, 52 insertions, 35 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
diff --git a/Library/Homebrew/test/bash_test.rb b/Library/Homebrew/test/bash_test.rb
deleted file mode 100644
index 671ab5ec8..000000000
--- a/Library/Homebrew/test/bash_test.rb
+++ /dev/null
@@ -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