ceedling 0.31.0 → 0.31.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.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/assets/example_file_call.c +6 -0
  3. data/assets/example_file_call.h +6 -0
  4. data/assets/test_example_file_with_mock.c +13 -0
  5. data/bin/ceedling +2 -2
  6. data/ceedling.gemspec +1 -1
  7. data/lib/ceedling/configurator.rb +7 -2
  8. data/lib/ceedling/configurator_plugins.rb +21 -1
  9. data/lib/ceedling/defaults.rb +1 -0
  10. data/lib/ceedling/preprocessinator_extractor.rb +2 -0
  11. data/lib/ceedling/preprocessinator_includes_handler.rb +24 -24
  12. data/lib/ceedling/version.rb +11 -7
  13. data/plugins/gcov/config/defaults_gcov.rb +118 -0
  14. data/plugins/gcov/lib/gcovr_reportinator.rb +1 -1
  15. data/plugins/gcov/lib/reportgenerator_reportinator.rb +1 -1
  16. data/plugins/junit_tests_report/lib/junit_tests_report.rb +6 -6
  17. data/plugins/module_generator/README.md +16 -2
  18. data/plugins/module_generator/lib/module_generator.rb +1 -0
  19. data/spec/gcov/gcov_deployment_spec.rb +1 -1
  20. data/spec/preprocessinator_includes_handler_spec.rb +38 -8
  21. data/spec/spec_system_helper.rb +19 -0
  22. data/spec/system/deployment_spec.rb +1 -0
  23. data/vendor/cmock/lib/cmock_file_writer.rb +2 -3
  24. data/vendor/cmock/lib/cmock_generator.rb +87 -70
  25. data/vendor/cmock/lib/cmock_header_parser.rb +29 -27
  26. data/vendor/cmock/src/cmock.h +1 -1
  27. data/vendor/cmock/test/unit/cmock_generator_main_test.rb +46 -41
  28. data/vendor/cmock/test/unit/cmock_header_parser_test.rb +46 -40
  29. data/vendor/cmock/vendor/c_exception/README.md +6 -4
  30. data/vendor/cmock/vendor/c_exception/docs/CException.md +2 -2
  31. data/vendor/cmock/vendor/c_exception/lib/CException.h +1 -1
  32. data/vendor/cmock/vendor/c_exception/lib/meson.build +2 -2
  33. data/vendor/cmock/vendor/c_exception/meson.build +36 -2
  34. data/vendor/cmock/vendor/unity/README.md +77 -71
  35. data/vendor/cmock/vendor/unity/auto/generate_test_runner.rb +1 -1
  36. data/vendor/cmock/vendor/unity/docs/ThrowTheSwitchCodingStandard.md +107 -126
  37. data/vendor/cmock/vendor/unity/docs/UnityAssertionsReference.md +149 -193
  38. data/vendor/cmock/vendor/unity/docs/UnityConfigurationGuide.md +236 -294
  39. data/vendor/cmock/vendor/unity/docs/UnityGettingStartedGuide.md +112 -121
  40. data/vendor/cmock/vendor/unity/docs/UnityHelperScriptsGuide.md +82 -115
  41. data/vendor/cmock/vendor/unity/extras/fixture/readme.md +16 -19
  42. data/vendor/cmock/vendor/unity/extras/memory/readme.md +27 -34
  43. data/vendor/cmock/vendor/unity/src/unity.c +1 -1
  44. data/vendor/cmock/vendor/unity/src/unity.h +1 -1
  45. data/vendor/cmock/vendor/unity/src/unity_internals.h +21 -7
  46. data/vendor/unity/README.md +77 -71
  47. data/vendor/unity/auto/generate_test_runner.rb +1 -1
  48. data/vendor/unity/docs/ThrowTheSwitchCodingStandard.md +107 -126
  49. data/vendor/unity/docs/UnityAssertionsReference.md +149 -193
  50. data/vendor/unity/docs/UnityConfigurationGuide.md +236 -294
  51. data/vendor/unity/docs/UnityGettingStartedGuide.md +112 -121
  52. data/vendor/unity/docs/UnityHelperScriptsGuide.md +82 -115
  53. data/vendor/unity/extras/fixture/readme.md +16 -19
  54. data/vendor/unity/extras/memory/readme.md +27 -34
  55. data/vendor/unity/src/unity.c +1 -1
  56. data/vendor/unity/src/unity.h +1 -1
  57. data/vendor/unity/src/unity_internals.h +21 -7
  58. metadata +14 -5
  59. data/plugins/gcov/config/defaults.yml +0 -55
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b31288bb9de3d69e188046013dcbb67be81d806c92c0a5b929a2e371805dc6ef
4
- data.tar.gz: 2d9258e4429ff1a98567efa2635d833c89866f1300462951b2f38f4058174ec2
3
+ metadata.gz: 0da771e9249d10318e68a8c2c5bee09d14f36dc9198ab603ec1ee7dfc95ffe94
4
+ data.tar.gz: bd9ecb45abb57b47d59277ca0852b3b176d47a81133131ce2c79e5b0f0d07c48
5
5
  SHA512:
