capistrano-edge 2.5.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (109) hide show
  1. data/CHANGELOG.rdoc +770 -0
  2. data/Manifest +104 -0
  3. data/README.rdoc +66 -0
  4. data/Rakefile +35 -0
  5. data/bin/cap +4 -0
  6. data/bin/capify +95 -0
  7. data/capistrano.gemspec +51 -0
  8. data/examples/sample.rb +14 -0
  9. data/lib/capistrano.rb +2 -0
  10. data/lib/capistrano/callback.rb +45 -0
  11. data/lib/capistrano/cli.rb +47 -0
  12. data/lib/capistrano/cli/execute.rb +84 -0
  13. data/lib/capistrano/cli/help.rb +125 -0
  14. data/lib/capistrano/cli/help.txt +75 -0
  15. data/lib/capistrano/cli/options.rb +224 -0
  16. data/lib/capistrano/cli/ui.rb +40 -0
  17. data/lib/capistrano/command.rb +283 -0
  18. data/lib/capistrano/configuration.rb +43 -0
  19. data/lib/capistrano/configuration/actions/file_transfer.rb +47 -0
  20. data/lib/capistrano/configuration/actions/inspect.rb +46 -0
  21. data/lib/capistrano/configuration/actions/invocation.rb +293 -0
  22. data/lib/capistrano/configuration/callbacks.rb +148 -0
  23. data/lib/capistrano/configuration/connections.rb +204 -0
  24. data/lib/capistrano/configuration/execution.rb +143 -0
  25. data/lib/capistrano/configuration/loading.rb +197 -0
  26. data/lib/capistrano/configuration/namespaces.rb +197 -0
  27. data/lib/capistrano/configuration/roles.rb +73 -0
  28. data/lib/capistrano/configuration/servers.rb +85 -0
  29. data/lib/capistrano/configuration/variables.rb +127 -0
  30. data/lib/capistrano/errors.rb +15 -0
  31. data/lib/capistrano/extensions.rb +57 -0
  32. data/lib/capistrano/logger.rb +59 -0
  33. data/lib/capistrano/processable.rb +53 -0
  34. data/lib/capistrano/recipes/compat.rb +32 -0
  35. data/lib/capistrano/recipes/deploy.rb +438 -0
  36. data/lib/capistrano/recipes/deploy/dependencies.rb +44 -0
  37. data/lib/capistrano/recipes/deploy/local_dependency.rb +54 -0
  38. data/lib/capistrano/recipes/deploy/remote_dependency.rb +105 -0
  39. data/lib/capistrano/recipes/deploy/scm.rb +19 -0
  40. data/lib/capistrano/recipes/deploy/scm/accurev.rb +169 -0
  41. data/lib/capistrano/recipes/deploy/scm/base.rb +196 -0
  42. data/lib/capistrano/recipes/deploy/scm/bzr.rb +83 -0
  43. data/lib/capistrano/recipes/deploy/scm/cvs.rb +152 -0
  44. data/lib/capistrano/recipes/deploy/scm/darcs.rb +85 -0
  45. data/lib/capistrano/recipes/deploy/scm/git.rb +274 -0
  46. data/lib/capistrano/recipes/deploy/scm/mercurial.rb +137 -0
  47. data/lib/capistrano/recipes/deploy/scm/none.rb +44 -0
  48. data/lib/capistrano/recipes/deploy/scm/perforce.rb +138 -0
  49. data/lib/capistrano/recipes/deploy/scm/subversion.rb +121 -0
  50. data/lib/capistrano/recipes/deploy/strategy.rb +19 -0
  51. data/lib/capistrano/recipes/deploy/strategy/base.rb +79 -0
  52. data/lib/capistrano/recipes/deploy/strategy/checkout.rb +20 -0
  53. data/lib/capistrano/recipes/deploy/strategy/copy.rb +210 -0
  54. data/lib/capistrano/recipes/deploy/strategy/export.rb +20 -0
  55. data/lib/capistrano/recipes/deploy/strategy/remote.rb +52 -0
  56. data/lib/capistrano/recipes/deploy/strategy/remote_cache.rb +56 -0
  57. data/lib/capistrano/recipes/deploy/templates/maintenance.rhtml +53 -0
  58. data/lib/capistrano/recipes/ext/rails-database-migrations.rb +50 -0
  59. data/lib/capistrano/recipes/ext/web-disable-enable.rb +40 -0
  60. data/lib/capistrano/recipes/standard.rb +37 -0
  61. data/lib/capistrano/recipes/templates/maintenance.rhtml +53 -0
  62. data/lib/capistrano/recipes/upgrade.rb +33 -0
  63. data/lib/capistrano/role.rb +102 -0
  64. data/lib/capistrano/server_definition.rb +56 -0
  65. data/lib/capistrano/shell.rb +260 -0
  66. data/lib/capistrano/ssh.rb +99 -0
  67. data/lib/capistrano/task_definition.rb +70 -0
  68. data/lib/capistrano/transfer.rb +216 -0
  69. data/lib/capistrano/version.rb +18 -0
  70. data/setup.rb +1346 -0
  71. data/test/cli/execute_test.rb +132 -0
  72. data/test/cli/help_test.rb +165 -0
  73. data/test/cli/options_test.rb +317 -0
  74. data/test/cli/ui_test.rb +28 -0
  75. data/test/cli_test.rb +17 -0
  76. data/test/command_test.rb +286 -0
  77. data/test/configuration/actions/file_transfer_test.rb +61 -0
  78. data/test/configuration/actions/inspect_test.rb +65 -0
  79. data/test/configuration/actions/invocation_test.rb +224 -0
  80. data/test/configuration/callbacks_test.rb +220 -0
  81. data/test/configuration/connections_test.rb +349 -0
  82. data/test/configuration/execution_test.rb +175 -0
  83. data/test/configuration/loading_test.rb +132 -0
  84. data/test/configuration/namespace_dsl_test.rb +311 -0
  85. data/test/configuration/roles_test.rb +144 -0
  86. data/test/configuration/servers_test.rb +121 -0
  87. data/test/configuration/variables_test.rb +184 -0
  88. data/test/configuration_test.rb +88 -0
  89. data/test/deploy/local_dependency_test.rb +76 -0
  90. data/test/deploy/remote_dependency_test.rb +114 -0
  91. data/test/deploy/scm/accurev_test.rb +23 -0
  92. data/test/deploy/scm/base_test.rb +55 -0
  93. data/test/deploy/scm/git_test.rb +184 -0
  94. data/test/deploy/scm/mercurial_test.rb +129 -0
  95. data/test/deploy/scm/none_test.rb +35 -0
  96. data/test/deploy/strategy/copy_test.rb +258 -0
  97. data/test/extensions_test.rb +69 -0
  98. data/test/fixtures/cli_integration.rb +5 -0
  99. data/test/fixtures/config.rb +5 -0
  100. data/test/fixtures/custom.rb +3 -0
  101. data/test/logger_test.rb +123 -0
  102. data/test/role_test.rb +11 -0
  103. data/test/server_definition_test.rb +121 -0
  104. data/test/shell_test.rb +90 -0
  105. data/test/ssh_test.rb +104 -0
  106. data/test/task_definition_test.rb +101 -0
  107. data/test/transfer_test.rb +160 -0
  108. data/test/utils.rb +38 -0
  109. metadata +321 -0
