ceedling 0.19.0 → 0.20.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (426) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +10 -10
  3. data/bin/ceedling +205 -92
  4. data/ceedling-0.19.0.gem +0 -0
  5. data/config/test_environment.rb +12 -12
  6. data/docs/CeedlingPacket.md +866 -853
  7. data/docs/CeedlingPacket.odt +0 -0
  8. data/docs/CeedlingPacket.pdf +0 -0
  9. data/examples/temp_sensor/rakefile.rb +4 -4
  10. data/examples/temp_sensor/src/AdcConductor.c +42 -42
  11. data/examples/temp_sensor/src/AdcConductor.h +13 -13
  12. data/examples/temp_sensor/src/AdcHardware.c +27 -27
  13. data/examples/temp_sensor/src/AdcHardware.h +11 -11
  14. data/examples/temp_sensor/src/AdcHardwareConfigurator.c +18 -18
  15. data/examples/temp_sensor/src/AdcHardwareConfigurator.h +10 -10
  16. data/examples/temp_sensor/src/AdcModel.c +33 -33
  17. data/examples/temp_sensor/src/AdcModel.h +13 -13
  18. data/examples/temp_sensor/src/AdcTemperatureSensor.c +51 -51
  19. data/examples/temp_sensor/src/AdcTemperatureSensor.h +10 -10
  20. data/examples/temp_sensor/src/Executor.c +25 -25
  21. data/examples/temp_sensor/src/Executor.h +9 -9
  22. data/examples/temp_sensor/src/IntrinsicsWrapper.c +18 -18
  23. data/examples/temp_sensor/src/IntrinsicsWrapper.h +7 -7
  24. data/examples/temp_sensor/src/Main.c +46 -46
  25. data/examples/temp_sensor/src/Main.h +7 -7
  26. data/examples/temp_sensor/src/Model.c +10 -10
  27. data/examples/temp_sensor/src/Model.h +8 -8
  28. data/examples/temp_sensor/src/ModelConfig.h +7 -7
  29. data/examples/temp_sensor/src/TaskScheduler.c +72 -72
  30. data/examples/temp_sensor/src/TaskScheduler.h +11 -11
  31. data/examples/temp_sensor/src/TemperatureCalculator.c +27 -27
  32. data/examples/temp_sensor/src/TemperatureCalculator.h +8 -8
  33. data/examples/temp_sensor/src/TemperatureFilter.c +38 -38
  34. data/examples/temp_sensor/src/TemperatureFilter.h +10 -10
  35. data/examples/temp_sensor/src/TimerConductor.c +15 -15
  36. data/examples/temp_sensor/src/TimerConductor.h +9 -9
  37. data/examples/temp_sensor/src/TimerConfigurator.c +51 -51
  38. data/examples/temp_sensor/src/TimerConfigurator.h +15 -15
  39. data/examples/temp_sensor/src/TimerHardware.c +15 -15
  40. data/examples/temp_sensor/src/TimerHardware.h +8 -8
  41. data/examples/temp_sensor/src/TimerInterruptConfigurator.c +55 -55
  42. data/examples/temp_sensor/src/TimerInterruptConfigurator.h +13 -13
  43. data/examples/temp_sensor/src/TimerInterruptHandler.c +25 -25
  44. data/examples/temp_sensor/src/TimerInterruptHandler.h +10 -10
  45. data/examples/temp_sensor/src/TimerModel.c +9 -9
  46. data/examples/temp_sensor/src/TimerModel.h +8 -8
  47. data/examples/temp_sensor/src/Types.h +90 -90
  48. data/examples/temp_sensor/src/UsartBaudRateRegisterCalculator.c +18 -18
  49. data/examples/temp_sensor/src/UsartBaudRateRegisterCalculator.h +8 -8
  50. data/examples/temp_sensor/src/UsartConductor.c +21 -21
  51. data/examples/temp_sensor/src/UsartConductor.h +7 -7
  52. data/examples/temp_sensor/src/UsartConfigurator.c +39 -39
  53. data/examples/temp_sensor/src/UsartConfigurator.h +13 -13
  54. data/examples/temp_sensor/src/UsartHardware.c +22 -22
  55. data/examples/temp_sensor/src/UsartHardware.h +9 -9
  56. data/examples/temp_sensor/src/UsartModel.c +34 -34
  57. data/examples/temp_sensor/src/UsartModel.h +10 -10
  58. data/examples/temp_sensor/src/UsartPutChar.c +16 -16
  59. data/examples/temp_sensor/src/UsartPutChar.h +8 -8
  60. data/examples/temp_sensor/src/UsartTransmitBufferStatus.c +7 -7
  61. data/examples/temp_sensor/src/UsartTransmitBufferStatus.h +8 -8
  62. data/examples/temp_sensor/test/TestAdcConductor.c +121 -121
  63. data/examples/temp_sensor/test/TestAdcHardware.c +44 -44
  64. data/examples/temp_sensor/test/TestAdcModel.c +33 -33
  65. data/examples/temp_sensor/test/TestExecutor.c +36 -36
  66. data/examples/temp_sensor/test/TestMain.c +24 -24
  67. data/examples/temp_sensor/test/TestModel.c +20 -20
  68. data/examples/temp_sensor/test/TestTaskScheduler.c +104 -104
  69. data/examples/temp_sensor/test/TestTemperatureCalculator.c +33 -33
  70. data/examples/temp_sensor/test/TestTemperatureFilter.c +79 -79
  71. data/examples/temp_sensor/test/TestTimerConductor.c +32 -32
  72. data/examples/temp_sensor/test/TestTimerHardware.c +26 -26
  73. data/examples/temp_sensor/test/TestTimerModel.c +18 -18
  74. data/examples/temp_sensor/test/TestUsartBaudRateRegisterCalculator.c +21 -21
  75. data/examples/temp_sensor/test/TestUsartConductor.c +40 -40
  76. data/examples/temp_sensor/test/TestUsartHardware.c +36 -36
  77. data/examples/temp_sensor/test/TestUsartModel.c +36 -36
  78. data/examples/temp_sensor/test/support/UnityHelper.c +12 -12
  79. data/examples/temp_sensor/test/support/UnityHelper.h +12 -12
  80. data/lib/ceedling/configurator_builder.rb +1 -1
  81. data/lib/ceedling/tasks_base.rake +10 -2
  82. data/lib/ceedling/tool_executor.rb +3 -0
  83. data/lib/ceedling/version.rb +3 -3
  84. data/license.txt +1 -1
  85. data/plugins/bullseye/bullseye.rake +162 -162
  86. data/plugins/gcov/gcov.rake +152 -152
  87. data/plugins/module_generator/lib/module_generator.rb +145 -145
  88. data/plugins/module_generator/module_generator.rake +14 -14
  89. data/plugins/stdout_gtestlike_tests_report/assets/template.erb +84 -0
  90. data/plugins/stdout_gtestlike_tests_report/assets/template.erb copy +59 -0
  91. data/plugins/stdout_gtestlike_tests_report/config/stdout_gtestlike_tests_report.yml +4 -0
  92. data/plugins/stdout_gtestlike_tests_report/lib/stdout_gtestlike_tests_report.rb +43 -0
  93. data/spec/system/deployment_spec.rb +0 -1
  94. data/test_graveyard/integration/paths_test.rb +80 -80
  95. data/test_graveyard/integration/rake_rules_aux_dependencies_test.rb +75 -75
  96. data/test_graveyard/integration/rake_rules_cmock_test.rb +74 -74
  97. data/test_graveyard/integration/rake_rules_preprocess_test.rb +178 -178
  98. data/test_graveyard/integration/rake_rules_test.rb +268 -268
  99. data/test_graveyard/integration/rake_tasks_test.rb +103 -103
  100. data/test_graveyard/integration_test_helper.rb +34 -34
  101. data/test_graveyard/rakefile_rules.rb +10 -10
  102. data/test_graveyard/rakefile_rules_aux_dependencies.rb +10 -10
  103. data/test_graveyard/rakefile_rules_cmock.rb +10 -10
  104. data/test_graveyard/rakefile_rules_preprocess.rb +10 -10
  105. data/test_graveyard/rakefile_tasks.rb +10 -10
  106. data/test_graveyard/system/file_system_test.rb +78 -78
  107. data/test_graveyard/system/project_mocks_test.rb +38 -38
  108. data/test_graveyard/system/project_simple_test.rb +39 -39
  109. data/test_graveyard/system/rule_mocks_test.rb +44 -44
  110. data/test_graveyard/system/rule_runners_test.rb +44 -44
  111. data/test_graveyard/system_test_helper.rb +73 -73
  112. data/test_graveyard/test_helper.rb +93 -93
  113. data/test_graveyard/unit/busted/configurator_builder_test.rb +569 -569
  114. data/test_graveyard/unit/busted/configurator_helper_test.rb +234 -234
  115. data/test_graveyard/unit/busted/configurator_test.rb +232 -232
  116. data/test_graveyard/unit/busted/configurator_validator_test.rb +169 -169
  117. data/test_graveyard/unit/busted/deep_merge_fix_test.rb +55 -55
  118. data/test_graveyard/unit/busted/dependinator_test.rb +129 -129
  119. data/test_graveyard/unit/busted/file_finder_helper_test.rb +45 -45
  120. data/test_graveyard/unit/busted/file_finder_test.rb +114 -114
  121. data/test_graveyard/unit/busted/file_path_utils_test.rb +97 -97
  122. data/test_graveyard/unit/busted/file_system_utils_test.rb +21 -21
  123. data/test_graveyard/unit/busted/generator_test.rb +187 -187
  124. data/test_graveyard/unit/busted/generator_test_results_test.rb +129 -129
  125. data/test_graveyard/unit/busted/generator_test_runner_test.rb +475 -475
  126. data/test_graveyard/unit/busted/preprocessinator_file_handler_test.rb +39 -39
  127. data/test_graveyard/unit/busted/preprocessinator_helper_test.rb +156 -156
  128. data/test_graveyard/unit/busted/preprocessinator_includes_handler_test.rb +93 -93
  129. data/test_graveyard/unit/busted/preprocessinator_test.rb +57 -57
  130. data/test_graveyard/unit/busted/project_file_loader_test.rb +142 -142
  131. data/test_graveyard/unit/busted/setupinator_test.rb +45 -45
  132. data/test_graveyard/unit/busted/streaminator_test.rb +49 -49
  133. data/test_graveyard/unit/busted/task_invoker_test.rb +69 -69
  134. data/test_graveyard/unit/busted/test_includes_extractor_test.rb +111 -111
  135. data/test_graveyard/unit/busted/test_invoker_helper_test.rb +62 -62
  136. data/test_graveyard/unit/busted/test_invoker_test.rb +47 -47
  137. data/test_graveyard/unit/busted/tool_executor_helper_test.rb +100 -100
  138. data/test_graveyard/unit/busted/tool_executor_test.rb +351 -351
  139. data/test_graveyard/unit/busted/verbosinator_test.rb +65 -65
  140. data/test_graveyard/unit/preprocessinator_extractor_test.rb +731 -731
  141. data/test_graveyard/unit_test_helper.rb +16 -16
  142. data/vendor/c_exception/LICENSE.txt +30 -30
  143. data/vendor/c_exception/README.md +11 -1
  144. data/vendor/c_exception/docs/CExceptionSummary.odt +0 -0
  145. data/vendor/c_exception/docs/CExceptionSummary.pdf +0 -0
  146. data/vendor/c_exception/docs/readme.txt +261 -242
  147. data/vendor/c_exception/lib/CException.c +46 -46
  148. data/vendor/c_exception/lib/CException.h +110 -86
  149. data/vendor/c_exception/makefile +23 -23
  150. data/vendor/c_exception/test/CExceptionConfig.h +46 -46
  151. data/vendor/c_exception/test/TestException.c +391 -342
  152. data/vendor/c_exception/test/TestException_Runner.c +5 -12
  153. data/vendor/c_exception/vendor/unity/README.md +211 -0
  154. data/vendor/c_exception/vendor/unity/auto/colour_prompt.rb +1 -1
  155. data/vendor/c_exception/vendor/unity/auto/colour_reporter.rb +38 -38
  156. data/vendor/c_exception/vendor/unity/auto/generate_config.yml +36 -36
  157. data/vendor/c_exception/vendor/unity/auto/generate_module.rb +202 -202
  158. data/vendor/c_exception/vendor/unity/auto/generate_test_runner.rb +391 -320
  159. data/vendor/c_exception/vendor/unity/auto/parseOutput.rb +2 -0
  160. data/vendor/c_exception/vendor/unity/auto/stylize_as_junit.rb +260 -0
  161. data/vendor/c_exception/vendor/unity/auto/type_sanitizer.rb +8 -0
  162. data/vendor/c_exception/vendor/unity/auto/unity_test_summary.py +135 -0
  163. data/vendor/c_exception/vendor/unity/auto/unity_test_summary.rb +148 -139
  164. data/vendor/c_exception/vendor/unity/docs/Unity Summary.odt +0 -0
  165. data/vendor/c_exception/vendor/unity/docs/Unity Summary.pdf +0 -0
  166. data/vendor/c_exception/vendor/unity/docs/Unity Summary.txt +224 -216
  167. data/vendor/c_exception/vendor/unity/docs/license.txt +21 -31
  168. data/vendor/c_exception/vendor/unity/examples/example_1/makefile +40 -15
  169. data/vendor/c_exception/vendor/unity/examples/example_1/src/ProductionCode2.c +2 -0
  170. data/vendor/c_exception/vendor/unity/examples/example_1/test/test_runners/TestProductionCode2_Runner.c +32 -25
  171. data/vendor/c_exception/vendor/unity/examples/example_1/test/test_runners/TestProductionCode_Runner.c +29 -22
  172. data/vendor/c_exception/vendor/unity/examples/example_2/makefile +40 -14
  173. data/vendor/c_exception/vendor/unity/examples/example_2/src/ProductionCode2.c +2 -0
  174. data/vendor/c_exception/vendor/unity/examples/example_2/test/test_runners/all_tests.c +2 -2
  175. data/vendor/c_exception/vendor/unity/examples/example_3/rakefile.rb +0 -1
  176. data/vendor/c_exception/vendor/unity/examples/example_3/src/ProductionCode2.c +2 -0
  177. data/vendor/c_exception/vendor/unity/extras/fixture/rakefile.rb +48 -37
  178. data/vendor/c_exception/vendor/unity/extras/fixture/rakefile_helper.rb +179 -179
  179. data/vendor/c_exception/vendor/unity/extras/fixture/src/unity_fixture.c +135 -94
  180. data/vendor/c_exception/vendor/unity/extras/fixture/src/unity_fixture.h +13 -17
  181. data/vendor/c_exception/vendor/unity/extras/fixture/src/unity_fixture_internals.h +12 -18
  182. data/vendor/c_exception/vendor/unity/extras/fixture/src/unity_fixture_malloc_overrides.h +30 -0
  183. data/vendor/c_exception/vendor/unity/extras/fixture/test/Makefile +60 -0
  184. data/vendor/c_exception/vendor/unity/extras/fixture/test/main/AllTests.c +4 -3
  185. data/vendor/c_exception/vendor/unity/extras/fixture/test/{testunity_fixture.c → template_fixture_tests.c} +0 -0
  186. data/vendor/c_exception/vendor/unity/extras/fixture/test/unity_fixture_Test.c +182 -27
  187. data/vendor/c_exception/vendor/unity/extras/fixture/test/unity_fixture_TestRunner.c +13 -0
  188. data/vendor/c_exception/vendor/unity/extras/fixture/test/unity_output_Spy.c +8 -6
  189. data/vendor/c_exception/vendor/unity/extras/fixture/test/unity_output_Spy.h +2 -2
  190. data/vendor/c_exception/vendor/unity/release/build.info +1 -1
  191. data/vendor/c_exception/vendor/unity/release/version.info +1 -1
  192. data/vendor/c_exception/vendor/unity/src/unity.c +1333 -1145
  193. data/vendor/c_exception/vendor/unity/src/unity.h +290 -307
  194. data/vendor/c_exception/vendor/unity/src/unity_internals.h +758 -620
  195. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_cmd.c +7 -3
  196. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_def.c +7 -3
  197. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_head1.c +55 -0
  198. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_head1.h +15 -0
  199. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_cmd.c +4 -3
  200. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_def.c +4 -3
  201. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_head1.c +75 -0
  202. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_head1.h +13 -0
  203. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_new1.c +6 -5
  204. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_new2.c +4 -3
  205. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_param.c +4 -3
  206. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_run1.c +6 -5
  207. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_run2.c +4 -3
  208. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_yaml.c +7 -6
  209. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_new1.c +9 -5
  210. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_new2.c +7 -3
  211. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_param.c +7 -3
  212. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_run1.c +9 -5
  213. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_run2.c +7 -3
  214. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_yaml.c +10 -6
  215. data/vendor/c_exception/vendor/unity/{rakefile.rb → test/rakefile} +60 -61
  216. data/vendor/c_exception/vendor/unity/{rakefile_helper.rb → test/rakefile_helper.rb} +255 -249
  217. data/vendor/c_exception/vendor/unity/test/targets/clang_file.yml +83 -0
  218. data/vendor/c_exception/vendor/unity/{targets → test/targets}/clang_strict.yml +83 -83
  219. data/vendor/c_exception/vendor/unity/test/targets/gcc_32.yml +49 -0
  220. data/vendor/c_exception/vendor/unity/test/targets/gcc_64.yml +50 -0
  221. data/vendor/c_exception/vendor/unity/{targets/gcc_64.yml → test/targets/gcc_auto_limits.yml} +46 -45
  222. data/vendor/c_exception/vendor/unity/test/targets/gcc_auto_sizeof.yml +47 -0
  223. data/vendor/c_exception/vendor/unity/test/targets/gcc_auto_stdint.yml +58 -0
  224. data/vendor/{cmock/vendor/c_exception/vendor/unity/targets/gcc_64.yml → c_exception/vendor/unity/test/targets/gcc_manual_math.yml} +46 -45
  225. data/vendor/{cmock/vendor/c_exception/vendor/unity → c_exception/vendor/unity/test}/targets/hitech_picc18.yml +101 -101
  226. data/vendor/{cmock/vendor/c_exception/vendor/unity → c_exception/vendor/unity/test}/targets/iar_arm_v4.yml +89 -89
  227. data/vendor/{cmock/vendor/c_exception/vendor/unity → c_exception/vendor/unity/test}/targets/iar_arm_v5.yml +79 -79
  228. data/vendor/c_exception/vendor/unity/{targets → test/targets}/iar_arm_v5_3.yml +79 -79
  229. data/vendor/{cmock/vendor/c_exception/vendor/unity → c_exception/vendor/unity/test}/targets/iar_armcortex_LM3S9B92_v5_4.yml +93 -93
  230. data/vendor/c_exception/vendor/unity/{targets → test/targets}/iar_cortexm3_v5.yml +83 -83
  231. data/vendor/{cmock/vendor/c_exception/vendor/unity → c_exception/vendor/unity/test}/targets/iar_msp430.yml +94 -94
  232. data/vendor/c_exception/vendor/unity/{targets → test/targets}/iar_sh2a_v6.yml +85 -85
  233. data/vendor/c_exception/vendor/unity/test/testdata/mocksample.c +51 -51
  234. data/vendor/c_exception/vendor/unity/test/testdata/sample.yml +8 -8
  235. data/vendor/c_exception/vendor/unity/test/testdata/testsample.c +68 -51
  236. data/vendor/{cmock/vendor/c_exception/vendor/unity/test → c_exception/vendor/unity/test/tests}/test_generate_test_runner.rb +102 -88
  237. data/vendor/{cmock/vendor/c_exception/vendor/unity/test → c_exception/vendor/unity/test/tests}/testparameterized.c +104 -101
  238. data/vendor/c_exception/vendor/unity/test/{testunity.c → tests/testunity.c} +3682 -3447
  239. data/vendor/cmock/docs/CMock_Summary.md +3 -0
  240. data/vendor/cmock/lib/cmock_config.rb +1 -0
  241. data/vendor/cmock/lib/cmock_file_writer.rb +7 -3
  242. data/vendor/cmock/lib/cmock_generator.rb +3 -2
  243. data/vendor/cmock/lib/cmock_header_parser.rb +12 -5
  244. data/vendor/cmock/release/version.info +1 -1
  245. data/vendor/cmock/test/system/test_compilation/parsing.h +3 -0
  246. data/vendor/cmock/test/unit/cmock_generator_main_test.rb +7 -0
  247. data/vendor/cmock/test/unit/cmock_header_parser_test.rb +57 -1
  248. data/vendor/cmock/vendor/c_exception/LICENSE.txt +30 -30
  249. data/vendor/cmock/vendor/c_exception/README.md +11 -1
  250. data/vendor/cmock/vendor/c_exception/docs/CExceptionSummary.odt +0 -0
  251. data/vendor/cmock/vendor/c_exception/docs/CExceptionSummary.pdf +0 -0
  252. data/vendor/cmock/vendor/c_exception/docs/readme.txt +261 -242
  253. data/vendor/cmock/vendor/c_exception/lib/CException.c +46 -46
  254. data/vendor/cmock/vendor/c_exception/lib/CException.h +110 -86
  255. data/vendor/cmock/vendor/c_exception/makefile +23 -23
  256. data/vendor/cmock/vendor/c_exception/test/CExceptionConfig.h +46 -46
  257. data/vendor/cmock/vendor/c_exception/test/TestException.c +391 -342
  258. data/vendor/cmock/vendor/c_exception/test/TestException_Runner.c +5 -12
  259. data/vendor/cmock/vendor/c_exception/vendor/unity/README.md +211 -0
  260. data/vendor/cmock/vendor/c_exception/vendor/unity/auto/colour_prompt.rb +1 -1
  261. data/vendor/cmock/vendor/c_exception/vendor/unity/auto/colour_reporter.rb +38 -38
  262. data/vendor/cmock/vendor/c_exception/vendor/unity/auto/generate_config.yml +36 -36
  263. data/vendor/cmock/vendor/c_exception/vendor/unity/auto/generate_module.rb +202 -202
  264. data/vendor/cmock/vendor/c_exception/vendor/unity/auto/generate_test_runner.rb +391 -320
  265. data/vendor/cmock/vendor/c_exception/vendor/unity/auto/parseOutput.rb +2 -0
  266. data/vendor/cmock/vendor/c_exception/vendor/unity/auto/stylize_as_junit.rb +260 -0
  267. data/vendor/cmock/vendor/c_exception/vendor/unity/auto/type_sanitizer.rb +8 -0
  268. data/vendor/cmock/vendor/c_exception/vendor/unity/auto/unity_test_summary.py +135 -0
  269. data/vendor/cmock/vendor/c_exception/vendor/unity/auto/unity_test_summary.rb +148 -139
  270. data/vendor/cmock/vendor/c_exception/vendor/unity/docs/Unity Summary.odt +0 -0
  271. data/vendor/cmock/vendor/c_exception/vendor/unity/docs/Unity Summary.pdf +0 -0
  272. data/vendor/cmock/vendor/c_exception/vendor/unity/docs/Unity Summary.txt +224 -216
  273. data/vendor/cmock/vendor/c_exception/vendor/unity/docs/license.txt +21 -31
  274. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_1/makefile +40 -15
  275. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_1/src/ProductionCode2.c +2 -0
  276. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_1/test/test_runners/TestProductionCode2_Runner.c +32 -25
  277. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_1/test/test_runners/TestProductionCode_Runner.c +29 -22
  278. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_2/makefile +40 -14
  279. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_2/src/ProductionCode2.c +2 -0
  280. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_2/test/test_runners/all_tests.c +2 -2
  281. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_3/rakefile.rb +0 -1
  282. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_3/src/ProductionCode2.c +2 -0
  283. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/rakefile.rb +48 -37
  284. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/rakefile_helper.rb +179 -179
  285. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/src/unity_fixture.c +135 -94
  286. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/src/unity_fixture.h +13 -17
  287. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/src/unity_fixture_internals.h +12 -18
  288. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/src/unity_fixture_malloc_overrides.h +30 -0
  289. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/test/Makefile +60 -0
  290. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/test/main/AllTests.c +4 -3
  291. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/test/{testunity_fixture.c → template_fixture_tests.c} +0 -0
  292. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/test/unity_fixture_Test.c +182 -27
  293. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/test/unity_fixture_TestRunner.c +13 -0
  294. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/test/unity_output_Spy.c +8 -6
  295. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/test/unity_output_Spy.h +2 -2
  296. data/vendor/cmock/vendor/c_exception/vendor/unity/release/build.info +1 -1
  297. data/vendor/cmock/vendor/c_exception/vendor/unity/release/version.info +1 -1
  298. data/vendor/cmock/vendor/c_exception/vendor/unity/src/unity.c +1333 -1145
  299. data/vendor/cmock/vendor/c_exception/vendor/unity/src/unity.h +290 -307
  300. data/vendor/cmock/vendor/c_exception/vendor/unity/src/unity_internals.h +758 -620
  301. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_cmd.c +7 -3
  302. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_def.c +7 -3
  303. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_head1.c +55 -0
  304. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_head1.h +15 -0
  305. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_cmd.c +4 -3
  306. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_def.c +4 -3
  307. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_head1.c +75 -0
  308. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_head1.h +13 -0
  309. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_new1.c +6 -5
  310. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_new2.c +4 -3
  311. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_param.c +4 -3
  312. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_run1.c +6 -5
  313. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_run2.c +4 -3
  314. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_yaml.c +7 -6
  315. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_new1.c +9 -5
  316. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_new2.c +7 -3
  317. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_param.c +7 -3
  318. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_run1.c +9 -5
  319. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_run2.c +7 -3
  320. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_yaml.c +10 -6
  321. data/vendor/cmock/vendor/c_exception/vendor/unity/{rakefile.rb → test/rakefile} +60 -61
  322. data/vendor/cmock/vendor/c_exception/vendor/unity/{rakefile_helper.rb → test/rakefile_helper.rb} +255 -249
  323. data/vendor/cmock/vendor/c_exception/vendor/unity/test/targets/clang_file.yml +83 -0
  324. data/vendor/cmock/vendor/c_exception/vendor/unity/{targets → test/targets}/clang_strict.yml +83 -83
  325. data/vendor/cmock/vendor/c_exception/vendor/unity/test/targets/gcc_32.yml +49 -0
  326. data/vendor/cmock/vendor/c_exception/vendor/unity/test/targets/gcc_64.yml +50 -0
  327. data/vendor/cmock/vendor/c_exception/vendor/unity/{targets/gcc_32.yml → test/targets/gcc_auto_limits.yml} +46 -44
  328. data/vendor/cmock/vendor/c_exception/vendor/unity/test/targets/gcc_auto_sizeof.yml +47 -0
  329. data/vendor/cmock/vendor/c_exception/vendor/unity/test/targets/gcc_auto_stdint.yml +58 -0
  330. data/vendor/{c_exception/vendor/unity/targets/gcc_32.yml → cmock/vendor/c_exception/vendor/unity/test/targets/gcc_manual_math.yml} +46 -44
  331. data/vendor/{c_exception/vendor/unity → cmock/vendor/c_exception/vendor/unity/test}/targets/hitech_picc18.yml +101 -101
  332. data/vendor/{c_exception/vendor/unity → cmock/vendor/c_exception/vendor/unity/test}/targets/iar_arm_v4.yml +89 -89
  333. data/vendor/{c_exception/vendor/unity → cmock/vendor/c_exception/vendor/unity/test}/targets/iar_arm_v5.yml +79 -79
  334. data/vendor/cmock/vendor/c_exception/vendor/unity/{targets → test/targets}/iar_arm_v5_3.yml +79 -79
  335. data/vendor/{c_exception/vendor/unity → cmock/vendor/c_exception/vendor/unity/test}/targets/iar_armcortex_LM3S9B92_v5_4.yml +93 -93
  336. data/vendor/cmock/vendor/c_exception/vendor/unity/{targets → test/targets}/iar_cortexm3_v5.yml +83 -83
  337. data/vendor/{c_exception/vendor/unity → cmock/vendor/c_exception/vendor/unity/test}/targets/iar_msp430.yml +94 -94
  338. data/vendor/cmock/vendor/c_exception/vendor/unity/{targets → test/targets}/iar_sh2a_v6.yml +85 -85
  339. data/vendor/cmock/vendor/c_exception/vendor/unity/test/testdata/mocksample.c +51 -51
  340. data/vendor/cmock/vendor/c_exception/vendor/unity/test/testdata/sample.yml +8 -8
  341. data/vendor/cmock/vendor/c_exception/vendor/unity/test/testdata/testsample.c +68 -51
  342. data/vendor/{c_exception/vendor/unity/test → cmock/vendor/c_exception/vendor/unity/test/tests}/test_generate_test_runner.rb +102 -88
  343. data/vendor/{c_exception/vendor/unity/test → cmock/vendor/c_exception/vendor/unity/test/tests}/testparameterized.c +104 -101
  344. data/vendor/cmock/vendor/c_exception/vendor/unity/test/{testunity.c → tests/testunity.c} +3682 -3447
  345. data/vendor/cmock/vendor/unity/auto/generate_test_runner.rb +30 -13
  346. data/vendor/cmock/vendor/unity/auto/stylize_as_junit.rb +260 -0
  347. data/vendor/cmock/vendor/unity/extras/fixture/src/unity_fixture.c +96 -93
  348. data/vendor/cmock/vendor/unity/extras/fixture/src/unity_fixture.h +1 -1
  349. data/vendor/cmock/vendor/unity/extras/fixture/src/unity_fixture_internals.h +12 -19
  350. data/vendor/cmock/vendor/unity/extras/fixture/src/unity_fixture_malloc_overrides.h +18 -17
  351. data/vendor/cmock/vendor/unity/extras/fixture/test/Makefile +66 -5
  352. data/vendor/cmock/vendor/unity/extras/fixture/test/main/AllTests.c +2 -1
  353. data/vendor/cmock/vendor/unity/extras/fixture/test/{testunity_fixture.c → template_fixture_tests.c} +0 -0
  354. data/vendor/cmock/vendor/unity/extras/fixture/test/unity_fixture_Test.c +187 -27
  355. data/vendor/cmock/vendor/unity/extras/fixture/test/unity_fixture_TestRunner.c +14 -0
  356. data/vendor/cmock/vendor/unity/extras/fixture/test/unity_output_Spy.c +6 -5
  357. data/vendor/cmock/vendor/unity/release/version.info +1 -1
  358. data/vendor/cmock/vendor/unity/src/unity.c +38 -27
  359. data/vendor/cmock/vendor/unity/src/unity.h +5 -0
  360. data/vendor/cmock/vendor/unity/src/unity_internals.h +22 -18
  361. data/vendor/cmock/vendor/unity/test/Makefile +52 -0
  362. data/vendor/cmock/vendor/unity/test/expectdata/testsample_cmd.c +4 -0
  363. data/vendor/cmock/vendor/unity/test/expectdata/testsample_def.c +4 -0
  364. data/vendor/cmock/vendor/unity/test/expectdata/testsample_head1.c +4 -0
  365. data/vendor/cmock/vendor/unity/test/expectdata/testsample_head1.h +7 -4
  366. data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_head1.h +6 -4
  367. data/vendor/cmock/vendor/unity/test/expectdata/testsample_new1.c +4 -0
  368. data/vendor/cmock/vendor/unity/test/expectdata/testsample_new2.c +4 -0
  369. data/vendor/cmock/vendor/unity/test/expectdata/testsample_param.c +4 -0
  370. data/vendor/cmock/vendor/unity/test/expectdata/testsample_run1.c +4 -0
  371. data/vendor/cmock/vendor/unity/test/expectdata/testsample_run2.c +4 -0
  372. data/vendor/cmock/vendor/unity/test/expectdata/testsample_yaml.c +4 -0
  373. data/vendor/cmock/vendor/unity/test/rakefile_helper.rb +1 -1
  374. data/vendor/cmock/vendor/unity/test/targets/clang_file.yml +0 -1
  375. data/vendor/cmock/vendor/unity/test/targets/clang_strict.yml +0 -1
  376. data/vendor/cmock/vendor/unity/test/targets/gcc_32.yml +0 -1
  377. data/vendor/cmock/vendor/unity/test/targets/gcc_64.yml +0 -1
  378. data/vendor/cmock/vendor/unity/test/targets/gcc_auto_limits.yml +0 -1
  379. data/vendor/cmock/vendor/unity/test/targets/gcc_auto_sizeof.yml +0 -1
  380. data/vendor/cmock/vendor/unity/test/targets/gcc_auto_stdint.yml +0 -1
  381. data/vendor/cmock/vendor/unity/test/targets/gcc_manual_math.yml +0 -1
  382. data/vendor/cmock/vendor/unity/test/testdata/testsample.c +19 -2
  383. data/vendor/cmock/vendor/unity/test/tests/testunity.c +55 -4
  384. data/vendor/unity/auto/generate_test_runner.rb +4 -2
  385. data/vendor/unity/auto/stylize_as_junit.rb +260 -0
  386. data/vendor/unity/extras/fixture/src/unity_fixture.c +24 -41
  387. data/vendor/unity/extras/fixture/src/unity_fixture.h +1 -1
  388. data/vendor/unity/extras/fixture/src/unity_fixture_internals.h +5 -7
  389. data/vendor/unity/extras/fixture/test/Makefile +53 -8
  390. data/vendor/unity/extras/fixture/test/{testunity_fixture.c → template_fixture_tests.c} +0 -0
  391. data/vendor/unity/extras/fixture/test/unity_fixture_Test.c +129 -32
  392. data/vendor/unity/extras/fixture/test/unity_fixture_TestRunner.c +6 -0
  393. data/vendor/unity/extras/fixture/test/unity_output_Spy.c +4 -4
  394. data/vendor/unity/release/version.info +1 -1
  395. data/vendor/unity/src/unity.c +32 -21
  396. data/vendor/unity/src/unity.h +5 -0
  397. data/vendor/unity/src/unity_internals.h +7 -3
  398. data/vendor/unity/test/Makefile +52 -0
  399. data/vendor/unity/test/expectdata/testsample_cmd.c +4 -0
  400. data/vendor/unity/test/expectdata/testsample_def.c +4 -0
  401. data/vendor/unity/test/expectdata/testsample_head1.c +4 -0
  402. data/vendor/unity/test/expectdata/testsample_head1.h +7 -4
  403. data/vendor/unity/test/expectdata/testsample_mock_head1.h +6 -4
  404. data/vendor/unity/test/expectdata/testsample_new1.c +4 -0
  405. data/vendor/unity/test/expectdata/testsample_new2.c +4 -0
  406. data/vendor/unity/test/expectdata/testsample_param.c +4 -0
  407. data/vendor/unity/test/expectdata/testsample_run1.c +4 -0
  408. data/vendor/unity/test/expectdata/testsample_run2.c +4 -0
  409. data/vendor/unity/test/expectdata/testsample_yaml.c +4 -0
  410. data/vendor/unity/test/testdata/testsample.c +19 -2
  411. data/vendor/unity/test/tests/testunity.c +35 -4
  412. metadata +75 -52
  413. data/ceedling-0.18.0.gem +0 -0
  414. data/docs/CeedlingLogo.png +0 -0
  415. data/vendor/c_exception/vendor/unity/Gemfile +0 -4
  416. data/vendor/c_exception/vendor/unity/Gemfile.lock +0 -12
  417. data/vendor/c_exception/vendor/unity/examples/example_3/makefile +0 -41
  418. data/vendor/c_exception/vendor/unity/examples/example_3/test/no_ruby/TestProductionCode2_Runner.c +0 -46
  419. data/vendor/c_exception/vendor/unity/examples/example_3/test/no_ruby/TestProductionCode_Runner.c +0 -50
  420. data/vendor/c_exception/vendor/unity/makefile +0 -37
  421. data/vendor/cmock/vendor/c_exception/vendor/unity/Gemfile +0 -4
  422. data/vendor/cmock/vendor/c_exception/vendor/unity/Gemfile.lock +0 -12
  423. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_3/makefile +0 -41
  424. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_3/test/no_ruby/TestProductionCode2_Runner.c +0 -46
  425. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_3/test/no_ruby/TestProductionCode_Runner.c +0 -50
  426. data/vendor/cmock/vendor/c_exception/vendor/unity/makefile +0 -37
