mbailey-capistrano 2.5.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. data/CHANGELOG.rdoc +761 -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/examples/sample.rb +14 -0
  8. data/lib/capistrano/callback.rb +45 -0
  9. data/lib/capistrano/cli/execute.rb +84 -0
  10. data/lib/capistrano/cli/help.rb +125 -0
  11. data/lib/capistrano/cli/help.txt +75 -0
  12. data/lib/capistrano/cli/options.rb +224 -0
  13. data/lib/capistrano/cli/ui.rb +40 -0
  14. data/lib/capistrano/cli.rb +47 -0
  15. data/lib/capistrano/command.rb +283 -0
  16. data/lib/capistrano/configuration/actions/file_transfer.rb +47 -0
  17. data/lib/capistrano/configuration/actions/inspect.rb +46 -0
  18. data/lib/capistrano/configuration/actions/invocation.rb +293 -0
  19. data/lib/capistrano/configuration/callbacks.rb +148 -0
  20. data/lib/capistrano/configuration/connections.rb +200 -0
  21. data/lib/capistrano/configuration/execution.rb +132 -0
  22. data/lib/capistrano/configuration/loading.rb +197 -0
  23. data/lib/capistrano/configuration/namespaces.rb +197 -0
  24. data/lib/capistrano/configuration/roles.rb +73 -0
  25. data/lib/capistrano/configuration/servers.rb +85 -0
  26. data/lib/capistrano/configuration/variables.rb +127 -0
  27. data/lib/capistrano/configuration.rb +43 -0
  28. data/lib/capistrano/errors.rb +15 -0
  29. data/lib/capistrano/extensions.rb +57 -0
  30. data/lib/capistrano/logger.rb +59 -0
  31. data/lib/capistrano/processable.rb +53 -0
  32. data/lib/capistrano/recipes/compat.rb +32 -0
  33. data/lib/capistrano/recipes/deploy/dependencies.rb +44 -0
  34. data/lib/capistrano/recipes/deploy/local_dependency.rb +54 -0
  35. data/lib/capistrano/recipes/deploy/remote_dependency.rb +105 -0
  36. data/lib/capistrano/recipes/deploy/scm/accurev.rb +169 -0
  37. data/lib/capistrano/recipes/deploy/scm/base.rb +196 -0
  38. data/lib/capistrano/recipes/deploy/scm/bzr.rb +83 -0
  39. data/lib/capistrano/recipes/deploy/scm/cvs.rb +152 -0
  40. data/lib/capistrano/recipes/deploy/scm/darcs.rb +85 -0
  41. data/lib/capistrano/recipes/deploy/scm/git.rb +271 -0
  42. data/lib/capistrano/recipes/deploy/scm/mercurial.rb +137 -0
  43. data/lib/capistrano/recipes/deploy/scm/none.rb +44 -0
  44. data/lib/capistrano/recipes/deploy/scm/perforce.rb +133 -0
  45. data/lib/capistrano/recipes/deploy/scm/subversion.rb +121 -0
  46. data/lib/capistrano/recipes/deploy/scm.rb +19 -0
  47. data/lib/capistrano/recipes/deploy/strategy/base.rb +79 -0
  48. data/lib/capistrano/recipes/deploy/strategy/checkout.rb +20 -0
  49. data/lib/capistrano/recipes/deploy/strategy/copy.rb +210 -0
  50. data/lib/capistrano/recipes/deploy/strategy/export.rb +20 -0
  51. data/lib/capistrano/recipes/deploy/strategy/remote.rb +52 -0
  52. data/lib/capistrano/recipes/deploy/strategy/remote_cache.rb +56 -0
  53. data/lib/capistrano/recipes/deploy/strategy.rb +19 -0
  54. data/lib/capistrano/recipes/deploy/templates/maintenance.rhtml +53 -0
  55. data/lib/capistrano/recipes/deploy.rb +562 -0
  56. data/lib/capistrano/recipes/standard.rb +37 -0
  57. data/lib/capistrano/recipes/templates/maintenance.rhtml +53 -0
  58. data/lib/capistrano/recipes/upgrade.rb +33 -0
  59. data/lib/capistrano/role.rb +102 -0
  60. data/lib/capistrano/server_definition.rb +56 -0
  61. data/lib/capistrano/shell.rb +260 -0
  62. data/lib/capistrano/ssh.rb +99 -0
  63. data/lib/capistrano/task_definition.rb +70 -0
  64. data/lib/capistrano/transfer.rb +216 -0
  65. data/lib/capistrano/version.rb +18 -0
  66. data/lib/capistrano.rb +2 -0
  67. data/setup.rb +1346 -0
  68. data/test/cli/execute_test.rb +132 -0
  69. data/test/cli/help_test.rb +165 -0
  70. data/test/cli/options_test.rb +317 -0
  71. data/test/cli/ui_test.rb +28 -0
  72. data/test/cli_test.rb +17 -0
  73. data/test/command_test.rb +286 -0
  74. data/test/configuration/actions/file_transfer_test.rb +61 -0
  75. data/test/configuration/actions/inspect_test.rb +65 -0
  76. data/test/configuration/actions/invocation_test.rb +224 -0
  77. data/test/configuration/callbacks_test.rb +220 -0
  78. data/test/configuration/connections_test.rb +349 -0
  79. data/test/configuration/execution_test.rb +175 -0
  80. data/test/configuration/loading_test.rb +132 -0
  81. data/test/configuration/namespace_dsl_test.rb +311 -0
  82. data/test/configuration/roles_test.rb +144 -0
  83. data/test/configuration/servers_test.rb +121 -0
  84. data/test/configuration/variables_test.rb +184 -0
  85. data/test/configuration_test.rb +88 -0
  86. data/test/deploy/local_dependency_test.rb +76 -0
  87. data/test/deploy/remote_dependency_test.rb +114 -0
  88. data/test/deploy/scm/accurev_test.rb +23 -0
  89. data/test/deploy/scm/base_test.rb +55 -0
  90. data/test/deploy/scm/git_test.rb +167 -0
  91. data/test/deploy/scm/mercurial_test.rb +129 -0
  92. data/test/deploy/strategy/copy_test.rb +258 -0
  93. data/test/extensions_test.rb +69 -0
  94. data/test/fixtures/cli_integration.rb +5 -0
  95. data/test/fixtures/config.rb +5 -0
  96. data/test/fixtures/custom.rb +3 -0
  97. data/test/logger_test.rb +123 -0
  98. data/test/role_test.rb +11 -0
  99. data/test/server_definition_test.rb +121 -0
  100. data/test/shell_test.rb +90 -0
  101. data/test/ssh_test.rb +104 -0
  102. data/test/task_definition_test.rb +101 -0
  103. data/test/transfer_test.rb +160 -0
  104. data/test/utils.rb +38 -0
  105. metadata +205 -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
