rspec-bash 0.0.3 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +30 -0
  3. data/.travis.yml +1 -0
  4. data/Gemfile +4 -4
  5. data/README.md +87 -77
  6. data/Rakefile +1 -1
  7. data/bin/function_override_wrapper.sh.erb +6 -3
  8. data/bin/stub.rb.erb +56 -0
  9. data/lib/rspec/bash.rb +1 -0
  10. data/lib/rspec/bash/call_configuration.rb +39 -14
  11. data/lib/rspec/bash/call_log.rb +33 -43
  12. data/lib/rspec/bash/matchers/called_with_arguments.rb +7 -2
  13. data/lib/rspec/bash/stubbed_command.rb +22 -14
  14. data/lib/rspec/bash/stubbed_env.rb +15 -16
  15. data/lib/rspec/bash/util.rb +2 -0
  16. data/lib/rspec/bash/util/call_conf_argument_list_matcher.rb +47 -0
  17. data/lib/rspec/bash/util/call_log_argument_list_matcher.rb +33 -0
  18. data/return_exitstatus_spec.rb +14 -0
  19. data/rspec-bash.gemspec +2 -3
  20. data/spec/classes/call_configuration_spec.rb +296 -8
  21. data/spec/classes/call_log_spec.rb +168 -272
  22. data/spec/classes/stub_spec.rb +510 -0
  23. data/spec/classes/stubbed_command_spec.rb +26 -26
  24. data/spec/classes/stubbed_env_spec.rb +58 -64
  25. data/spec/classes/util/call_conf_argument_list_matcher_spec.rb +579 -0
  26. data/spec/classes/util/call_log_argument_list_matcher_spec.rb +211 -0
  27. data/spec/helper/shared_tmpdir.rb +6 -0
  28. data/spec/helper/string_file_io.rb +9 -0
  29. data/spec/integration/call_log/called_with_args_spec.rb +48 -0
  30. data/spec/integration/call_log/called_with_no_args_spec.rb +21 -0
  31. data/spec/integration/call_log/stdin_spec.rb +53 -0
  32. data/spec/integration/matchers/be_called_with_arguments_spec.rb +60 -0
  33. data/spec/integration/matchers/be_called_with_no_arguments_spec.rb +35 -0
  34. data/spec/integration/stubbed_command/outputs_spec.rb +262 -0
  35. data/spec/integration/stubbed_command/returns_exitstatus_spec.rb +99 -0
  36. data/spec/integration/stubbed_env/execute_with_env_vars_spec.rb +17 -0
  37. data/spec/integration/stubbed_env/execute_with_path_spec.rb +34 -0
  38. data/spec/integration/stubbed_env/execute_with_stub_wrapper_spec.rb +23 -0
  39. data/spec/spec_helper.rb +10 -0
  40. metadata +42 -24
  41. data/bin/stub +0 -62
  42. data/spec/integration/assert_called_spec.rb +0 -48
  43. data/spec/integration/assert_stdin_spec.rb +0 -39
  44. data/spec/integration/chain_args_spec.rb +0 -65
  45. data/spec/integration/change_exitstatus_spec.rb +0 -53
  46. data/spec/integration/provide_env_vars_spec.rb +0 -31
  47. data/spec/integration/replace_shell_commands_spec.rb +0 -48
  48. data/spec/integration/stub_output_spec.rb +0 -110
  49. data/spec/matchers/be_called_with_arguments_spec.rb +0 -55
  50. data/spec/matchers/be_called_with_no_arguments_spec.rb +0 -32
@@ -1,9 +1,9 @@
1
- require 'English'
2
- require 'rspec/bash'
1
+ require 'spec_helper'
2
+ include Rspec::Bash
3
3
 
4
4
  describe 'StubbedCommand' do
5
- include Rspec::Bash
6
- let(:stubbed_env) { create_stubbed_env }
5
+ include_examples 'manage a :temp_directory'
6
+
7
7
  before(:each) do
8
8
  allow(FileUtils).to receive(:cp)
9
9
  end
@@ -12,11 +12,13 @@ describe 'StubbedCommand' do
12
12
  before(:each) do
13
13
  @call_log = double(Rspec::Bash::CallLog)
14
14
  allow(Rspec::Bash::CallLog).to receive(:new).and_return(@call_log)
15
- @subject = Rspec::Bash::StubbedCommand.new('command', Dir.mktmpdir)
15
+ @subject = Rspec::Bash::StubbedCommand.new('command', temp_directory)
16
16
  end
17
17
  context 'with only a series of arguments' do
18
18
  it 'passes the check to its CallLog\'s #called_with_args? method' do
19
- expect(@call_log).to receive(:called_with_args?).with('first_argument', 'second_argument').and_return(true)
19
+ expect(@call_log).to receive(:called_with_args?)
20
+ .with('first_argument', 'second_argument')
21
+ .and_return(true)
20
22
  @subject.called_with_args?('first_argument', 'second_argument')