@@ -28,6 +28,7 @@ class UnityTestRunnerGenerator
28
28
  :test_prefix => "test|spec|should",
29
29
  :setup_name => "setUp",
30
30
  :teardown_name => "tearDown",
31
+ :main_name => "main",
31
32
  }
32
33
  end
33
34
 
@@ -82,7 +83,7 @@ class UnityTestRunnerGenerator
82
83
 
83
84
  if (@options[:header_file] && !@options[:header_file].empty?)
84
85
  File.open(@options[:header_file], 'w') do |output|
85
- create_h_file(output, @options[:header_file], tests, testfile_includes)
86
+ create_h_file(output, @options[:header_file], tests, testfile_includes, used_mocks)
86
87
  end
87
88
  end
88
89
  end
@@ -90,7 +91,9 @@ class UnityTestRunnerGenerator
90
91
  def find_tests(source)
91
92
  tests_and_line_numbers = []
92
93
 
93
- source_scrubbed = source.gsub(/\/\/.*$/, '') # remove line comments
94
+ source_scrubbed = source.clone
95
+ source_scrubbed = source_scrubbed.gsub(/"[^"]*"/, '') # remove things in strings
96
+ source_scrubbed = source_scrubbed.gsub(/\/\/.*$/, '') # remove line comments
94
97
  source_scrubbed = source_scrubbed.gsub(/\/\*.*?\*\//m, '') # remove block comments
95
98
  lines = source_scrubbed.split(/(^\s*\#.*$) # Treat preprocessor directives as a logical line
96
99
  | (;|\{|\}) /x) # Match ;, {, and } as end of lines
@@ -145,8 +148,9 @@ class UnityTestRunnerGenerator
145
148
 
146
149
  def find_mocks(includes)
147
150
  mock_headers = []
148
- includes.each do |include_file|
149
- mock_headers << File.basename(include_file) if (include_file =~ /^mock/i)
151
+ includes.each do |include_path|
152
+ include_file = File.basename(include_path)
153
+ mock_headers << include_path if (include_file =~ /^mock/i)
150
154
  end
151
155
  return mock_headers
152
156
  end
@@ -191,8 +195,8 @@ class UnityTestRunnerGenerator
191
195
  output.puts('')
192
196
  end
193
197
 
194
- def create_mock_management(output, mocks)
195
- unless (mocks.empty?)
198
+ def create_mock_management(output, mock_headers)
199
+ unless (mock_headers.empty?)
196
200
  output.puts("\n//=======Mock Management=====")
197
201
  output.puts("static void CMock_Init(void)")
198
202
  output.puts("{")
@@ -201,6 +205,7 @@ class UnityTestRunnerGenerator
201
205
  output.puts(" GlobalVerifyOrder = 0;")
202
206
  output.puts(" GlobalOrderError = NULL;")
203
207
  end
208
+ mocks = mock_headers.map {|mock| File.basename(mock)}
204
209
  mocks.each do |mock|
205
210
  mock_clean = TypeSanitizer.sanitize_c_identifier(mock)
206
211
  output.puts(" #{mock_clean}_Init();")
@@ -288,7 +293,10 @@ class UnityTestRunnerGenerator
288
293
 
289
294
  def create_main(output, filename, tests, used_mocks)
290
295
  output.puts("\n\n//=======MAIN=====")
291
- output.puts("int main(void)")
296
+ if (@options[:main_name] != "main")
297
+ output.puts("int #{@options[:main_name]}(void);")
298
+ end
299
+ output.puts("int #{@options[:main_name]}(void)")
292
300
  output.puts("{")
293
301
  output.puts(" suite_setup();") unless @options[:suite_setup].nil?
294
302
  output.puts(" UnityBegin(\"#{filename.gsub(/\\/,'\\\\')}\");")
@@ -309,11 +317,13 @@ class UnityTestRunnerGenerator
309
317
  output.puts("}")
310
318
  end
311
319
 
312
- def create_h_file(output, filename, tests, testfile_includes)
313
- filename = filename.upcase.gsub(/(?:\/|\\|\.)*/,'_')
320
+ def create_h_file(output, filename, tests, testfile_includes, used_mocks)
321
+ filename = File.basename(filename).gsub(/[-\/\\\.\,\s]/, "_").upcase
314
322
  output.puts("/* AUTOGENERATED FILE. DO NOT EDIT. */")
315
323
  output.puts("#ifndef _#{filename}")
316
324
  output.puts("#define _#{filename}\n\n")
325
+ output.puts("#include \"#{@options[:framework].to_s}.h\"")
326
+ output.puts('#include "cmock.h"') unless (used_mocks.empty?)
317
327
  @options[:includes].flatten.uniq.compact.each do |inc|
318
328
  output.puts("#include #{inc.include?('<') ? inc : "\"#{inc.gsub('.h','')}.h\""}")
319
329
  end
@@ -321,7 +331,13 @@ class UnityTestRunnerGenerator
321
331
  output.puts("#include #{inc.include?('<') ? inc : "\"#{inc.gsub('.h','')}.h\""}")
322
332
  end
323
333
  output.puts "\n"
324
- tests.each {|test| output.puts("void #{test[:test]}(#{test[:params]});") }
334
+ tests.each do |test|
335
+ if ((test[:params].nil?) or (test[:params].empty?))
336
+ output.puts("void #{test[:test]}(void);")
337
+ else
338
+ output.puts("void #{test[:test]}(#{test[:params]});")
339
+ end
340
+ end
325
341
  output.puts("#endif\n\n")
326
342
  end
327
343
  end
@@ -337,10 +353,10 @@ if ($0 == __FILE__)
337
353
  options[:plugins] = [:cexception]; true
338
354
  when /\.*\.ya?ml/
339
355
  options = UnityTestRunnerGenerator.grab_config(arg); true
340
- when /\.*\.h/
341
- options[:includes] << arg; true
342
356
  when /--(\w+)=\"?(.*)\"?/
343
357
  options[$1.to_sym] = $2; true
358
+ when /\.*\.h/
359
+ options[:includes] << arg; true
344
360
  else false
345
361
  end
346
362
  end
@@ -358,6 +374,7 @@ if ($0 == __FILE__)
358
374
  " -cexception - include cexception support",
359
375
  " --setup_name=\"\" - redefine setUp func name to something else",
360
376
  " --teardown_name=\"\" - redefine tearDown func name to something else",
377
+ " --main_name=\"\" - redefine main func name to something else",
361
378
  " --test_prefix=\"\" - redefine test prefix from default test|spec|should",
362
379
  " --suite_setup=\"\" - code to execute for setup of entire suite",
363
380
  " --suite_teardown=\"\" - code to execute for teardown of entire suite",
@@ -370,5 +387,5 @@ if ($0 == __FILE__)
370
387
  #create the default test runner name if not specified
371
388
  ARGV[1] = ARGV[0].gsub(".c","_Runner.c") if (!ARGV[1])
372
389
 
373
- puts UnityTestRunnerGenerator.new(options).run(ARGV[0], ARGV[1]).inspect
390
+ UnityTestRunnerGenerator.new(options).run(ARGV[0], ARGV[1])
374
391
  end
@@ -0,0 +1,260 @@
1
+ #!/usr/bin/ruby
2
+ #
3
+ # unity_to_junit.rb
4
+ #
5
+ require 'fileutils'
6
+ require 'optparse'
7
+ require 'ostruct'
8
+ require 'set'
9
+
10
+ require 'pp'
11
+
12
+ VERSION = 1.0
13
+
14
+ class ArgvParser
15
+
16
+ #
17
+ # Return a structure describing the options.
18
+ #
19
+ def self.parse(args)
20
+ # The options specified on the command line will be collected in *options*.
21
+ # We set default values here.
22
+ options = OpenStruct.new
23
+ options.results_dir = "."
24
+ options.root_path = "."
25
+ options.out_file = "results.xml"
26
+
27
+ opts = OptionParser.new do |opts|
28
+ opts.banner = "Usage: unity_to_junit.rb [options]"
29
+
30
+ opts.separator ""
31
+ opts.separator "Specific options:"
32
+
33
+ opts.on("-r", "--results <dir>", "Look for Unity Results files here.") do |results|
34
+ #puts "results #{results}"
35
+ options.results_dir = results
36
+ end
37
+
38
+ opts.on("-p", "--root_path <path>", "Prepend this path to files in results.") do |root_path|
39
+ options.root_path = root_path
40
+ end
41
+
42
+ opts.on("-o", "--output <filename>", "XML file to generate.") do |out_file|
43
+ #puts "out_file: #{out_file}"
44
+ options.out_file = out_file
45
+ end
46
+
47
+ opts.separator ""
48
+ opts.separator "Common options:"
49
+
50
+ # No argument, shows at tail. This will print an options summary.
51
+ opts.on_tail("-h", "--help", "Show this message") do
52
+ puts opts
53
+ exit
54
+ end
55
+
56
+ # Another typical switch to print the version.
57
+ opts.on_tail("--version", "Show version") do
58
+ puts "unity_to_junit.rb version #{VERSION}"
59
+ exit
60
+ end
61
+ end
62
+
63
+ opts.parse!(args)
64
+ options
65
+ end # parse()
66
+
67
+ end # class OptparseExample
68
+
69
+ class UnityToJUnit
70
+ include FileUtils::Verbose
71
+ attr_reader :report, :total_tests, :failures, :ignored
72
+
73
+ def initialize
74
+ @report = ''
75
+ @unit_name = ''
76
+ end
77
+
78
+ def run
79
+ # Clean up result file names
80
+ results = @targets.map {|target| target.gsub(/\\/,"/")}
81
+ #puts "Output File: #{@out_file}"
82
+ f = File.new(@out_file, "w")
83
+ write_xml_header(f)
84
+ write_suites_header( f )
85
+ results.each do |result_file|
86
+ lines = File.readlines(result_file).map { |line| line.chomp }
87
+ if lines.length == 0
88
+ raise "Empty test result file: #{result_file}"
89
+ else
90
+ result_output = get_details(result_file, lines)
91
+ tests,failures,ignored = parse_test_summary(lines)
92
+ result_output[:counts][:total] = tests
93
+ result_output[:counts][:failed] = failures
94
+ result_output[:counts][:ignored] = ignored
95
+ result_output[:counts][:passed] = (result_output[:counts][:total] - result_output[:counts][:failed] - result_output[:counts][:ignored])
96
+ end
97
+ #use line[0] from the test output to get the test_file path and name
98
+ test_file_str = lines[0].gsub("\\","/")
99
+ test_file_str = test_file_str.split(":")
100
+ test_file = test_file_str[0] + ':' + test_file_str[1]
101
+ result_output[:source][:path] = File.dirname(test_file)
102
+ result_output[:source][:file] = File.basename(test_file)
103
+
104
+ # save result_output
105
+ @unit_name = File.basename(test_file, ".*")
106
+
107
+ write_suite_header( result_output[:counts], f)
108
+ write_failures( result_output, f )
109
+ write_tests( result_output, f )
110
+ write_ignored( result_output, f )
111
+ write_suite_footer( f )
112
+ end
113
+ write_suites_footer( f )
114
+ f.close
115
+ end
116
+
117
+ def set_targets(target_array)
118
+ @targets = target_array
119
+ end
120
+
121
+ def set_root_path(path)
122
+ @root = path
123
+ end
124
+ def set_out_file(filename)
125
+ @out_file = filename
126
+ end
127
+ def usage(err_msg=nil)
128
+ puts "\nERROR: "
129
+ puts err_msg if err_msg
130
+ puts "Usage: unity_to_junit.rb [options]"
131
+ puts ""
132
+ puts "Specific options:"
133
+ puts " -r, --results <dir> Look for Unity Results files here."
134
+ puts " -p, --root_path <path> Prepend this path to files in results."
135
+ puts " -o, --output <filename> XML file to generate."
136
+ puts ""
137
+ puts "Common options:"
138
+ puts " -h, --help Show this message"
139
+ puts " --version Show version"
140
+
141
+ exit 1
142
+ end
143
+
144
+ protected
145
+ def get_details(result_file, lines)
146
+ results = get_results_structure
147
+ lines.each do |line|
148
+ line = line.gsub("\\","/")
149
+ src_file,src_line,test_name,status,msg = line.split(/:/)
150
+ line_out = ((@root and (@root != 0)) ? "#{@root}#{line}" : line ).gsub(/\//, "\\")
151
+ case(status)
152
+ when 'IGNORE' then results[:ignores] << {:test => test_name, :line => src_line, :message => msg}
153
+ when 'FAIL' then results[:failures] << {:test => test_name, :line => src_line, :message => msg}
154
+ when 'PASS' then results[:successes] << {:test => test_name, :line => src_line, :message => msg}
155
+ end
156
+ end
157
+ return results
158
+ end
159
+
160
+ def parse_test_summary(summary)
161
+ if summary.find { |v| v =~ /(\d+) Tests (\d+) Failures (\d+) Ignored/ }
162
+ [$1.to_i,$2.to_i,$3.to_i]
163
+ else
164
+ raise "Couldn't parse test results: #{summary}"
165
+ end
166
+ end
167
+ def here; File.expand_path(File.dirname(__FILE__)); end
168
+
169
+ private
170
+
171
+ def get_results_structure
172
+ return {
173
+ :source => {:path => '', :file => ''},
174
+ :successes => [],
175
+ :failures => [],
176
+ :ignores => [],
177
+ :counts => {:total => 0, :passed => 0, :failed => 0, :ignored => 0},
178
+ :stdout => [],
179
+ }
180
+ end
181
+
182
+ def write_xml_header( stream )
183
+ stream.puts "<?xml version='1.0' encoding='utf-8' ?>"
184
+ end
185
+
186
+ def write_suites_header( stream )
187
+ stream.puts "<testsuites>"
188
+ end
189
+
190
+ def write_suite_header( counts, stream )
191
+ stream.puts "\t<testsuite errors=\"0\" skipped=\"#{counts[:ignored]}\" failures=\"#{counts[:failed]}\" tests=\"#{counts[:total]}\" name=\"unity\">"
192
+ end
193
+
194
+ def write_failures( results, stream )
195
+ result = results[:failures]
196
+ result.each do |item|
197
+ filename = File.join(results[:source][:path], File.basename(results[:source][:file], '.*'))
198
+ stream.puts "\t\t<testcase classname=\"#{@unit_name}\" name=\"#{item[:test]}\" time=\"0\">"
199
+ stream.puts "\t\t\t<failure message=\"#{item[:message]}\" type=\"Assertion\"/>"
200
+ stream.puts "\t\t\t<system-err>&#xD;[File] #{filename}&#xD;[Line] #{item[:line]}&#xD;</system-err>"
201
+ stream.puts "\t\t</testcase>"
202
+ end
203
+ end
204
+
205
+ def write_tests( results, stream )
206
+ result = results[:successes]
207
+ result.each do |item|
208
+ filename = File.join(results[:source][:path], File.basename(results[:source][:file], '.*'))
209
+ stream.puts "\t\t<testcase classname=\"#{@unit_name}\" name=\"#{item[:test]}\" time=\"0\" />"
210
+ end
211
+ end
212
+
213
+ def write_ignored( results, stream )
214
+ result = results[:ignores]
215
+ result.each do |item|
216
+ filename = File.join(results[:source][:path], File.basename(results[:source][:file], '.*'))
217
+ puts "Writing ignored tests for test harness: #{filename}"
218
+ stream.puts "\t\t<testcase classname=\"#{@unit_name}\" name=\"#{item[:test]}\" time=\"0\">"
219
+ stream.puts "\t\t\t<skipped message=\"#{item[:message]}\" type=\"Assertion\"/>"
220
+ stream.puts "\t\t\t<system-err>&#xD;[File] #{filename}&#xD;[Line] #{item[:line]}&#xD;</system-err>"
221
+ stream.puts "\t\t</testcase>"
222
+ end
223
+ end
224
+
225
+ def write_suite_footer( stream )
226
+ stream.puts "\t</testsuite>"
227
+ end
228
+
229
+ def write_suites_footer( stream )
230
+ stream.puts "</testsuites>"
231
+ end
232
+ end #UnityToJUnit
233
+
234
+ if __FILE__ == $0
235
+ #parse out the command options
236
+ options = ArgvParser.parse(ARGV)
237
+
238
+ #create an instance to work with
239
+ utj = UnityToJUnit.new
240
+ begin
241
+ #look in the specified or current directory for result files
242
+ targets = "#{options.results_dir.gsub(/\\/, '/')}**/*.test*"
243
+
244
+ results = Dir[targets]
245
+ raise "No *.testpass, *.testfail, or *.testresults files found in '#{targets}'" if results.empty?
246
+ utj.set_targets(results)
247
+
248
+ #set the root path
249
+ utj.set_root_path(options.root_path)
250
+
251
+ #set the output XML file name
252
+ #puts "Output File from options: #{options.out_file}"
253
+ utj.set_out_file(options.out_file)
254
+
255
+ #run the summarizer
256
+ puts utj.run
257
+ rescue Exception => e
258
+ utj.usage e.message
259
+ end
260
+ end
@@ -6,28 +6,26 @@
6
6
  ========================================== */
7
7
 
8
8
  #include <string.h>
9
- #include <stdio.h>
10
9
  #include "unity_fixture.h"
11
10
  #include "unity_internals.h"
12
11
 
13
- UNITY_FIXTURE_T UnityFixture;
12
+ struct _UnityFixture UnityFixture;
14
13
 
15
14
  //If you decide to use the function pointer approach.
16
- int (*outputChar)(int) = putchar;
15
+ //Build with -D UNITY_OUTPUT_CHAR=outputChar and include <stdio.h>
16
+ //int (*outputChar)(int) = putchar;
17
17
 
18
- int verbose = 0;
19
-
20
- void setUp(void);
21
- void tearDown(void);
18
+ #if !defined(UNITY_WEAK_ATTRIBUTE) && !defined(UNITY_WEAK_PRAGMA)
22
19
  void setUp(void) { /*does nothing*/ }
23
20
  void tearDown(void) { /*does nothing*/ }
21
+ #endif
24
22
 
25
23
  static void announceTestRun(unsigned int runNumber)
26
24
  {
27
25
  UnityPrint("Unity test run ");
28
- UnityPrintNumber(runNumber+1);
26
+ UnityPrintNumberUnsigned(runNumber+1);
29
27
  UnityPrint(" of ");
30
- UnityPrintNumber(UnityFixture.RepeatCount);
28
+ UnityPrintNumberUnsigned(UnityFixture.RepeatCount);
31
29
  UNITY_PRINT_EOL();
32
30
  }
33
31
 
@@ -47,10 +45,10 @@ int UnityMain(int argc, const char* argv[], void (*runAllTests)(void))
47
45
  UnityEnd();
48
46
  }
49
47
 
50
- return UnityFailureCount();
48
+ return (int)Unity.TestFailures;
51
49
  }
52
50
 
53
- static int selected(const char * filter, const char * name)
51
+ static int selected(const char* filter, const char* name)
54
52
  {
55
53
  if (filter == 0)
56
54
  return 1;
@@ -67,22 +65,16 @@ static int groupSelected(const char* group)
67
65
  return selected(UnityFixture.GroupFilter, group);
68
66
  }
69
67
 
70
- static void runTestCase(void)
71
- {
72
-
73
- }
74
-
75
68
  void UnityTestRunner(unityfunction* setup,
76
- unityfunction* testBody,
77
- unityfunction* teardown,
78
- const char * printableName,
79
- const char * group,
80
- const char * name,
81
- const char * file, int line)
69
+ unityfunction* testBody,
70
+ unityfunction* teardown,
71
+ const char* printableName,
72
+ const char* group,
73
+ const char* name,
74
+ const char* file, unsigned int line)
82
75
  {
83
76
  if (testSelected(name) && groupSelected(group))
84
77
  {
85
- Unity.CurrentTestFailed = 0;
86
78
  Unity.TestFile = file;
87
79
  Unity.CurrentTestName = printableName;
88
80
  Unity.CurrentTestLineNumber = line;
@@ -95,7 +87,6 @@ void UnityTestRunner(unityfunction* setup,
95
87
  UnityMalloc_StartTest();
96
88
  UnityPointer_Init();
97
89
 
98
- runTestCase();
99
90
  if (TEST_PROTECT())
100
91
  {
101
92
  setup();
@@ -115,17 +106,19 @@ void UnityTestRunner(unityfunction* setup,
115
106
  }
116
107
  }
117
108
 
118
- void UnityIgnoreTest(const char * printableName, const char * group, const char * name)
109
+ void UnityIgnoreTest(const char* printableName, const char* group, const char* name)
119
110
  {
120
111
  if (testSelected(name) && groupSelected(group))
121
112
  {
122
113
  Unity.NumberOfTests++;
123
- Unity.CurrentTestIgnored = 1;
114
+ Unity.TestIgnores++;
124
115
  if (!UnityFixture.Verbose)
125
116
  UNITY_OUTPUT_CHAR('!');
126
117
  else
118
+ {
127
119
  UnityPrint(printableName);
128
- UnityConcludeFixtureTest();
120
+ UNITY_PRINT_EOL();
121
+ }
129
122
  }
130
123
  }
131
124
 
@@ -148,7 +141,7 @@ void UnityMalloc_EndTest(void)
148
141
  malloc_fail_countdown = MALLOC_DONT_FAIL;
149
142
  if (malloc_count != 0)
150
143
  {
151
- TEST_FAIL_MESSAGE("This test leaks!");
144
+ UNITY_TEST_FAIL(Unity.CurrentTestLineNumber, "This test leaks!");
152
145
  }
153
146
  }
154
147
 
@@ -157,75 +150,92 @@ void UnityMalloc_MakeMallocFailAfterCount(int countdown)
157
150
  malloc_fail_countdown = countdown;
158
151
  }
159
152
 
160
- #ifdef malloc
153
+ // These definitions are always included from unity_fixture_malloc_overrides.h
154
+ // We undef to use them or avoid conflict with <stdlib.h> per the C standard
161
155
  #undef malloc
162
- #endif
163
-
164
- #ifdef free
165
156
  #undef free
166
- #endif
167
-
168
- #ifdef calloc
169
157
  #undef calloc
170
- #endif
171
-
172
- #ifdef realloc
173
158
  #undef realloc
174
- #endif
175
159
 
160
+ #ifdef UNITY_EXCLUDE_STDLIB_MALLOC
161
+ static unsigned char unity_heap[UNITY_INTERNAL_HEAP_SIZE_BYTES];
162
+ static size_t heap_index;
163
+ #else
176
164
  #include <stdlib.h>
177
- #include <string.h>
165
+ #endif
178
166
 
179
167
  typedef struct GuardBytes
180
168
  {
181
169
  size_t size;
182
- char guard_space[4];
170
+ size_t guard_space;
183
171
  } Guard;
184
172
 
185
173
 
186
174
  static const char end[] = "END";
187
175
 
188
- void * unity_malloc(size_t size)
176
+ void* unity_malloc(size_t size)
189
177
  {
190
178
  char* mem;
191
179
  Guard* guard;
180
+ size_t total_size = size + sizeof(Guard) + sizeof(end);
192
181
 
193
182
  if (malloc_fail_countdown != MALLOC_DONT_FAIL)
194
183
  {
195
184
  if (malloc_fail_countdown == 0)
196
- return 0;
185
+ return NULL;
197
186
  malloc_fail_countdown--;
198
187
  }
199
188
 
189
+ if (size == 0) return NULL;
190
+ #ifdef UNITY_EXCLUDE_STDLIB_MALLOC
191
+ if (heap_index + total_size > UNITY_INTERNAL_HEAP_SIZE_BYTES)
192
+ {
193
+ guard = NULL;
194
+ }
195
+ else
196
+ {
197
+ guard = (Guard*) &unity_heap[heap_index];
198
+ heap_index += total_size;
199
+ }
200
+ #else
201
+ guard = (Guard*)UNITY_FIXTURE_MALLOC(total_size);
202
+ #endif
203
+ if (guard == NULL) return NULL;
200
204
  malloc_count++;
201
-
202
- guard = (Guard*)UNITY_FIXTURE_MALLOC(size + sizeof(Guard) + sizeof(end));
203
205
  guard->size = size;
206
+ guard->guard_space = 0;
204
207
  mem = (char*)&(guard[1]);
205
208
  memcpy(&mem[size], end, sizeof(end));
206
209
 
207
210
  return (void*)mem;
208
211
  }
209
212
 
210
- static int isOverrun(void * mem)
213
+ static int isOverrun(void* mem)
211
214
  {
212
215
  Guard* guard = (Guard*)mem;
213
216
  char* memAsChar = (char*)mem;
214
217
  guard--;
215
218
 
216
- return strcmp(&memAsChar[guard->size], end) != 0;
219
+ return guard->guard_space != 0 || strcmp(&memAsChar[guard->size], end) != 0;
217
220
  }
218
221
 
219
- static void release_memory(void * mem)
222
+ static void release_memory(void* mem)
220
223
  {
221
224
  Guard* guard = (Guard*)mem;
222
225
  guard--;
223
226
 
224
227
  malloc_count--;
228
+ #ifdef UNITY_EXCLUDE_STDLIB_MALLOC
229
+ if (mem == unity_heap + heap_index - guard->size - sizeof(end))
230
+ {
231
+ heap_index -= (guard->size + sizeof(Guard) + sizeof(end));
232
+ }
233
+ #else
225
234
  UNITY_FIXTURE_FREE(guard);
235
+ #endif
226
236
  }
227
237
 
228
- void unity_free(void * mem)
238
+ void unity_free(void* mem)
229
239
  {
230
240
  int overrun;
231
241
 
@@ -234,64 +244,70 @@ void unity_free(void * mem)
234
244
  return;
235
245
  }
236
246
 
237
- overrun = isOverrun(mem);//strcmp(&memAsChar[guard->size], end) != 0;
247
+ overrun = isOverrun(mem);
238
248
  release_memory(mem);
239
249
  if (overrun)
240
250
  {
241
- TEST_FAIL_MESSAGE("Buffer overrun detected during free()");
251
+ UNITY_TEST_FAIL(Unity.CurrentTestLineNumber, "Buffer overrun detected during free()");
242
252
  }
243
253
  }
