92 lines
2.5 KiB
Ruby
92 lines
2.5 KiB
Ruby
require "spec_helper"
|
|
|
|
describe "Bundler.with_env helpers" do
|
|
|
|
shared_examples_for "Bundler.with_*_env" do
|
|
it "should reset and restore the environment" do
|
|
gem_path = ENV['GEM_PATH']
|
|
|
|
Bundler.with_clean_env do
|
|
expect(`echo $GEM_PATH`.strip).not_to eq(gem_path)
|
|
end
|
|
|
|
expect(ENV['GEM_PATH']).to eq(gem_path)
|
|
end
|
|
end
|
|
|
|
around do |example|
|
|
env = Bundler::ORIGINAL_ENV.dup
|
|
Bundler::ORIGINAL_ENV['BUNDLE_PATH'] = "./Gemfile"
|
|
example.run
|
|
Bundler::ORIGINAL_ENV.replace env
|
|
end
|
|
|
|
describe "Bundler.with_clean_env" do
|
|
|
|
it_should_behave_like "Bundler.with_*_env"
|
|
|
|
it "should keep the original GEM_PATH even in sub processes" do
|
|
gemfile ""
|
|
bundle "install --path vendor/bundle"
|
|
|
|
code = "Bundler.with_clean_env do;" +
|
|
" print ENV['GEM_PATH'] != '';" +
|
|
"end"
|
|
|
|
result = bundle "exec ruby -e #{code.inspect}"
|
|
expect(result).to eq("true")
|
|
end
|
|
|
|
it "should not pass any bundler environment variables" do
|
|
Bundler.with_clean_env do
|
|
expect(`echo $BUNDLE_PATH`.strip).not_to eq('./Gemfile')
|
|
end
|
|
end
|
|
|
|
it "should not pass RUBYOPT changes" do
|
|
lib_path = File.expand_path('../../../lib', __FILE__)
|
|
Bundler::ORIGINAL_ENV['RUBYOPT'] = " -I#{lib_path} -rbundler/setup"
|
|
|
|
Bundler.with_clean_env do
|
|
expect(`echo $RUBYOPT`.strip).not_to include '-rbundler/setup'
|
|
expect(`echo $RUBYOPT`.strip).not_to include "-I#{lib_path}"
|
|
end
|
|
|
|
expect(Bundler::ORIGINAL_ENV['RUBYOPT']).to eq(" -I#{lib_path} -rbundler/setup")
|
|
end
|
|
|
|
it "should not change ORIGINAL_ENV" do
|
|
expect(Bundler::ORIGINAL_ENV['BUNDLE_PATH']).to eq('./Gemfile')
|
|
end
|
|
|
|
end
|
|
|
|
describe "Bundler.with_original_env" do
|
|
|
|
it_should_behave_like "Bundler.with_*_env"
|
|
|
|
it "should pass bundler environment variables set before Bundler was run" do
|
|
Bundler.with_original_env do
|
|
expect(`echo $BUNDLE_PATH`.strip).to eq('./Gemfile')
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "Bundler.clean_system" do
|
|
it "runs system inside with_clean_env" do
|
|
Bundler.clean_system(%{echo 'if [ "$BUNDLE_PATH" = "" ]; then exit 42; else exit 1; fi' | /bin/sh})
|
|
expect($?.exitstatus).to eq(42)
|
|
end
|
|
end
|
|
|
|
describe "Bundler.clean_exec" do
|
|
it "runs exec inside with_clean_env" do
|
|
pid = Kernel.fork do
|
|
Bundler.clean_exec(%{echo 'if [ "$BUNDLE_PATH" = "" ]; then exit 42; else exit 1; fi' | /bin/sh})
|
|
end
|
|
Process.wait(pid)
|
|
expect($?.exitstatus).to eq(42)
|
|
end
|
|
end
|
|
end
|