fotonauts-capistrano 2.5.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. data/CHANGELOG.rdoc +728 -0
  2. data/Manifest +104 -0
  3. data/README.rdoc +66 -0
  4. data/Rakefile +34 -0
  5. data/bin/cap +4 -0
  6. data/bin/capify +78 -0
  7. data/capistrano.gemspec +49 -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 +118 -0
  14. data/lib/capistrano/cli/help.txt +62 -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 +193 -0
  22. data/lib/capistrano/configuration/callbacks.rb +148 -0
  23. data/lib/capistrano/configuration/connections.rb +196 -0
  24. data/lib/capistrano/configuration/execution.rb +132 -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 +65 -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 +555 -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 +271 -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 +133 -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/standard.rb +37 -0
  59. data/lib/capistrano/recipes/templates/maintenance.rhtml +53 -0
  60. data/lib/capistrano/recipes/upgrade.rb +33 -0
  61. data/lib/capistrano/role.rb +102 -0
  62. data/lib/capistrano/server_definition.rb +56 -0
  63. data/lib/capistrano/shell.rb +260 -0
  64. data/lib/capistrano/ssh.rb +79 -0
  65. data/lib/capistrano/task_definition.rb +70 -0
  66. data/lib/capistrano/transfer.rb +216 -0
  67. data/lib/capistrano/version.rb +18 -0
  68. data/setup.rb +1346 -0
  69. data/test/cli/execute_test.rb +132 -0
  70. data/test/cli/help_test.rb +165 -0
  71. data/test/cli/options_test.rb +317 -0
  72. data/test/cli/ui_test.rb +28 -0
  73. data/test/cli_test.rb +17 -0
  74. data/test/command_test.rb +286 -0
  75. data/test/configuration/actions/file_transfer_test.rb +61 -0
  76. data/test/configuration/actions/inspect_test.rb +65 -0
  77. data/test/configuration/actions/invocation_test.rb +210 -0
  78. data/test/configuration/callbacks_test.rb +220 -0
  79. data/test/configuration/connections_test.rb +348 -0
  80. data/test/configuration/execution_test.rb +175 -0
  81. data/test/configuration/loading_test.rb +132 -0
  82. data/test/configuration/namespace_dsl_test.rb +305 -0
  83. data/test/configuration/roles_test.rb +143 -0
  84. data/test/configuration/servers_test.rb +121 -0
  85. data/test/configuration/variables_test.rb +180 -0
  86. data/test/configuration_test.rb +88 -0
  87. data/test/deploy/local_dependency_test.rb +76 -0
  88. data/test/deploy/remote_dependency_test.rb +114 -0
  89. data/test/deploy/scm/accurev_test.rb +23 -0
  90. data/test/deploy/scm/base_test.rb +55 -0
  91. data/test/deploy/scm/git_test.rb +159 -0
  92. data/test/deploy/scm/mercurial_test.rb +129 -0
  93. data/test/deploy/scm/none_test.rb +35 -0
  94. data/test/deploy/strategy/copy_test.rb +258 -0
  95. data/test/extensions_test.rb +69 -0
  96. data/test/fixtures/cli_integration.rb +5 -0
  97. data/test/fixtures/config.rb +5 -0
  98. data/test/fixtures/custom.rb +3 -0
  99. data/test/logger_test.rb +123 -0
  100. data/test/role_test.rb +11 -0
  101. data/test/server_definition_test.rb +121 -0
  102. data/test/shell_test.rb +90 -0
  103. data/test/ssh_test.rb +102 -0
  104. data/test/task_definition_test.rb +101 -0
  105. data/test/transfer_test.rb +160 -0
  106. data/test/utils.rb +38 -0
  107. metadata +310 -0