6
- metadata.gz: 00ba79ff0844313de7ffee17a1fa5dbe1f64638be98ee3e4a7f722c7eafd26af641ee1f7f99366fd22ff29e8afe8df763b286d30dd7caafd7535465b19ea8a9e
7
- data.tar.gz: beff63833ed09a8c94bf306163d2395433bb1341642bc0ce407fe3d5c034313f8cdba6b134e07a913eae3ca00f97dc87bf55741262142f6d0baba2b22bd9fdb5
6
+ metadata.gz: 8ec2df3f174cc78eda8b44c3034a42b99b3a5a0e4ff3b3e9db40c6cd72fde0d05ff4ad45e14070bdf88931443a43343f5d996ac15caebb9eb2da90af20bf3dfa
7
+ data.tar.gz: cac6b185311d6e042f33c9064aa33e2d4b19422c74349e70bc94d00cbe19d72ac47dc79b07727d60a56e205392aabe16ad957b9c4dd323a795167c0683b5781c
@@ -0,0 +1,6 @@
1
+ #include "example_file_call.h"
2
+ #include "example_file.h"
3
+
4
+ int call_add_numbers(int a, int b) {
5
+ return add_numbers(a, b);
6
+ }
@@ -0,0 +1,6 @@
1
+ #ifndef EXAMPLE_FILE_CALL_H
2
+ #define EXAMPLE_FILE_CALL_H
3
+
4
+ int call_add_numbers(int a, int b);
5
+
6
+ #endif /* EXAMPLE_FILE_CALL_H */
@@ -0,0 +1,13 @@
1
+ #include "unity.h"
2
+ #include "example_file_call.h"
3
+ // mock header should have higher priority than real file
4
+ #include "example_file.h"
5
+ #include "mock_example_file.h"
6
+
7
+ void setUp(void) {}
8
+ void tearDown(void) {}
9
+
10
+ void test_add_numbers_adds_numbers(void) {
11
+ add_numbers_ExpectAndReturn(1, 1, 2);
12
+ TEST_ASSERT_EQUAL(2, call_add_numbers(1, 1));
13
+ }
data/bin/ceedling CHANGED
@@ -164,7 +164,7 @@ unless (project_found)
164
164
 
165
165
  # Perform the actual clone of the config file, while updating the version
166
166
  File.open(dst_yaml,'w') do |dst|
167
- require 'ceedling/version.rb'
167
+ require File.expand_path(File.join(File.dirname(__FILE__),"..","lib","ceedling","version.rb"))
168
168
  dst << File.read(src_yaml).gsub(":ceedling_version: '?'",":ceedling_version: #{Ceedling::Version::CEEDLING}")
169
169
  puts " create #{dst_yaml}"
170
170
  end
@@ -217,7 +217,7 @@ unless (project_found)
217
217
 
218
218
  desc "version", "return the version of the tools installed"
219
219
  def version()
220
- require 'ceedling/version.rb'
220
+ require File.expand_path(File.join(File.dirname(__FILE__),"..","lib","ceedling","version.rb"))
221
221
  puts " Ceedling:: #{Ceedling::Version::CEEDLING}"
222
222
  puts " CMock:: #{Ceedling::Version::CMOCK}"
223
223
  puts " Unity:: #{Ceedling::Version::UNITY}"
data/ceedling.gemspec CHANGED
@@ -31,7 +31,7 @@ Ceedling projects are created with a YAML configuration file. A variety of conve
31
31
  s.required_ruby_version = ">= 2.4.0"
32
32
 
33
33
  s.add_dependency "thor", "~> 0.14"
34
- s.add_dependency "rake", "~> 12"
34
+ s.add_dependency "rake", ">= 12", "< 14"
35
35
  s.add_dependency "deep_merge", "~> 1.2"
