vagrant/test/unit/support/shared/base_context.rb

60 lines
1.5 KiB
Ruby

require "tempfile"
require "unit/support/isolated_environment"
shared_context "unit" do
before(:each) do
# Create a thing to store our temporary files so that they aren't
# unlinked right away.
@_temp_files = []
end
# This creates an isolated environment so that Vagrant doesn't
# muck around with your real system during unit tests.
#
# The returned isolated environment has a variety of helper
# methods on it to easily create files, Vagrantfiles, boxes,
# etc.
def isolated_environment
env = Unit::IsolatedEnvironment.new
yield env if block_given?
env
end
# This helper creates a temporary file and returns a Pathname
# object pointed to it.
def temporary_file(contents=nil)
f = Tempfile.new("vagrant-unit")
if contents
f.write(contents)
f.flush
end
# Store the tempfile in an instance variable so that it is not
# garbage collected, so that the tempfile is not unlinked.
@_temp_files << f
return Pathname.new(f.path)
end
# This helper provides temporary environmental variable changes.
def with_temp_env(environment)
# Build up the new environment, preserving the old values so we
# can replace them back in later.
old_env = {}
environment.each do |key, value|
old_env[key] = ENV[key]
ENV[key] = value
end
# Call the block, returning its return value
return yield
ensure
# Reset the environment no matter what
old_env.each do |key, value|
ENV[key] = value
end
end
end