244
254
 
245
255
  void* unity_calloc(size_t num, size_t size)
246
256
  {
247
257
  void* mem = unity_malloc(num * size);
248
- memset(mem, 0, num*size);
258
+ if (mem == NULL) return NULL;
259
+ memset(mem, 0, num * size);
249
260
  return mem;
250
261
  }
251
262
 
252
- void* unity_realloc(void * oldMem, size_t size)
263
+ void* unity_realloc(void* oldMem, size_t size)
253
264
  {
254
265
  Guard* guard = (Guard*)oldMem;
255
- // char* memAsChar = (char*)oldMem;
256
266
  void* newMem;
257
267
 
258
- if (oldMem == 0)
259
- return unity_malloc(size);
268
+ if (oldMem == NULL) return unity_malloc(size);
260
269
 
261
270
  guard--;
262
271
  if (isOverrun(oldMem))
263
272
  {
264
273
  release_memory(oldMem);
265
- TEST_FAIL_MESSAGE("Buffer overrun detected during realloc()");
274
+ UNITY_TEST_FAIL(Unity.CurrentTestLineNumber, "Buffer overrun detected during realloc()");
266
275
  }
267
276
 
268
277
  if (size == 0)
269
278
  {
270
279
  release_memory(oldMem);
271
- return 0;
280
+ return NULL;
272
281
  }
273
282
 
274
- if (guard->size >= size)
275
- return oldMem;
283
+ if (guard->size >= size) return oldMem;
276
284
 
285
+ #ifdef UNITY_EXCLUDE_STDLIB_MALLOC // Optimization if memory is expandable
286
+ if (oldMem == unity_heap + heap_index - guard->size - sizeof(end) &&
287
+ heap_index + size - guard->size <= UNITY_INTERNAL_HEAP_SIZE_BYTES)
288
+ {
289
+ release_memory(oldMem); // Not thread-safe, like unity_heap generally
290
+ return unity_malloc(size); // No memcpy since data is in place
291
+ }
292
+ #endif
277
293
  newMem = unity_malloc(size);
294
+ if (newMem == NULL) return NULL; // Do not release old memory
278
295
  memcpy(newMem, oldMem, guard->size);
279
- unity_free(oldMem);
296
+ release_memory(oldMem);
280
297
  return newMem;
281
298
  }