36
36
  s.add_dependency "constructor", "~> 2"
37
37
 
@@ -184,17 +184,22 @@ class Configurator
184
184
  @rake_plugins = @configurator_plugins.find_rake_plugins(config, paths_hash)
185
185
  @script_plugins = @configurator_plugins.find_script_plugins(config, paths_hash)
186
186
  config_plugins = @configurator_plugins.find_config_plugins(config, paths_hash)
187
- plugin_defaults = @configurator_plugins.find_plugin_defaults(config, paths_hash)
187
+ plugin_yml_defaults = @configurator_plugins.find_plugin_yml_defaults(config, paths_hash)
188
+ plugin_hash_defaults = @configurator_plugins.find_plugin_hash_defaults(config, paths_hash)
188
189
 
189
190
  config_plugins.each do |plugin|
190
191
  plugin_config = @yaml_wrapper.load(plugin)
191
192
  config.deep_merge(plugin_config)
192
193
  end
193
194
 
194
- plugin_defaults.each do |defaults|
195
+ plugin_yml_defaults.each do |defaults|
195
196
  @configurator_builder.populate_defaults( config, @yaml_wrapper.load(defaults) )
196
197
  end
197
198
 
199
+ plugin_hash_defaults.each do |defaults|
200
+ @configurator_builder.populate_defaults( config, defaults )
201
+ end
202
+
198
203
  # special plugin setting for results printing
199
204
  config[:plugins][:display_raw_test_results] = true if (config[:plugins][:display_raw_test_results].nil?)
200
205
 
@@ -26,6 +26,7 @@ class ConfiguratorPlugins
26
26
 
27
27
  if is_script_plugin
28
28
  @system_wrapper.add_load_path( File.join( path, 'lib') )
29
+ @system_wrapper.add_load_path( File.join( path, 'config') )
29
30
  end
30
31
  break
31
32
  end
@@ -92,7 +93,7 @@ class ConfiguratorPlugins
92
93
 
93
94
 
94
95
  # gather up and return default .yml filepaths that exist on-disk
95
- def find_plugin_defaults(config, plugin_paths)
96
+ def find_plugin_yml_defaults(config, plugin_paths)
96
97
  defaults_with_path = []
97
98
 
98
99
  config[:plugins][:enabled].each do |plugin|
@@ -108,4 +109,23 @@ class ConfiguratorPlugins
108
109
  return defaults_with_path
109
110
  end
110
111
 
112
+ # gather up and return
113
+ def find_plugin_hash_defaults(config, plugin_paths)
114
+ defaults_hash= []
115
+
116
+ config[:plugins][:enabled].each do |plugin|
117
+ if path = plugin_paths[(plugin + '_path').to_sym]
118
+ default_path = File.join(path, "config", "defaults_#{plugin}.rb")
119
+ if @file_wrapper.exist?(default_path)
120
+ @system_wrapper.require_file( "defaults_#{plugin}.rb")
121
+
122
+ object = eval("get_default_config()")
123
+ defaults_hash << object
124
+ end
125
+ end
126
+ end
127
+
128
+ return defaults_hash
129
+ end
130
+
111
131
  end
