/Library/Homebrew/test/test_ENV.rb
Ruby | 150 lines | 123 code | 25 blank | 2 comment | 0 complexity | 2c3d2c1e05842f2bff148293bf3907a9 MD5 | raw file
- require 'testing_env'
- require 'extend/ENV'
- class EnvironmentTests < Test::Unit::TestCase
- def setup
- @env = {}.extend(EnvActivation)
- @env.activate_extensions!
- end
- def test_switching_compilers
- @env.llvm
- @env.clang
- assert_nil @env['LD']
- assert_equal @env['OBJC'], @env['CC']
- end
- def test_with_build_environment_restores_env
- before = @env.dup
- @env.with_build_environment do
- @env['foo'] = 'bar'
- end
- assert_nil @env['foo']
- assert_equal before, @env
- end
- def test_with_build_environment_ensures_env_restored
- before = @env.dup
- begin
- @env.with_build_environment do
- @env['foo'] = 'bar'
- raise Exception
- end
- rescue Exception
- end
- assert_nil @env['foo']
- assert_equal before, @env
- end
- def test_with_build_environment_returns_block_value
- assert_equal 1, @env.with_build_environment { 1 }
- end
- def test_with_build_environment_does_not_mutate_interface
- expected = @env.methods
- @env.with_build_environment { assert_equal expected, @env.methods }
- assert_equal expected, @env.methods
- end
- def test_append_existing_key
- @env['foo'] = 'bar'
- @env.append 'foo', '1'
- assert_equal 'bar 1', @env['foo']
- end
- def test_append_existing_key_empty
- @env['foo'] = ''
- @env.append 'foo', '1'
- assert_equal '1', @env['foo']
- end
- def test_append_missing_key
- @env.append 'foo', '1'
- assert_equal '1', @env['foo']
- end
- def test_prepend_existing_key
- @env['foo'] = 'bar'
- @env.prepend 'foo', '1'
- assert_equal '1 bar', @env['foo']
- end
- def test_prepend_existing_key_empty
- @env['foo'] = ''
- @env.prepend 'foo', '1'
- assert_equal '1', @env['foo']
- end
- def test_prepend_missing_key
- @env.prepend 'foo', '1'
- assert_equal '1', @env['foo']
- end
- # NOTE: this may be a wrong behavior; we should probably reject objects that
- # do not respond to #to_str. For now this documents existing behavior.
- def test_append_coerces_value_to_string
- @env.append 'foo', 42
- assert_equal '42', @env['foo']
- end
- def test_prepend_coerces_value_to_string
- @env.prepend 'foo', 42
- assert_equal '42', @env['foo']
- end
- def test_append_path
- @env.append_path 'FOO', '/usr/bin'
- assert_equal '/usr/bin', @env['FOO']
- @env.append_path 'FOO', '/bin'
- assert_equal "/usr/bin#{File::PATH_SEPARATOR}/bin", @env['FOO']
- end
- def test_prepend_path
- @env.prepend_path 'FOO', '/usr/bin'
- assert_equal '/usr/bin', @env['FOO']
- @env.prepend_path 'FOO', '/bin'
- assert_equal "/bin#{File::PATH_SEPARATOR}/usr/bin", @env['FOO']
- end
- end
- module SharedEnvTests
- def test_switching_compilers_updates_compiler
- [:clang, :llvm, :gcc, :gcc_4_0].each do |compiler|
- @env.send(compiler)
- assert_equal compiler, @env.compiler
- end
- end
- end
- class StdenvTests < Test::Unit::TestCase
- include SharedEnvTests
- def setup
- @env = {}.extend(Stdenv)
- end
- end
- class SuperenvTests < Test::Unit::TestCase
- include SharedEnvTests
- attr_reader :env, :bin
- def setup
- @env = {}.extend(Superenv)
- @bin = HOMEBREW_REPOSITORY/"Library/ENV/#{MacOS::Xcode.version}"
- bin.mkpath
- end
- def test_bin
- assert_equal bin, Superenv.bin
- end
- def test_initializes_deps
- assert_equal [], env.deps
- assert_equal [], env.keg_only_deps
- end
- def teardown
- bin.rmtree
- end
- end