rspec-bash 0.0.3 → 0.1.0
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.
- checksums.yaml +4 -4
- data/.rubocop.yml +30 -0
- data/.travis.yml +1 -0
- data/Gemfile +4 -4
- data/README.md +87 -77
- data/Rakefile +1 -1
- data/bin/function_override_wrapper.sh.erb +6 -3
- data/bin/stub.rb.erb +56 -0
- data/lib/rspec/bash.rb +1 -0
- data/lib/rspec/bash/call_configuration.rb +39 -14
- data/lib/rspec/bash/call_log.rb +33 -43
- data/lib/rspec/bash/matchers/called_with_arguments.rb +7 -2
- data/lib/rspec/bash/stubbed_command.rb +22 -14
- data/lib/rspec/bash/stubbed_env.rb +15 -16
- data/lib/rspec/bash/util.rb +2 -0
- data/lib/rspec/bash/util/call_conf_argument_list_matcher.rb +47 -0
- data/lib/rspec/bash/util/call_log_argument_list_matcher.rb +33 -0
- data/return_exitstatus_spec.rb +14 -0
- data/rspec-bash.gemspec +2 -3
- data/spec/classes/call_configuration_spec.rb +296 -8
- data/spec/classes/call_log_spec.rb +168 -272
- data/spec/classes/stub_spec.rb +510 -0
- data/spec/classes/stubbed_command_spec.rb +26 -26
- data/spec/classes/stubbed_env_spec.rb +58 -64
- data/spec/classes/util/call_conf_argument_list_matcher_spec.rb +579 -0
- data/spec/classes/util/call_log_argument_list_matcher_spec.rb +211 -0
- data/spec/helper/shared_tmpdir.rb +6 -0
- data/spec/helper/string_file_io.rb +9 -0
- data/spec/integration/call_log/called_with_args_spec.rb +48 -0
- data/spec/integration/call_log/called_with_no_args_spec.rb +21 -0
- data/spec/integration/call_log/stdin_spec.rb +53 -0
- data/spec/integration/matchers/be_called_with_arguments_spec.rb +60 -0
- data/spec/integration/matchers/be_called_with_no_arguments_spec.rb +35 -0
- data/spec/integration/stubbed_command/outputs_spec.rb +262 -0
- data/spec/integration/stubbed_command/returns_exitstatus_spec.rb +99 -0
- data/spec/integration/stubbed_env/execute_with_env_vars_spec.rb +17 -0
- data/spec/integration/stubbed_env/execute_with_path_spec.rb +34 -0
- data/spec/integration/stubbed_env/execute_with_stub_wrapper_spec.rb +23 -0
- data/spec/spec_helper.rb +10 -0
- metadata +42 -24
- data/bin/stub +0 -62
- data/spec/integration/assert_called_spec.rb +0 -48
- data/spec/integration/assert_stdin_spec.rb +0 -39
- data/spec/integration/chain_args_spec.rb +0 -65
- data/spec/integration/change_exitstatus_spec.rb +0 -53
- data/spec/integration/provide_env_vars_spec.rb +0 -31
- data/spec/integration/replace_shell_commands_spec.rb +0 -48
- data/spec/integration/stub_output_spec.rb +0 -110
- data/spec/matchers/be_called_with_arguments_spec.rb +0 -55
- data/spec/matchers/be_called_with_no_arguments_spec.rb +0 -32
@@ -0,0 +1,262 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'StubbedCommand' do
|
4
|
+
include Rspec::Bash
|
5
|
+
let(:stubbed_env) { create_stubbed_env }
|
6
|
+
let!(:command1_stub) { stubbed_env.stub_command('command1') }
|
7
|
+
|
8
|
+
describe '#outputs' do
|
9
|
+
describe 'target stdout' do
|
10
|
+
context 'when given no arguments to match' do
|
11
|
+
let(:output) do
|
12
|
+
command1_stub
|
13
|
+
.outputs('hello', to: :stdout)
|
14
|
+
output, = stubbed_env.execute_inline('command1 first_argument second_argument')
|
15
|
+
output
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'outputs the expected output to stdout' do
|
19
|
+
expect(output).to eql 'hello'
|
20
|
+
end
|
21
|
+
end
|
22
|
+
context 'when given an exact argument match' do
|
23
|
+
let(:output) do
|
24
|
+
command1_stub
|
25
|
+
.with_args('first_argument', 'second_argument')
|
26
|
+
.outputs('hello', to: :stdout)
|
27
|
+
output, = stubbed_env.execute_inline('command1 first_argument second_argument')
|
28
|
+
output
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'outputs the expected output to stdout' do
|
32
|
+
expect(output).to eql 'hello'
|
33
|
+
end
|
34
|
+
end
|
35
|
+
context 'when given an anything argument match' do
|
36
|
+
let(:output) do
|
37
|
+
command1_stub
|
38
|
+
.with_args('first_argument', anything)
|
39
|
+
.outputs('i respond to anything', to: :stdout)
|
40
|
+
output, = stubbed_env.execute_inline('command1 first_argument piglet')
|
41
|
+
output
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'outputs the expected output to stdout' do
|
45
|
+
expect(output).to eql 'i respond to anything'
|
46
|
+
end
|
47
|
+
end
|
48
|
+
context 'when given any_args argument match' do
|
49
|
+
let(:output) do
|
50
|
+
command1_stub
|
51
|
+
.with_args(any_args)
|
52
|
+
.outputs('i respond to any_args', to: :stdout)
|
53
|
+
output, = stubbed_env.execute_inline('command1 poglet piglet')
|
54
|
+
output
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'outputs the expected output to stdout' do
|
58
|
+
expect(output).to eql 'i respond to any_args'
|
59
|
+
end
|
60
|
+
end
|
61
|
+
context 'when given other types of RSpec::Mock::ArgumentMatcher argument match' do
|
62
|
+
let(:output) do
|
63
|
+
command1_stub
|
64
|
+
.with_args(instance_of(String), instance_of(String))
|
65
|
+
.outputs('i respond to instance_of', to: :stdout)
|
66
|
+
output, = stubbed_env.execute_inline('command1 poglet 1')
|
67
|
+
output
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'outputs the expected output to stdout' do
|
71
|
+
expect(output).to eql 'i respond to instance_of'
|
72
|
+
end
|
73
|
+
end
|
74
|
+
context 'when given regex argument match' do
|
75
|
+
let(:output) do
|
76
|
+
command1_stub
|
77
|
+
.with_args(/p.glet/, /p.glet/)
|
78
|
+
.outputs('i respond to regex', to: :stdout)
|
79
|
+
output, = stubbed_env.execute_inline('command1 poglet piglet')
|
80
|
+
output
|
81
|
+
end
|
82
|
+
|
83
|
+
it 'outputs the expected output to stdout' do
|
84
|
+
expect(output).to eql 'i respond to regex'
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
# TODO: it is a bug that these require a \n in the output
|
90
|
+
describe 'target stderr' do
|
91
|
+
context 'when given no arguments to match' do
|
92
|
+
let(:error) do
|
93
|
+
command1_stub
|
94
|
+
.outputs('hello', to: :stderr)
|
95
|
+
_, error, = stubbed_env.execute_inline('command1 first_argument second_argument')
|
96
|
+
error
|
97
|
+
end
|
98
|
+
|
99
|
+
it 'outputs the expected error to stderr' do
|
100
|
+
expect(error).to eql "hello\n"
|
101
|
+
end
|
102
|
+
end
|
103
|
+
context 'when given an exact argument match' do
|
104
|
+
let(:error) do
|
105
|
+
command1_stub
|
106
|
+
.with_args('first_argument', 'second_argument')
|
107
|
+
.outputs('hello', to: :stderr)
|
108
|
+
_, error, = stubbed_env.execute_inline('command1 first_argument second_argument')
|
109
|
+
error
|
110
|
+
end
|
111
|
+
|
112
|
+
it 'outputs the expected error to stderr' do
|
113
|
+
expect(error).to eql "hello\n"
|
114
|
+
end
|
115
|
+
end
|
116
|
+
context 'when given an anything argument match' do
|
117
|
+
let(:error) do
|
118
|
+
command1_stub
|
119
|
+
.with_args('first_argument', anything)
|
120
|
+
.outputs('i respond to anything', to: :stderr)
|
121
|
+
_, error, = stubbed_env.execute_inline('command1 first_argument piglet')
|
122
|
+
error
|
123
|
+
end
|
124
|
+
|
125
|
+
it 'outputs the expected error to stderr' do
|
126
|
+
expect(error).to eql "i respond to anything\n"
|
127
|
+
end
|
128
|
+
end
|
129
|
+
context 'when given any_args argument match' do
|
130
|
+
let(:error) do
|
131
|
+
command1_stub
|
132
|
+
.with_args(any_args)
|
133
|
+
.outputs('i respond to any_args', to: :stderr)
|
134
|
+
_, error, = stubbed_env.execute_inline('command1 poglet piglet')
|
135
|
+
error
|
136
|
+
end
|
137
|
+
|
138
|
+
it 'outputs the expected error to stderr' do
|
139
|
+
expect(error).to eql "i respond to any_args\n"
|
140
|
+
end
|
141
|
+
end
|
142
|
+
context 'when given other types of RSpec::Mock::ArgumentMatcher argument match' do
|
143
|
+
let(:error) do
|
144
|
+
command1_stub
|
145
|
+
.with_args(instance_of(String), instance_of(String))
|
146
|
+
.outputs('i respond to instance_of', to: :stderr)
|
147
|
+
_, error, = stubbed_env.execute_inline('command1 poglet 1')
|
148
|
+
error
|
149
|
+
end
|
150
|
+
|
151
|
+
it 'outputs the expected error to stderr' do
|
152
|
+
expect(error).to eql "i respond to instance_of\n"
|
153
|
+
end
|
154
|
+
end
|
155
|
+
context 'when given regex argument match' do
|
156
|
+
let(:error) do
|
157
|
+
command1_stub
|
158
|
+
.with_args(/p.glet/, /p.glet/)
|
159
|
+
.outputs('i respond to regex', to: :stderr)
|
160
|
+
_, error, = stubbed_env.execute_inline('command1 poglet piglet')
|
161
|
+
error
|
162
|
+
end
|
163
|
+
|
164
|
+
it 'outputs the expected error to stderr' do
|
165
|
+
expect(error).to eql "i respond to regex\n"
|
166
|
+
end
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
describe 'target file path' do
|
171
|
+
let(:temp_file) { Tempfile.new('for-testing') }
|
172
|
+
context 'when given no arguments to match' do
|
173
|
+
before(:each) do
|
174
|
+
command1_stub
|
175
|
+
.outputs('hello', to: temp_file.path)
|
176
|
+
stubbed_env.execute_inline('command1 first_argument second_argument')
|
177
|
+
end
|
178
|
+
|
179
|
+
it 'outputs the expected content to the file' do
|
180
|
+
expect(temp_file.read).to eql 'hello'
|
181
|
+
end
|
182
|
+
end
|
183
|
+
context 'when given an exact argument match' do
|
184
|
+
before(:each) do
|
185
|
+
command1_stub
|
186
|
+
.with_args('first_argument', 'second_argument')
|
187
|
+
.outputs('hello', to: temp_file.path)
|
188
|
+
stubbed_env.execute_inline('command1 first_argument second_argument')
|
189
|
+
end
|
190
|
+
|
191
|
+
it 'outputs the expected content to the file' do
|
192
|
+
expect(temp_file.read).to eql 'hello'
|
193
|
+
end
|
194
|
+
end
|
195
|
+
context 'when given an anything argument match' do
|
196
|
+
before(:each) do
|
197
|
+
command1_stub
|
198
|
+
.with_args('first_argument', anything)
|
199
|
+
.outputs('i respond to anything', to: temp_file.path)
|
200
|
+
stubbed_env.execute_inline('command1 first_argument second_argument')
|
201
|
+
end
|
202
|
+
|
203
|
+
it 'outputs the expected content to the file' do
|
204
|
+
expect(temp_file.read).to eql 'i respond to anything'
|
205
|
+
end
|
206
|
+
end
|
207
|
+
context 'when given any_args argument match' do
|
208
|
+
before(:each) do
|
209
|
+
command1_stub
|
210
|
+
.with_args(any_args)
|
211
|
+
.outputs('i respond to any_args', to: temp_file.path)
|
212
|
+
stubbed_env.execute_inline('command1 poglet piglet')
|
213
|
+
end
|
214
|
+
|
215
|
+
it 'outputs the expected content to the file' do
|
216
|
+
expect(temp_file.read).to eql 'i respond to any_args'
|
217
|
+
end
|
218
|
+
end
|
219
|
+
context 'when given other types of RSpec::Mock::ArgumentMatcher argument match' do
|
220
|
+
before(:each) do
|
221
|
+
command1_stub
|
222
|
+
.with_args(instance_of(String), instance_of(String))
|
223
|
+
.outputs('i respond to instance_of', to: temp_file.path)
|
224
|
+
stubbed_env.execute_inline('command1 poglet 1')
|
225
|
+
end
|
226
|
+
|
227
|
+
it 'outputs the expected content to the file' do
|
228
|
+
expect(temp_file.read).to eql 'i respond to instance_of'
|
229
|
+
end
|
230
|
+
end
|
231
|
+
context 'when given regex argument match' do
|
232
|
+
before(:each) do
|
233
|
+
command1_stub
|
234
|
+
.with_args(/p.glet/, /p.glet/)
|
235
|
+
.outputs('i respond to regex', to: temp_file.path)
|
236
|
+
stubbed_env.execute_inline('command1 poglet piglet')
|
237
|
+
end
|
238
|
+
|
239
|
+
it 'outputs the expected content to the file' do
|
240
|
+
expect(temp_file.read).to eql 'i respond to regex'
|
241
|
+
end
|
242
|
+
end
|
243
|
+
|
244
|
+
describe 'when given a passed argument for a filename' do
|
245
|
+
let(:dynamic_file) { Pathname.new('output-piglet.txt') }
|
246
|
+
before(:each) do
|
247
|
+
command1_stub
|
248
|
+
.outputs('i have a dynamic file name', to: ['output-', :arg2, '.txt'])
|
249
|
+
stubbed_env.execute_inline('command1 poglet piglet')
|
250
|
+
end
|
251
|
+
|
252
|
+
it 'outputs the expected content to the file' do
|
253
|
+
expect(dynamic_file.read).to eql 'i have a dynamic file name'
|
254
|
+
end
|
255
|
+
|
256
|
+
after(:each) do
|
257
|
+
FileUtils.remove_entry_secure dynamic_file
|
258
|
+
end
|
259
|
+
end
|
260
|
+
end
|
261
|
+
end
|
262
|
+
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'StubbedCommand' do
|
4
|
+
include Rspec::Bash
|
5
|
+
let(:stubbed_env) { create_stubbed_env }
|
6
|
+
let!(:command1_stub) { stubbed_env.stub_command('command1') }
|
7
|
+
|
8
|
+
context '#returns_exitstatus' do
|
9
|
+
context 'when given no exit status to return' do
|
10
|
+
let(:status) do
|
11
|
+
_, _, status = stubbed_env.execute_inline('command1 first_argument second_argument')
|
12
|
+
status.exitstatus
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'exits with the appropriate exit code' do
|
16
|
+
expect(status).to be 0
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
context 'when given no args to match' do
|
21
|
+
let(:status) do
|
22
|
+
command1_stub
|
23
|
+
.returns_exitstatus(100)
|
24
|
+
_, _, status = stubbed_env.execute_inline('command1 first_argument second_argument')
|
25
|
+
status.exitstatus
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'exits with the appropriate exit code' do
|
29
|
+
expect(status).to be 100
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context 'when given an exact argument match' do
|
34
|
+
let(:status) do
|
35
|
+
command1_stub
|
36
|
+
.with_args('first_argument', 'second_argument')
|
37
|
+
.returns_exitstatus(101)
|
38
|
+
_, _, status = stubbed_env.execute_inline('command1 first_argument second_argument')
|
39
|
+
status.exitstatus
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'exits with the appropriate exit code' do
|
43
|
+
expect(status).to be 101
|
44
|
+
end
|
45
|
+
end
|
46
|
+
context 'when given an anything argument match' do
|
47
|
+
let(:status) do
|
48
|
+
command1_stub
|
49
|
+
.with_args('first_argument', anything)
|
50
|
+
.returns_exitstatus(102)
|
51
|
+
_, _, status = stubbed_env.execute_inline('command1 first_argument second_argument')
|
52
|
+
status.exitstatus
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'exits with the appropriate exit code' do
|
56
|
+
expect(status).to be 102
|
57
|
+
end
|
58
|
+
end
|
59
|
+
context 'when given any_args argument match' do
|
60
|
+
let(:status) do
|
61
|
+
command1_stub
|
62
|
+
.with_args(any_args)
|
63
|
+
.returns_exitstatus(103)
|
64
|
+
_, _, status = stubbed_env.execute_inline('command1 poglet piglet')
|
65
|
+
status.exitstatus
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'exits with the appropriate exit code' do
|
69
|
+
expect(status).to be 103
|
70
|
+
end
|
71
|
+
end
|
72
|
+
context 'when given other types of RSpec::Mock::ArgumentMatcher argument match' do
|
73
|
+
let(:status) do
|
74
|
+
command1_stub
|
75
|
+
.with_args(instance_of(String), instance_of(String))
|
76
|
+
.returns_exitstatus(104)
|
77
|
+
_, _, status = stubbed_env.execute_inline('command1 poglet 1')
|
78
|
+
status.exitstatus
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'exits with the appropriate exit code' do
|
82
|
+
expect(status).to be 104
|
83
|
+
end
|
84
|
+
end
|
85
|
+
context 'when given regex argument match' do
|
86
|
+
let(:status) do
|
87
|
+
command1_stub
|
88
|
+
.with_args(/p.glet/, /p.glet/)
|
89
|
+
.returns_exitstatus(105)
|
90
|
+
_, _, status = stubbed_env.execute_inline('command1 poglet piglet')
|
91
|
+
status.exitstatus
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'exits with the appropriate exit code' do
|
95
|
+
expect(status).to be 105
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'StubbedEnv' do
|
4
|
+
include Rspec::Bash
|
5
|
+
|
6
|
+
context '#execute(..., ENV => VARIABLES)' do
|
7
|
+
let(:stubbed_env) { create_stubbed_env }
|
8
|
+
|
9
|
+
it 'exits with an error' do
|
10
|
+
stdout, = stubbed_env.execute_inline(
|
11
|
+
'echo $SOME_ENV_VAR',
|
12
|
+
'SOME_ENV_VAR' => 'SekretCredential'
|
13
|
+
)
|
14
|
+
expect(stdout).to eql "SekretCredential\n"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'StubbedEnv' do
|
4
|
+
include Rspec::Bash
|
5
|
+
|
6
|
+
context '#execute(path, ...)' do
|
7
|
+
describe 'running a file with non-existing commands' do
|
8
|
+
it 'exits with an error' do
|
9
|
+
`command1 "foo bar" 2>&1`
|
10
|
+
expect($CHILD_STATUS.exitstatus).not_to eq 0
|
11
|
+
end
|
12
|
+
|
13
|
+
context 'with stubbed environment' do
|
14
|
+
let(:stubbed_env) { create_stubbed_env }
|
15
|
+
|
16
|
+
it 'exits with an error' do
|
17
|
+
stubbed_env.execute_inline 'command1 "foo bar" 2>&1'
|
18
|
+
expect($CHILD_STATUS.exitstatus).not_to eq 0
|
19
|
+
end
|
20
|
+
|
21
|
+
context 'with a stubbed command' do
|
22
|
+
before do
|
23
|
+
stubbed_env.stub_command('command1')
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'exits with status code 0' do
|
27
|
+
_, _, status = stubbed_env.execute_inline 'command1 "foo bar" 2>&1'
|
28
|
+
expect(status.exitstatus).to eq 0
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'English'
|
2
|
+
require 'rspec/bash'
|
3
|
+
|
4
|
+
describe 'StubbedEnv' do
|
5
|
+
include Rspec::Bash
|
6
|
+
let(:stubbed_env) { create_stubbed_env }
|
7
|
+
let!(:grep_mock) { stubbed_env.stub_command('grep') }
|
8
|
+
let!(:ls_mock) { stubbed_env.stub_command('ls') }
|
9
|
+
|
10
|
+
context '#execute(<commands that are in stub wrapper>, ...)' do
|
11
|
+
it 'does not call the grep command' do
|
12
|
+
stubbed_env.execute_inline('exit 0')
|
13
|
+
|
14
|
+
expect(grep_mock).to_not be_called
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'does not call the ls command' do
|
18
|
+
stubbed_env.execute_inline('exit 0')
|
19
|
+
|
20
|
+
expect(ls_mock).to_not be_called
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|