ceedling 0.27.0 → 0.28.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (78) hide show
  1. checksums.yaml +4 -4
  2. data/assets/project_as_gem.yml +6 -0
  3. data/assets/project_with_guts.yml +6 -0
  4. data/assets/project_with_guts_gcov.yml +88 -0
  5. data/assets/test_example_file_boom.c +13 -0
  6. data/assets/test_example_file_success.c +14 -0
  7. data/bin/ceedling +57 -113
  8. data/ceedling.gemspec +1 -1
  9. data/config/test_environment.rb +0 -1
  10. data/examples/blinky/project.yml +1 -1
  11. data/examples/temp_sensor/project.yml +7 -1
  12. data/examples/temp_sensor/rakefile.rb +3 -1
  13. data/lib/ceedling/build_invoker_utils.rb +14 -2
  14. data/lib/ceedling/configurator.rb +3 -1
  15. data/lib/ceedling/configurator_builder.rb +6 -4
  16. data/lib/ceedling/configurator_setup.rb +5 -1
  17. data/lib/ceedling/defaults.rb +5 -2
  18. data/lib/ceedling/dependinator.rb +1 -1
  19. data/lib/ceedling/file_path_utils.rb +1 -2
  20. data/lib/ceedling/generator_test_results.rb +3 -2
  21. data/lib/ceedling/generator_test_results_sanity_checker.rb +4 -3
  22. data/lib/ceedling/project_file_loader.rb +26 -9
  23. data/lib/ceedling/rakefile.rb +9 -2
  24. data/lib/ceedling/release_invoker.rb +1 -1
  25. data/lib/ceedling/reportinator.rb +18 -1
  26. data/lib/ceedling/system_utils.rb +6 -1
  27. data/lib/ceedling/system_wrapper.rb +2 -1
  28. data/lib/ceedling/target_loader.rb +2 -2
  29. data/lib/ceedling/tasks_filesystem.rake +8 -2
  30. data/lib/ceedling/tool_executor_helper.rb +71 -22
  31. data/lib/ceedling/version.rb +1 -1
  32. data/license.txt +1 -1
  33. data/out.fail +21 -0
  34. data/plugins/command_hooks/lib/command_hooks.rb +2 -1
  35. data/plugins/gcov/config/defaults.yml +22 -0
  36. data/plugins/gcov/gcov.rake +79 -65
  37. data/plugins/gcov/lib/gcov.rb +25 -38
  38. data/plugins/gcov/lib/gcov_constants.rb +16 -0
  39. data/spec/build_invoker_utils_spec.rb +54 -0
  40. data/spec/file_finder_helper_spec.rb +53 -0
  41. data/spec/gcov/gcov_deployment_spec.rb +70 -0
  42. data/spec/gcov/gcov_test_cases_spec.rb +91 -0
  43. data/spec/generator_test_results_sanity_checker_spec.rb +88 -0
  44. data/spec/generator_test_results_spec.rb +102 -0
  45. data/spec/reportinator_spec.rb +19 -0
  46. data/spec/spec_system_helper.rb +67 -5
  47. data/spec/support/other_target.yml +0 -0
  48. data/spec/support/target.yml +0 -0
  49. data/spec/support/test_example.fail +21 -0
  50. data/spec/support/test_example.pass +21 -0
  51. data/spec/support/test_example_empty.pass +13 -0
  52. data/spec/support/test_example_ignore.pass +21 -0
  53. data/spec/support/test_example_mangled.pass +19 -0
  54. data/spec/system/deployment_spec.rb +25 -5
  55. data/spec/system_utils_spec.rb +56 -0
  56. data/spec/target_loader_spec.rb +30 -0
  57. data/spec/tool_executor_helper_spec.rb +310 -0
  58. data/vendor/cmock/scripts/create_makefile.rb +35 -12
  59. data/vendor/unity/src/unity_internals.h +3 -3
  60. metadata +62 -27
  61. data/assets/rakefile_as_gem.rb +0 -3
  62. data/assets/rakefile_with_guts.rb +0 -6
  63. data/vendor/constructor/History.rdoc +0 -19
  64. data/vendor/constructor/README.rdoc +0 -72
  65. data/vendor/constructor/Rakefile +0 -33
  66. data/vendor/constructor/homepage/Notes.txt +0 -27
  67. data/vendor/constructor/homepage/Rakefile +0 -15
  68. data/vendor/constructor/homepage/index.erb +0 -27
  69. data/vendor/constructor/homepage/index.html +0 -36
  70. data/vendor/constructor/homepage/page_header.graffle +0 -0
  71. data/vendor/constructor/homepage/page_header.html +0 -9
  72. data/vendor/constructor/homepage/page_header.png +0 -0
  73. data/vendor/constructor/homepage/sample_code.png +0 -0
  74. data/vendor/constructor/homepage/sample_code.rb +0 -12
  75. data/vendor/constructor/lib/constructor.rb +0 -127
  76. data/vendor/constructor/lib/constructor_struct.rb +0 -33
  77. data/vendor/constructor/specs/constructor_spec.rb +0 -407
  78. data/vendor/constructor/specs/constructor_struct_spec.rb +0 -84
