brew/Library/Homebrew/test/utils/shell_spec.rb
2017-02-18 16:38:45 +01:00

94 lines
2.7 KiB
Ruby

require "utils/shell"
describe Utils::Shell do
describe "::shell_profile" do
it "returns ~/.bash_profile by default" do
ENV["SHELL"] = "/bin/another_shell"
expect(subject.shell_profile).to eq("~/.bash_profile")
end
it "returns ~/.bash_profile for Sh" do
ENV["SHELL"] = "/bin/another_shell"
expect(subject.shell_profile).to eq("~/.bash_profile")
end
it "returns ~/.bash_profile for Bash" do
ENV["SHELL"] = "/bin/bash"
expect(subject.shell_profile).to eq("~/.bash_profile")
end
it "returns ~/.zshrc for Zsh" do
ENV["SHELL"] = "/bin/zsh"
expect(subject.shell_profile).to eq("~/.zshrc")
end
it "returns ~/.kshrc for Ksh" do
ENV["SHELL"] = "/bin/ksh"
expect(subject.shell_profile).to eq("~/.kshrc")
end
end
describe "::path_to_shell" do
it "supports a raw command name" do
expect(subject.path_to_shell("bash")).to eq(:bash)
end
it "supports full paths" do
expect(subject.path_to_shell("/bin/bash")).to eq(:bash)
end
it "supports versions" do
expect(subject.path_to_shell("zsh-5.2")).to eq(:zsh)
end
it "strips newlines" do
expect(subject.path_to_shell("zsh-5.2\n")).to eq(:zsh)
end
it "returns nil when input is invalid" do
expect(subject.path_to_shell("")).to be nil
expect(subject.path_to_shell("@@@@@@")).to be nil
expect(subject.path_to_shell("invalid_shell-4.2")).to be nil
end
end
specify "::sh_quote" do
expect(subject.sh_quote("")).to eq("''")
expect(subject.sh_quote("\\")).to eq("\\\\")
expect(subject.sh_quote("\n")).to eq("'\n'")
expect(subject.sh_quote("$")).to eq("\\$")
expect(subject.sh_quote("word")).to eq("word")
end
specify "::csh_quote" do
expect(subject.csh_quote("")).to eq("''")
expect(subject.csh_quote("\\")).to eq("\\\\")
# note this test is different than for sh
expect(subject.csh_quote("\n")).to eq("'\\\n'")
expect(subject.csh_quote("$")).to eq("\\$")
expect(subject.csh_quote("word")).to eq("word")
end
describe "::prepend_path_in_shell_profile" do
let(:path) { "/my/path" }
it "supports Tcsh" do
ENV["SHELL"] = "/bin/tcsh"
expect(subject.prepend_path_in_shell_profile(path))
.to start_with("echo 'setenv PATH #{path}:$")
end
it "supports Bash" do
ENV["SHELL"] = "/bin/bash"
expect(subject.prepend_path_in_shell_profile(path))
.to start_with("echo 'export PATH=\"#{path}:$")
end
it "supports Fish" do
ENV["SHELL"] = "/usr/local/bin/fish"
expect(subject.prepend_path_in_shell_profile(path))
.to start_with("echo 'set -g fish_user_paths \"#{path}\" $fish_user_paths' >>")
end
end
end