@@ -294,6 +294,7 @@ DEFAULT_CEEDLING_CONFIG = {
294
294
  :use_preprocessor_directives => false,
295
295
  :use_deep_dependencies => false,
296
296
  :generate_deep_dependencies => true, # only applicable if use_deep_dependencies is true
297
+ :auto_link_deep_dependencies => false,
297
298
  :test_file_prefix => 'test_',
298
299
  :options_paths => [],
299
300
  :release_build => false,
@@ -16,6 +16,7 @@ class PreprocessinatorExtractor
16
16
 
17
17
  lines = []
18
18
  File.readlines(filepath).each do |line|
19
+ line.encode!('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: '')
19
20
  if found_file and not line =~ not_pragma
20
21
  lines << line
21
22
  else
@@ -41,6 +42,7 @@ class PreprocessinatorExtractor
41
42
 
42
43
  lines = []
43
44
  File.readlines(filepath).each do |line|
45
+ line.encode!('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: '')
44
46
  lines << line
45
47
 
46
48
  if line =~ pattern
@@ -77,8 +77,7 @@ class PreprocessinatorIncludesHandler
77
77
  new_deps, new_to_process, all_mocks = extract_includes_helper(target, include_paths, ignore_list, all_mocks)
78
78
  list += new_deps
79
79
  to_process += new_to_process
80
- if (!@configurator.project_config_hash.has_key?(:project_auto_link_deep_dependencies) or
81
- !@configurator.project_config_hash[:project_auto_link_deep_dependencies])
80
+ if !@configurator.project_config_hash[:project_auto_link_deep_dependencies]
82
81
  break
83
82
  else
84
83
  list = list.uniq()
@@ -94,7 +93,7 @@ class PreprocessinatorIncludesHandler
94
93
  make_rule = self.form_shallow_dependencies_rule(filepath)
95
94
  target_file = make_rule.split[0].gsub(':', '').gsub('\\','/')
96
95
  base = File.basename(target_file, File.extname(target_file))
97
- make_rule_dependencies = make_rule.gsub(/.*#{Regexp.escape(base)}\S*/, '').gsub(/\\$/, '')
96
+ make_rule_dependencies = make_rule.gsub(/.*\b#{Regexp.escape(base)}\S*/, '').gsub(/\\$/, '')
98
97
 
99
98
  # Extract the headers dependencies from the make rule
100
99
  hdr_ext = @configurator.extension_header
@@ -109,15 +108,30 @@ class PreprocessinatorIncludesHandler
109
108
  full_path_sources_dependencies = extract_full_path_dependencies(sources_dependencies)
110
109
 
111
110
  list = full_path_headers_dependencies + full_path_sources_dependencies
112
- to_process = []
113
111
 
114
- if @configurator.project_config_hash.has_key?(:project_auto_link_deep_dependencies) && @configurator.project_config_hash[:project_auto_link_deep_dependencies]
115
- mock_prefix = @configurator.project_config_hash[:cmock_mock_prefix]
116
- # Creating list of mocks
117
- mocks += full_path_headers_dependencies.find_all do |header|
118
- File.basename(header) =~ /^#{mock_prefix}.*$/
119
- end.compact
112
+ mock_prefix = @configurator.project_config_hash[:cmock_mock_prefix]
113
+ # Creating list of mocks
114
+ mocks += full_path_headers_dependencies.find_all do |header|
115
+ File.basename(header) =~ /^#{mock_prefix}.*$/
116
+ end.compact
117
+
118
+ # ignore real file when both mock and real file exist
119
+ mocks.each do |mock|
120
+ list.each do |filename|
121
+ if File.basename(filename) == File.basename(mock).sub(mock_prefix, '')
122
+ ignore_list << filename
123
+ end
124
+ end
125
+ end.compact
126
+
127
+ # Filtering list of final includes to only include mocks and anything that is NOT in the ignore_list
128
+ list = list.select do |item|
129
+ mocks.include? item or !(ignore_list.any? { |ignore_item| !item.match(/^(.*\/)?#{Regexp.escape(ignore_item)}$/).nil? })
130
+ end
120
131
 
132
+ to_process = []
133
+
134
+ if @configurator.project_config_hash[:project_auto_link_deep_dependencies]
121
135
  # Creating list of headers that should be recursively pre-processed
122
136
  # Skipping mocks and vendor headers
123
137
  headers_to_deep_link = full_path_headers_dependencies.select do |hdr|
@@ -126,20 +140,6 @@ class PreprocessinatorIncludesHandler
126
140
  headers_to_deep_link.map! {|hdr| File.expand_path(hdr) }
127
141
  headers_to_deep_link.compact!
128
142
 
129
- # ignore real file when both mock and real file exist
130
- mocks.each do |mock|
131
- list.each do |filename|
132
- if File.basename(filename) == File.basename(mock).sub(mock_prefix, '')
133
- ignore_list << filename
134
- end
135
- end
136
- end.compact
137
-
138
- # Filtering list of final includes to only include mocks and anything that is NOT in the ignore_list
139
- list = list.select do |item|
140
- mocks.include? item or !(ignore_list.any? { |ignore_item| !item.match(/^(.*\/)?#{Regexp.escape(ignore_item)}$/).nil? })
141
- end
142
-
143
143
  headers_to_deep_link.each do |hdr|
144
144
  if (ignore_list.none? {|ignore_header| hdr.match(/^(.*\/)?#{Regexp.escape(ignore_header)}$/)} and
145
145
  include_paths.none? {|include_path| hdr =~ /^#{include_path}\.*/})
@@ -13,7 +13,7 @@ module Ceedling
13
13
  path1
14
14
  elsif (File.exists?(path2))
15
15
  path2
16
- elsif exists?(CEEDLING_VENDOR)
16
+ elsif File.exists?(CEEDLING_VENDOR)
17
17
  path3 = File.expand_path( File.join(CEEDLING_VENDOR,path) )
18
18
  if (File.exists?(path3))
19
19
  path3
@@ -23,7 +23,7 @@ module Ceedling
23
23
  [ @ceedling[:file_wrapper].read( File.join(base_path, 'release', 'version.info') ).strip,
24
24
  @ceedling[:file_wrapper].read( File.join(base_path, 'release', 'build.info') ).strip ].join('.')
25
25
  rescue
26
- "unknown"
26
+ "#{name}"
27
27
  end
28
28
  end
29
29
  else
@@ -33,18 +33,22 @@ module Ceedling
33
33
 
34
34
  # Actually look up the versions
35
35
  a = [0,0,0]
36
- File.readlines(filename).each do |line|
37
- ["VERSION_MAJOR", "VERSION_MINOR", "VERSION_BUILD"].each_with_index do |field, i|
38
- m = line.match(/#{name}_#{field}\s+(\d+)/)
39
- a[i] = m[1] unless (m.nil?)
36
+ begin
37
+ File.readlines(filename).each do |line|
38
+ ["VERSION_MAJOR", "VERSION_MINOR", "VERSION_BUILD"].each_with_index do |field, i|
39
+ m = line.match(/#{name}_#{field}\s+(\d+)/)
40
+ a[i] = m[1] unless (m.nil?)
41
+ end
40
42
  end
43
+ rescue
44
+ abort("Can't collect data for vendor component: \"#{filename}\" . \nPlease check your setup.")
41
45
  end
42
46
 
43
47
  # splat it to return the final value
44
48
  eval("#{name} = '#{a.join(".")}'")
45
49
  end
46
50
 
47
- GEM = "0.31.0"
51
+ GEM = "0.31.1"
48
52
  CEEDLING = GEM
49
53
  end
50
54
  end
@@ -0,0 +1,118 @@
1
+
2
+ DEFAULT_GCOV_COMPILER_TOOL = {
3
+ :executable => ENV['CC'].nil? ? FilePathUtils.os_executable_ext('gcc').freeze : ENV['CC'].split[0],
4
+ :name => 'default_gcov_compiler'.freeze,
5
+ :stderr_redirect => StdErrRedirect::NONE.freeze,
6
+ :background_exec => BackgroundExec::NONE.freeze,
7
+ :optional => false.freeze,
8
+ :arguments => [
9
+ "-g".freeze,
10
+ "-fprofile-arcs".freeze,
11
+ "-ftest-coverage".freeze,
12
+ ENV['CC'].nil? ? "" : ENV['CC'].split[1..-1],
13
+ ENV['CPPFLAGS'].nil? ? "" : ENV['CPPFLAGS'].split,
14
+ {"-I\"$\"" => 'COLLECTION_PATHS_TEST_SUPPORT_SOURCE_INCLUDE_VENDOR'}.freeze,
15
+ {"-I\"$\"" => 'COLLECTION_PATHS_TEST_TOOLCHAIN_INCLUDE'}.freeze,
16
+ {"-D$" => 'COLLECTION_DEFINES_TEST_AND_VENDOR'}.freeze,
17
+ "-DGCOV_COMPILER".freeze,
18
+ "-DCODE_COVERAGE".freeze,
19
+ ENV['CFLAGS'].nil? ? "" : ENV['CFLAGS'].split,
20
+ "-c \"${1}\"".freeze,
21
+ "-o \"${2}\"".freeze
22
+ ].freeze
23
+ }
24
+
25
+
26
+ DEFAULT_GCOV_LINKER_TOOL = {
27
+ :executable => ENV['CCLD'].nil? ? FilePathUtils.os_executable_ext('gcc').freeze : ENV['CCLD'].split[0],
28
+ :name => 'default_gcov_linker'.freeze,
29
+ :stderr_redirect => StdErrRedirect::NONE.freeze,
30
+ :background_exec => BackgroundExec::NONE.freeze,
31
+ :optional => false.freeze,
32
+ :arguments => [
33
+ "-g".freeze,
34
+ "-fprofile-arcs".freeze,
35
+ "-ftest-coverage".freeze,
36
+ ENV['CCLD'].nil? ? "" : ENV['CCLD'].split[1..-1],
37
+ ENV['CFLAGS'].nil? ? "" : ENV['CFLAGS'].split,
38
+ ENV['LDFLAGS'].nil? ? "" : ENV['LDFLAGS'].split,
39
+ "\"${1}\"".freeze,
40
+ "-o \"${2}\"".freeze,
41
+ "${4}".freeze,
42
+ "${5}".freeze,
43
+ ENV['LDLIBS'].nil? ? "" : ENV['LDLIBS'].split
44
+ ].freeze
45
+ }
46
+
47
+ DEFAULT_GCOV_FIXTURE_TOOL = {
48
+ :executable => '${1}'.freeze,
49
+ :name => 'default_gcov_fixture'.freeze,
50
+ :stderr_redirect => StdErrRedirect::NONE.freeze,
51
+ :background_exec => BackgroundExec::NONE.freeze,
52
+ :optional => false.freeze,
53
+ :arguments => [].freeze
54
+ }
55
+
56
+ DEFAULT_GCOV_REPORT_TOOL = {
57
+ :executable => ENV['GCOV'].nil? ? FilePathUtils.os_executable_ext('gcov').freeze : ENV['GCOV'].split[0],
58
+ :name => 'default_gcov_report'.freeze,
59
+ :stderr_redirect => StdErrRedirect::NONE.freeze,
60
+ :background_exec => BackgroundExec::NONE.freeze,
61
+ :optional => false.freeze,
62
+ :arguments => [
63
+ "-n".freeze,
64
+ "-p".freeze,
65
+ "-b".freeze,
66
+ {"-o \"$\"" => 'GCOV_BUILD_OUTPUT_PATH'}.freeze,
67
+ "\"${1}\"".freeze
68
+ ].freeze
69
+ }
70
+
71
+ DEFAULT_GCOV_GCOV_POST_REPORT_TOOL = {
72
+ :executable => ENV['GCOV'].nil? ? FilePathUtils.os_executable_ext('gcov').freeze : ENV['GCOV'].split[0],
73
+ :name => 'default_gcov_gcov_post_report'.freeze,
74
+ :stderr_redirect => StdErrRedirect::NONE.freeze,
75
+ :background_exec => BackgroundExec::NONE.freeze,
76
+ :optional => true.freeze,
77
+ :arguments => [
78
+ "-b".freeze,
79
+ "-c".freeze,
80
+ "-r".freeze,
81
+ "-x".freeze,
82
+ "${1}".freeze
83
+ ].freeze
84
+ }
85
+
86
+ DEFAULT_GCOV_GCOVR_POST_REPORT_TOOL = {
87
+ :executable => 'gcovr'.freeze,
88
+ :name => 'default_gcov_gcovr_post_report'.freeze,
89
+ :stderr_redirect => StdErrRedirect::NONE.freeze,
90
+ :background_exec => BackgroundExec::NONE.freeze,
91
+ :optional => true.freeze,
92
+ :arguments => [
93
+ "${1}".freeze
94
+ ].freeze
95
+ }
96
+
97
+ DEFAULT_GCOV_REPORTGENERATOR_POST_REPORT = {
98
+ :executable => 'reportgenerator'.freeze,
99
+ :name => 'default_gcov_reportgenerator_post_report'.freeze,
100
+ :stderr_redirect => StdErrRedirect::NONE.freeze,
101
+ :background_exec => BackgroundExec::NONE.freeze,
102
+ :optional => true.freeze,
103
+ :arguments => [
104
+ "${1}".freeze
105
+ ].freeze
106
+ }
107
+
108
+ def get_default_config
109
+ return :tools => {
110
+ :gcov_compiler => DEFAULT_GCOV_COMPILER_TOOL,
111
+ :gcov_linker => DEFAULT_GCOV_LINKER_TOOL,
112
+ :gcov_fixture => DEFAULT_GCOV_FIXTURE_TOOL,
113
+ :gcov_report => DEFAULT_GCOV_REPORT_TOOL,
114
+ :gcov_gcov_post_report => DEFAULT_GCOV_GCOV_POST_REPORT_TOOL,
115
+ :gcov_gcovr_post_report => DEFAULT_GCOV_GCOVR_POST_REPORT_TOOL,
116
+ :gcov_reportgenerator_post_report => DEFAULT_GCOV_REPORTGENERATOR_POST_REPORT
117
+ }
118
+ end
@@ -16,7 +16,7 @@ class GcovrReportinator
16
16
  # Build the common gcovr arguments.
17
17
  args_common = args_builder_common(opts)
18
18
 
19
- if (gcovr_version_info[0] >= 4) && (gcovr_version_info[1] >= 2)
19
+ if ((gcovr_version_info[0] == 4) && (gcovr_version_info[1] >= 2)) || (gcovr_version_info[0] > 4)
20
20
  # gcovr version 4.2 and later supports generating multiple reports with a single call.
21
21
  args = args_common
22
22
  args += args_builder_cobertura(opts, false)
@@ -181,7 +181,7 @@ class ReportGeneratorReportinator
181
181
 
182
182
  # Run ReportGenerator with the given arguments.
183
183
  def run(args)
184
- command = @ceedling[:tool_executor].build_command_line(TOOLS_GCOV_REPORT_GENERATOR_POST_REPORT, [], args)
184
+ command = @ceedling[:tool_executor].build_command_line(TOOLS_GCOV_REPORTGENERATOR_POST_REPORT, [], args)
185
185
  return @ceedling[:tool_executor].exec(command[:line], command[:options])
186
186
  end
187
187
 
@@ -44,7 +44,7 @@ class JunitTestsReport < Plugin
44
44
  def write_header( results, stream )
45
45
  results[:counts][:time] = @time_result.reduce(0, :+)
46
46
  stream.puts '<?xml version="1.0" encoding="utf-8" ?>'
47
- stream.puts('<testsuites tests="%<total>d" failures="%<failed>d" skipped="%<ignored>d" time="%<time>f">' % results[:counts])
47
+ stream.puts('<testsuites tests="%<total>d" failures="%<failed>d" time="%<time>.3f">' % results[:counts])
48
48
  end
49
49
 
50
50
  def write_footer( stream )
@@ -53,7 +53,7 @@ class JunitTestsReport < Plugin
53
53
 
54
54
  def reorganise_results( results )
55
55
  # Reorganise the output by test suite instead of by result
56
- suites = Hash.new{ |h,k| h[k] = {collection: [], total: 0, success: 0, failed: 0, ignored: 0, stdout: []} }
56
+ suites = Hash.new{ |h,k| h[k] = {collection: [], total: 0, success: 0, failed: 0, ignored: 0, errors: 0, stdout: []} }
57
57
  results[:successes].each do |result|
58
58
  source = result[:source]
59
59
  name = source[:file].sub(/\..{1,4}$/, "")
@@ -85,7 +85,7 @@ class JunitTestsReport < Plugin
85
85
 
86
86
  def write_suite( suite, stream )
87
87
  suite[:time] = @time_result.shift
88
- stream.puts(' <testsuite name="%<name>s" tests="%<total>d" failures="%<failed>d" skipped="%<ignored>d" time="%<time>f">' % suite)
88
+ stream.puts(' <testsuite name="%<name>s" tests="%<total>d" failures="%<failed>d" skipped="%<ignored>d" errors="%<errors>d" time="%<time>.3f">' % suite)
89
89
 
90
90
  suite[:collection].each do |test|
91
91
  write_test( test, stream )
@@ -116,9 +116,9 @@ class JunitTestsReport < Plugin
116
116
 
117
117
  case test[:result]
118
118
  when :success
119
- stream.puts(' <testcase name="%<test>s" time="%<unity_test_time>f"/>' % test)
119
+ stream.puts(' <testcase name="%<test>s" time="%<unity_test_time>.3f"/>' % test)
120
120
  when :failed
121
- stream.puts(' <testcase name="%<test>s" time="%<unity_test_time>f">' % test)
121
+ stream.puts(' <testcase name="%<test>s" time="%<unity_test_time>.3f">' % test)
122
122
  if test[:message].empty?
123
123
  stream.puts(' <failure />')
124
124
  else
@@ -126,7 +126,7 @@ class JunitTestsReport < Plugin
126
126
  end
127
127
  stream.puts(' </testcase>')
128
128
  when :ignored
129
- stream.puts(' <testcase name="%<test>s" time="%<unity_test_time>f">' % test)
129
+ stream.puts(' <testcase name="%<test>s" time="%<unity_test_time>.3f">' % test)
130
130
  stream.puts(' <skipped />')
131
131
  stream.puts(' </testcase>')
132
132
  end