@@ -0,0 +1,16 @@
1
+
2
+ GCOV_ROOT_NAME = 'gcov'.freeze
3
+ GCOV_TASK_ROOT = GCOV_ROOT_NAME + ':'
4
+ GCOV_SYM = GCOV_ROOT_NAME.to_sym
5
+
6
+ GCOV_BUILD_PATH = File.join(PROJECT_BUILD_ROOT, GCOV_ROOT_NAME)
7
+ GCOV_BUILD_OUTPUT_PATH = File.join(GCOV_BUILD_PATH, "out")
8
+ GCOV_RESULTS_PATH = File.join(GCOV_BUILD_PATH, "results")
9
+ GCOV_DEPENDENCIES_PATH = File.join(GCOV_BUILD_PATH, "dependencies")
10
+ GCOV_ARTIFACTS_PATH = File.join(PROJECT_BUILD_ARTIFACTS_ROOT, GCOV_ROOT_NAME)
11
+
12
+ GCOV_ARTIFACTS_FILE = File.join(GCOV_ARTIFACTS_PATH, "GcovCoverageResults.html")
13
+
14
+ GCOV_IGNORE_SOURCES = %w(unity cmock cexception).freeze
15
+
16
+
@@ -0,0 +1,54 @@
1
+ require 'spec_helper'
2
+ require 'ceedling/build_invoker_utils'
3
+ require 'ceedling/constants'
4
+ require 'ceedling/streaminator'
5
+ require 'ceedling/configurator'
6
+
7
+ describe BuildInvokerUtils do
8
+ before(:each) do
9
+ # this will always be mocked
10
+ @configurator = Configurator.new({:configurator_setup => nil, :configurator_builder => nil,
11
+ :configurator_plugins => nil, :cmock_builder => nil,
12
+ :yaml_wrapper => nil, :system_wrapper => nil})
13
+ @streaminator = Streaminator.new({:streaminator_helper => nil, :verbosinator => nil,
14
+ :loginator => nil, :stream_wrapper => nil})
15
+
16
+ # this is what is being tested
17
+ @bi_utils = described_class.new({:configurator => @configurator, :streaminator => @streaminator})
18
+
19
+ # these keep the actual test cleaner
20
+ @exception_msg = 'Don\'t know how to build task \'xyz\''
21
+ @basic_msg = "ERROR: Rake could not find file referenced in source or test: 'xyz'. Possible stale dependency."
22
+ @deep_dep_msg = "Try fixing #include statements or adding missing file. Then run '#{REFRESH_TASK_ROOT}#{TEST_SYM.to_s}' task and try again."
23
+ @exception = RuntimeError.new(@exception_msg)
24
+ end
25
+
26
+ describe '#process_exception' do
27
+
28
+ it 'passes given error if message does not contain handled messagr' do
29
+ expect{@bi_utils.process_exception(ArgumentError.new('oops...'), TEST_SYM)}.to raise_error(ArgumentError)
30
+ end
31
+
32
+ it 'prints to stderr for test with test_build flag set true' do
33
+ allow(@streaminator).to receive(:stderr_puts).with(@basic_msg)
34
+ allow(@configurator).to receive(:project_use_deep_dependencies).and_return(false)
35
+ expect{@bi_utils.process_exception(@exception, TEST_SYM, true)}.to raise_error(RuntimeError)
36
+ end
37
+
38
+ it 'prints to stderr for test with test_build flag set false' do
39
+ allow(@streaminator).to receive(:stderr_puts).with(@basic_msg.sub(' or test', ''))
40
+ allow(@configurator).to receive(:project_use_deep_dependencies).and_return(false)
41
+ expect{@bi_utils.process_exception(@exception, TEST_SYM, false)}.to raise_error(RuntimeError)
42
+ end
43
+
44
+ it 'prints to stderr with extra message when deep dependencies is true' do
45
+ allow(@streaminator).to receive(:stderr_puts).with(@basic_msg.sub(' or test', ''))
46
+ allow(@configurator).to receive(:project_use_deep_dependencies).and_return(true)
47
+ allow(@streaminator).to receive(:stderr_puts).with(@deep_dep_msg)
48
+
49
+ expect{@bi_utils.process_exception(@exception, TEST_SYM, false)}.to raise_error(RuntimeError)
50
+ end
51
+
52
+
53
+ end
54
+ end
@@ -0,0 +1,53 @@
1
+ require 'spec_helper'
2
+ require 'ceedling/file_finder_helper'
3
+ require 'ceedling/constants'
4
+ require 'ceedling/streaminator'
5
+
6
+ FILE_LIST = ['some/dir/a.c', 'some/dir/a.h', \
7
+ 'another/place/b.c','another/place/b.h',\
8
+ 'here/c.cpp', 'here/c.hpp',\
9
+ 'copy/c.cpp', 'copy/c.hpp'].freeze
10
+
11
+ describe FileFinderHelper do
12
+ before(:each) do
13
+ # this will always be mocked
14
+ @streaminator = Streaminator.new({:streaminator_helper => nil, :verbosinator => nil, :loginator => nil, :stream_wrapper => nil})
15
+
16
+ @ff_helper = described_class.new({:streaminator => @streaminator})
17
+ end
18
+
19
+
20
+ describe '#find_file_in_collection' do
21
+ it 'returns the full path of the matching file' do
22
+ expect(@ff_helper.find_file_in_collection('a.c', FILE_LIST, :ignore)).to eq(FILE_LIST[0])
23
+ expect(@ff_helper.find_file_in_collection('b.h', FILE_LIST, :ignore)).to eq(FILE_LIST[3])
24
+ end
25
+
26
+ xit 'handles duplicate files' do
27
+ end
28
+
29
+ context 'file not found' do
30
+ it 'returns nil' do
31
+ expect(@ff_helper.find_file_in_collection('unknown/d.c', FILE_LIST, :ignore)).to be_nil
32
+ end
33
+
34
+ it 'outputs nothing if complain is ignore' do
35
+ @ff_helper.find_file_in_collection('unknown/d.c', FILE_LIST, :ignore)
36
+ end
37
+
38
+ it 'outputs a complaint if complain is warn' do
39
+ msg = 'WARNING: Found no file \'d.c\' in search paths.'
40
+ expect(@streaminator).to receive(:stderr_puts).with(msg, Verbosity::COMPLAIN)
41
+ @ff_helper.find_file_in_collection('d.c', FILE_LIST, :warn)
42
+ end
43
+
44
+ it 'outputs and raises an error if complain is error' do
45
+ msg = 'ERROR: Found no file \'d.c\' in search paths.'
46
+ allow(@streaminator).to receive(:stderr_puts).with(msg, Verbosity::ERRORS) do
47
+ expect{@ff_helper.find_file_in_collection('d.c', FILE_LIST, :warn)}.to raise_error
48
+ end
49
+ end
50
+ end
51
+
52
+ end
53
+ end
@@ -0,0 +1,70 @@
1
+ require 'spec_system_helper'
2
+ require 'gcov/gcov_test_cases_spec'
3
+
4
+ describe "Ceedling" do
5
+ describe "Gcov" do
6
+ include CeedlingTestCases
7
+ include GcovTestCases
8
+ before :all do
9
+ @c = SystemContext.new
10
+ @c.deploy_gem
11
+ end
12
+
13
+ after :all do
14
+ @c.done!
15
+ end
16
+
17
+ before { @proj_name = "fake_project" }
18
+ after { @c.with_context { FileUtils.rm_rf @proj_name } }
19
+
20
+ describe "basic operations" do
21
+ before do
22
+ @c.with_context do
23
+ `bundle exec ruby -S ceedling new #{@proj_name} 2>&1`
24
+ end
25
+ end
26
+
27
+ it { can_test_projects_with_gcov_with_success }
28
+ it { can_test_projects_with_gcov_with_fail }
29
+ it { can_test_projects_with_gcov_with_compile_error }
30
+ it { can_fetch_project_help_for_gcov }
31
+ it { can_create_html_report }
32
+ end
33
+
34
+
35
+ describe "command: `ceedling example [example]`" do
36
+ describe "temp_sensor" do
37
+ before do
38
+ @c.with_context do
39
+ output = `bundle exec ruby -S ceedling example temp_sensor 2>&1`
40
+ expect(output).to match(/created!/)
41
+ end
42
+ end
43
+
44
+ it "should be testable" do
45
+ @c.with_context do
46
+ Dir.chdir "temp_sensor" do
47
+ @output = `bundle exec ruby -S ceedling gcov:all`
48
+ expect(@output).to match(/TESTED:\s+47/)
49
+ expect(@output).to match(/PASSED:\s+47/)
50
+
51
+ expect(@output).to match(/AdcConductor\.c Lines executed:/i)
52
+ expect(@output).to match(/AdcHardware\.c Lines executed:/i)
53
+ expect(@output).to match(/AdcModel\.c Lines executed:/i)
54
+ expect(@output).to match(/Executor\.c Lines executed:/i)
55
+ expect(@output).to match(/Main\.c Lines executed:/i)
56
+ expect(@output).to match(/Model\.c Lines executed:/i)
57
+ # there are more, but this is a good place to stop.
58
+
59
+ @output = `bundle exec ruby -S ceedling utils:gcov`
60
+ expect(@output).to match(/For now, just creating basic\./)
61
+ expect(@output).to match(/Creating a basic html report of gcov results in build\/artifacts\/gcov\/GcovCoverageResults\.html\.\.\./)
62
+ expect(File.exists?('build/artifacts/gcov/GcovCoverageResults.html')).to eq true
63
+
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,91 @@
1
+ require 'fileutils'
2
+ require 'tmpdir'
3
+ require 'yaml'
4
+ require 'spec_system_helper'
5
+ require 'pp'
6
+
7
+
8
+ module GcovTestCases
9
+
10
+ def can_test_projects_with_gcov_with_success
11
+ @c.with_context do
12
+ Dir.chdir @proj_name do
13
+ FileUtils.cp test_asset_path("project_with_guts_gcov.yml"), "project.yml"
14
+ FileUtils.cp test_asset_path("example_file.h"), 'src/'
15
+ FileUtils.cp test_asset_path("example_file.c"), 'src/'
16
+ FileUtils.cp test_asset_path("test_example_file_success.c"), 'test/'
17
+
18
+ output = `bundle exec ruby -S ceedling gcov:all`
19
+ expect($?.exitstatus).to match(0) # Since a test either pass or are ignored, we return success here
20
+ expect(output).to match(/TESTED:\s+\d/)
21
+ expect(output).to match(/PASSED:\s+\d/)
22
+ expect(output).to match(/FAILED:\s+\d/)
23
+ expect(output).to match(/IGNORED:\s+\d/)
24
+ end
25
+ end
26
+ end
27
+
28
+ def can_test_projects_with_gcov_with_fail
29
+ @c.with_context do
30
+ Dir.chdir @proj_name do
31
+ FileUtils.cp test_asset_path("project_with_guts_gcov.yml"), "project.yml"
32
+ FileUtils.cp test_asset_path("example_file.h"), 'src/'
33
+ FileUtils.cp test_asset_path("example_file.c"), 'src/'
34
+ FileUtils.cp test_asset_path("test_example_file.c"), 'test/'
35
+
36
+ output = `bundle exec ruby -S ceedling gcov:all`
37
+ expect($?.exitstatus).to match(1) # Since a test fails, we return error here
38
+ expect(output).to match(/TESTED:\s+\d/)
39
+ expect(output).to match(/PASSED:\s+\d/)
40
+ expect(output).to match(/FAILED:\s+\d/)
41
+ expect(output).to match(/IGNORED:\s+\d/)
42
+ end
43
+ end
44
+ end
45
+
46
+ def can_test_projects_with_gcov_with_compile_error
47
+ @c.with_context do
48
+ Dir.chdir @proj_name do
49
+ FileUtils.cp test_asset_path("project_with_guts_gcov.yml"), "project.yml"
50
+ FileUtils.cp test_asset_path("example_file.h"), 'src/'
51
+ FileUtils.cp test_asset_path("example_file.c"), 'src/'
52
+ FileUtils.cp test_asset_path("test_example_file_boom.c"), 'test/'
53
+
54
+ output = `bundle exec ruby -S ceedling test:all`
55
+ expect($?.exitstatus).to match(1) # Since a test explodes, we return error here
56
+ expect(output).to match(/ERROR: Ceedling Failed/)
57
+ end
58
+ end
59
+ end
60
+
61
+ def can_fetch_project_help_for_gcov
62
+ @c.with_context do
63
+ Dir.chdir @proj_name do
64
+ FileUtils.cp test_asset_path("project_with_guts_gcov.yml"), "project.yml"
65
+ output = `bundle exec ruby -S ceedling help`
66
+ expect($?.exitstatus).to match(0)
67
+ expect(output).to match(/ceedling gcov:\*/i)
68
+ expect(output).to match(/ceedling gcov:all/i)
69
+ expect(output).to match(/ceedling gcov:delta/i)
70
+ expect(output).to match(/ceedling utils:gcov/i)
71
+ end
72
+ end
73
+ end
74
+
75
+ def can_create_html_report
76
+ @c.with_context do
77
+ Dir.chdir @proj_name do
78
+ FileUtils.cp test_asset_path("project_with_guts_gcov.yml"), "project.yml"
79
+ FileUtils.cp test_asset_path("example_file.h"), 'src/'
80
+ FileUtils.cp test_asset_path("example_file.c"), 'src/'
81
+ FileUtils.cp test_asset_path("test_example_file_success.c"), 'test/'
82
+
83
+ output = `bundle exec ruby -S ceedling gcov:all`
84
+ output = `bundle exec ruby -S ceedling utils:gcov`
85
+ expect(output).to match(/Creating a basic html report of gcov results in build\/artifacts\/gcov\/GcovCoverageResults\.html\.\.\./)
86
+ expect(File.exists?('build/artifacts/gcov/GcovCoverageResults.html')).to eq true
87
+
88
+ end
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,88 @@
1
+ require 'spec_helper'
2
+ require 'ceedling/generator_test_results_sanity_checker'
3
+ require 'ceedling/constants'
4
+ require 'ceedling/streaminator'
5
+ require 'ceedling/configurator'
6
+
7
+ describe GeneratorTestResultsSanityChecker do
8
+ before(:each) do
9
+ # this will always be mocked
10
+ @configurator = Configurator.new({:configurator_setup => nil, :configurator_builder => nil, :configurator_plugins => nil, :cmock_builder => nil, :yaml_wrapper => nil, :system_wrapper => nil})
11
+ @streaminator = Streaminator.new({:streaminator_helper => nil, :verbosinator => nil, :loginator => nil, :stream_wrapper => nil})
12
+
13
+ @sanity_checker = described_class.new({:configurator => @configurator, :streaminator => @streaminator})
14
+
15
+ @results = {}
16
+ @results[:ignores] = ['', '', '']
17
+ @results[:failures] = ['', '', '']
18
+ @results[:successes] = ['', '', '']
19
+ @results[:source] = {:file => "test_file.c"}
20
+ @results[:counts] = {:ignored => @results[:ignores].size, :failed => @results[:failures].size, :total => 9}
21
+ end
22
+
23
+
24
+ describe '#verify' do
25
+ it 'returns immediately if sanity_checker set to NONE' do
26
+ @configurator.sanity_checks = TestResultsSanityChecks::NONE
27
+ expect(@sanity_checker.verify(nil, 255)).to be_nil
28
+ end
29
+
30
+ it 'rasies error if results are nil' do
31
+ @configurator.sanity_checks = TestResultsSanityChecks::NORMAL
32
+ expect{@sanity_checker.verify(nil, 3)}.to raise_error(RuntimeError)
33
+ end
34
+
35
+ it 'rasies error if results are empty' do
36
+ @configurator.sanity_checks = TestResultsSanityChecks::NORMAL
37
+ expect{@sanity_checker.verify({}, 3)}.to raise_error(RuntimeError)
38
+ end
39
+
40
+ it 'returns nil if basic checks are good' do
41
+ @configurator.sanity_checks = TestResultsSanityChecks::NORMAL
42
+ expect(@sanity_checker.verify(@results, 3)).to be_nil
43
+ end
44
+
45
+ it 'rasies error if basic check fails for ignore' do
46
+ @configurator.sanity_checks = TestResultsSanityChecks::NORMAL
47
+ @results[:counts][:ignored] = 0
48
+ allow(@configurator).to receive(:extension_executable).and_return('')
49
+ allow(@streaminator).to receive(:stderr_puts)
50
+ expect{@sanity_checker.verify(@results, 3)}.to raise_error(RuntimeError)
51
+ end
52
+
53
+ it 'rasies error if basic check fails for failed' do
54
+ @configurator.sanity_checks = TestResultsSanityChecks::NORMAL
55
+ @results[:counts][:failed] = 0
56
+ allow(@configurator).to receive(:extension_executable).and_return('')
57
+ allow(@streaminator).to receive(:stderr_puts)
58
+ expect{@sanity_checker.verify(@results, 3)}.to raise_error(RuntimeError)
59
+ end
60
+
61
+ it 'rasies error if basic check fails for total' do
62
+ @configurator.sanity_checks = TestResultsSanityChecks::NORMAL
63
+ @results[:counts][:total] = 0
64
+ allow(@configurator).to receive(:extension_executable).and_return('')
65
+ allow(@streaminator).to receive(:stderr_puts)
66
+ expect{@sanity_checker.verify(@results, 3)}.to raise_error(RuntimeError)
67
+ end
68
+
69
+ it 'rasies error if thorough check fails for error code not 255 not equal' do
70
+ @configurator.sanity_checks = TestResultsSanityChecks::THOROUGH
71
+ allow(@configurator).to receive(:extension_executable).and_return('')
72
+ allow(@streaminator).to receive(:stderr_puts)
73
+ expect{@sanity_checker.verify(@results, 2)}.to raise_error(RuntimeError)
74
+ end
75
+
76
+ it 'rasies error if thorough check fails for error code 255 less than 255' do
77
+ @configurator.sanity_checks = TestResultsSanityChecks::THOROUGH
78
+ allow(@configurator).to receive(:extension_executable).and_return('')
79
+ allow(@streaminator).to receive(:stderr_puts)
80
+ expect{@sanity_checker.verify(@results, 255)}.to raise_error(RuntimeError)
81
+ end
82
+
83
+ it 'returns nil if thorough checks are good' do
84
+ @configurator.sanity_checks = TestResultsSanityChecks::THOROUGH
85
+ expect(@sanity_checker.verify(@results, 3)).to be_nil
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,102 @@
1
+ require 'spec_helper'
2
+ require 'ceedling/generator_test_results_sanity_checker'
3
+ require 'ceedling/generator_test_results'
4
+ require 'ceedling/yaml_wrapper'
5
+ require 'ceedling/constants'
6
+ require 'ceedling/streaminator'
7
+ require 'ceedling/configurator'
8
+
9
+ NORMAL_OUTPUT =
10
+ "Verbose output one\n" +
11
+ "Verbous output two\n" +
12
+ "test_example.c:257:test_one:PASS\n" +
13
+ "test_example.c:269:test_two:PASS\n" +
14
+ "\n" +
15
+ "-----------------------\n" +
16
+ "2 Tests 0 Failures 0 Ignored \n" +
17
+ "OK\n".freeze
18
+
19
+ IGNORE_OUTPUT =
20
+ "Verbose output one\n" +
21
+ "Verbous output two\n" +
22
+ "test_example.c:257:test_one:IGNORE\n" +
23
+ "test_example.c:269:test_two:IGNORE\n" +
24
+ "\n" +
25
+ "-----------------------\n" +
26
+ "2 Tests 0 Failures 2 Ignored \n" +
27
+ "OK\n".freeze
28
+
29
+
30
+ FAIL_OUTPUT =
31
+ "Verbose output one\n" +
32
+ "Verbous output two\n" +
33
+ "test_example.c:257:test_one:FAIL\n" +
34
+ "test_example.c:269:test_two:FAIL\n" +
35
+ "\n" +
36
+ "-----------------------\n" +
37
+ "2 Tests 2 Failures 0 Ignored \n" +
38
+ "OK\n".freeze
39
+
40
+
41
+ MANGLED_OUTPUT =
42
+ "Verbose output one\n" +
43
+ "test_example.c:257:test_one:PASS\n" +
44
+ "test_example.c:269:test_tVerbous output two\n" +
45
+ "wo:PASS\n" +
46
+ "\n" +
47
+ "-----------------------\n" +
48
+ "2 Tests 0 Failures 0 Ignored \n" +
49
+ "OK\n".freeze
50
+
51
+ TEST_OUT_FILE = 'out.pass'
52
+ TEST_OUT_FILE_FAIL = 'out.fail'
53
+
54
+
55
+ describe GeneratorTestResults do
56
+ before(:each) do
57
+ # these will always be mocked
58
+ @configurator = Configurator.new({:configurator_setup => nil, :configurator_builder => nil, :configurator_plugins => nil, :cmock_builder => nil, :yaml_wrapper => nil, :system_wrapper => nil})
59
+ @streaminator = Streaminator.new({:streaminator_helper => nil, :verbosinator => nil, :loginator => nil, :stream_wrapper => nil})
60
+
61
+ # these will always be used as is.
62
+ @yaml_wrapper = YamlWrapper.new
63
+ @sanity_checker = GeneratorTestResultsSanityChecker.new({:configurator => @configurator, :streaminator => @streaminator})
64
+
65
+ @generate_test_results = described_class.new({:configurator => @configurator, :generator_test_results_sanity_checker => @sanity_checker, :yaml_wrapper => @yaml_wrapper})
66
+ end
67
+
68
+ after(:each) do
69
+ if File.exists?(TEST_OUT_FILE)
70
+ File.delete(TEST_OUT_FILE)
71
+ end
72
+ end
73
+
74
+ describe '#process_and_write_results' do
75
+ it 'handles an empty input' do
76
+ @generate_test_results.process_and_write_results({:output => ''}, TEST_OUT_FILE, 'some/place/test_example.c')
77
+ expect(IO.read(TEST_OUT_FILE)).to eq(IO.read('spec/support/test_example_empty.pass'))
78
+ end
79
+
80
+ it 'handles a normal test output' do
81
+ @generate_test_results.process_and_write_results({:output => NORMAL_OUTPUT}, TEST_OUT_FILE, 'some/place/test_example.c')
82
+ expect(IO.read(TEST_OUT_FILE)).to eq(IO.read('spec/support/test_example.pass'))
83
+ end
84
+
85
+ it 'handles a normal test output with ignores' do
86
+ @generate_test_results.process_and_write_results({:output => IGNORE_OUTPUT}, TEST_OUT_FILE, 'some/place/test_example.c')
87
+ expect(IO.read(TEST_OUT_FILE)).to eq(IO.read('spec/support/test_example_ignore.pass'))
88
+ end
89
+
90
+ it 'handles a normal test output with failures' do
91
+ allow(@configurator).to receive(:extension_testfail).and_return('.fail')
92
+ @generate_test_results.process_and_write_results({:output => FAIL_OUTPUT}, TEST_OUT_FILE, 'some/place/test_example.c')
93
+ expect(IO.read(TEST_OUT_FILE_FAIL)).to eq(IO.read('spec/support/test_example.fail'))
94
+ end
95
+
96
+ it 'handles a mangled test output as gracefully as it can' do
97
+ @generate_test_results.process_and_write_results({:output => MANGLED_OUTPUT}, TEST_OUT_FILE, 'some/place/test_example.c')
98
+ expect(IO.read(TEST_OUT_FILE)).to eq(IO.read('spec/support/test_example_mangled.pass'))
99
+ end
100
+
101
+ end
102
+ end