282
299
 
283
300
 
284
301
  //--------------------------------------------------------
285
302
  //Automatic pointer restoration functions
286
- typedef struct _PointerPair
303
+ struct PointerPair
287
304
  {
288
- struct _PointerPair * next;
289
- void ** pointer;
290
- void * old_value;
291
- } PointerPair;
305
+ void** pointer;
306
+ void* old_value;
307
+ };
292
308
 
293
- enum {MAX_POINTERS=50};
294
- static PointerPair pointer_store[MAX_POINTERS+1];
309
+ enum { MAX_POINTERS = 50 };
310
+ static struct PointerPair pointer_store[MAX_POINTERS];
295
311
  static int pointer_index = 0;
296
312
 
297
313
  void UnityPointer_Init(void)
@@ -299,11 +315,11 @@ void UnityPointer_Init(void)
299
315
  pointer_index = 0;
300
316
  }
301
317
 
302
- void UnityPointer_Set(void ** pointer, void * newValue)
318
+ void UnityPointer_Set(void** pointer, void* newValue, UNITY_LINE_TYPE line)
303
319
  {
304
320
  if (pointer_index >= MAX_POINTERS)
305
321
  {
306
- TEST_FAIL_MESSAGE("Too many pointers set");
322
+ UNITY_TEST_FAIL(line, "Too many pointers set");
307
323
  }
308
324
  else
309
325
  {
@@ -320,26 +336,10 @@ void UnityPointer_UndoAllSets(void)
320
336
  {
321
337
  pointer_index--;
322
338
  *(pointer_store[pointer_index].pointer) =
323
- pointer_store[pointer_index].old_value;
324
-
339
+ pointer_store[pointer_index].old_value;
325
340
  }
326
341
  }
327
342
 
328
- UNITY_COUNTER_TYPE UnityFailureCount(void)
329
- {
330
- return Unity.TestFailures;
331
- }
332
-
333
- UNITY_COUNTER_TYPE UnityIgnoreCount(void)
334
- {
335
- return Unity.TestIgnores;
336
- }
337
-
338
- UNITY_COUNTER_TYPE UnityTestsCount(void)
339
- {
340
- return Unity.NumberOfTests;
341
- }
342
-
343
343
  int UnityGetCommandLineOptions(int argc, const char* argv[])
344
344
  {
345
345
  int i;
@@ -382,7 +382,13 @@ int UnityGetCommandLineOptions(int argc, const char* argv[])
382
382
  {
383
383
  if (*(argv[i]) >= '0' && *(argv[i]) <= '9')
384
384
  {
385
- UnityFixture.RepeatCount = atoi(argv[i]);
385
+ unsigned int digit = 0;
386
+ UnityFixture.RepeatCount = 0;
387
+ while (argv[i][digit] >= '0' && argv[i][digit] <= '9')
388
+ {
389
+ UnityFixture.RepeatCount *= 10;
390
+ UnityFixture.RepeatCount += (unsigned int)argv[i][digit++] - '0';
391
+ }
386
392
  i++;
387
393
  }
388
394
  }
@@ -398,11 +404,8 @@ void UnityConcludeFixtureTest(void)
398
404
  {
399
405
  if (Unity.CurrentTestIgnored)
400
406
  {
401
- if (UnityFixture.Verbose)
402
- {
403
- UNITY_PRINT_EOL();
404
- }
405
407
  Unity.TestIgnores++;
408
+ UNITY_PRINT_EOL();
406
409
  }
407
410
  else if (!Unity.CurrentTestFailed)
408
411
  {
@@ -412,7 +415,7 @@ void UnityConcludeFixtureTest(void)
412
415
  UNITY_PRINT_EOL();
413
416
  }
414
417
  }
415
- else if (Unity.CurrentTestFailed)
418
+ else // Unity.CurrentTestFailed
416
419
  {
417
420
  Unity.TestFailures++;
418
421
  UNITY_PRINT_EOL();