21
23
  end
22
24
  end
@@ -24,7 +26,7 @@ describe 'StubbedCommand' do
24
26
 
25
27
  context '#with_args' do
26
28
  before(:each) do
27
- @subject = Rspec::Bash::StubbedCommand.new('command', Dir.mktmpdir)
29
+ @subject = Rspec::Bash::StubbedCommand.new('command', temp_directory)
28
30
  @subject.with_args('argument_one', 'argument_two')
29
31
  end
30
32
  it 'sets the arguments array on the StubbedCommand to the arguments that were passed in' do
@@ -36,19 +38,22 @@ describe 'StubbedCommand' do
36
38
  before(:each) do
37
39
  @call_log = double(Rspec::Bash::CallLog)
38
40
  allow(Rspec::Bash::CallLog).to receive(:new).and_return(@call_log)
39
- @subject = Rspec::Bash::StubbedCommand.new('command', Dir.mktmpdir)
41
+ @subject = Rspec::Bash::StubbedCommand.new('command', temp_directory)
40
42
  end
41
43
  it 'returns value returned from call_log argument count when there are no arguments' do
42
44
  expect(@call_log).to receive(:call_count).with([]).and_return('arbitrary return value')
43
45
  expect(@subject.call_count([])).to eql 'arbitrary return value'
44
46
  end
45
47
  it 'returns value returned from call_log argument count when there is only one argument' do
46
- expect(@call_log).to receive(:call_count).with(['only arg']).and_return('arbitrary return value')
47
- expect(@subject.call_count ['only arg']).to eql 'arbitrary return value'
48
+ expect(@call_log).to receive(:call_count)
49
+ .with(['only arg'])
50
+ .and_return('arbitrary return value')
51
+ expect(@subject.call_count(['only arg'])).to eql 'arbitrary return value'
48
52
  end
49
53
  it 'returns value returned from call_log argument count when there are multiple arguments' do
50
- expect(@call_log).to receive(:call_count).with(['first arg', 'second arg']).and_return('arbitrary return value')
51
- expect(@subject.call_count ['first arg', 'second arg']).to eql 'arbitrary return value'
54
+ expect(@call_log).to receive(:call_count).with(['first arg', 'second arg'])
55
+ .and_return('arbitrary return value')
56
+ expect(@subject.call_count(['first arg', 'second arg'])).to eql 'arbitrary return value'
52
57
  end
53
58
  end
54
59
 
@@ -56,7 +61,7 @@ describe 'StubbedCommand' do
56
61
  before(:each) do
57
62
  @call_log = double(Rspec::Bash::CallLog)
58
63
  allow(Rspec::Bash::CallLog).to receive(:new).and_return(@call_log)
59
- @subject = Rspec::Bash::StubbedCommand.new('command', Dir.mktmpdir)
64
+ @subject = Rspec::Bash::StubbedCommand.new('command', temp_directory)
60
65
  end
61
66
  it 'returns false when there is no call_log' do
62
67
  expect(@call_log).to receive(:exist?).and_return(false)
@@ -73,12 +78,12 @@ describe 'StubbedCommand' do
73
78
  expect(@subject.called?).to be_truthy
74
79
  end
75
80
  end
76
-
81
+
77
82
  context '#stdin' do
78
83
  before(:each) do
79
84
  @call_log = double(Rspec::Bash::CallLog)
80
85
  allow(Rspec::Bash::CallLog).to receive(:new).and_return(@call_log)
81
- @subject = Rspec::Bash::StubbedCommand.new('command', Dir.mktmpdir)
86
+ @subject = Rspec::Bash::StubbedCommand.new('command', temp_directory)
82
87
  end
83
88
  it 'returns nil when there is no call_log' do
84
89
  expect(@call_log).to receive(:exist?).and_return(false)
@@ -95,39 +100,34 @@ describe 'StubbedCommand' do
95
100
  before(:each) do
96
101
  @call_configuration = double(Rspec::Bash::CallConfiguration)
97
102
  allow(Rspec::Bash::CallConfiguration).to receive(:new).and_return(@call_configuration)
98
- @subject = Rspec::Bash::StubbedCommand.new('command', Dir.mktmpdir)
103
+ @subject = Rspec::Bash::StubbedCommand.new('command', temp_directory)
99
104
  end
100
105
  it 'sets the exitcode on call_configuration' do
101
106
  expect(@call_configuration).to receive(:set_exitcode).with('exit code', anything)
102
- expect(@call_configuration).to receive(:write)
103
107
  @subject.returns_exitstatus 'exit code'
104
108
  end
105
109
  it 'returns itself' do
106
110
  expect(@call_configuration).to receive(:set_exitcode)