@@ -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
@@ -0,0 +1,76 @@
1
+ require "utils"
2
+ require 'capistrano/recipes/deploy/local_dependency'
3
+
4
+ class LocalDependencyTest < Test::Unit::TestCase
5
+ def setup
6
+ @config = { }
7
+ @dependency = Capistrano::Deploy::LocalDependency.new(@config)
8
+ end
9
+
10
+ def test_should_use_standard_error_message
11
+ setup_for_one_path_entry(false)
12
+ @dependency.command("cat")
13
+ assert_equal "`cat' could not be found in the path on the local host", @dependency.message
14
+ end
15
+
16
+ def test_should_use_alternative_message_if_provided
17
+ setup_for_one_path_entry(false)
18
+ @dependency.command("cat").or("Sorry")
19
+ assert_equal "Sorry", @dependency.message
20
+ end
21
+
22
+ def test_env_with_no_path_should_never_find_command
23
+ ENV.expects(:[]).with("PATH").returns(nil)
24
+ assert !@dependency.command("cat").pass?
25
+ end
26
+
27
+ def test_env_with_one_path_entry_should_fail_if_command_not_found
28
+ setup_for_one_path_entry(false)
29
+ assert !@dependency.command("cat").pass?
30
+ end
31
+
32
+ def test_env_with_one_path_entry_should_pass_if_command_found
33
+ setup_for_one_path_entry(true)
34
+ assert @dependency.command("cat").pass?
35
+ end
36
+
37
+ def test_env_with_three_path_entries_should_fail_if_command_not_found
38
+ setup_for_three_path_entries(false)
39
+ assert !@dependency.command("cat").pass?
40
+ end
41
+
42
+ def test_env_with_three_path_entries_should_pass_if_command_found
43
+ setup_for_three_path_entries(true)
44
+ assert @dependency.command("cat").pass?
45
+ end
46
+
47
+ def test_env_with_one_path_entry_on_windows_should_pass_if_command_found_with_extension
48
+ setup_for_one_path_entry_on_windows(true)
49
+ assert @dependency.command("cat").pass?
50
+ end
51
+
52
+ private
53
+
54
+ def setup_for_one_path_entry(command_found)
55
+ Capistrano::Deploy::LocalDependency.expects(:on_windows?).returns(false)
56
+ ENV.expects(:[]).with("PATH").returns("/bin")
57
+ File.expects(:executable?).with("/bin/cat").returns(command_found)
58
+ end
59
+
60
+ def setup_for_three_path_entries(command_found)
61
+ Capistrano::Deploy::LocalDependency.expects(:on_windows?).returns(false)
62
+ path = %w(/bin /usr/bin /usr/local/bin).join(File::PATH_SEPARATOR)
63
+ ENV.expects(:[]).with("PATH").returns(path)
64
+ File.expects(:executable?).with("/usr/bin/cat").returns(command_found)
65
+ File.expects(:executable?).at_most(1).with("/bin/cat").returns(false)
66
+ File.expects(:executable?).at_most(1).with("/usr/local/bin/cat").returns(false)
67
+ end
68
+
69
+ def setup_for_one_path_entry_on_windows(command_found)
70
+ Capistrano::Deploy::LocalDependency.expects(:on_windows?).returns(true)
71
+ ENV.expects(:[]).with("PATH").returns("/cygwin/bin")
72
+ File.stubs(:executable?).returns(false)
73
+ first_executable_extension = Capistrano::Deploy::LocalDependency.windows_executable_extensions.first
74
+ File.expects(:executable?).with("/cygwin/bin/cat#{first_executable_extension}").returns(command_found)
75
+ end
76
+ end