@@ -0,0 +1,143 @@
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[:app].empty?
28
+ end
29
+
30
+ def test_role_with_one_argument_should_add_to_roles_collection
31
+ @config.role :app, "app1.capistrano.test"
32
+ assert_equal [:app], @config.roles.keys
33
+ assert_role_equals %w(app1.capistrano.test)
34
+ end
35
+
36
+ def test_role_block_returning_single_string_is_added_to_roles_collection
37
+ @config.role :app do
38
+ 'app1.capistrano.test'
39
+ end
40
+ assert_role_equals %w(app1.capistrano.test)
41
+ end
42
+
43
+ def test_role_with_multiple_arguments_should_add_each_to_roles_collection
44
+ @config.role :app, "app1.capistrano.test", "app2.capistrano.test"
45
+ assert_equal [:app], @config.roles.keys
46
+ assert_role_equals %w(app1.capistrano.test app2.capistrano.test)
47
+ end
48
+
49
+ def test_role_with_block_and_strings_should_add_both_to_roles_collection
50
+ @config.role :app, 'app1.capistrano.test' do
51
+ 'app2.capistrano.test'
52
+ end
53
+ assert_role_equals %w(app1.capistrano.test app2.capistrano.test)
54
+ end
55
+
56
+ def test_role_block_returning_array_should_add_each_to_roles_collection
57
+ @config.role :app do
58
+ ['app1.capistrano.test', 'app2.capistrano.test']
59
+ end
60
+ assert_role_equals %w(app1.capistrano.test app2.capistrano.test)
61
+ end
62
+
63
+ def test_role_with_options_should_apply_options_to_each_argument
64
+ @config.role :app, "app1.capistrano.test", "app2.capistrano.test", :extra => :value
65
+ @config.roles[:app].each do |server|
66
+ assert_equal({:extra => :value}, server.options)
67
+ end
68
+ end
69
+
70
+ def test_role_with_options_should_apply_options_to_block_results
71
+ @config.role :app, :extra => :value do
72
+ ['app1.capistrano.test', 'app2.capistrano.test']
73
+ end
74
+ @config.roles[:app].each do |server|
75
+ assert_equal({:extra => :value}, server.options)
76
+ end
77
+ end
78
+
79
+ def test_options_should_apply_only_to_this_argument_set
80
+ @config.role :app, 'app1.capistrano.test', 'app2.capistrano.test' do
81
+ ['app3.capistrano.test', 'app4.capistrano.test']
82
+ end
83
+ @config.role :app, 'app5.capistrano.test', 'app6.capistrano.test', :extra => :value do
84
+ ['app7.capistrano.test', 'app8.capistrano.test']
85
+ end
86
+ @config.role :app, 'app9.capistrano.test'
87
+
88
+ option_hosts = ['app5.capistrano.test', 'app6.capistrano.test', 'app7.capistrano.test', 'app8.capistrano.test']
89
+ @config.roles[:app].each do |server|
90
+ if (option_hosts.include? server.host)
91
+ assert_equal({:extra => :value}, server.options)
92
+ else
93
+ assert_not_equal({:extra => :value}, server.options)
94
+ end
95
+ end
96
+ end
97
+
98
+ # Here, the source should be more readable than the method name
99
+ def test_role_block_returns_options_hash_is_merged_with_role_options_argument
100
+ @config.role :app, :first => :one, :second => :two do
101
+ ['app1.capistrano.test', 'app2.capistrano.test', {:second => :please, :third => :three}]
102
+ end
103
+ @config.roles[:app].each do |server|
104
+ assert_equal({:first => :one, :second => :please, :third => :three}, server.options)
105
+ end
106
+ end
107
+
108
+ def test_role_block_can_override_role_options_argument
109
+ @config.role :app, :value => :wrong do
110
+ Capistrano::ServerDefinition.new('app.capistrano.test')
111
+ end
112
+ @config.roles[:app].servers
113
+ @config.roles[:app].servers.each do |server|
114
+ assert_not_equal({:value => :wrong}, server.options)
115
+ end
116
+ end
117
+
118
+ def test_role_block_can_return_nil
119
+ @config.role :app do
120
+ nil
121
+ end
122
+ assert_role_equals ([])
123
+ end
124
+
125
+ def test_role_block_can_return_empty_array
126
+ @config.role :app do
127
+ []
128
+ end
129
+ assert_role_equals ([])
130
+ end
131
+
132
+ def test_role_definitions_via_server_should_associate_server_with_roles
133
+ @config.server "www.capistrano.test", :web, :app
134
+ assert_equal %w(www.capistrano.test), @config.roles[:app].map { |s| s.host }
135
+ assert_equal %w(www.capistrano.test), @config.roles[:web].map { |s| s.host }
136
+ end
137
+
138
+ private
139
+
140
+ def assert_role_equals(list)
141
+ assert_equal list, @config.roles[:app].map { |s| s.host }
142
+ end
143
+ 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,180 @@
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_set_should_require_value
58
+ assert_raises(ArgumentError) do
59
+ @config.set(:sample)
60
+ end
61
+ end
62
+
63
+ def test_set_should_allow_value_to_be_omitted_if_block_is_given
64
+ assert_nothing_raised do
65
+ @config.set(:sample) { :value }
66
+ end
67
+ assert_instance_of Proc, @config.variables[:sample]
68
+ end
69
+
70
+ def test_set_should_not_allow_multiple_values
71
+ assert_raises(ArgumentError) do
72
+ @config.set(:sample, :value, :another)
73
+ end
74
+ end
75
+
76
+ def test_set_should_not_allow_both_a_value_and_a_block
77
+ assert_raises(ArgumentError) do
78
+ @config.set(:sample, :value) { :block }
79
+ end
80
+ end
81
+
82
+ def test_set_should_not_allow_capitalized_variables
83
+ assert_raises(ArgumentError) do
84
+ @config.set :Sample, :value
85
+ end
86
+ end
87
+
88
+ def test_unset_should_remove_variable_from_hash
89
+ @config.set :sample, :value
90
+ assert @config.variables.key?(:sample)
91
+ @config.unset :sample
92
+ assert !@config.variables.key?(:sample)
93
+ end
94
+
95
+ def test_unset_should_clear_memory_of_original_proc
96
+ @config.set(:sample) { :value }
97
+ @config.fetch(:sample)
98
+ @config.unset(:sample)
99
+ assert_equal false, @config.reset!(:sample)
100
+ end
101
+
102
+ def test_exists_should_report_existance_of_variable_in_hash
103
+ assert !@config.exists?(:sample)
104
+ @config[:sample] = :value
105
+ assert @config.exists?(:sample)
106
+ end
107
+
108
+ def test_reset_should_do_nothing_if_variable_does_not_exist
109
+ assert_equal false, @config.reset!(:sample)
110
+ assert !@config.variables.key?(:sample)
111
+ end
112
+
113
+ def test_reset_should_do_nothing_if_variable_is_not_a_proc
114
+ @config.set(:sample, :value)
115
+ assert_equal false, @config.reset!(:sample)
116
+ assert_equal :value, @config.variables[:sample]
117
+ end
118
+
119
+ def test_reset_should_do_nothing_if_proc_variable_has_not_been_dereferenced
120
+ @config.set(:sample) { :value }
121
+ assert_equal false, @config.reset!(:sample)
122
+ assert_instance_of Proc, @config.variables[:sample]
123
+ end
124
+
125
+ def test_reset_should_restore_variable_to_original_proc_value
126
+ @config.set(:sample) { :value }
127
+ assert_instance_of Proc, @config.variables[:sample]
128
+ @config.fetch(:sample)
129
+ assert_instance_of Symbol, @config.variables[:sample]
130
+ assert @config.reset!(:sample)
131
+ assert_instance_of Proc, @config.variables[:sample]
132
+ end
133
+
134
+ def test_fetch_should_return_stored_non_proc_value
135
+ @config.set(:sample, :value)
136
+ assert_equal :value, @config.fetch(:sample)
137
+ end
138
+
139
+ def test_fetch_should_raise_index_error_if_variable_does_not_exist
140
+ assert_raises(IndexError) do
141
+ @config.fetch(:sample)
142
+ end
143
+ end
144
+
145
+ def test_fetch_should_return_default_if_variable_does_not_exist_and_default_is_given
146
+ assert_nothing_raised do
147
+ assert_equal :default_value, @config.fetch(:sample, :default_value)
148
+ end
149
+ end
150
+
151
+ def test_fetch_should_invoke_block_if_variable_does_not_exist_and_block_is_given
152
+ assert_nothing_raised do
153
+ assert_equal :default_value, @config.fetch(:sample) { :default_value }
154
+ end
155
+ end
156
+
157
+ def test_fetch_should_raise_argument_error_if_both_default_and_block_are_given
158
+ assert_raises(ArgumentError) do
159
+ @config.fetch(:sample, :default1) { :default2 }
160
+ end
161
+ end
162
+
163
+ def test_fetch_should_dereference_proc_values
164
+ @config.set(:sample) { :value }
165
+ assert_instance_of Proc, @config.variables[:sample]
166
+ assert_equal :value, @config.fetch(:sample)
167
+ assert_instance_of Symbol, @config.variables[:sample]
168
+ end
169
+
170
+ def test_square_brackets_should_alias_fetch
171
+ @config.set(:sample, :value)
172
+ assert_equal :value, @config[:sample]
173
+ end
174
+
175
+ def test_square_brackets_should_return_nil_for_non_existant_variable
176
+ assert_nothing_raised do
177
+ assert_nil @config[:sample]
178
+ end
179
+ end
180
+ end
@@ -0,0 +1,88 @@
1
+ require "utils"
2
+ require 'capistrano/configuration'
3
+
4
+ # These tests are only for testing the integration of the various components
5
+ # of the Configuration class. To test specific features, please look at the
6
+ # tests under test/configuration.
7
+
8
+ class ConfigurationTest < Test::Unit::TestCase
9
+ def setup
10
+ @config = Capistrano::Configuration.new
11
+ end
12
+
13
+ def test_connections_execution_loading_namespaces_roles_and_variables_modules_should_integrate_correctly
14
+ Capistrano::SSH.expects(:connect).with { |s,c| s.host == "www.capistrano.test" && c == @config }.returns(:session)
15
+
16
+ process_args = Proc.new do |tree, session, opts|
17
+ tree.fallback.command == "echo 'hello world'" &&
18
+ session == [:session] &&
19
+ opts == { :logger => @config.logger }
20
+ end
21
+
22
+ Capistrano::Command.expects(:process).with(&process_args)
23
+
24
+ @config.load do
25
+ role :test, "www.capistrano.test"
26
+ set :message, "hello world"
27
+ namespace :testing do
28
+ task :example, :roles => :test do
29
+ run "echo '#{message}'"
30
+ end
31
+ end
32
+ end
33
+
34
+ @config.testing.example
35
+ end
36
+
37
+ def test_tasks_in_nested_namespace_should_be_able_to_call_tasks_in_same_namespace
38
+ @config.namespace(:outer) do
39
+ task(:first) { set :called_first, true }
40
+ namespace(:inner) do
41
+ task(:first) { set :called_inner_first, true }
42
+ task(:second) { first }
43
+ end
44
+ end
45
+
46
+ @config.outer.inner.second
47
+ assert !@config[:called_first]
48
+ assert @config[:called_inner_first]
49
+ end
50
+
51
+ def test_tasks_in_nested_namespace_should_be_able_to_call_tasks_in_parent_namespace
52
+ @config.namespace(:outer) do
53
+ task(:first) { set :called_first, true }
54
+ namespace(:inner) do
55
+ task(:second) { first }
56
+ end
57
+ end
58
+
59
+ @config.outer.inner.second
60
+ assert @config[:called_first]
61
+ end
62
+
63
+ def test_tasks_in_nested_namespace_should_be_able_to_call_shadowed_tasks_in_parent_namespace
64
+ @config.namespace(:outer) do
65
+ task(:first) { set :called_first, true }
66
+ namespace(:inner) do
67
+ task(:first) { set :called_inner_first, true }
68
+ task(:second) { parent.first }
69
+ end
70
+ end
71
+
72
+ @config.outer.inner.second
73
+ assert @config[:called_first]
74
+ assert !@config[:called_inner_first]
75
+ end
76
+
77
+ def test_hooks_for_default_task_should_be_found_if_named_after_the_namespace
78
+ @config.namespace(:outer) do
79
+ task(:default) { set :called_default, true }
80
+ task(:before_outer) { set :called_before_outer, true }
81
+ task(:after_outer) { set :called_after_outer, true }
82
+ end
83
+ @config.outer.default
84
+ assert @config[:called_before_outer]
85
+ assert @config[:called_default]
86
+ assert @config[:called_after_outer]
87
+ end
88
+ end