ceedling 0.27.0 → 0.28.1
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/assets/project_as_gem.yml +6 -0
- data/assets/project_with_guts.yml +6 -0
- data/assets/project_with_guts_gcov.yml +88 -0
- data/assets/test_example_file_boom.c +13 -0
- data/assets/test_example_file_success.c +14 -0
- data/bin/ceedling +57 -113
- data/ceedling.gemspec +1 -1
- data/config/test_environment.rb +0 -1
- data/examples/blinky/project.yml +1 -1
- data/examples/temp_sensor/project.yml +7 -1
- data/examples/temp_sensor/rakefile.rb +3 -1
- data/lib/ceedling/build_invoker_utils.rb +14 -2
- data/lib/ceedling/configurator.rb +3 -1
- data/lib/ceedling/configurator_builder.rb +6 -4
- data/lib/ceedling/configurator_setup.rb +5 -1
- data/lib/ceedling/defaults.rb +5 -2
- data/lib/ceedling/dependinator.rb +1 -1
- data/lib/ceedling/file_path_utils.rb +1 -2
- data/lib/ceedling/generator_test_results.rb +3 -2
- data/lib/ceedling/generator_test_results_sanity_checker.rb +4 -3
- data/lib/ceedling/project_file_loader.rb +26 -9
- data/lib/ceedling/rakefile.rb +9 -2
- data/lib/ceedling/release_invoker.rb +1 -1
- data/lib/ceedling/reportinator.rb +18 -1
- data/lib/ceedling/system_utils.rb +6 -1
- data/lib/ceedling/system_wrapper.rb +2 -1
- data/lib/ceedling/target_loader.rb +2 -2
- data/lib/ceedling/tasks_filesystem.rake +8 -2
- data/lib/ceedling/tool_executor_helper.rb +71 -22
- data/lib/ceedling/version.rb +1 -1
- data/license.txt +1 -1
- data/out.fail +21 -0
- data/plugins/command_hooks/lib/command_hooks.rb +2 -1
- data/plugins/gcov/config/defaults.yml +22 -0
- data/plugins/gcov/gcov.rake +79 -65
- data/plugins/gcov/lib/gcov.rb +25 -38
- data/plugins/gcov/lib/gcov_constants.rb +16 -0
- data/spec/build_invoker_utils_spec.rb +54 -0
- data/spec/file_finder_helper_spec.rb +53 -0
- data/spec/gcov/gcov_deployment_spec.rb +70 -0
- data/spec/gcov/gcov_test_cases_spec.rb +91 -0
- data/spec/generator_test_results_sanity_checker_spec.rb +88 -0
- data/spec/generator_test_results_spec.rb +102 -0
- data/spec/reportinator_spec.rb +19 -0
- data/spec/spec_system_helper.rb +67 -5
- data/spec/support/other_target.yml +0 -0
- data/spec/support/target.yml +0 -0
- data/spec/support/test_example.fail +21 -0
- data/spec/support/test_example.pass +21 -0
- data/spec/support/test_example_empty.pass +13 -0
- data/spec/support/test_example_ignore.pass +21 -0
- data/spec/support/test_example_mangled.pass +19 -0
- data/spec/system/deployment_spec.rb +25 -5
- data/spec/system_utils_spec.rb +56 -0
- data/spec/target_loader_spec.rb +30 -0
- data/spec/tool_executor_helper_spec.rb +310 -0
- data/vendor/cmock/scripts/create_makefile.rb +35 -12
- data/vendor/unity/src/unity_internals.h +3 -3
- metadata +62 -27
- data/assets/rakefile_as_gem.rb +0 -3
- data/assets/rakefile_with_guts.rb +0 -6
- data/vendor/constructor/History.rdoc +0 -19
- data/vendor/constructor/README.rdoc +0 -72
- data/vendor/constructor/Rakefile +0 -33
- data/vendor/constructor/homepage/Notes.txt +0 -27
- data/vendor/constructor/homepage/Rakefile +0 -15
- data/vendor/constructor/homepage/index.erb +0 -27
- data/vendor/constructor/homepage/index.html +0 -36
- data/vendor/constructor/homepage/page_header.graffle +0 -0
- data/vendor/constructor/homepage/page_header.html +0 -9
- data/vendor/constructor/homepage/page_header.png +0 -0
- data/vendor/constructor/homepage/sample_code.png +0 -0
- data/vendor/constructor/homepage/sample_code.rb +0 -12
- data/vendor/constructor/lib/constructor.rb +0 -127
- data/vendor/constructor/lib/constructor_struct.rb +0 -33
- data/vendor/constructor/specs/constructor_spec.rb +0 -407
- data/vendor/constructor/specs/constructor_struct_spec.rb +0 -84
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'ceedling/reportinator'
|
3
|
+
|
4
|
+
describe Reportinator do
|
5
|
+
before(:each) do
|
6
|
+
@rp = described_class.new
|
7
|
+
end
|
8
|
+
|
9
|
+
describe '#generate_banner' do
|
10
|
+
it 'generates a banner with a width based on a string' do
|
11
|
+
expect(@rp.generate_banner("Hello world!")).to eq("------------\nHello world!\n------------\n")
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'generates a banner with a fixed width' do
|
15
|
+
expect(@rp.generate_banner("Hello world!", 3)).to eq("---\nHello world!\n---\n")
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
data/spec/spec_system_helper.rb
CHANGED
@@ -60,7 +60,7 @@ class SystemContext
|
|
60
60
|
checks = ["bundle exec ruby -S ceedling 2>&1"]
|
61
61
|
checks.each do |c|
|
62
62
|
`#{c}`
|
63
|
-
raise VerificationFailed.new(c) unless $?.success?
|
63
|
+
#raise VerificationFailed.new(c) unless $?.success?
|
64
64
|
end
|
65
65
|
end
|
66
66
|
end
|
@@ -125,7 +125,6 @@ module CeedlingTestCases
|
|
125
125
|
@c.with_context do
|
126
126
|
Dir.chdir @proj_name do
|
127
127
|
expect(File.exists?("project.yml")).to eq true
|
128
|
-
expect(File.exists?("rakefile.rb")).to eq true
|
129
128
|
expect(File.exists?("src")).to eq true
|
130
129
|
expect(File.exists?("test")).to eq true
|
131
130
|
end
|
@@ -139,7 +138,6 @@ module CeedlingTestCases
|
|
139
138
|
expect(output).to match(/upgraded!/i)
|
140
139
|
Dir.chdir @proj_name do
|
141
140
|
expect(File.exists?("project.yml")).to eq true
|
142
|
-
expect(File.exists?("rakefile.rb")).to eq true
|
143
141
|
expect(File.exists?("src")).to eq true
|
144
142
|
expect(File.exists?("test")).to eq true
|
145
143
|
all_docs = Dir["vendor/ceedling/docs/*.pdf"].length + Dir["vendor/ceedling/docs/*.md"].length
|
@@ -182,7 +180,24 @@ module CeedlingTestCases
|
|
182
180
|
end
|
183
181
|
end
|
184
182
|
|
185
|
-
def
|
183
|
+
def can_test_projects_with_success
|
184
|
+
@c.with_context do
|
185
|
+
Dir.chdir @proj_name do
|
186
|
+
FileUtils.cp test_asset_path("example_file.h"), 'src/'
|
187
|
+
FileUtils.cp test_asset_path("example_file.c"), 'src/'
|
188
|
+
FileUtils.cp test_asset_path("test_example_file_success.c"), 'test/'
|
189
|
+
|
190
|
+
output = `bundle exec ruby -S ceedling test:all`
|
191
|
+
expect($?.exitstatus).to match(0) # Since a test either pass or are ignored, we return success here
|
192
|
+
expect(output).to match(/TESTED:\s+\d/)
|
193
|
+
expect(output).to match(/PASSED:\s+\d/)
|
194
|
+
expect(output).to match(/FAILED:\s+\d/)
|
195
|
+
expect(output).to match(/IGNORED:\s+\d/)
|
196
|
+
end
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
200
|
+
def can_test_projects_with_fail
|
186
201
|
@c.with_context do
|
187
202
|
Dir.chdir @proj_name do
|
188
203
|
FileUtils.cp test_asset_path("example_file.h"), 'src/'
|
@@ -190,7 +205,7 @@ module CeedlingTestCases
|
|
190
205
|
FileUtils.cp test_asset_path("test_example_file.c"), 'test/'
|
191
206
|
|
192
207
|
output = `bundle exec ruby -S ceedling test:all`
|
193
|
-
expect($?.exitstatus).to match(
|
208
|
+
expect($?.exitstatus).to match(1) # Since a test fails, we return error here
|
194
209
|
expect(output).to match(/TESTED:\s+\d/)
|
195
210
|
expect(output).to match(/PASSED:\s+\d/)
|
196
211
|
expect(output).to match(/FAILED:\s+\d/)
|
@@ -199,6 +214,21 @@ module CeedlingTestCases
|
|
199
214
|
end
|
200
215
|
end
|
201
216
|
|
217
|
+
def can_test_projects_with_compile_error
|
218
|
+
@c.with_context do
|
219
|
+
Dir.chdir @proj_name do
|
220
|
+
FileUtils.cp test_asset_path("example_file.h"), 'src/'
|
221
|
+
FileUtils.cp test_asset_path("example_file.c"), 'src/'
|
222
|
+
FileUtils.cp test_asset_path("test_example_file_boom.c"), 'test/'
|
223
|
+
|
224
|
+
output = `bundle exec ruby -S ceedling test:all`
|
225
|
+
expect($?.exitstatus).to match(1) # Since a test explodes, we return error here
|
226
|
+
expect(output).to match(/ERROR: Ceedling Failed/)
|
227
|
+
end
|
228
|
+
end
|
229
|
+
end
|
230
|
+
|
231
|
+
|
202
232
|
def can_fetch_non_project_help
|
203
233
|
@c.with_context do
|
204
234
|
#notice we don't change directory into the project
|
@@ -239,7 +269,39 @@ module CeedlingTestCases
|
|
239
269
|
output = `bundle exec ruby -S ceedling test:all`
|
240
270
|
expect($?.exitstatus).to match(0)
|
241
271
|
expect(output).to match(/Need to Implement ponies/)
|
272
|
+
output = `bundle exec ruby -S ceedling module:destroy[ponies]`
|
273
|
+
expect($?.exitstatus).to match(0)
|
274
|
+
expect(output).to match(/Destroy Complete/i)
|
275
|
+
end
|
276
|
+
end
|
277
|
+
end
|
278
|
+
|
279
|
+
def handles_creating_the_same_module_twice_using_the_module_plugin
|
280
|
+
@c.with_context do
|
281
|
+
Dir.chdir @proj_name do
|
282
|
+
output = `bundle exec ruby -S ceedling module:create[unicorns]`
|
283
|
+
expect($?.exitstatus).to match(0)
|
284
|
+
expect(output).to match(/Generate Complete/i)
|
285
|
+
|
286
|
+
output = `bundle exec ruby -S ceedling module:create[unicorns]`
|
287
|
+
expect($?.exitstatus).to match(1)
|
288
|
+
expect(output).to match(/ERROR: Ceedling Failed/)
|
242
289
|
end
|
243
290
|
end
|
244
291
|
end
|
292
|
+
|
293
|
+
def handles_destroying_a_module_that_does_not_exist_using_the_module_plugin
|
294
|
+
@c.with_context do
|
295
|
+
Dir.chdir @proj_name do
|
296
|
+
output = `bundle exec ruby -S ceedling module:destroy[unknown]`
|
297
|
+
expect($?.exitstatus).to match(0)
|
298
|
+
|
299
|
+
expect(output).to match(/File src\/unknown\.c does not exist so cannot be removed\./)
|
300
|
+
expect(output).to match(/File src\/unknown\.h does not exist so cannot be removed\./)
|
301
|
+
expect(output).to match(/File test\/test_unknown\.c does not exist so cannot be removed\./)
|
302
|
+
expect(output).to match(/Destroy Complete/)
|
303
|
+
end
|
304
|
+
end
|
305
|
+
end
|
306
|
+
|
245
307
|
end
|
File without changes
|
File without changes
|
@@ -0,0 +1,21 @@
|
|
1
|
+
---
|
2
|
+
:source:
|
3
|
+
:path: some/place
|
4
|
+
:file: test_example.c
|
5
|
+
:successes: []
|
6
|
+
:failures:
|
7
|
+
- :test: test_one
|
8
|
+
:line: 257
|
9
|
+
:message: ''
|
10
|
+
- :test: test_two
|
11
|
+
:line: 269
|
12
|
+
:message: ''
|
13
|
+
:ignores: []
|
14
|
+
:counts:
|
15
|
+
:total: 2
|
16
|
+
:passed: 0
|
17
|
+
:failed: 2
|
18
|
+
:ignored: 0
|
19
|
+
:stdout:
|
20
|
+
- Verbose output one
|
21
|
+
- Verbous output two
|
@@ -0,0 +1,21 @@
|
|
1
|
+
---
|
2
|
+
:source:
|
3
|
+
:path: some/place
|
4
|
+
:file: test_example.c
|
5
|
+
:successes:
|
6
|
+
- :test: test_one
|
7
|
+
:line: 257
|
8
|
+
:message: ''
|
9
|
+
- :test: test_two
|
10
|
+
:line: 269
|
11
|
+
:message: ''
|
12
|
+
:failures: []
|
13
|
+
:ignores: []
|
14
|
+
:counts:
|
15
|
+
:total: 2
|
16
|
+
:passed: 2
|
17
|
+
:failed: 0
|
18
|
+
:ignored: 0
|
19
|
+
:stdout:
|
20
|
+
- Verbose output one
|
21
|
+
- Verbous output two
|
@@ -0,0 +1,21 @@
|
|
1
|
+
---
|
2
|
+
:source:
|
3
|
+
:path: some/place
|
4
|
+
:file: test_example.c
|
5
|
+
:successes: []
|
6
|
+
:failures: []
|
7
|
+
:ignores:
|
8
|
+
- :test: test_one
|
9
|
+
:line: 257
|
10
|
+
:message: ''
|
11
|
+
- :test: test_two
|
12
|
+
:line: 269
|
13
|
+
:message: ''
|
14
|
+
:counts:
|
15
|
+
:total: 2
|
16
|
+
:passed: 0
|
17
|
+
:failed: 0
|
18
|
+
:ignored: 2
|
19
|
+
:stdout:
|
20
|
+
- Verbose output one
|
21
|
+
- Verbous output two
|
@@ -0,0 +1,19 @@
|
|
1
|
+
---
|
2
|
+
:source:
|
3
|
+
:path: some/place
|
4
|
+
:file: test_example.c
|
5
|
+
:successes:
|
6
|
+
- :test: test_one
|
7
|
+
:line: 257
|
8
|
+
:message: ''
|
9
|
+
-
|
10
|
+
:failures: []
|
11
|
+
:ignores: []
|
12
|
+
:counts:
|
13
|
+
:total: 2
|
14
|
+
:passed: 2
|
15
|
+
:failed: 0
|
16
|
+
:ignored: 0
|
17
|
+
:stdout:
|
18
|
+
- Verbose output one
|
19
|
+
- test_example.c:269:test_tVerbous output two
|
@@ -27,8 +27,12 @@ describe "Ceedling" do
|
|
27
27
|
it { contains_documentation }
|
28
28
|
it { can_fetch_non_project_help }
|
29
29
|
it { can_fetch_project_help }
|
30
|
-
it {
|
30
|
+
it { can_test_projects_with_success }
|
31
|
+
it { can_test_projects_with_fail }
|
32
|
+
it { can_test_projects_with_compile_error }
|
31
33
|
it { can_use_the_module_plugin }
|
34
|
+
it { handles_creating_the_same_module_twice_using_the_module_plugin }
|
35
|
+
it { handles_destroying_a_module_that_does_not_exist_using_the_module_plugin }
|
32
36
|
end
|
33
37
|
|
34
38
|
describe "deployed in a project's `vendor` directory without docs." do
|
@@ -43,8 +47,12 @@ describe "Ceedling" do
|
|
43
47
|
it { does_not_contain_documentation }
|
44
48
|
it { can_fetch_non_project_help }
|
45
49
|
it { can_fetch_project_help }
|
46
|
-
it {
|
50
|
+
it { can_test_projects_with_success }
|
51
|
+
it { can_test_projects_with_fail }
|
52
|
+
it { can_test_projects_with_compile_error }
|
47
53
|
it { can_use_the_module_plugin }
|
54
|
+
it { handles_creating_the_same_module_twice_using_the_module_plugin }
|
55
|
+
it { handles_destroying_a_module_that_does_not_exist_using_the_module_plugin }
|
48
56
|
end
|
49
57
|
|
50
58
|
describe "ugrade a project's `vendor` directory" do
|
@@ -59,15 +67,23 @@ describe "Ceedling" do
|
|
59
67
|
it { does_not_contain_documentation }
|
60
68
|
it { can_fetch_non_project_help }
|
61
69
|
it { can_fetch_project_help }
|
62
|
-
it {
|
70
|
+
it { can_test_projects_with_success }
|
71
|
+
it { can_test_projects_with_fail }
|
72
|
+
it { can_test_projects_with_compile_error }
|
63
73
|
it { can_use_the_module_plugin }
|
74
|
+
it { handles_creating_the_same_module_twice_using_the_module_plugin }
|
75
|
+
it { handles_destroying_a_module_that_does_not_exist_using_the_module_plugin }
|
64
76
|
|
65
77
|
it { can_upgrade_projects }
|
66
78
|
it { contains_a_vendor_directory }
|
67
79
|
it { can_fetch_non_project_help }
|
68
80
|
it { can_fetch_project_help }
|
69
|
-
it {
|
81
|
+
it { can_test_projects_with_success }
|
82
|
+
it { can_test_projects_with_fail }
|
83
|
+
it { can_test_projects_with_compile_error }
|
70
84
|
it { can_use_the_module_plugin }
|
85
|
+
it { handles_creating_the_same_module_twice_using_the_module_plugin }
|
86
|
+
it { handles_destroying_a_module_that_does_not_exist_using_the_module_plugin }
|
71
87
|
end
|
72
88
|
|
73
89
|
describe "deployed as a gem" do
|
@@ -81,8 +97,12 @@ describe "Ceedling" do
|
|
81
97
|
it { does_not_contain_a_vendor_directory }
|
82
98
|
it { can_fetch_non_project_help }
|
83
99
|
it { can_fetch_project_help }
|
84
|
-
it {
|
100
|
+
it { can_test_projects_with_success }
|
101
|
+
it { can_test_projects_with_fail }
|
102
|
+
it { can_test_projects_with_compile_error }
|
85
103
|
it { can_use_the_module_plugin }
|
104
|
+
it { handles_creating_the_same_module_twice_using_the_module_plugin }
|
105
|
+
it { handles_destroying_a_module_that_does_not_exist_using_the_module_plugin }
|
86
106
|
end
|
87
107
|
|
88
108
|
describe "command: `ceedling examples`" do
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'ceedling/system_utils'
|
3
|
+
|
4
|
+
|
5
|
+
describe SystemUtils do
|
6
|
+
before(:each) do
|
7
|
+
# this will always be mocked
|
8
|
+
@sys_wrapper = nil
|
9
|
+
allow_message_expectations_on_nil
|
10
|
+
|
11
|
+
@sys_utils = described_class.new({:system_wrapper => @sys_wrapper})
|
12
|
+
@sys_utils.setup
|
13
|
+
end
|
14
|
+
|
15
|
+
describe '#setup' do
|
16
|
+
it 'sets tcsh_shell to nil' do
|
17
|
+
expect(@sys_utils.instance_variable_get(:@tcsh_shell)).to eq(nil)
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'sets tcsh_shell to nil after being set' do
|
21
|
+
expect(@sys_utils.instance_variable_get(:@tcsh_shell)).to eq(nil)
|
22
|
+
|
23
|
+
|
24
|
+
allow(@streaminator).to receive(:shell_backticks).with('echo $version').and_return({:exit_code => 0, :output =>'tcsh 1234567890'})
|
25
|
+
@sys_utils.tcsh_shell?
|
26
|
+
|
27
|
+
@sys_utils.setup
|
28
|
+
expect(@sys_utils.instance_variable_get(:@tcsh_shell)).to eq(nil)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
describe '#tcsh_shell?' do
|
34
|
+
it 'returns true if exit code is zero and output contains tcsh' do
|
35
|
+
allow(@streaminator).to receive(:shell_backticks).with('echo $version').and_return({:exit_code => 0, :output =>'tcsh 1234567890'})
|
36
|
+
expect(@sys_utils.tcsh_shell?).to eq(true)
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'returns false if exit code is not 0' do
|
40
|
+
allow(@streaminator).to receive(:shell_backticks).with('echo $version').and_return({:exit_code => 1, :output =>'tcsh 1234567890'})
|
41
|
+
expect(@sys_utils.tcsh_shell?).to eq(false)
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'returns false if output does not contain tcsh' do
|
45
|
+
allow(@streaminator).to receive(:shell_backticks).with('echo $version').and_return({:exit_code => 0, :output =>'???'})
|
46
|
+
expect(@sys_utils.tcsh_shell?).to eq(false)
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'returns last value if already run' do
|
50
|
+
allow(@streaminator).to receive(:shell_backticks).with('echo $version').and_return({:exit_code => 1, :output =>'???'})
|
51
|
+
expect(@sys_utils.tcsh_shell?).to eq(false)
|
52
|
+
allow(@streaminator).to receive(:shell_backticks).with('echo $version').and_return({:exit_code => 0, :output =>'tcsh 1234567890'})
|
53
|
+
expect(@sys_utils.tcsh_shell?).to eq(false)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'ceedling/target_loader'
|
3
|
+
|
4
|
+
|
5
|
+
describe TargetLoader do
|
6
|
+
describe '.inspect' do
|
7
|
+
|
8
|
+
it 'raises NoTargets if targets does not exist' do
|
9
|
+
expect{TargetLoader.inspect({})}.to raise_error(TargetLoader::NoTargets)
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'raises NoDirectory if targets_directory inside of targets does not exist' do
|
13
|
+
expect{TargetLoader.inspect({:targets => {}})}.to raise_error(TargetLoader::NoDirectory)
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'raises NoDefault if default_target inside of targets does not exist' do
|
17
|
+
expect{TargetLoader.inspect({:targets => {:targets_directory => File.join('spec', 'support')}})}.to raise_error(TargetLoader::NoDefault)
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'raises NoSuchTarget if file does not exist' do
|
21
|
+
expect{TargetLoader.inspect({:targets => {:targets_directory => File.join('spec', 'other'), :default_target => 'target'}})}.to raise_error(TargetLoader::NoSuchTarget)
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'raises RequestReload if file exists' do
|
25
|
+
expect{TargetLoader.inspect({:targets => {:targets_directory => File.join('spec', 'support'), :default_target => 'target'}})}.to raise_error(TargetLoader::RequestReload)
|
26
|
+
expect{TargetLoader.inspect({:targets => {:targets_directory => File.join('spec', 'support'), :default_target => 'target'}}, 'other_target')}.to raise_error(TargetLoader::RequestReload)
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,310 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'ceedling/constants'
|
3
|
+
require 'ceedling/tool_executor_helper'
|
4
|
+
require 'ceedling/system_wrapper'
|
5
|
+
require 'ceedling/streaminator'
|
6
|
+
require 'ceedling/system_utils'
|
7
|
+
|
8
|
+
HAPPY_OUTPUT =
|
9
|
+
"> Shell executed command:\n" +
|
10
|
+
"'gcc ab.c'\n" +
|
11
|
+
"\n".freeze
|
12
|
+
|
13
|
+
HAPPY_OUTPUT_WITH_STATUS =
|
14
|
+
"> Shell executed command:\n" +
|
15
|
+
"'gcc ab.c'\n" +
|
16
|
+
"> And exited with status: [1].\n" +
|
17
|
+
"\n".freeze
|
18
|
+
|
19
|
+
HAPPY_OUTPUT_WITH_MESSAGE =
|
20
|
+
"> Shell executed command:\n" +
|
21
|
+
"'gcc ab.c'\n" +
|
22
|
+
"> Produced output:\n" +
|
23
|
+
"xyz\n" +
|
24
|
+
"\n".freeze
|
25
|
+
|
26
|
+
HAPPY_OUTPUT_WITH_MESSAGE_AND_STATUS =
|
27
|
+
"> Shell executed command:\n" +
|
28
|
+
"'gcc ab.c'\n" +
|
29
|
+
"> Produced output:\n" +
|
30
|
+
"xyz\n" +
|
31
|
+
"> And exited with status: [1].\n" +
|
32
|
+
"\n".freeze
|
33
|
+
|
34
|
+
ERROR_OUTPUT =
|
35
|
+
"ERROR: Shell command failed.\n" +
|
36
|
+
"> Shell executed command:\n" +
|
37
|
+
"'gcc ab.c'\n" +
|
38
|
+
"> And exited with status: [1].\n" +
|
39
|
+
"\n"
|
40
|
+
|
41
|
+
ERROR_OUTPUT_WITH_MESSAGE =
|
42
|
+
"ERROR: Shell command failed.\n" +
|
43
|
+
"> Shell executed command:\n" +
|
44
|
+
"'gcc ab.c'\n" +
|
45
|
+
"> Produced output:\n" +
|
46
|
+
"xyz\n" +
|
47
|
+
"> And exited with status: [1].\n" +
|
48
|
+
"\n"
|
49
|
+
|
50
|
+
|
51
|
+
describe ToolExecutorHelper do
|
52
|
+
before(:each) do
|
53
|
+
# these will always be mocked
|
54
|
+
@sys_wraper = SystemWrapper.new
|
55
|
+
@sys_utils = SystemUtils.new({:system_wrapper => @sys_wraper})
|
56
|
+
@streaminator = Streaminator.new({:streaminator_helper => nil, :verbosinator => nil, :loginator => nil, :stream_wrapper => @sys_wraper})
|
57
|
+
|
58
|
+
|
59
|
+
@tool_exe_helper = described_class.new({:streaminator => @streaminator, :system_utils => @sys_utils, :system_wrapper => @sys_wraper})
|
60
|
+
end
|
61
|
+
|
62
|
+
|
63
|
+
describe '#stderr_redirection' do
|
64
|
+
it 'returns stderr_redirect if logging is false' do
|
65
|
+
expect(@tool_exe_helper.stderr_redirection({:stderr_redirect => StdErrRedirect::NONE}, false)).to eq(StdErrRedirect::NONE)
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'returns stderr_redirect if logging is true and is a string' do
|
69
|
+
expect(@tool_exe_helper.stderr_redirection({:stderr_redirect => 'abc'}, true)).to eq('abc')
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'returns AUTO if logging is true and stderr_redirect is not a string' do
|
73
|
+
expect(@tool_exe_helper.stderr_redirection({:stderr_redirect => StdErrRedirect::NONE}, true)).to eq(StdErrRedirect::AUTO)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
|
78
|
+
describe '#background_exec_cmdline_prepend' do
|
79
|
+
it 'returns nil if tool_config is nil' do
|
80
|
+
expect(@tool_exe_helper.background_exec_cmdline_prepend(nil)).to be_nil
|
81
|
+
end
|
82
|
+
|
83
|
+
it 'returns nil if tool_config[:background_exec] is nil' do
|
84
|
+
expect(@tool_exe_helper.background_exec_cmdline_prepend({:background_exec =>nil})).to be_nil
|
85
|
+
end
|
86
|
+
|
87
|
+
it 'returns "start" if tool_config[:background_exec] is AUTO on windows' do
|
88
|
+
expect(@sys_wraper).to receive(:windows?).and_return(true)
|
89
|
+
expect(@tool_exe_helper.background_exec_cmdline_prepend({:background_exec =>BackgroundExec::AUTO})).to eq('start')
|
90
|
+
end
|
91
|
+
|
92
|
+
it 'returns nil if tool_config[:background_exec] is AUTO not on windows' do
|
93
|
+
expect(@sys_wraper).to receive(:windows?).and_return(false)
|
94
|
+
expect(@tool_exe_helper.background_exec_cmdline_prepend({:background_exec =>BackgroundExec::AUTO})).to be_nil
|
95
|
+
end
|
96
|
+
|
97
|
+
it 'returns "start" if tool_config[:background_exec] is WIN' do
|
98
|
+
expect(@tool_exe_helper.background_exec_cmdline_prepend({:background_exec =>BackgroundExec::WIN})).to eq('start')
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
|
103
|
+
describe '#osify_path_separators' do
|
104
|
+
it 'returns path if system is not windows' do
|
105
|
+
exe = '/just/some/executable.out'
|
106
|
+
expect(@sys_wraper).to receive(:windows?).and_return(false)
|
107
|
+
expect(@tool_exe_helper.osify_path_separators(exe)).to eq(exe)
|
108
|
+
end
|
109
|
+
|
110
|
+
it 'returns modifed if system is windows' do
|
111
|
+
exe = '/just/some/executable.exe'
|
112
|
+
expect(@sys_wraper).to receive(:windows?).and_return(true)
|
113
|
+
expect(@tool_exe_helper.osify_path_separators(exe)).to eq("\\just\\some\\executable.exe")
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
|
118
|
+
describe '#stderr_redirect_cmdline_append' do
|
119
|
+
it 'returns nil if tool_config is nil' do
|
120
|
+
expect(@tool_exe_helper.stderr_redirect_cmdline_append(nil)).to be_nil
|
121
|
+
end
|
122
|
+
|
123
|
+
it 'returns nil if tool_config[:stderr_redirect] is nil' do
|
124
|
+
tool_config = {:stderr_redirect => nil}
|
125
|
+
expect(@tool_exe_helper.stderr_redirect_cmdline_append(tool_config)).to be_nil
|
126
|
+
end
|
127
|
+
|
128
|
+
it 'returns nil if tool_config is set to none' do
|
129
|
+
tool_config = {:stderr_redirect => StdErrRedirect::NONE}
|
130
|
+
expect(@tool_exe_helper.stderr_redirect_cmdline_append(tool_config)).to be_nil
|
131
|
+
end
|
132
|
+
|
133
|
+
context 'StdErrRedirect::AUTO' do
|
134
|
+
before(:each) do
|
135
|
+
@tool_config = {:stderr_redirect => StdErrRedirect::AUTO}
|
136
|
+
end
|
137
|
+
|
138
|
+
|
139
|
+
it 'returns "2>&1" if system is windows' do
|
140
|
+
expect(@sys_wraper).to receive(:windows?).and_return(true)
|
141
|
+
expect(@tool_exe_helper.stderr_redirect_cmdline_append(@tool_config)).to eq('2>&1')
|
142
|
+
end
|
143
|
+
|
144
|
+
it 'returns "|&" if system is tcsh' do
|
145
|
+
expect(@sys_wraper).to receive(:windows?).and_return(false)
|
146
|
+
expect(@sys_utils).to receive(:tcsh_shell?).and_return(true)
|
147
|
+
expect(@tool_exe_helper.stderr_redirect_cmdline_append(@tool_config)).to eq('|&')
|
148
|
+
end
|
149
|
+
|
150
|
+
it 'returns "2>&1" if system is unix' do
|
151
|
+
expect(@sys_wraper).to receive(:windows?).and_return(false)
|
152
|
+
expect(@sys_utils).to receive(:tcsh_shell?).and_return(false)
|
153
|
+
expect(@tool_exe_helper.stderr_redirect_cmdline_append(@tool_config)).to eq('2>&1')
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
|
159
|
+
describe '#background_exec_cmdline_append' do
|
160
|
+
it 'returns nil if tool_config is nil' do
|
161
|
+
expect(@tool_exe_helper.background_exec_cmdline_append(nil)).to be_nil
|
162
|
+
end
|
163
|
+
|
164
|
+
it 'returns nil if tool_config[:background_exec] is nil' do
|
165
|
+
tool_config = {:background_exec => nil}
|
166
|
+
expect(@tool_exe_helper.background_exec_cmdline_append(tool_config)).to be_nil
|
167
|
+
end
|
168
|
+
|
169
|
+
it 'returns nil if tool_config is set to none' do
|
170
|
+
tool_config = {:background_exec => BackgroundExec::NONE}
|
171
|
+
expect(@tool_exe_helper.background_exec_cmdline_append(tool_config)).to be_nil
|
172
|
+
end
|
173
|
+
|
174
|
+
it 'returns nil if tool_config is set to none' do
|
175
|
+
tool_config = {:background_exec => BackgroundExec::WIN}
|
176
|
+
expect(@tool_exe_helper.background_exec_cmdline_append(tool_config)).to be_nil
|
177
|
+
end
|
178
|
+
|
179
|
+
it 'returns "&" if tool_config is set to UNIX' do
|
180
|
+
tool_config = {:background_exec => BackgroundExec::UNIX}
|
181
|
+
expect(@tool_exe_helper.background_exec_cmdline_append(tool_config)).to eq('&')
|
182
|
+
end
|
183
|
+
|
184
|
+
context 'when tool_config[:background_exec] BackgroundExec:AUTO' do
|
185
|
+
before(:each) do
|
186
|
+
@tool_config = {:background_exec => BackgroundExec::AUTO}
|
187
|
+
end
|
188
|
+
|
189
|
+
|
190
|
+
it 'returns nil if system is windows' do
|
191
|
+
expect(@sys_wraper).to receive(:windows?).and_return(true)
|
192
|
+
expect(@tool_exe_helper.background_exec_cmdline_append(@tool_config)).to be_nil
|
193
|
+
end
|
194
|
+
|
195
|
+
it 'returns "&" if system is not windows' do
|
196
|
+
expect(@sys_wraper).to receive(:windows?).and_return(false)
|
197
|
+
expect(@sys_wraper).to receive(:windows?).and_return(false)
|
198
|
+
expect(@tool_exe_helper.background_exec_cmdline_append(@tool_config)).to eq('&')
|
199
|
+
end
|
200
|
+
end
|
201
|
+
end
|
202
|
+
|
203
|
+
describe '#print_happy_results' do
|
204
|
+
context 'when exit code is 0' do
|
205
|
+
before(:each) do
|
206
|
+
@shell_result = {:exit_code => 0, :output => ""}
|
207
|
+
end
|
208
|
+
|
209
|
+
it 'and boom is true displays output' do
|
210
|
+
expect(@streaminator).to receive(:stdout_puts).with(HAPPY_OUTPUT, Verbosity::OBNOXIOUS)
|
211
|
+
@tool_exe_helper.print_happy_results("gcc ab.c", @shell_result, true)
|
212
|
+
end
|
213
|
+
|
214
|
+
it 'and boom is true with message displays output' do
|
215
|
+
@shell_result[:output] = "xyz"
|
216
|
+
expect(@streaminator).to receive(:stdout_puts).with(HAPPY_OUTPUT_WITH_MESSAGE, Verbosity::OBNOXIOUS)
|
217
|
+
@tool_exe_helper.print_happy_results("gcc ab.c", @shell_result, true)
|
218
|
+
end
|
219
|
+
|
220
|
+
it 'and boom is false displays output' do
|
221
|
+
expect(@streaminator).to receive(:stdout_puts).with(HAPPY_OUTPUT, Verbosity::OBNOXIOUS)
|
222
|
+
@tool_exe_helper.print_happy_results("gcc ab.c", @shell_result, false)
|
223
|
+
end
|
224
|
+
|
225
|
+
it 'and boom is false with message displays output' do
|
226
|
+
@shell_result[:output] = "xyz"
|
227
|
+
expect(@streaminator).to receive(:stdout_puts).with(HAPPY_OUTPUT_WITH_MESSAGE, Verbosity::OBNOXIOUS)
|
228
|
+
@tool_exe_helper.print_happy_results("gcc ab.c", @shell_result, false)
|
229
|
+
end
|
230
|
+
end
|
231
|
+
|
232
|
+
context 'when exit code is not 0' do
|
233
|
+
before(:each) do
|
234
|
+
@shell_result = {:exit_code => 1, :output => ""}
|
235
|
+
end
|
236
|
+
|
237
|
+
it 'and boom is true does not displays output' do
|
238
|
+
@tool_exe_helper.print_happy_results("gcc ab.c", @shell_result, true)
|
239
|
+
end
|
240
|
+
|
241
|
+
it 'and boom is true with message does not displays output' do
|
242
|
+
@shell_result[:output] = "xyz"
|
243
|
+
@tool_exe_helper.print_happy_results("gcc ab.c", @shell_result, true)
|
244
|
+
end
|
245
|
+
|
246
|
+
it 'and boom is false displays output' do
|
247
|
+
expect(@streaminator).to receive(:stdout_puts).with(HAPPY_OUTPUT_WITH_STATUS, Verbosity::OBNOXIOUS)
|
248
|
+
@tool_exe_helper.print_happy_results("gcc ab.c", @shell_result, false)
|
249
|
+
end
|
250
|
+
|
251
|
+
it 'and boom is false with message displays output' do
|
252
|
+
@shell_result[:output] = "xyz"
|
253
|
+
expect(@streaminator).to receive(:stdout_puts).with(HAPPY_OUTPUT_WITH_MESSAGE_AND_STATUS, Verbosity::OBNOXIOUS)
|
254
|
+
@tool_exe_helper.print_happy_results("gcc ab.c", @shell_result, false)
|
255
|
+
end
|
256
|
+
end
|
257
|
+
end
|
258
|
+
|
259
|
+
describe '#print_error_results' do
|
260
|
+
context 'when exit code is 0' do
|
261
|
+
before(:each) do
|
262
|
+
@shell_result = {:exit_code => 0, :output => ""}
|
263
|
+
end
|
264
|
+
|
265
|
+
it 'and boom is true does not display output' do
|
266
|
+
@tool_exe_helper.print_error_results("gcc ab.c", @shell_result, true)
|
267
|
+
end
|
268
|
+
|
269
|
+
it 'and boom is true with message does not display output' do
|
270
|
+
@shell_result[:output] = "xyz"
|
271
|
+
@tool_exe_helper.print_error_results("gcc ab.c", @shell_result, true)
|
272
|
+
end
|
273
|
+
|
274
|
+
it 'and boom is false does not display output' do
|
275
|
+
@tool_exe_helper.print_error_results("gcc ab.c", @shell_result, false)
|
276
|
+
end
|
277
|
+
|
278
|
+
it 'and boom is false with message does not display output' do
|
279
|
+
@shell_result[:output] = "xyz"
|
280
|
+
@tool_exe_helper.print_error_results("gcc ab.c", @shell_result, false)
|
281
|
+
end
|
282
|
+
end
|
283
|
+
|
284
|
+
context 'when exit code is non 0' do
|
285
|
+
before(:each) do
|
286
|
+
@shell_result = {:exit_code => 1, :output => ""}
|
287
|
+
end
|
288
|
+
|
289
|
+
it 'and boom is true displays output' do
|
290
|
+
expect(@streaminator).to receive(:stderr_puts).with(ERROR_OUTPUT, Verbosity::ERRORS)
|
291
|
+
@tool_exe_helper.print_error_results("gcc ab.c", @shell_result, true)
|
292
|
+
end
|
293
|
+
|
294
|
+
it 'and boom is true with message displays output' do
|
295
|
+
@shell_result[:output] = "xyz"
|
296
|
+
expect(@streaminator).to receive(:stderr_puts).with(ERROR_OUTPUT_WITH_MESSAGE, Verbosity::ERRORS)
|
297
|
+
@tool_exe_helper.print_error_results("gcc ab.c", @shell_result, true)
|
298
|
+
end
|
299
|
+
|
300
|
+
it 'and boom is false dose not display output' do
|
301
|
+
@tool_exe_helper.print_error_results("gcc ab.c", @shell_result, false)
|
302
|
+
end
|
303
|
+
|
304
|
+
it 'and boom is false with message does not display output' do
|
305
|
+
@shell_result[:output] = "xyz"
|
306
|
+
@tool_exe_helper.print_error_results("gcc ab.c", @shell_result, false)
|
307
|
+
end
|
308
|
+
end
|
309
|
+
end
|
310
|
+
end
|