-
Notifications
You must be signed in to change notification settings - Fork 1.8k
/
loading_test.rb
127 lines (103 loc) · 3.7 KB
/
loading_test.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
require "utils"
require 'capistrano/configuration/loading'
class ConfigurationLoadingTest < Test::Unit::TestCase
class MockConfig
attr_accessor :ping
attr_reader :original_initialize_called
def initialize
@original_initialize_called = true
end
def ping!(value)
@ping = value
end
include Capistrano::Configuration::Loading
end
def setup
@config = MockConfig.new
end
def teardown
MockConfig.instance = nil
$".delete "#{File.dirname(__FILE__)}/../fixtures/custom.rb"
end
def test_initialize_should_init_collections
assert @config.original_initialize_called
assert @config.load_paths.include?(".")
assert @config.load_paths.detect { |v| v =~ /capistrano\/recipes$/ }
end
def test_load_with_options_and_block_should_raise_argument_error
assert_raises(ArgumentError) do
@config.load(:string => "foo") { something }
end
end
def test_load_with_arguments_and_block_should_raise_argument_error
assert_raises(ArgumentError) do
@config.load("foo") { something }
end
end
def test_load_from_string_should_eval_in_config_scope
@config.load :string => "ping! :here"
assert_equal :here, @config.ping
end
def test_load_from_file_shoudld_respect_load_path
File.stubs(:file?).returns(false)
File.stubs(:file?).with("custom/path/for/file.rb").returns(true)
File.stubs(:read).with("custom/path/for/file.rb").returns("ping! :here")
@config.load_paths << "custom/path/for"
@config.load :file => "file.rb"
assert_equal :here, @config.ping
end
def test_load_from_file_should_respect_load_path_and_appends_rb
File.stubs(:file?).returns(false)
File.stubs(:file?).with("custom/path/for/file.rb").returns(true)
File.stubs(:read).with("custom/path/for/file.rb").returns("ping! :here")
@config.load_paths << "custom/path/for"
@config.load :file => "file"
assert_equal :here, @config.ping
end
def test_load_from_file_should_raise_load_error_if_file_cannot_be_found
File.stubs(:file?).returns(false)
assert_raises(LoadError) do
@config.load :file => "file"
end
end
def test_load_from_proc_should_eval_proc_in_config_scope
@config.load :proc => Proc.new { ping! :here }
assert_equal :here, @config.ping
end
def test_load_with_block_should_treat_block_as_proc_parameter
@config.load { ping! :here }
assert_equal :here, @config.ping
end
def test_load_with_unrecognized_option_should_raise_argument_error
assert_raises(ArgumentError) do
@config.load :url => "http://www.load-this.test"
end
end
def test_load_with_arguments_should_treat_arguments_as_files
File.stubs(:file?).returns(false)
File.stubs(:file?).with("./first.rb").returns(true)
File.stubs(:file?).with("./second.rb").returns(true)
File.stubs(:read).with("./first.rb").returns("ping! 'this'")
File.stubs(:read).with("./second.rb").returns("ping << 'that'")
assert_nothing_raised { @config.load "first", "second" }
assert_equal "thisthat", @config.ping
end
def test_require_from_config_should_load_file_in_config_scope
assert_nothing_raised do
@config.require "#{File.dirname(__FILE__)}/../fixtures/custom"
end
assert_equal :custom, @config.ping
end
def test_require_without_config_should_raise_load_error
assert_raises(LoadError) do
require "#{File.dirname(__FILE__)}/../fixtures/custom"
end
end
def test_require_in_multiple_instances_should_load_recipes_in_each_instance
config2 = MockConfig.new
@config.require "#{File.dirname(__FILE__)}/../fixtures/custom"
config2.require "#{File.dirname(__FILE__)}/../fixtures/custom"
assert_equal :custom, @config.ping
assert_equal :custom, config2.ping
end
end