ceedling 0.28.2 → 0.28.3

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 (253) hide show
  1. checksums.yaml +4 -4
  2. data/assets/ceedling +3 -0
  3. data/assets/ceedling.cmd +1 -0
  4. data/assets/default_gitignore +5 -0
  5. data/assets/project_with_guts.yml +1 -0
  6. data/assets/project_with_guts_gcov.yml +3 -0
  7. data/assets/test_example_file_verbose.c +12 -0
  8. data/bin/ceedling +30 -6
  9. data/docs/CeedlingPacket.md +135 -23
  10. data/docs/CeedlingPacket.odt +0 -0
  11. data/examples/blinky/rakefile.rb +2 -1
  12. data/lib/ceedling/configurator.rb +7 -5
  13. data/lib/ceedling/configurator_builder.rb +10 -7
  14. data/lib/ceedling/configurator_plugins.rb +29 -24
  15. data/lib/ceedling/configurator_setup.rb +0 -1
  16. data/lib/ceedling/defaults.rb +7 -2
  17. data/lib/ceedling/dependinator.rb +10 -2
  18. data/lib/ceedling/file_finder.rb +57 -49
  19. data/lib/ceedling/file_path_utils.rb +12 -4
  20. data/lib/ceedling/file_wrapper.rb +4 -0
  21. data/lib/ceedling/generator.rb +4 -3
  22. data/lib/ceedling/generator_test_results.rb +15 -13
  23. data/lib/ceedling/plugin_manager.rb +18 -18
  24. data/lib/ceedling/plugin_reportinator.rb +3 -2
  25. data/lib/ceedling/plugin_reportinator_helper.rb +2 -3
  26. data/lib/ceedling/preprocessinator_extractor.rb +2 -2
  27. data/lib/ceedling/preprocessinator_includes_handler.rb +5 -0
  28. data/lib/ceedling/rakefile.rb +1 -0
  29. data/lib/ceedling/release_invoker_helper.rb +5 -2
  30. data/lib/ceedling/rules_release.rake +2 -1
  31. data/lib/ceedling/rules_tests.rake +18 -9
  32. data/lib/ceedling/rules_tests_deep_dependencies.rake +2 -2
  33. data/lib/ceedling/task_invoker.rb +15 -3
  34. data/lib/ceedling/tasks_vendor.rake +3 -3
  35. data/lib/ceedling/test_invoker.rb +39 -12
  36. data/lib/ceedling/test_invoker_helper.rb +5 -1
  37. data/lib/ceedling/tool_executor.rb +8 -4
  38. data/lib/ceedling/version.rb +1 -1
  39. data/out.fail +21 -0
  40. data/plugins/beep/README.md +22 -0
  41. data/plugins/beep/lib/beep.rb +40 -0
  42. data/plugins/bullseye/bullseye.rake +43 -36
  43. data/plugins/bullseye/config/defaults.yml +4 -0
  44. data/plugins/bullseye/lib/bullseye.rb +27 -5
  45. data/plugins/command_hooks/lib/command_hooks.rb +3 -0
  46. data/plugins/gcov/README.md +34 -1
  47. data/plugins/gcov/config/defaults.yml +3 -3
  48. data/plugins/gcov/gcov.rake +7 -5
  49. data/plugins/gcov/lib/gcov.rb +3 -1
  50. data/plugins/gcov/lib/gcov_constants.rb +2 -0
  51. data/plugins/junit_tests_report/lib/junit_tests_report.rb +12 -9
  52. data/plugins/module_generator/lib/module_generator.rb +14 -1
  53. data/plugins/module_generator/module_generator.rake +21 -4
  54. data/plugins/raw_output_report/lib/raw_output_report.rb +41 -0
  55. data/spec/gcov/gcov_deployment_spec.rb +1 -1
  56. data/spec/gcov/gcov_test_cases_spec.rb +2 -2
  57. data/spec/generator_test_results_spec.rb +5 -0
  58. data/spec/preprocessinator_includes_handler_spec.rb +1 -0
  59. data/spec/spec_system_helper.rb +178 -4
  60. data/spec/support/test_example.fail +1 -0
  61. data/spec/support/test_example.pass +1 -0
  62. data/spec/support/test_example_empty.pass +1 -0
  63. data/spec/support/test_example_ignore.pass +1 -0
  64. data/spec/support/test_example_mangled.pass +1 -0
  65. data/spec/support/test_example_with_time.pass +22 -0
  66. data/spec/system/deployment_spec.rb +33 -0
  67. data/vendor/cmock/README.md +4 -3
  68. data/vendor/cmock/docs/CMock_Summary.md +1 -1
  69. data/vendor/cmock/lib/cmock_config.rb +4 -0
  70. data/vendor/cmock/lib/cmock_generator.rb +5 -2
  71. data/vendor/cmock/lib/cmock_generator_plugin_array.rb +4 -4
  72. data/vendor/cmock/lib/cmock_generator_plugin_callback.rb +9 -11
  73. data/vendor/cmock/lib/cmock_generator_plugin_cexception.rb +0 -1
  74. data/vendor/cmock/lib/cmock_generator_plugin_ignore.rb +2 -3
  75. data/vendor/cmock/lib/cmock_generator_plugin_ignore_arg.rb +2 -4
  76. data/vendor/cmock/lib/cmock_generator_plugin_return_thru_ptr.rb +0 -2
  77. data/vendor/cmock/lib/cmock_generator_utils.rb +16 -3
  78. data/vendor/cmock/lib/cmock_header_parser.rb +59 -34
  79. data/vendor/cmock/release/build.info +1 -1
  80. data/vendor/cmock/release/version.info +1 -1
  81. data/vendor/cmock/scripts/create_makefile.rb +17 -2
  82. data/vendor/cmock/src/cmock.c +13 -7
  83. data/vendor/cmock/test/test_helper.rb +11 -10
  84. data/vendor/cmock/test/unit/cmock_config_test.rb +4 -2
  85. data/vendor/cmock/test/unit/cmock_generator_main_test.rb +10 -4
  86. data/vendor/cmock/test/unit/cmock_generator_plugin_array_test.rb +20 -12
  87. data/vendor/cmock/test/unit/cmock_generator_plugin_expect_a_test.rb +2 -2
  88. data/vendor/cmock/test/unit/cmock_generator_plugin_expect_b_test.rb +2 -2
  89. data/vendor/cmock/test/unit/cmock_generator_plugin_ignore_arg_test.rb +3 -3
  90. data/vendor/cmock/test/unit/cmock_generator_plugin_return_thru_ptr_test.rb +8 -6
  91. data/vendor/cmock/test/unit/cmock_generator_utils_test.rb +27 -10
  92. data/vendor/cmock/test/unit/cmock_header_parser_test.rb +108 -20
  93. data/vendor/cmock/vendor/c_exception/Gemfile +4 -0
  94. data/vendor/cmock/vendor/c_exception/Gemfile.lock +12 -0
  95. data/vendor/cmock/vendor/c_exception/LICENSE.txt +30 -0
  96. data/vendor/cmock/vendor/c_exception/README.md +162 -0
  97. data/vendor/cmock/vendor/c_exception/Rakefile +42 -0
  98. data/vendor/cmock/vendor/c_exception/docs/CException.md +292 -0
  99. data/vendor/cmock/vendor/c_exception/docs/ThrowTheSwitchCodingStandard.md +207 -0
  100. data/vendor/cmock/vendor/c_exception/lib/CException.c +46 -0
  101. data/vendor/cmock/vendor/c_exception/lib/CException.h +110 -0
  102. data/vendor/cmock/vendor/c_exception/makefile +24 -0
  103. data/vendor/cmock/vendor/c_exception/release/build.info +2 -0
  104. data/vendor/cmock/vendor/c_exception/release/version.info +2 -0
  105. data/vendor/cmock/vendor/c_exception/test/CExceptionConfig.h +46 -0
  106. data/vendor/cmock/vendor/c_exception/test/TestException.c +391 -0
  107. data/vendor/cmock/vendor/c_exception/test/TestException_Runner.c +67 -0
  108. data/vendor/cmock/vendor/unity/README.md +231 -0
  109. data/vendor/cmock/vendor/unity/auto/colour_prompt.rb +118 -0
  110. data/vendor/cmock/vendor/unity/auto/colour_reporter.rb +39 -0
  111. data/vendor/cmock/vendor/unity/auto/generate_config.yml +36 -0
  112. data/vendor/cmock/vendor/unity/auto/generate_module.rb +308 -0
  113. data/vendor/cmock/vendor/unity/auto/generate_test_runner.rb +457 -0
  114. data/vendor/cmock/vendor/unity/auto/parse_output.rb +323 -0
  115. data/vendor/cmock/vendor/unity/auto/stylize_as_junit.rb +252 -0
  116. data/vendor/cmock/vendor/unity/auto/test_file_filter.rb +25 -0
  117. data/vendor/cmock/vendor/unity/auto/type_sanitizer.rb +6 -0
  118. data/vendor/cmock/vendor/unity/auto/unity_test_summary.py +139 -0
  119. data/vendor/cmock/vendor/unity/auto/unity_test_summary.rb +136 -0
  120. data/vendor/cmock/vendor/unity/auto/unity_to_junit.py +146 -0
  121. data/vendor/cmock/vendor/unity/docs/ThrowTheSwitchCodingStandard.md +206 -0
  122. data/vendor/cmock/vendor/unity/docs/UnityAssertionsCheatSheetSuitableforPrintingandPossiblyFraming.pdf +0 -0
  123. data/vendor/cmock/vendor/unity/docs/UnityAssertionsReference.md +779 -0
  124. data/vendor/cmock/vendor/unity/docs/UnityConfigurationGuide.md +433 -0
  125. data/vendor/cmock/vendor/unity/docs/UnityGettingStartedGuide.md +192 -0
  126. data/vendor/cmock/vendor/unity/docs/UnityHelperScriptsGuide.md +260 -0
  127. data/vendor/cmock/vendor/unity/docs/license.txt +21 -0
  128. data/vendor/cmock/vendor/unity/examples/example_1/makefile +71 -0
  129. data/vendor/cmock/vendor/unity/examples/example_1/readme.txt +5 -0
  130. data/vendor/cmock/vendor/unity/examples/example_1/src/ProductionCode.c +24 -0
  131. data/vendor/cmock/vendor/unity/examples/example_1/src/ProductionCode.h +3 -0
  132. data/vendor/cmock/vendor/unity/examples/example_1/src/ProductionCode2.c +11 -0
  133. data/vendor/cmock/vendor/unity/examples/example_1/src/ProductionCode2.h +2 -0
  134. data/vendor/cmock/vendor/unity/examples/example_1/test/TestProductionCode.c +62 -0
  135. data/vendor/cmock/vendor/unity/examples/example_1/test/TestProductionCode2.c +31 -0
  136. data/vendor/cmock/vendor/unity/examples/example_1/test/test_runners/TestProductionCode2_Runner.c +53 -0
  137. data/vendor/cmock/vendor/unity/examples/example_1/test/test_runners/TestProductionCode_Runner.c +57 -0
  138. data/vendor/cmock/vendor/unity/examples/example_2/makefile +70 -0
  139. data/vendor/cmock/vendor/unity/examples/example_2/readme.txt +5 -0
  140. data/vendor/cmock/vendor/unity/examples/example_2/src/ProductionCode.c +24 -0
  141. data/vendor/cmock/vendor/unity/examples/example_2/src/ProductionCode.h +3 -0
  142. data/vendor/cmock/vendor/unity/examples/example_2/src/ProductionCode2.c +11 -0
  143. data/vendor/cmock/vendor/unity/examples/example_2/src/ProductionCode2.h +2 -0
  144. data/vendor/cmock/vendor/unity/examples/example_2/test/TestProductionCode.c +64 -0
  145. data/vendor/cmock/vendor/unity/examples/example_2/test/TestProductionCode2.c +33 -0
  146. data/vendor/cmock/vendor/unity/examples/example_2/test/test_runners/TestProductionCode2_Runner.c +9 -0
  147. data/vendor/cmock/vendor/unity/examples/example_2/test/test_runners/TestProductionCode_Runner.c +11 -0
  148. data/vendor/cmock/vendor/unity/examples/example_2/test/test_runners/all_tests.c +12 -0
  149. data/vendor/cmock/vendor/unity/examples/example_3/helper/UnityHelper.c +10 -0
  150. data/vendor/cmock/vendor/unity/examples/example_3/helper/UnityHelper.h +12 -0
  151. data/vendor/cmock/vendor/unity/examples/example_3/rakefile.rb +43 -0
  152. data/vendor/cmock/vendor/unity/examples/example_3/rakefile_helper.rb +249 -0
  153. data/vendor/cmock/vendor/unity/examples/example_3/readme.txt +13 -0
  154. data/vendor/cmock/vendor/unity/examples/example_3/src/ProductionCode.c +24 -0
  155. data/vendor/cmock/vendor/unity/examples/example_3/src/ProductionCode.h +3 -0
  156. data/vendor/cmock/vendor/unity/examples/example_3/src/ProductionCode2.c +11 -0
  157. data/vendor/cmock/vendor/unity/examples/example_3/src/ProductionCode2.h +2 -0
  158. data/vendor/cmock/vendor/unity/examples/example_3/target_gcc_32.yml +46 -0
  159. data/vendor/cmock/vendor/unity/examples/example_3/test/TestProductionCode.c +62 -0
  160. data/vendor/cmock/vendor/unity/examples/example_3/test/TestProductionCode2.c +31 -0
  161. data/vendor/cmock/vendor/unity/examples/unity_config.h +247 -0
  162. data/vendor/cmock/vendor/unity/extras/eclipse/error_parsers.txt +26 -0
  163. data/vendor/cmock/vendor/unity/extras/fixture/rakefile.rb +48 -0
  164. data/vendor/cmock/vendor/unity/extras/fixture/rakefile_helper.rb +178 -0
  165. data/vendor/cmock/vendor/unity/extras/fixture/readme.txt +9 -0
  166. data/vendor/cmock/vendor/unity/extras/fixture/src/unity_fixture.c +436 -0
  167. data/vendor/cmock/vendor/unity/extras/fixture/src/unity_fixture.h +83 -0
  168. data/vendor/cmock/vendor/unity/extras/fixture/src/unity_fixture_internals.h +51 -0
  169. data/vendor/cmock/vendor/unity/extras/fixture/src/unity_fixture_malloc_overrides.h +47 -0
  170. data/vendor/cmock/vendor/unity/extras/fixture/test/Makefile +75 -0
  171. data/vendor/cmock/vendor/unity/extras/fixture/test/main/AllTests.c +22 -0
  172. data/vendor/cmock/vendor/unity/extras/fixture/test/template_fixture_tests.c +39 -0
  173. data/vendor/cmock/vendor/unity/extras/fixture/test/unity_fixture_Test.c +543 -0
  174. data/vendor/cmock/vendor/unity/extras/fixture/test/unity_fixture_TestRunner.c +57 -0
  175. data/vendor/cmock/vendor/unity/extras/fixture/test/unity_output_Spy.c +57 -0
  176. data/vendor/cmock/vendor/unity/extras/fixture/test/unity_output_Spy.h +17 -0
  177. data/vendor/cmock/vendor/unity/release/build.info +2 -0
  178. data/vendor/cmock/vendor/unity/release/version.info +2 -0
  179. data/vendor/cmock/vendor/unity/src/unity.c +1572 -0
  180. data/vendor/cmock/vendor/unity/src/unity.h +503 -0
  181. data/vendor/cmock/vendor/unity/src/unity_internals.h +924 -0
  182. data/vendor/cmock/vendor/unity/test/Makefile +68 -0
  183. data/vendor/cmock/vendor/unity/test/expectdata/testsample_cmd.c +61 -0
  184. data/vendor/cmock/vendor/unity/test/expectdata/testsample_def.c +57 -0
  185. data/vendor/cmock/vendor/unity/test/expectdata/testsample_head1.c +55 -0
  186. data/vendor/cmock/vendor/unity/test/expectdata/testsample_head1.h +15 -0
  187. data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_cmd.c +80 -0
  188. data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_def.c +76 -0
  189. data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_head1.c +75 -0
  190. data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_head1.h +13 -0
  191. data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_new1.c +89 -0
  192. data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_new2.c +89 -0
  193. data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_param.c +77 -0
  194. data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_run1.c +89 -0
  195. data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_run2.c +89 -0
  196. data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_yaml.c +90 -0
  197. data/vendor/cmock/vendor/unity/test/expectdata/testsample_new1.c +67 -0
  198. data/vendor/cmock/vendor/unity/test/expectdata/testsample_new2.c +70 -0
  199. data/vendor/cmock/vendor/unity/test/expectdata/testsample_param.c +58 -0
  200. data/vendor/cmock/vendor/unity/test/expectdata/testsample_run1.c +67 -0
  201. data/vendor/cmock/vendor/unity/test/expectdata/testsample_run2.c +70 -0
  202. data/vendor/cmock/vendor/unity/test/expectdata/testsample_yaml.c +71 -0
  203. data/vendor/cmock/vendor/unity/test/rakefile +125 -0
  204. data/vendor/cmock/vendor/unity/test/rakefile_helper.rb +260 -0
  205. data/vendor/cmock/vendor/unity/test/spec/generate_module_existing_file_spec.rb +158 -0
  206. data/vendor/cmock/vendor/unity/test/targets/clang_file.yml +78 -0
  207. data/vendor/cmock/vendor/unity/test/targets/clang_strict.yml +78 -0
  208. data/vendor/cmock/vendor/unity/test/targets/gcc_32.yml +49 -0
  209. data/vendor/cmock/vendor/unity/test/targets/gcc_64.yml +50 -0
  210. data/vendor/cmock/vendor/unity/test/targets/gcc_auto_limits.yml +47 -0
  211. data/vendor/cmock/vendor/unity/test/targets/gcc_auto_stdint.yml +59 -0
  212. data/vendor/cmock/vendor/unity/test/targets/gcc_manual_math.yml +47 -0
  213. data/vendor/cmock/vendor/unity/test/targets/hitech_picc18.yml +101 -0
  214. data/vendor/cmock/vendor/unity/test/targets/iar_arm_v4.yml +90 -0
  215. data/vendor/cmock/vendor/unity/test/targets/iar_arm_v5.yml +80 -0
  216. data/vendor/cmock/vendor/unity/test/targets/iar_arm_v5_3.yml +80 -0
  217. data/vendor/cmock/vendor/unity/test/targets/iar_armcortex_LM3S9B92_v5_4.yml +94 -0
  218. data/vendor/cmock/vendor/unity/test/targets/iar_cortexm3_v5.yml +84 -0
  219. data/vendor/cmock/vendor/unity/test/targets/iar_msp430.yml +95 -0
  220. data/vendor/cmock/vendor/unity/test/targets/iar_sh2a_v6.yml +86 -0
  221. data/vendor/cmock/vendor/unity/test/testdata/CException.h +11 -0
  222. data/vendor/cmock/vendor/unity/test/testdata/Defs.h +8 -0
  223. data/vendor/cmock/vendor/unity/test/testdata/cmock.h +14 -0
  224. data/vendor/cmock/vendor/unity/test/testdata/mockMock.h +13 -0
  225. data/vendor/cmock/vendor/unity/test/testdata/testRunnerGenerator.c +186 -0
  226. data/vendor/cmock/vendor/unity/test/testdata/testRunnerGeneratorSmall.c +70 -0
  227. data/vendor/cmock/vendor/unity/test/testdata/testRunnerGeneratorWithMocks.c +195 -0
  228. data/vendor/cmock/vendor/unity/test/tests/test_generate_test_runner.rb +1252 -0
  229. data/vendor/cmock/vendor/unity/test/tests/testparameterized.c +113 -0
  230. data/vendor/cmock/vendor/unity/test/tests/testunity.c +5371 -0
  231. data/vendor/unity/auto/generate_test_runner.rb +30 -10
  232. data/vendor/unity/auto/parse_output.rb +212 -109
  233. data/vendor/unity/docs/ThrowTheSwitchCodingStandard.md +9 -10
  234. data/vendor/unity/docs/UnityAssertionsReference.md +11 -2
  235. data/vendor/unity/docs/UnityConfigurationGuide.md +90 -55
  236. data/vendor/unity/docs/UnityGettingStartedGuide.md +6 -5
  237. data/vendor/unity/docs/UnityHelperScriptsGuide.md +23 -5
  238. data/vendor/unity/examples/unity_config.h +8 -0
  239. data/vendor/unity/extras/fixture/src/unity_fixture.c +4 -0
  240. data/vendor/unity/extras/fixture/src/unity_fixture.h +1 -1
  241. data/vendor/unity/extras/fixture/src/unity_fixture_internals.h +2 -2
  242. data/vendor/unity/release/build.info +1 -1
  243. data/vendor/unity/release/version.info +1 -1
  244. data/vendor/unity/src/unity.c +64 -57
  245. data/vendor/unity/src/unity.h +111 -7
  246. data/vendor/unity/src/unity_internals.h +173 -73
  247. data/vendor/unity/test/Makefile +5 -1
  248. data/vendor/unity/test/testdata/testRunnerGenerator.c +4 -1
  249. data/vendor/unity/test/testdata/testRunnerGeneratorSmall.c +4 -1
  250. data/vendor/unity/test/testdata/testRunnerGeneratorWithMocks.c +4 -1
  251. data/vendor/unity/test/tests/testparameterized.c +5 -2
  252. data/vendor/unity/test/tests/testunity.c +34 -0
  253. metadata +150 -2
