2007-02-28 14:13:13 -05:00
|
|
|
require "#{File.dirname(__FILE__)}/../utils"
|
2007-02-26 18:59:33 -05:00
|
|
|
require 'capistrano/configuration/variables'
|
|
|
|
|
|
|
|
class ConfigurationVariablesTest < Test::Unit::TestCase
|
|
|
|
class MockConfig
|
2007-02-28 14:13:13 -05:00
|
|
|
attr_reader :original_initialize_called
|
|
|
|
|
|
|
|
def initialize
|
|
|
|
@original_initialize_called = true
|
|
|
|
end
|
|
|
|
|
2007-02-26 18:59:33 -05:00
|
|
|
include Capistrano::Configuration::Variables
|
|
|
|
end
|
|
|
|
|
|
|
|
def setup
|
2007-03-04 13:19:26 -05:00
|
|
|
MockConfig.any_instance.stubs(:logger).returns(stub_everything)
|
2007-02-26 18:59:33 -05:00
|
|
|
@config = MockConfig.new
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_initialize_should_initialize_variables_hash
|
2007-02-28 14:13:13 -05:00
|
|
|
assert @config.original_initialize_called
|
2007-03-04 13:19:26 -05:00
|
|
|
assert_equal({:ssh_options => {}, :logger => @config.logger}, @config.variables)
|
2007-02-26 18:59:33 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
def test_set_should_add_variable_to_hash
|
|
|
|
@config.set :sample, :value
|
|
|
|
assert_equal :value, @config.variables[:sample]
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_set_should_convert_variable_name_to_symbol
|
|
|
|
@config.set "sample", :value
|
|
|
|
assert_equal :value, @config.variables[:sample]
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_set_should_be_aliased_to_square_brackets
|
|
|
|
@config[:sample] = :value
|
|
|
|
assert_equal :value, @config.variables[:sample]
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_variables_should_be_accessible_as_read_accessors
|
|
|
|
@config[:sample] = :value
|
|
|
|
assert_equal :value, @config.sample
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_method_missing_should_raise_error_if_no_variable_matches
|
|
|
|
assert_raises(NoMethodError) do
|
|
|
|
@config.sample
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_respond_to_should_look_for_variables
|
|
|
|
assert !@config.respond_to?(:sample)
|
|
|
|
@config[:sample] = :value
|
|
|
|
assert @config.respond_to?(:sample)
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_set_should_require_value
|
|
|
|
assert_raises(ArgumentError) do
|
|
|
|
@config.set(:sample)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_set_should_allow_value_to_be_omitted_if_block_is_given
|
|
|
|
assert_nothing_raised do
|
|
|
|
@config.set(:sample) { :value }
|
|
|
|
end
|
|
|
|
assert_instance_of Proc, @config.variables[:sample]
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_set_should_not_allow_multiple_values
|
|
|
|
assert_raises(ArgumentError) do
|
|
|
|
@config.set(:sample, :value, :another)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_set_should_not_allow_both_a_value_and_a_block
|
|
|
|
assert_raises(ArgumentError) do
|
|
|
|
@config.set(:sample, :value) { :block }
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_set_should_not_allow_capitalized_variables
|
|
|
|
assert_raises(ArgumentError) do
|
|
|
|
@config.set :Sample, :value
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_unset_should_remove_variable_from_hash
|
|
|
|
@config.set :sample, :value
|
|
|
|
assert @config.variables.key?(:sample)
|
|
|
|
@config.unset :sample
|
|
|
|
assert !@config.variables.key?(:sample)
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_unset_should_clear_memory_of_original_proc
|
|
|
|
@config.set(:sample) { :value }
|
|
|
|
@config.fetch(:sample)
|
|
|
|
@config.unset(:sample)
|
|
|
|
assert_equal false, @config.reset!(:sample)
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_exists_should_report_existance_of_variable_in_hash
|
|
|
|
assert !@config.exists?(:sample)
|
|
|
|
@config[:sample] = :value
|
|
|
|
assert @config.exists?(:sample)
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_reset_should_do_nothing_if_variable_does_not_exist
|
|
|
|
assert_equal false, @config.reset!(:sample)
|
|
|
|
assert !@config.variables.key?(:sample)
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_reset_should_do_nothing_if_variable_is_not_a_proc
|
|
|
|
@config.set(:sample, :value)
|
|
|
|
assert_equal false, @config.reset!(:sample)
|
|
|
|
assert_equal :value, @config.variables[:sample]
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_reset_should_do_nothing_if_proc_variable_has_not_been_dereferenced
|
|
|
|
@config.set(:sample) { :value }
|
|
|
|
assert_equal false, @config.reset!(:sample)
|
|
|
|
assert_instance_of Proc, @config.variables[:sample]
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_reset_should_restore_variable_to_original_proc_value
|
|
|
|
@config.set(:sample) { :value }
|
|
|
|
assert_instance_of Proc, @config.variables[:sample]
|
|
|
|
@config.fetch(:sample)
|
|
|
|
assert_instance_of Symbol, @config.variables[:sample]
|
|
|
|
assert @config.reset!(:sample)
|
|
|
|
assert_instance_of Proc, @config.variables[:sample]
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_fetch_should_return_stored_non_proc_value
|
|
|
|
@config.set(:sample, :value)
|
|
|
|
assert_equal :value, @config.fetch(:sample)
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_fetch_should_raise_index_error_if_variable_does_not_exist
|
|
|
|
assert_raises(IndexError) do
|
|
|
|
@config.fetch(:sample)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_fetch_should_return_default_if_variable_does_not_exist_and_default_is_given
|
|
|
|
assert_nothing_raised do
|
|
|
|
assert_equal :default_value, @config.fetch(:sample, :default_value)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_fetch_should_invoke_block_if_variable_does_not_exist_and_block_is_given
|
|
|
|
assert_nothing_raised do
|
|
|
|
assert_equal :default_value, @config.fetch(:sample) { :default_value }
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_fetch_should_raise_argument_error_if_both_default_and_block_are_given
|
|
|
|
assert_raises(ArgumentError) do
|
|
|
|
@config.fetch(:sample, :default1) { :default2 }
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_fetch_should_dereference_proc_values
|
|
|
|
@config.set(:sample) { :value }
|
|
|
|
assert_instance_of Proc, @config.variables[:sample]
|
|
|
|
assert_equal :value, @config.fetch(:sample)
|
|
|
|
assert_instance_of Symbol, @config.variables[:sample]
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_square_brackets_should_alias_fetch
|
|
|
|
@config.set(:sample, :value)
|
|
|
|
assert_equal :value, @config[:sample]
|
|
|
|
end
|
|
|
|
|
|
|
|
def test_square_brackets_should_return_nil_for_non_existant_variable
|
|
|
|
assert_nothing_raised do
|
|
|
|
assert_nil @config[:sample]
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|