@@ -0,0 +1,144 @@
1
+ require "utils"
2
+ require 'capistrano/configuration/roles'
3
+ require 'capistrano/server_definition'
4
+
5
+ class ConfigurationRolesTest < Test::Unit::TestCase
6
+ class MockConfig
7
+ attr_reader :original_initialize_called
8
+
9
+ def initialize
10
+ @original_initialize_called = true
11
+ end
12
+
13
+ include Capistrano::Configuration::Roles
14
+ end
15
+
16
+ def setup
17
+ @config = MockConfig.new
18
+ end
19
+
20
+ def test_initialize_should_initialize_roles_collection
21
+ assert @config.original_initialize_called
22
+ assert @config.roles.empty?
23
+ end
24
+
25
+ def test_role_should_allow_empty_list
26
+ @config.role :app
27
+ assert @config.roles.keys.include?(:app)
28
+ assert @config.roles[:app].empty?
29
+ end
30
+
31
+ def test_role_with_one_argument_should_add_to_roles_collection
32
+ @config.role :app, "app1.capistrano.test"
33
+ assert_equal [:app], @config.roles.keys
34
+ assert_role_equals %w(app1.capistrano.test)
35
+ end
36
+
37
+ def test_role_block_returning_single_string_is_added_to_roles_collection
38
+ @config.role :app do
39
+ 'app1.capistrano.test'
40
+ end
41
+ assert_role_equals %w(app1.capistrano.test)
42
+ end
43
+
44
+ def test_role_with_multiple_arguments_should_add_each_to_roles_collection
45
+ @config.role :app, "app1.capistrano.test", "app2.capistrano.test"
46
+ assert_equal [:app], @config.roles.keys
47
+ assert_role_equals %w(app1.capistrano.test app2.capistrano.test)
48
+ end
49
+
50
+ def test_role_with_block_and_strings_should_add_both_to_roles_collection
51
+ @config.role :app, 'app1.capistrano.test' do
52
+ 'app2.capistrano.test'
53
+ end
54
+ assert_role_equals %w(app1.capistrano.test app2.capistrano.test)
55
+ end
56
+
57
+ def test_role_block_returning_array_should_add_each_to_roles_collection
58
+ @config.role :app do
59
+ ['app1.capistrano.test', 'app2.capistrano.test']
60
+ end
61
+ assert_role_equals %w(app1.capistrano.test app2.capistrano.test)
62
+ end
63
+
64
+ def test_role_with_options_should_apply_options_to_each_argument
65
+ @config.role :app, "app1.capistrano.test", "app2.capistrano.test", :extra => :value
66
+ @config.roles[:app].each do |server|
67
+ assert_equal({:extra => :value}, server.options)
68
+ end
69
+ end
70
+
71
+ def test_role_with_options_should_apply_options_to_block_results
72
+ @config.role :app, :extra => :value do
73
+ ['app1.capistrano.test', 'app2.capistrano.test']
74
+ end
75
+ @config.roles[:app].each do |server|
76
+ assert_equal({:extra => :value}, server.options)
77
+ end
78
+ end
79
+
80
+ def test_options_should_apply_only_to_this_argument_set
81
+ @config.role :app, 'app1.capistrano.test', 'app2.capistrano.test' do
82
+ ['app3.capistrano.test', 'app4.capistrano.test']
83
+ end
84
+ @config.role :app, 'app5.capistrano.test', 'app6.capistrano.test', :extra => :value do
85
+ ['app7.capistrano.test', 'app8.capistrano.test']
86
+ end
87
+ @config.role :app, 'app9.capistrano.test'
88
+
89
+ option_hosts = ['app5.capistrano.test', 'app6.capistrano.test', 'app7.capistrano.test', 'app8.capistrano.test']
90
+ @config.roles[:app].each do |server|
91
+ if (option_hosts.include? server.host)
92
+ assert_equal({:extra => :value}, server.options)
93
+ else
94
+ assert_not_equal({:extra => :value}, server.options)
95
+ end
96
+ end
97
+ end
98
+
99
+ # Here, the source should be more readable than the method name
100
+ def test_role_block_returns_options_hash_is_merged_with_role_options_argument
101
+ @config.role :app, :first => :one, :second => :two do
102
+ ['app1.capistrano.test', 'app2.capistrano.test', {:second => :please, :third => :three}]
103
+ end
104
+ @config.roles[:app].each do |server|
105
+ assert_equal({:first => :one, :second => :please, :third => :three}, server.options)
106
+ end
107
+ end
108
+
109
+ def test_role_block_can_override_role_options_argument
110
+ @config.role :app, :value => :wrong do
111
+ Capistrano::ServerDefinition.new('app.capistrano.test')
112
+ end
113
+ @config.roles[:app].servers
114
+ @config.roles[:app].servers.each do |server|
115
+ assert_not_equal({:value => :wrong}, server.options)
116
+ end
117
+ end
118
+
119
+ def test_role_block_can_return_nil
120
+ @config.role :app do
121
+ nil
122
+ end
123
+ assert_role_equals ([])
124
+ end
125
+
126
+ def test_role_block_can_return_empty_array
127
+ @config.role :app do
128
+ []
129
+ end
130
+ assert_role_equals ([])
131
+ end
132
+
133
+ def test_role_definitions_via_server_should_associate_server_with_roles
134
+ @config.server "www.capistrano.test", :web, :app
135
+ assert_equal %w(www.capistrano.test), @config.roles[:app].map { |s| s.host }
136
+ assert_equal %w(www.capistrano.test), @config.roles[:web].map { |s| s.host }
137
+ end
138
+
139
+ private
140
+
141
+ def assert_role_equals(list)
142
+ assert_equal list, @config.roles[:app].map { |s| s.host }
143
+ end
144
+ end
@@ -0,0 +1,121 @@
1
+ require "utils"
2
+ require 'capistrano/task_definition'
3
+ require 'capistrano/configuration/servers'
4
+
5
+ class ConfigurationServersTest < Test::Unit::TestCase
6
+ class MockConfig
7
+ attr_reader :roles
8
+
9
+ def initialize
10
+ @roles = {}
11
+ end
12
+
13
+ include Capistrano::Configuration::Servers
14
+ end
15
+
16
+ def setup
17
+ @config = MockConfig.new
18
+ role(@config, :app, "app1", :primary => true)
19
+ role(@config, :app, "app2", "app3")
20
+ role(@config, :web, "web1", "web2")
21
+ role(@config, :report, "app2", :no_deploy => true)
22
+ role(@config, :file, "file", :no_deploy => true)
23
+ end
24
+
25
+ def test_task_without_roles_should_apply_to_all_defined_hosts
26
+ task = new_task(:testing)
27
+ assert_equal %w(app1 app2 app3 web1 web2 file).sort, @config.find_servers_for_task(task).map { |s| s.host }.sort
28
+ end
29
+
30
+ def test_task_with_explicit_role_list_should_apply_only_to_those_roles
31
+ task = new_task(:testing, @config, :roles => %w(app web))
32
+ assert_equal %w(app1 app2 app3 web1 web2).sort, @config.find_servers_for_task(task).map { |s| s.host }.sort
33
+ end
34
+
35
+ def test_task_with_single_role_should_apply_only_to_that_role
36
+ task = new_task(:testing, @config, :roles => :web)
37
+ assert_equal %w(web1 web2).sort, @config.find_servers_for_task(task).map { |s| s.host }.sort
38
+ end
39
+
40
+ def test_task_with_unknown_role_should_raise_exception
41
+ task = new_task(:testing, @config, :roles => :bogus)
42
+ assert_raises(ArgumentError) do
43
+ @config.find_servers_for_task(task)
44
+ end
45
+ end
46
+
47
+ def test_task_with_hosts_option_should_apply_only_to_those_hosts
48
+ task = new_task(:testing, @config, :hosts => %w(foo bar))
49
+ assert_equal %w(foo bar).sort, @config.find_servers_for_task(task).map { |s| s.host }.sort
50
+ end
51
+
52
+ def test_task_with_single_hosts_option_should_apply_only_to_that_host
53
+ task = new_task(:testing, @config, :hosts => "foo")
54
+ assert_equal %w(foo).sort, @config.find_servers_for_task(task).map { |s| s.host }.sort
55
+ end
56
+
57
+ def test_task_with_roles_as_environment_variable_should_apply_only_to_that_role
58
+ ENV['ROLES'] = "app,file"
59
+ task = new_task(:testing)
60
+ assert_equal %w(app1 app2 app3 file).sort, @config.find_servers_for_task(task).map { |s| s.host }.sort
61
+ ensure
62
+ ENV.delete('ROLES')
63
+ end
64
+
65
+ def test_task_with_hosts_as_environment_variable_should_apply_only_to_those_hosts
66
+ ENV['HOSTS'] = "foo,bar"
67
+ task = new_task(:testing)
68
+ assert_equal %w(foo bar).sort, @config.find_servers_for_task(task).map { |s| s.host }.sort
69
+ ensure
70
+ ENV.delete('HOSTS')
71
+ end
72
+
73
+ def test_task_with_hosts_as_environment_variable_should_not_inspect_roles_at_all
74
+ ENV['HOSTS'] = "foo,bar"
75
+ task = new_task(:testing, @config, :roles => :bogus)
76
+ assert_equal %w(foo bar).sort, @config.find_servers_for_task(task).map { |s| s.host }.sort
77
+ ensure
78
+ ENV.delete('HOSTS')
79
+ end
80
+
81
+ def test_task_with_onlyhosts_environment_variable_should_apply_only_to_those_hosts
82
+ ENV['HOSTFILTER'] = "app1,web1"
83
+ task = new_task(:testing)
84
+ assert_equal %w(app1 web1).sort, @config.find_servers_for_task(task).map { |s| s.host }.sort
85
+ ensure
86
+ ENV.delete('HOSTFILTER')
87
+ end
88
+
89
+ def test_task_with_onlyhosts_environment_variable_should_filter_hosts_option
90
+ ENV['HOSTFILTER'] = "foo"
91
+ task = new_task(:testing, @config, :hosts => %w(foo bar))
92
+ assert_equal %w(foo).sort, @config.find_servers_for_task(task).map { |s| s.host }.sort
93
+ ensure
94
+ ENV.delete('HOSTFILTER')
95
+ end
96
+
97
+ def test_task_with_only_should_apply_only_to_matching_tasks
98
+ task = new_task(:testing, @config, :roles => :app, :only => { :primary => true })
99
+ assert_equal %w(app1), @config.find_servers_for_task(task).map { |s| s.host }
100
+ end
101
+
102
+ def test_task_with_except_should_apply_only_to_matching_tasks
103
+ task = new_task(:testing, @config, :except => { :no_deploy => true })
104
+ assert_equal %w(app1 app2 app3 web1 web2).sort, @config.find_servers_for_task(task).map { |s| s.host }.sort
105
+ end
106
+
107
+ def test_options_to_find_servers_for_task_should_override_options_in_task
108
+ task = new_task(:testing, @config, :roles => :web)
109
+ assert_equal %w(app1 app2 app3).sort, @config.find_servers_for_task(task, :roles => :app).map { |s| s.host }.sort
110
+ end
111
+
112
+ def test_find_servers_with_lambda_for_hosts_should_be_evaluated
113
+ assert_equal %w(foo), @config.find_servers(:hosts => lambda { "foo" }).map { |s| s.host }.sort
114
+ assert_equal %w(bar foo), @config.find_servers(:hosts => lambda { %w(foo bar) }).map { |s| s.host }.sort
115
+ end
116
+
117
+ def test_find_servers_with_lambda_for_roles_should_be_evaluated
118
+ assert_equal %w(app1 app2 app3), @config.find_servers(:roles => lambda { :app }).map { |s| s.host }.sort
119
+ assert_equal %w(app2 file), @config.find_servers(:roles => lambda { [:report, :file] }).map { |s| s.host }.sort
120
+ end
121
+ end
@@ -0,0 +1,184 @@
1
+ require "utils"
2
+ require 'capistrano/configuration/variables'
3
+
4
+ class ConfigurationVariablesTest < Test::Unit::TestCase
5
+ class MockConfig
6
+ attr_reader :original_initialize_called
7
+
8
+ def initialize
9
+ @original_initialize_called = true
10
+ end
11
+
12
+ include Capistrano::Configuration::Variables
13
+ end
14
+
15
+ def setup
16
+ MockConfig.any_instance.stubs(:logger).returns(stub_everything)
17
+ @config = MockConfig.new
18
+ end
19
+
20
+ def test_initialize_should_initialize_variables_hash
21
+ assert @config.original_initialize_called
22
+ assert_equal({:ssh_options => {}, :logger => @config.logger}, @config.variables)
23
+ end
24
+
25
+ def test_set_should_add_variable_to_hash
26
+ @config.set :sample, :value
27
+ assert_equal :value, @config.variables[:sample]
28
+ end
29
+
30
+ def test_set_should_convert_variable_name_to_symbol
31
+ @config.set "sample", :value
32
+ assert_equal :value, @config.variables[:sample]
33
+ end
34
+
35
+ def test_set_should_be_aliased_to_square_brackets
36
+ @config[:sample] = :value
37
+ assert_equal :value, @config.variables[:sample]
38
+ end
39
+
40
+ def test_variables_should_be_accessible_as_read_accessors
41
+ @config[:sample] = :value
42
+ assert_equal :value, @config.sample
43
+ end
44
+
45
+ def test_method_missing_should_raise_error_if_no_variable_matches
46
+ assert_raises(NoMethodError) do
47
+ @config.sample
48
+ end
49
+ end
50
+
51
+ def test_respond_to_should_look_for_variables
52
+ assert !@config.respond_to?(:sample)
53
+ @config[:sample] = :value
54
+ assert @config.respond_to?(:sample)
55
+ end
56
+
57
+ def test_respond_to_with_include_priv_paramter
58
+ assert !@config.respond_to?(:sample, true)
59
+ end
60
+
61
+ def test_set_should_require_value
62
+ assert_raises(ArgumentError) do
63
+ @config.set(:sample)
64
+ end
65
+ end
66
+
67
+ def test_set_should_allow_value_to_be_omitted_if_block_is_given
68
+ assert_nothing_raised do
69
+ @config.set(:sample) { :value }
70
+ end
71
+ assert_instance_of Proc, @config.variables[:sample]
72
+ end
73
+
74
+ def test_set_should_not_allow_multiple_values
75
+ assert_raises(ArgumentError) do
76
+ @config.set(:sample, :value, :another)
77
+ end
78
+ end
79
+
80
+ def test_set_should_not_allow_both_a_value_and_a_block
81
+ assert_raises(ArgumentError) do
82
+ @config.set(:sample, :value) { :block }
83
+ end
84
+ end
85
+
86
+ def test_set_should_not_allow_capitalized_variables
87
+ assert_raises(ArgumentError) do
88
+ @config.set :Sample, :value
89
+ end
90
+ end
91
+
92
+ def test_unset_should_remove_variable_from_hash
93
+ @config.set :sample, :value
94
+ assert @config.variables.key?(:sample)
95
+ @config.unset :sample
96
+ assert !@config.variables.key?(:sample)
97
+ end
98
+
99
+ def test_unset_should_clear_memory_of_original_proc
100
+ @config.set(:sample) { :value }
101
+ @config.fetch(:sample)
102
+ @config.unset(:sample)
103
+ assert_equal false, @config.reset!(:sample)
104
+ end
105
+
106
+ def test_exists_should_report_existance_of_variable_in_hash
107
+ assert !@config.exists?(:sample)
108
+ @config[:sample] = :value
109
+ assert @config.exists?(:sample)
110
+ end
111
+
112
+ def test_reset_should_do_nothing_if_variable_does_not_exist
113
+ assert_equal false, @config.reset!(:sample)
114
+ assert !@config.variables.key?(:sample)
115
+ end
116
+
117
+ def test_reset_should_do_nothing_if_variable_is_not_a_proc
118
+ @config.set(:sample, :value)
119
+ assert_equal false, @config.reset!(:sample)
120
+ assert_equal :value, @config.variables[:sample]
121
+ end
122
+
123
+ def test_reset_should_do_nothing_if_proc_variable_has_not_been_dereferenced
124
+ @config.set(:sample) { :value }
125
+ assert_equal false, @config.reset!(:sample)
126
+ assert_instance_of Proc, @config.variables[:sample]
127
+ end
128
+
129
+ def test_reset_should_restore_variable_to_original_proc_value
130
+ @config.set(:sample) { :value }
131
+ assert_instance_of Proc, @config.variables[:sample]
132
+ @config.fetch(:sample)
133
+ assert_instance_of Symbol, @config.variables[:sample]
134
+ assert @config.reset!(:sample)
135
+ assert_instance_of Proc, @config.variables[:sample]
136
+ end
137
+
138
+ def test_fetch_should_return_stored_non_proc_value
139
+ @config.set(:sample, :value)
140
+ assert_equal :value, @config.fetch(:sample)
141
+ end
142
+
143
+ def test_fetch_should_raise_index_error_if_variable_does_not_exist
144
+ assert_raises(IndexError) do
145
+ @config.fetch(:sample)
146
+ end
147
+ end
148
+
149
+ def test_fetch_should_return_default_if_variable_does_not_exist_and_default_is_given
150
+ assert_nothing_raised do
151
+ assert_equal :default_value, @config.fetch(:sample, :default_value)
152
+ end
153
+ end
154
+
155
+ def test_fetch_should_invoke_block_if_variable_does_not_exist_and_block_is_given
156
+ assert_nothing_raised do
157
+ assert_equal :default_value, @config.fetch(:sample) { :default_value }
158
+ end
159
+ end
160
+
161
+ def test_fetch_should_raise_argument_error_if_both_default_and_block_are_given
162
+ assert_raises(ArgumentError) do
163
+ @config.fetch(:sample, :default1) { :default2 }
164
+ end
165
+ end
166
+
167
+ def test_fetch_should_dereference_proc_values
168
+ @config.set(:sample) { :value }
169
+ assert_instance_of Proc, @config.variables[:sample]
170
+ assert_equal :value, @config.fetch(:sample)
171
+ assert_instance_of Symbol, @config.variables[:sample]
172
+ end
173
+
174
+ def test_square_brackets_should_alias_fetch
175
+ @config.set(:sample, :value)
176
+ assert_equal :value, @config[:sample]
177
+ end
178
+
179
+ def test_square_brackets_should_return_nil_for_non_existant_variable
180
+ assert_nothing_raised do
181
+ assert_nil @config[:sample]
182
+ end
183
+ end
184
+ end