107
- expect(@call_configuration).to receive(:write)
108
111
  expect(@subject.returns_exitstatus(anything)).to eql @subject
109
112
  end
110
113
  end
111
-
114
+
112
115
  context '#outputs' do
113
116
  before(:each) do
114
117
  @call_configuration = double(Rspec::Bash::CallConfiguration)
115
118
  allow(Rspec::Bash::CallConfiguration).to receive(:new).and_return(@call_configuration)
116
- @subject = Rspec::Bash::StubbedCommand.new('command', Dir.mktmpdir)
119
+ @subject = Rspec::Bash::StubbedCommand.new('command', temp_directory)
117
120
  end
118
121
  it 'sets the output on the call_configuration' do
119
- expect(@call_configuration).to receive(:set_output).with('contents', 'stderr', anything)
120
- expect(@call_configuration).to receive(:write)
122
+ expect(@call_configuration).to receive(:add_output).with('contents', 'stderr', anything)
121
123
  @subject.outputs('contents', to: 'stderr')
122
124
  end
123
125
  it 'sets the "to" value for the output to stdout by default' do
124
- expect(@call_configuration).to receive(:set_output).with('contents', :stdout, anything)
125
- expect(@call_configuration).to receive(:write)
126
+ expect(@call_configuration).to receive(:add_output).with('contents', :stdout, anything)
126
127
  @subject.outputs('contents')
127
128
  end
128
129
  it 'returns itself' do
129
- expect(@call_configuration).to receive(:set_output)
130
- expect(@call_configuration).to receive(:write)
130
+ expect(@call_configuration).to receive(:add_output)
131
131
  expect(@subject.outputs(anything)).to eql @subject
132
132
  end
133
133
  end
@@ -1,5 +1,4 @@
1
- require 'English'
2
- require 'rspec/bash'
1
+ require 'spec_helper'
3
2
 
4
3
  describe 'StubbedEnv' do
5
4
  include Rspec::Bash
@@ -15,15 +14,16 @@ describe 'StubbedEnv' do
15
14
 
16
15
  context 'and no arguments' do
17
16
  before(:each) do