@@ -0,0 +1,249 @@
1
+ require 'yaml'
2
+ require 'fileutils'
3
+ require UNITY_ROOT + '/auto/unity_test_summary'
4
+ require UNITY_ROOT + '/auto/generate_test_runner'
5
+ require UNITY_ROOT + '/auto/colour_reporter'
6
+
7
+ module RakefileHelpers
8
+ C_EXTENSION = '.c'.freeze
9
+
10
+ def load_configuration(config_file)
11
+ $cfg_file = config_file
12
+ $cfg = YAML.load(File.read($cfg_file))
13
+ end
14
+
15
+ def configure_clean
16
+ CLEAN.include($cfg['compiler']['build_path'] + '*.*') unless $cfg['compiler']['build_path'].nil?
17
+ end
18
+
19
+ def configure_toolchain(config_file = DEFAULT_CONFIG_FILE)
20
+ config_file += '.yml' unless config_file =~ /\.yml$/
21
+ load_configuration(config_file)
22
+ configure_clean
23
+ end
24
+
25
+ def unit_test_files
26
+ path = $cfg['compiler']['unit_tests_path'] + 'Test*' + C_EXTENSION
27
+ path.tr!('\\', '/')
28
+ FileList.new(path)
29
+ end
30
+
31
+ def local_include_dirs
32
+ include_dirs = $cfg['compiler']['includes']['items'].dup
33
+ include_dirs.delete_if { |dir| dir.is_a?(Array) }
34
+ include_dirs
35
+ end
36
+
37
+ def extract_headers(filename)
38
+ includes = []
39
+ lines = File.readlines(filename)
40
+ lines.each do |line|
41
+ m = line.match(/^\s*#include\s+\"\s*(.+\.[hH])\s*\"/)
42
+ includes << m[1] unless m.nil?
43
+ end
44
+ includes
45
+ end
46
+
47
+ def find_source_file(header, paths)
48
+ paths.each do |dir|
49
+ src_file = dir + header.ext(C_EXTENSION)
50
+ return src_file if File.exist?(src_file)
51
+ end
52
+ nil
53
+ end
54
+
55
+ def tackit(strings)
56
+ result = if strings.is_a?(Array)
57
+ "\"#{strings.join}\""
58
+ else
59
+ strings
60
+ end
61
+ result
62
+ end
63
+
64
+ def squash(prefix, items)
65
+ result = ''
66
+ items.each { |item| result += " #{prefix}#{tackit(item)}" }
67
+ result
68
+ end
69
+
70
+ def build_compiler_fields
71
+ command = tackit($cfg['compiler']['path'])
72
+ defines = if $cfg['compiler']['defines']['items'].nil?
73
+ ''
74
+ else
75
+ squash($cfg['compiler']['defines']['prefix'], $cfg['compiler']['defines']['items'])
76
+ end
77
+ options = squash('', $cfg['compiler']['options'])
78
+ includes = squash($cfg['compiler']['includes']['prefix'], $cfg['compiler']['includes']['items'])
79
+ includes = includes.gsub(/\\ /, ' ').gsub(/\\\"/, '"').gsub(/\\$/, '') # Remove trailing slashes (for IAR)
80
+
81
+ { command: command, defines: defines, options: options, includes: includes }
82
+ end
83
+
84
+ def compile(file, _defines = [])
85
+ compiler = build_compiler_fields
86
+ cmd_str = "#{compiler[:command]}#{compiler[:defines]}#{compiler[:options]}#{compiler[:includes]} #{file} " \
87
+ "#{$cfg['compiler']['object_files']['prefix']}#{$cfg['compiler']['object_files']['destination']}"
88
+ obj_file = "#{File.basename(file, C_EXTENSION)}#{$cfg['compiler']['object_files']['extension']}"
89
+ execute(cmd_str + obj_file)
90
+ obj_file
91
+ end
92
+
93
+ def build_linker_fields
94
+ command = tackit($cfg['linker']['path'])
95
+ options = if $cfg['linker']['options'].nil?
96
+ ''
97
+ else
98
+ squash('', $cfg['linker']['options'])
99
+ end
100
+ includes = if $cfg['linker']['includes'].nil? || $cfg['linker']['includes']['items'].nil?
101
+ ''
102
+ else
103
+ squash($cfg['linker']['includes']['prefix'], $cfg['linker']['includes']['items'])
104
+ end.gsub(/\\ /, ' ').gsub(/\\\"/, '"').gsub(/\\$/, '') # Remove trailing slashes (for IAR)
105
+
106
+ { command: command, options: options, includes: includes }
107
+ end
108
+
109
+ def link_it(exe_name, obj_list)
110
+ linker = build_linker_fields
111
+ cmd_str = "#{linker[:command]}#{linker[:options]}#{linker[:includes]} " +
112
+ (obj_list.map { |obj| "#{$cfg['linker']['object_files']['path']}#{obj} " }).join +
113
+ $cfg['linker']['bin_files']['prefix'] + ' ' +
114
+ $cfg['linker']['bin_files']['destination'] +
115
+ exe_name + $cfg['linker']['bin_files']['extension']
116
+ execute(cmd_str)
117
+ end
118
+
119
+ def build_simulator_fields
120
+ return nil if $cfg['simulator'].nil?
121
+ command = if $cfg['simulator']['path'].nil?
122
+ ''
123
+ else
124
+ (tackit($cfg['simulator']['path']) + ' ')
125
+ end
126
+ pre_support = if $cfg['simulator']['pre_support'].nil?
127
+ ''
128
+ else
129
+ squash('', $cfg['simulator']['pre_support'])
130
+ end
131
+ post_support = if $cfg['simulator']['post_support'].nil?
132
+ ''
133
+ else
134
+ squash('', $cfg['simulator']['post_support'])
135
+ end
136
+
137
+ { command: command, pre_support: pre_support, post_support: post_support }
138
+ end
139
+
140
+ def execute(command_string, verbose = true, raise_on_fail = true)
141
+ report command_string
142
+ output = `#{command_string}`.chomp
143
+ report(output) if verbose && !output.nil? && !output.empty?
144
+ if !$?.exitstatus.zero? && raise_on_fail
145
+ raise "Command failed. (Returned #{$?.exitstatus})"
146
+ end
147
+ output
148
+ end
149
+
150
+ def report_summary
151
+ summary = UnityTestSummary.new
152
+ summary.root = HERE
153
+ results_glob = "#{$cfg['compiler']['build_path']}*.test*"
154
+ results_glob.tr!('\\', '/')
155
+ results = Dir[results_glob]
156
+ summary.targets = results
157
+ summary.run
158
+ fail_out 'FAIL: There were failures' if summary.failures > 0
159
+ end
160
+
161
+ def run_tests(test_files)
162
+ report 'Running system tests...'
163
+
164
+ # Tack on TEST define for compiling unit tests
165
+ load_configuration($cfg_file)
166
+ test_defines = ['TEST']
167
+ $cfg['compiler']['defines']['items'] = [] if $cfg['compiler']['defines']['items'].nil?
168
+ $cfg['compiler']['defines']['items'] << 'TEST'
169
+
170
+ include_dirs = local_include_dirs
171
+
172
+ # Build and execute each unit test
173
+ test_files.each do |test|
174
+ obj_list = []
175
+
176
+ # Detect dependencies and build required required modules
177
+ extract_headers(test).each do |header|
178
+ # Compile corresponding source file if it exists
179
+ src_file = find_source_file(header, include_dirs)
180
+ obj_list << compile(src_file, test_defines) unless src_file.nil?
181
+ end
182
+
183
+ # Build the test runner (generate if configured to do so)
184
+ test_base = File.basename(test, C_EXTENSION)
185
+ runner_name = test_base + '_Runner.c'
186
+ if $cfg['compiler']['runner_path'].nil?
187
+ runner_path = $cfg['compiler']['build_path'] + runner_name
188
+ test_gen = UnityTestRunnerGenerator.new($cfg_file)
189
+ test_gen.run(test, runner_path)
190
+ else
191
+ runner_path = $cfg['compiler']['runner_path'] + runner_name
192
+ end
193
+
194
+ obj_list << compile(runner_path, test_defines)
195
+
196
+ # Build the test module
197
+ obj_list << compile(test, test_defines)
198
+
199
+ # Link the test executable
200
+ link_it(test_base, obj_list)
201
+
202
+ # Execute unit test and generate results file
203
+ simulator = build_simulator_fields
204
+ executable = $cfg['linker']['bin_files']['destination'] + test_base + $cfg['linker']['bin_files']['extension']
205
+ cmd_str = if simulator.nil?
206
+ executable
207
+ else
208
+ "#{simulator[:command]} #{simulator[:pre_support]} #{executable} #{simulator[:post_support]}"
209
+ end
210
+ output = execute(cmd_str, true, false)
211
+ test_results = $cfg['compiler']['build_path'] + test_base
212
+ test_results += if output.match(/OK$/m).nil?
213
+ '.testfail'
214
+ else
215
+ '.testpass'
216
+ end
217
+ File.open(test_results, 'w') { |f| f.print output }
218
+ end
219
+ end
220
+
221
+ def build_application(main)
222
+ report 'Building application...'
223
+
224
+ obj_list = []
225
+ load_configuration($cfg_file)
226
+ main_path = $cfg['compiler']['source_path'] + main + C_EXTENSION
227
+
228
+ # Detect dependencies and build required required modules
229
+ include_dirs = get_local_include_dirs
230
+ extract_headers(main_path).each do |header|
231
+ src_file = find_source_file(header, include_dirs)
232
+ obj_list << compile(src_file) unless src_file.nil?
233
+ end
234
+
235
+ # Build the main source file
236
+ main_base = File.basename(main_path, C_EXTENSION)
237
+ obj_list << compile(main_path)
238
+
239
+ # Create the executable
240
+ link_it(main_base, obj_list)
241
+ end
242
+
243
+ def fail_out(msg)
244
+ puts msg
245
+ puts 'Not returning exit code so continuous integration can pass'
246
+ # exit(-1) # Only removed to pass example_3, which has failing tests on purpose.
247
+ # Still fail if the build fails for any other reason.
248
+ end
249
+ end
@@ -0,0 +1,13 @@
1
+ Example 3
2
+ =========
3
+
4
+ This example project gives an example of some passing, ignored, and failing tests.
5
+ It's simple and meant for you to look over and get an idea for what all of this stuff does.
6
+
7
+ You can build and test using rake. The rake version will let you test with gcc or a couple
8
+ versions of IAR. You can tweak the yaml files to get those versions running.
9
+
10
+ Ruby is required if you're using the rake version (obviously). This version shows off most of
11
+ Unity's advanced features (automatically creating test runners, fancy summaries, etc.)
12
+ Without ruby, you have to maintain your own test runners. Do that for a while and you'll learn
13
+ why you really want to start using the Ruby tools.
@@ -0,0 +1,24 @@
1
+
2
+ #include "ProductionCode.h"
3
+
4
+ int Counter = 0;
5
+ int NumbersToFind[9] = { 0, 34, 55, 66, 32, 11, 1, 77, 888 }; //some obnoxious array to search that is 1-based indexing instead of 0.
6
+
7
+ // This function is supposed to search through NumbersToFind and find a particular number.
8
+ // If it finds it, the index is returned. Otherwise 0 is returned which sorta makes sense since
9
+ // NumbersToFind is indexed from 1. Unfortunately it's broken
10
+ // (and should therefore be caught by our tests)
11
+ int FindFunction_WhichIsBroken(int NumberToFind)
12
+ {
13
+ int i = 0;
14
+ while (i <= 8) //Notice I should have been in braces
15
+ i++;
16
+ if (NumbersToFind[i] == NumberToFind) //Yikes! I'm getting run after the loop finishes instead of during it!
17
+ return i;
18
+ return 0;
19
+ }
20
+
21
+ int FunctionWhichReturnsLocalVariable(void)
22
+ {
23
+ return Counter;
24
+ }
@@ -0,0 +1,3 @@
1
+
2
+ int FindFunction_WhichIsBroken(int NumberToFind);
3
+ int FunctionWhichReturnsLocalVariable(void);
@@ -0,0 +1,11 @@
1
+
2
+ #include "ProductionCode2.h"
3
+
4
+ char* ThisFunctionHasNotBeenTested(int Poor, char* LittleFunction)
5
+ {
6
+ (void)Poor;
7
+ (void)LittleFunction;
8
+ //Since There Are No Tests Yet, This Function Could Be Empty For All We Know.
9
+ // Which isn't terribly useful... but at least we put in a TEST_IGNORE so we won't forget
10
+ return (char*)0;
11
+ }
@@ -0,0 +1,2 @@
1
+
2
+ char* ThisFunctionHasNotBeenTested(int Poor, char* LittleFunction);
@@ -0,0 +1,46 @@
1
+ # Copied from ~Unity/targets/gcc_32.yml
2
+ unity_root: &unity_root '../..'
3
+ compiler:
4
+ path: gcc
5
+ source_path: 'src/'
6
+ unit_tests_path: &unit_tests_path 'test/'
7
+ build_path: &build_path 'build/'
8
+ options:
9
+ - '-c'
10
+ - '-m32'
11
+ - '-Wall'
12
+ - '-Wno-address'
13
+ - '-std=c99'
14
+ - '-pedantic'
15
+ includes:
16
+ prefix: '-I'
17
+ items:
18
+ - 'src/'
19
+ - '../../src/'
20
+ - *unit_tests_path
21
+ defines:
22
+ prefix: '-D'
23
+ items:
24
+ - UNITY_INCLUDE_DOUBLE
25
+ - UNITY_SUPPORT_TEST_CASES
26
+ object_files:
27
+ prefix: '-o'
28
+ extension: '.o'
29
+ destination: *build_path
30
+ linker:
31
+ path: gcc
32
+ options:
33
+ - -lm
34
+ - '-m32'
35
+ includes:
36
+ prefix: '-I'
37
+ object_files:
38
+ path: *build_path
39
+ extension: '.o'
40
+ bin_files:
41
+ prefix: '-o'
42
+ extension: '.exe'
43
+ destination: *build_path
44
+ colour: true
45
+ :unity:
46
+ :plugins: []
@@ -0,0 +1,62 @@
1
+
2
+ #include "ProductionCode.h"
3
+ #include "unity.h"
4
+
5
+ //sometimes you may want to get at local data in a module.
6
+ //for example: If you plan to pass by reference, this could be useful
7
+ //however, it should often be avoided
8
+ extern int Counter;
9
+
10
+ void setUp(void)
11
+ {
12
+ //This is run before EACH TEST
13
+ Counter = 0x5a5a;
14
+ }
15
+
16
+ void tearDown(void)
17
+ {
18
+ }
19
+
20
+ void test_FindFunction_WhichIsBroken_ShouldReturnZeroIfItemIsNotInList_WhichWorksEvenInOurBrokenCode(void)
21
+ {
22
+ //All of these should pass
23
+ TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(78));
24
+ TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(1));
25
+ TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(33));
26
+ TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(999));
27
+ TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(-1));
28
+ }
29
+
30
+ void test_FindFunction_WhichIsBroken_ShouldReturnTheIndexForItemsInList_WhichWillFailBecauseOurFunctionUnderTestIsBroken(void)
31
+ {
32
+ // You should see this line fail in your test summary
33
+ TEST_ASSERT_EQUAL(1, FindFunction_WhichIsBroken(34));
34
+
35
+ // Notice the rest of these didn't get a chance to run because the line above failed.
36
+ // Unit tests abort each test function on the first sign of trouble.
37
+ // Then NEXT test function runs as normal.
38
+ TEST_ASSERT_EQUAL(8, FindFunction_WhichIsBroken(8888));
39
+ }
40
+
41
+ void test_FunctionWhichReturnsLocalVariable_ShouldReturnTheCurrentCounterValue(void)
42
+ {
43
+ //This should be true because setUp set this up for us before this test
44
+ TEST_ASSERT_EQUAL_HEX(0x5a5a, FunctionWhichReturnsLocalVariable());
45
+
46
+ //This should be true because we can still change our answer
47
+ Counter = 0x1234;
48
+ TEST_ASSERT_EQUAL_HEX(0x1234, FunctionWhichReturnsLocalVariable());
49
+ }
50
+
51
+ void test_FunctionWhichReturnsLocalVariable_ShouldReturnTheCurrentCounterValueAgain(void)
52
+ {
53
+ //This should be true again because setup was rerun before this test (and after we changed it to 0x1234)
54
+ TEST_ASSERT_EQUAL_HEX(0x5a5a, FunctionWhichReturnsLocalVariable());
55
+ }
56
+
57
+ void test_FunctionWhichReturnsLocalVariable_ShouldReturnCurrentCounter_ButFailsBecauseThisTestIsActuallyFlawed(void)
58
+ {
59
+ //Sometimes you get the test wrong. When that happens, you get a failure too... and a quick look should tell
60
+ // you what actually happened...which in this case was a failure to setup the initial condition.
61
+ TEST_ASSERT_EQUAL_HEX(0x1234, FunctionWhichReturnsLocalVariable());
62
+ }
@@ -0,0 +1,31 @@
1
+
2
+ #include "ProductionCode2.h"
3
+ #include "unity.h"
4
+
5
+ /* These should be ignored because they are commented out in various ways:
6
+ #include "whatever.h"
7
+ */
8
+ //#include "somethingelse.h"
9
+
10
+ void setUp(void)
11
+ {
12
+ }
13
+
14
+ void tearDown(void)
15
+ {
16
+ }
17
+
18
+ void test_IgnoredTest(void)
19
+ {
20
+ TEST_IGNORE_MESSAGE("This Test Was Ignored On Purpose");
21
+ }
22
+
23
+ void test_AnotherIgnoredTest(void)
24
+ {
25
+ TEST_IGNORE_MESSAGE("These Can Be Useful For Leaving Yourself Notes On What You Need To Do Yet");
26
+ }
27
+
28
+ void test_ThisFunctionHasNotBeenTested_NeedsToBeImplemented(void)
29
+ {
30
+ TEST_IGNORE(); //Like This
31
+ }