18
- @stdout, @stderr, @status = subject.execute_inline(<<-multiline_script
19
- #!/usr/bin/env bash
20
- function overridden_function {
21
- echo 'i was not overridden'
22
- }
23
- overridden_function
24
-
25
- echo 'standard error output' 1>&2
26
- multiline_script
17
+ @stdout, @stderr, @status = subject.execute_inline(
18
+ <<-multiline_script
19
+ #!/usr/bin/env bash
20
+ function overridden_function {
21
+ echo 'i was not overridden'
22
+ }
23
+ overridden_function
24
+
25
+ echo 'standard error output' 1>&2
26
+ multiline_script
27
27
  )
28
28
  end
29
29
 
@@ -42,15 +42,16 @@ describe 'StubbedEnv' do
42
42
 
43
43
  context 'and simple arguments' do
44
44
  before(:each) do
45
- @stdout, @stderr, @status = subject.execute_inline(<<-multiline_script
46
- #!/usr/bin/env bash
47
- function overridden_function {
48
- echo 'i was not overridden'
49
- }
50
- overridden_function argument_one argument_two
51
-
52
- echo 'standard error output' 1>&2
53
- multiline_script
45
+ @stdout, @stderr, @status = subject.execute_inline(
46
+ <<-multiline_script
47
+ #!/usr/bin/env bash
48
+ function overridden_function {
49
+ echo 'i was not overridden'
50
+ }
51
+ overridden_function argument_one argument_two
52
+
53
+ echo 'standard error output' 1>&2
54
+ multiline_script
54
55
  )
55
56
  end
56
57
 
@@ -65,15 +66,16 @@ describe 'StubbedEnv' do
65
66
 
66
67
  context 'and complex arguments (spaces, etc.)' do
67
68
  before(:each) do
68
- @stdout, @stderr, @status = subject.execute_inline(<<-multiline_script
69
- #!/usr/bin/env bash
70
- function overridden_function {
71
- echo 'i was not overridden'
72
- }
73
- overridden_function "argument one" "argument two"
74
-
75
- echo 'standard error output' 1>&2
76
- multiline_script
69
+ @stdout, @stderr, @status = subject.execute_inline(
70
+ <<-multiline_script
71
+ #!/usr/bin/env bash
72
+ function overridden_function {
73
+ echo 'i was not overridden'
74
+ }
75
+ overridden_function "argument one" "argument two"
76
+
77
+ echo 'standard error output' 1>&2
78
+ multiline_script
77
79
  )
78
80
  end
79
81
 
@@ -95,10 +97,11 @@ describe 'StubbedEnv' do
95
97
 
96
98
  context 'and no arguments' do
97
99
  before(:each) do
98
- @stdout, @stderr, @status = subject.execute_inline(<<-multiline_script
99
- #!/usr/bin/env bash
100
- overridden_command
101
- multiline_script
100
+ @stdout, @stderr, @status = subject.execute_inline(
101
+ <<-multiline_script
102
+ #!/usr/bin/env bash
103
+ overridden_command
104
+ multiline_script
102
105
  )
103
106
  end
104
107
 
@@ -113,10 +116,11 @@ describe 'StubbedEnv' do
113
116
 
114
117
  context 'and simple arguments' do
115
118
  before(:each) do
116
- @stdout, @stderr, @status = subject.execute_inline(<<-multiline_script
117
- #!/usr/bin/env bash
118
- overridden_command argument_one argument_two
119
- multiline_script
119
+ @stdout, @stderr, @status = subject.execute_inline(
120
+ <<-multiline_script
121
+ #!/usr/bin/env bash
122
+ overridden_command argument_one argument_two
123
+ multiline_script
120
124
  )
121
125
  end
122
126
 
@@ -131,10 +135,11 @@ describe 'StubbedEnv' do
131
135
 
132
136
  context 'and complex arguments (spaces, etc.)' do
133
137
  before(:each) do
134
- @stdout, @stderr, @status = subject.execute_inline(<<-multiline_script
135
- #!/usr/bin/env bash
136
- overridden_command "argument one" "argument two"
137
- multiline_script
138
+ @stdout, @stderr, @status = subject.execute_inline(
139
+ <<-multiline_script
140
+ #!/usr/bin/env bash
141
+ overridden_command "argument one" "argument two"
142
+ multiline_script
138
143
  )
139
144
  end
140
145
 
@@ -161,8 +166,8 @@ describe 'StubbedEnv' do
161
166
  context 'and no arguments' do
162
167
  before(:each) do
163
168
  @stdout, @stderr, @status = subject.execute_function(
164
- './spec/scripts/function_library.sh',
165
- 'overridden_function'
169
+ './spec/scripts/function_library.sh',
170
+ 'overridden_function'
166
171
  )
167
172
  end
168
173
 
@@ -182,8 +187,8 @@ describe 'StubbedEnv' do
182
187
  context 'and simple arguments' do
183
188
  before(:each) do
184
189
  @stdout, @stderr, @status = subject.execute_function(
185
- './spec/scripts/function_library.sh',
186
- 'overridden_function argument_one argument_two'
190
+ './spec/scripts/function_library.sh',
191
+ 'overridden_function argument_one argument_two'
187
192
  )
188
193
  end
189
194
 
@@ -199,8 +204,8 @@ describe 'StubbedEnv' do
199
204
  context 'and complex arguments (spaces, etc.)' do
200
205
  before(:each) do
201
206
  @stdout, @stderr, @status = subject.execute_function(
202
- './spec/scripts/function_library.sh',
203
- 'overridden_function "argument one" "argument two"'
207
+ './spec/scripts/function_library.sh',
208
+ 'overridden_function "argument one" "argument two"'
204
209
  )
205
210
  end
206
211
 
@@ -223,8 +228,8 @@ describe 'StubbedEnv' do
223
228
  context 'and no arguments' do
224
229
  before(:each) do
225
230
  @stdout, @stderr, @status = subject.execute_function(
226
- './spec/scripts/function_library.sh',
227
- 'overridden_command_function'
231
+ './spec/scripts/function_library.sh',
232
+ 'overridden_command_function'
228
233
  )
229
234
  end
230
235
 
@@ -244,8 +249,8 @@ describe 'StubbedEnv' do
244
249
  context 'and simple arguments' do
245
250
  before(:each) do
246
251
  @stdout, @stderr, @status = subject.execute_function(
247
- './spec/scripts/function_library.sh',
248
- 'overridden_command_function argument_one argument_two'
252
+ './spec/scripts/function_library.sh',
253
+ 'overridden_command_function argument_one argument_two'
249
254
  )
250
255
  end
251
256
 
@@ -261,8 +266,8 @@ describe 'StubbedEnv' do
261
266
  context 'and complex arguments (spaces, etc.)' do
262
267
  before(:each) do
263
268
  @stdout, @stderr, @status = subject.execute_function(
264
- './spec/scripts/function_library.sh',
265
- 'overridden_command_function "argument one" "argument two"'
269
+ './spec/scripts/function_library.sh',
270
+ 'overridden_command_function "argument one" "argument two"'
266
271
  )
267
272
  end
268
273
 
@@ -278,10 +283,6 @@ describe 'StubbedEnv' do
278
283
  end
279
284
 
280
285
  describe 'creating a stubbed env' do
281
- it 'extends the PATH with the stubbed folder first' do
282
- expect { create_stubbed_env }.to change { ENV['PATH'] }
283
- end
284
-
285
286
  it 'creates a folder to place the stubbed commands in' do
286
287
  env = create_stubbed_env
287
288
  expect(Pathname.new(env.dir)).to exist
@@ -290,13 +291,6 @@ describe 'StubbedEnv' do
290
291
  end
291
292
 
292
293
  describe '#cleanup' do
293
- it 'restores the environment variable PATH' do
294
- original_path = ENV['PATH']
295
- env = create_stubbed_env
296
-
297
- expect { env.cleanup }.to change { ENV['PATH'] }.to original_path
298
- end
299
-
300
294
  it 'removes the folder with stubbed commands' do
301
295
  env = create_stubbed_env
302
296
  env.cleanup
@@ -0,0 +1,579 @@
1
+ require 'spec_helper'
2
+ include Rspec::Bash::Util
3
+
4
+ describe 'CallConfArgumentListMatcher' do
5
+ context '#get_best_call_conf' do
6
+ context 'given a call conf list with a with multiple sets of args, output and exitcodes' do
7
+ let(:call_conf_list) do
8
+ [
9
+ {
10
+ args: [],
11
+ exitcode: 6,
12
+ outputs: [
13
+ {
14
+ target: :stdout,
15
+ content: 'seventh_content'
16
+ }
17
+ ]
18
+ },
19
+ {
20
+ args: %w(first_argument second_argument third_argument),
21
+ exitcode: 1,
22
+ outputs: [
23
+ {
24
+ target: :stdout,
25
+ content: 'second_content'
26
+ }
27
+ ]
28
+ },
29
+ {
30
+ args: ['first_argument', anything, anything],
31
+ exitcode: 3,
32
+ outputs: [
33
+ {
34
+ target: :stdout,
35
+ content: 'fourth_content'
36
+ }
37
+ ]
38
+ },
39
+ {
40
+ args: [anything, 'second_argument'],
41
+ exitcode: 4,
42
+ outputs: [
43
+ {
44
+ target: :stdout,
45
+ content: 'fifth_content'
46
+ }
47
+ ]
48
+ },
49
+ {
50
+ args: %w(first_argument second_argument),
51
+ exitcode: 0,
52
+ outputs: [
53
+ {
54
+ target: :stdout,
55
+ content: 'first_content'
56
+ }
57
+ ]
58
+ },
59
+ {
60
+ args: %w(first_argument second_argument),
61
+ exitcode: 2,
62
+ outputs: [
63
+ {
64
+ target: :stdout,
65
+ content: 'third_content'
66
+ }
67
+ ]
68
+ },
69
+ {
70
+ args: [anything, anything, anything, anything],
71
+ exitcode: 5,
72
+ outputs: [
73
+ {
74
+ target: :stdout,
75
+ content: 'sixth_content'
76
+ }
77
+ ]
78
+ },
79
+ {
80
+ args: [anything, anything, 'third_argument', anything, anything],
81
+ exitcode: 7,
82
+ outputs: [
83
+ {
84
+ target: :stdout,
85
+ content: 'eighth_content'
86
+ }
87
+ ]
88
+ },
89
+ {
90
+ args: [anything, anything, anything, anything, anything],
91
+ exitcode: 8,
92
+ outputs: [
93
+ {
94
+ target: :stdout,
95
+ content: 'ninth_content'
96
+ }
97
+ ]
98
+ },
99
+ {
100
+ args: [anything],
101
+ exitcode: 9,
102
+ outputs: [
103
+ {
104
+ target: :stdout,
105
+ content: 'tenth_content'
106
+ }
107
+ ]
108
+ },
109
+ {
110
+ args: [anything],
111
+ exitcode: 10,
112
+ outputs: [
113
+ {
114
+ target: :stdout,
115
+ content: 'eleventh_content'
116
+ }
117
+ ]
118
+ }
119
+ ]
120
+ end
121
+
122
+ it 'returns the longest conf match' do
123
+ argument_list_from_call = %w(first_argument second_argument third_argument)
124
+ subject = CallConfArgumentListMatcher.new(call_conf_list)
125
+ call_conf_match = subject.get_best_call_conf(*argument_list_from_call)
126
+ expect(call_conf_match).to eql call_conf_list.at(2)
127
+ end
128
+
129
+ it 'returns the last longest conf match for multiple exact matches' do
130
+ argument_list_from_call = %w(first_argument second_argument)
131
+ subject = CallConfArgumentListMatcher.new(call_conf_list)
132
+ call_conf_match = subject.get_best_call_conf(*argument_list_from_call)
133
+ expect(call_conf_match).to eql call_conf_list.at(5)
134
+ end
135
+
136
+ it 'returns the longest conf match for any_arg v. anything matches' do
137
+ argument_list_from_call = %w(first_argument second_argument third_argument fourth_argument)
138
+ subject = CallConfArgumentListMatcher.new(call_conf_list)
139
+ call_conf_match = subject.get_best_call_conf(*argument_list_from_call)
140
+ expect(call_conf_match).to eql call_conf_list.at(6)
141
+ end
142
+
143
+ it 'returns the last longest conf match for matches with some anythings' do
144
+ argument_list_from_call = %w(
145
+ first_argument second_argument third_argument
146
+ fourth_argument fifth_argument
147
+ )
148
+ subject = CallConfArgumentListMatcher.new(call_conf_list)
149
+ call_conf_match = subject.get_best_call_conf(*argument_list_from_call)
150
+ expect(call_conf_match).to eql call_conf_list.at(8)
151
+ end
152
+
153
+ it 'returns the last anything match for multiple, all anything matches' do
154
+ argument_list_from_call = %w(first_argument)
155
+ subject = CallConfArgumentListMatcher.new(call_conf_list)
156
+ call_conf_match = subject.get_best_call_conf(*argument_list_from_call)
157
+ expect(call_conf_match).to eql call_conf_list.at(10)
158
+ end
159
+ end
160
+ context 'given a call conf list with a with no all matchers' do
161
+ let(:call_conf_list) do
162
+ [
163
+ {
164
+ args: %w(first_argument second_argument),
165
+ exitcode: 0,
166
+ outputs: [
167
+ {
168
+ target: :stdout,
169
+ content: 'first_content'
170
+ }
171
+ ]
172
+ },
173
+ {
174
+ args: %w(first_argument second_argument third_argument),
175
+ exitcode: 1,
176
+ outputs: [
177
+ {
178
+ target: :stdout,
179
+ content: 'second_content'
180
+ }
181
+ ]
182
+ },
183
+ {
184
+ args: %w(first_argument second_argument),
185
+ exitcode: 2,
186
+ outputs: [
187
+ {
188
+ target: :stdout,
189
+ content: 'third_content'
190
+ }
191
+ ]
192
+ },
193
+ {
194
+ args: ['first_argument', anything, 'third_argument'],
195
+ exitcode: 3,
196
+ outputs: [
197
+ {
198
+ target: :stdout,
199
+ content: 'fourth_content'
200
+ }
201
+ ]
202
+ },
203
+ {
204
+ args: [anything, 'second_argument'],
205
+ exitcode: 4,
206
+ outputs: [
207
+ {
208
+ target: :stdout,
209
+ content: 'fifth_content'
210
+ }
211
+ ]
212
+ },
213
+ {
214
+ args: [anything, anything, anything, anything],
215
+ exitcode: 5,
216
+ outputs: [
217
+ {
218
+ target: :stdout,
219
+ content: 'sixth_content'
220
+ }
221
+ ]
222
+ }
223
+ ]
224
+ end
225
+
226
+ it 'returns an empty conf for no matches' do
227
+ argument_list_from_call =
228
+ %w(first_argument second_argument third_argument fourth_argument fifth_argument)
229
+ subject = CallConfArgumentListMatcher.new(call_conf_list)
230
+ call_conf_match = subject.get_best_call_conf(*argument_list_from_call)
231
+ expect(call_conf_match).to be_empty
232
+ end
233
+ end
234
+ end
235
+ context '#get_call_conf_matches' do
236
+ context 'given a call conf list with a with multiple sets of args, output and exitcodes' do
237
+ let(:call_conf_list) do
238
+ [
239
+ {
240
+ args: %w(first_argument second_argument),
241
+ exitcode: 0,
242
+ outputs: [
243
+ {
244
+ target: :stdout,
245
+ content: 'first_content'
246
+ }
247
+ ]
248
+ },
249
+ {
250
+ args: %w(first_argument second_argument third_argument),
251
+ exitcode: 1,
252
+ outputs: [
253
+ {
254
+ target: :stdout,
255
+ content: 'second_content'
256
+ }
257
+ ]
258
+ },
259
+ {
260
+ args: %w(first_argument second_argument),
261
+ exitcode: 2,
262
+ outputs: [
263
+ {
264
+ target: :stdout,
265
+ content: 'third_content'
266
+ }
267
+ ]
268
+ },
269
+ {
270
+ args: ['first_argument', YAML.load(YAML.dump(anything)), 'third_argument'],
271
+ exitcode: 3,
272
+ outputs: [
273
+ {
274
+ target: :stdout,
275
+ content: 'fourth_content'
276
+ }
277
+ ]
278
+ },
279
+ {
280
+ args: [anything, 'second_argument'],
281
+ exitcode: 4,
282
+ outputs: [
283
+ {
284
+ target: :stdout,
285
+ content: 'fifth_content'
286
+ }
287
+ ]
288
+ },
289
+ {
290
+ args: [anything, anything, anything, anything],
291
+ exitcode: 5,
292
+ outputs: [
293
+ {
294
+ target: :stdout,
295
+ content: 'sixth_content'
296
+ }
297
+ ]
298
+ },
299
+ {
300
+ args: [],
301
+ exitcode: 6,
302
+ outputs: [
303
+ {
304
+ target: :stdout,
305
+ content: 'seventh_content'
306
+ }
307
+ ]
308
+ },
309
+ {
310
+ args: [
311
+ 'first_argument', 'second_argument',
312
+ 'third_argument', 'fourth_argument', any_args
313
+ ],
314
+ exitcode: 6,
315
+ outputs: [
316
+ {
317
+ target: :stdout,
318
+ content: 'seventh_content'
319
+ }
320
+ ]
321
+ },
322
+ {
323
+ args: [
324
+ 'first_argument', 'second_argument',
325
+ 'third_argument', 'fourth_argument', YAML.load(YAML.dump(any_args))
326
+ ],
327
+ exitcode: 6,
328
+ outputs: [
329
+ {
330
+ target: :stdout,
331
+ content: 'seventh_content'
332
+ }
333
+ ]
334
+ }
335
+ ]
336
+ end
337
+
338
+ it 'returns the correct confs for a single exact/anything argument match' do
339
+ argument_list_from_call = %w(first_argument second_argument third_argument)
340
+ subject = CallConfArgumentListMatcher.new(call_conf_list)
341
+ call_conf_match_list = subject.get_call_conf_matches(*argument_list_from_call)
342
+ expect(call_conf_match_list).to eql call_conf_list.values_at(1, 3, 6)
343
+ end
344
+
345
+ it 'returns the correct confs for multiple exact/anything argument matches' do
346
+ argument_list_from_call = %w(first_argument second_argument)
347
+ subject = CallConfArgumentListMatcher.new(call_conf_list)
348
+ call_conf_match_list = subject.get_call_conf_matches(*argument_list_from_call)
349
+ expect(call_conf_match_list).to eql call_conf_list.values_at(0, 2, 4, 6)
350
+ end
351
+
352
+ it 'returns the correct confs for the all argument match' do
353
+ argument_list_from_call = %w(first_argument)
354
+ subject = CallConfArgumentListMatcher.new(call_conf_list)
355
+ call_conf_match_list = subject.get_call_conf_matches(*argument_list_from_call)
356
+ expect(call_conf_match_list).to eql call_conf_list.values_at(6)
357
+ end
358
+
359
+ it 'returns the correct confs for an any_args match' do
360
+ argument_list_from_call = %w(
361
+ first_argument second_argument
362
+ third_argument fourth_argument fifth_argument
363
+ )
364
+ subject = CallConfArgumentListMatcher.new(call_conf_list)
365
+ actual_args_match = subject.get_call_conf_matches(*argument_list_from_call)
366
+ expect(actual_args_match).to eql call_conf_list.values_at(6, 7, 8)
367
+ end
368
+ end
369
+ end
370
+ context '#args_match?' do
371
+ context 'given a call conf list with a with multiple sets of args, output and exitcodes' do
372
+ let(:call_conf_list) do
373
+ [
374
+ {
375
+ args: %w(first_argument second_argument),
376
+ exitcode: 0,
377
+ outputs: [
378
+ {
379
+ target: :stdout,
380
+ content: 'first_content'
381
+ }
382
+ ]
383
+ },
384
+ {
385
+ args: %w(first_argument second_argument third_argument),
386
+ exitcode: 1,
387
+ outputs: [
388
+ {
389
+ target: :stdout,
390
+ content: 'second_content'
391
+ }
392
+ ]
393
+ },
394
+ {
395
+ args: %w(first_argument second_argument),
396
+ exitcode: 2,
397
+ outputs: [
398
+ {
399
+ target: :stdout,
400
+ content: 'third_content'
401
+ }
402
+ ]
403
+ },
404
+ {
405
+ args: ['first_argument', anything, 'third_argument'],
406
+ exitcode: 3,
407
+ outputs: [
408
+ {
409
+ target: :stdout,
410
+ content: 'fourth_content'
411
+ }
412
+ ]
413
+ },
414
+ {
415
+ args: [anything, 'second_argument'],
416
+ exitcode: 4,
417
+ outputs: [
418
+ {
419
+ target: :stdout,
420
+ content: 'fifth_content'
421
+ }
422
+ ]
423
+ },
424
+ {
425
+ args: [anything, anything, anything, anything],
426
+ exitcode: 5,
427
+ outputs: [
428
+ {
429
+ target: :stdout,
430
+ content: 'sixth_content'
431
+ }
432
+ ]
433
+ },
434
+ {
435
+ args: [],
436
+ exitcode: 7,
437
+ outputs: [
438
+ {
439
+ target: :stdout,
440
+ content: 'eighth_content'
441
+ }
442
+ ]
443
+ }
444
+ ]
445
+ end
446
+
447
+ it 'returns the correct confs for a single exact/anything argument match' do
448
+ argument_list_from_call = %w(first_argument second_argument third_argument)
449
+ subject = CallConfArgumentListMatcher.new(call_conf_list)
450
+ actual_args_match = subject.args_match?(*argument_list_from_call)
451
+ expect(actual_args_match).to be true
452
+ end
453
+
454
+ it 'returns the correct confs for multiple exact/anything argument matches' do
455
+ argument_list_from_call = %w(first_argument second_argument)
456
+ subject = CallConfArgumentListMatcher.new(call_conf_list)
457
+ actual_args_match = subject.args_match?(*argument_list_from_call)
458
+ expect(actual_args_match).to be true
459
+ end
460
+
461
+ it 'returns the correct confs for the all argument match' do
462
+ argument_list_from_call = %w(first_argument)
463
+ subject = CallConfArgumentListMatcher.new(call_conf_list)
464
+ actual_args_match = subject.args_match?(*argument_list_from_call)
465
+ expect(actual_args_match).to be true
466
+ end
467
+ end
468
+ context 'given a call conf list with a with no all matchers' do
469
+ let(:call_conf_list) do
470
+ [
471
+ {
472
+ args: %w(first_argument second_argument),
473
+ exitcode: 0,
474
+ outputs: [
475
+ {
476
+ target: :stdout,
477
+ content: 'first_content'
478
+ }
479
+ ]
480
+ },
481
+ {
482
+ args: %w(first_argument second_argument third_argument),
483
+ exitcode: 1,
484
+ outputs: [
485
+ {
486
+ target: :stdout,
487
+ content: 'second_content'
488
+ }
489
+ ]
490
+ },
491
+ {
492
+ args: %w(first_argument second_argument),
493
+ exitcode: 2,
494
+ outputs: [
495
+ {
496
+ target: :stdout,
497
+ content: 'third_content'
498
+ }
499
+ ]
500
+ },
501
+ {
502
+ args: ['first_argument', anything, 'third_argument'],
503
+ exitcode: 3,
504
+ outputs: [
505
+ {
506
+ target: :stdout,
507
+ content: 'fourth_content'
508
+ }
509
+ ]
510
+ },
511
+ {
512
+ args: [anything, 'second_argument'],
513
+ exitcode: 4,
514
+ outputs: [
515
+ {
516
+ target: :stdout,
517
+ content: 'fifth_content'
518
+ }
519
+ ]
520
+ },
521
+ {
522
+ args: [anything, anything, anything, anything],
523
+ exitcode: 5,
524
+ outputs: [
525
+ {
526
+ target: :stdout,
527
+ content: 'sixth_content'
528
+ }
529
+ ]
530
+ },
531
+ {
532
+ args: [
533
+ 'first_argument', 'second_argument',
534
+ 'third_argument', 'fourth_argument', any_args
535
+ ],
536
+ exitcode: 6,
537
+ outputs: [
538
+ {
539
+ target: :stdout,
540
+ content: 'seventh_content'
541
+ }
542
+ ]
543
+ }
544
+ ]
545
+ end
546
+
547
+ it 'returns the correct confs for a single exact/anything argument match' do
548
+ argument_list_from_call = %w(first_argument second_argument third_argument)
549
+ subject = CallConfArgumentListMatcher.new(call_conf_list)
550
+ actual_args_match = subject.args_match?(*argument_list_from_call)
551
+ expect(actual_args_match).to be true
552
+ end
553
+
554
+ it 'returns the correct confs for multiple exact/anything argument matches' do
555
+ argument_list_from_call = %w(first_argument second_argument)
556
+ subject = CallConfArgumentListMatcher.new(call_conf_list)
557
+ actual_args_match = subject.args_match?(*argument_list_from_call)
558
+ expect(actual_args_match).to be true
559
+ end
560
+
561
+ it 'returns the correct confs for the all argument match' do
562
+ argument_list_from_call = %w(first_argument)
563
+ subject = CallConfArgumentListMatcher.new(call_conf_list)
564
+ actual_args_match = subject.args_match?(*argument_list_from_call)
565
+ expect(actual_args_match).to be false
566
+ end
567
+
568
+ it 'returns the correct confs for an any_args match' do
569
+ argument_list_from_call = %w(
570
+ first_argument second_argument
571
+ third_argument fourth_argument fifth_argument
572
+ )
573
+ subject = CallConfArgumentListMatcher.new(call_conf_list)
574
+ actual_args_match = subject.args_match?(*argument_list_from_call)
575
+ expect(actual_args_match).to be true
576
+ end
577
+ end
578
+ end
579
+ end