ceedling 0.28.3 → 0.29.0

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 (1101) hide show
  1. checksums.yaml +5 -5
  2. data/Gemfile +16 -16
  3. data/Gemfile.lock +17 -16
  4. data/README.md +107 -66
  5. data/Rakefile +11 -11
  6. data/assets/ceedling +3 -3
  7. data/assets/ceedling.cmd +1 -1
  8. data/assets/default_gitignore +5 -5
  9. data/assets/example_file.c +5 -5
  10. data/assets/example_file.h +6 -6
  11. data/assets/project_as_gem.yml +100 -90
  12. data/assets/project_with_guts.yml +101 -91
  13. data/assets/project_with_guts_gcov.yml +101 -91
  14. data/assets/test_example_file.c +13 -13
  15. data/assets/test_example_file_boom.c +13 -13
  16. data/assets/test_example_file_success.c +14 -14
  17. data/assets/test_example_file_verbose.c +12 -12
  18. data/bin/ceedling +337 -316
  19. data/ceedling.gemspec +36 -39
  20. data/ceedling.sublime-project +25 -0
  21. data/ceedling.sublime-workspace +1276 -0
  22. data/config/test_environment.rb +11 -11
  23. data/docs/CeedlingPacket.md +2119 -2060
  24. data/docs/ThrowTheSwitchCodingStandard.md +207 -207
  25. data/examples/blinky/project.yml +99 -98
  26. data/examples/blinky/rakefile.rb +31 -31
  27. data/examples/blinky/src/BlinkTask.c +21 -21
  28. data/examples/blinky/src/BlinkTask.h +6 -6
  29. data/examples/blinky/src/Configure.c +36 -36
  30. data/examples/blinky/src/Configure.h +6 -6
  31. data/examples/blinky/src/main.c +51 -51
  32. data/examples/blinky/src/main.h +9 -9
  33. data/examples/blinky/test/support/stub_interrupt.h +347 -347
  34. data/examples/blinky/test/support/stub_io.h +421 -421
  35. data/examples/blinky/test/support/stub_iom328p.h +883 -883
  36. data/examples/blinky/test/support/stub_sfr_defs.h +269 -269
  37. data/examples/blinky/test/test_BlinkTask.c +42 -42
  38. data/examples/blinky/test/test_Configure.c +29 -29
  39. data/examples/blinky/test/test_main.c +60 -60
  40. data/examples/temp_sensor/project.yml +76 -76
  41. data/examples/temp_sensor/rakefile.rb +6 -6
  42. data/examples/temp_sensor/src/AdcConductor.c +42 -42
  43. data/examples/temp_sensor/src/AdcConductor.h +13 -13
  44. data/examples/temp_sensor/src/AdcHardware.c +27 -27
  45. data/examples/temp_sensor/src/AdcHardware.h +11 -11
  46. data/examples/temp_sensor/src/AdcHardwareConfigurator.c +18 -18
  47. data/examples/temp_sensor/src/AdcHardwareConfigurator.h +10 -10
  48. data/examples/temp_sensor/src/AdcModel.c +33 -33
  49. data/examples/temp_sensor/src/AdcModel.h +13 -13
  50. data/examples/temp_sensor/src/AdcTemperatureSensor.c +51 -51
  51. data/examples/temp_sensor/src/AdcTemperatureSensor.h +10 -10
  52. data/examples/temp_sensor/src/Executor.c +25 -25
  53. data/examples/temp_sensor/src/Executor.h +9 -9
  54. data/examples/temp_sensor/src/IntrinsicsWrapper.c +18 -18
  55. data/examples/temp_sensor/src/IntrinsicsWrapper.h +7 -7
  56. data/examples/temp_sensor/src/Main.c +46 -46
  57. data/examples/temp_sensor/src/Main.h +7 -7
  58. data/examples/temp_sensor/src/Model.c +10 -10
  59. data/examples/temp_sensor/src/Model.h +8 -8
  60. data/examples/temp_sensor/src/ModelConfig.h +7 -7
  61. data/examples/temp_sensor/src/TaskScheduler.c +72 -72
  62. data/examples/temp_sensor/src/TaskScheduler.h +11 -11
  63. data/examples/temp_sensor/src/TemperatureCalculator.c +27 -27
  64. data/examples/temp_sensor/src/TemperatureCalculator.h +8 -8
  65. data/examples/temp_sensor/src/TemperatureFilter.c +38 -38
  66. data/examples/temp_sensor/src/TemperatureFilter.h +10 -10
  67. data/examples/temp_sensor/src/TimerConductor.c +15 -15
  68. data/examples/temp_sensor/src/TimerConductor.h +9 -9
  69. data/examples/temp_sensor/src/TimerConfigurator.c +51 -51
  70. data/examples/temp_sensor/src/TimerConfigurator.h +15 -15
  71. data/examples/temp_sensor/src/TimerHardware.c +15 -15
  72. data/examples/temp_sensor/src/TimerHardware.h +8 -8
  73. data/examples/temp_sensor/src/TimerInterruptConfigurator.c +55 -55
  74. data/examples/temp_sensor/src/TimerInterruptConfigurator.h +13 -13
  75. data/examples/temp_sensor/src/TimerInterruptHandler.c +25 -25
  76. data/examples/temp_sensor/src/TimerInterruptHandler.h +10 -10
  77. data/examples/temp_sensor/src/TimerModel.c +9 -9
  78. data/examples/temp_sensor/src/TimerModel.h +8 -8
  79. data/examples/temp_sensor/src/Types.h +90 -90
  80. data/examples/temp_sensor/src/UsartBaudRateRegisterCalculator.c +18 -18
  81. data/examples/temp_sensor/src/UsartBaudRateRegisterCalculator.h +8 -8
  82. data/examples/temp_sensor/src/UsartConductor.c +21 -21
  83. data/examples/temp_sensor/src/UsartConductor.h +7 -7
  84. data/examples/temp_sensor/src/UsartConfigurator.c +39 -39
  85. data/examples/temp_sensor/src/UsartConfigurator.h +13 -13
  86. data/examples/temp_sensor/src/UsartHardware.c +22 -22
  87. data/examples/temp_sensor/src/UsartHardware.h +9 -9
  88. data/examples/temp_sensor/src/UsartModel.c +34 -34
  89. data/examples/temp_sensor/src/UsartModel.h +10 -10
  90. data/examples/temp_sensor/src/UsartPutChar.c +16 -16
  91. data/examples/temp_sensor/src/UsartPutChar.h +8 -8
  92. data/examples/temp_sensor/src/UsartTransmitBufferStatus.c +7 -7
  93. data/examples/temp_sensor/src/UsartTransmitBufferStatus.h +8 -8
  94. data/examples/temp_sensor/test/TestAdcConductor.c +121 -121
  95. data/examples/temp_sensor/test/TestAdcHardware.c +44 -44
  96. data/examples/temp_sensor/test/TestAdcModel.c +33 -33
  97. data/examples/temp_sensor/test/TestExecutor.c +36 -36
  98. data/examples/temp_sensor/test/TestMain.c +24 -24
  99. data/examples/temp_sensor/test/TestModel.c +20 -20
  100. data/examples/temp_sensor/test/TestTaskScheduler.c +104 -104
  101. data/examples/temp_sensor/test/TestTemperatureCalculator.c +36 -36
  102. data/examples/temp_sensor/test/TestTemperatureFilter.c +79 -79
  103. data/examples/temp_sensor/test/TestTimerConductor.c +32 -32
  104. data/examples/temp_sensor/test/TestTimerHardware.c +26 -26
  105. data/examples/temp_sensor/test/TestTimerModel.c +18 -18
  106. data/examples/temp_sensor/test/TestUsartBaudRateRegisterCalculator.c +21 -21
  107. data/examples/temp_sensor/test/TestUsartConductor.c +40 -40
  108. data/examples/temp_sensor/test/TestUsartHardware.c +36 -36
  109. data/examples/temp_sensor/test/TestUsartModel.c +40 -40
  110. data/examples/temp_sensor/test/support/UnityHelper.c +12 -12
  111. data/examples/temp_sensor/test/support/UnityHelper.h +12 -12
  112. data/lib/ceedling.rb +99 -99
  113. data/lib/ceedling/build_invoker_utils.rb +39 -39
  114. data/lib/ceedling/cacheinator.rb +47 -42
  115. data/lib/ceedling/cacheinator_helper.rb +31 -12
  116. data/lib/ceedling/cmock_builder.rb +15 -15
  117. data/lib/ceedling/configurator.rb +363 -356
  118. data/lib/ceedling/configurator_builder.rb +458 -451
  119. data/lib/ceedling/configurator_plugins.rb +111 -111
  120. data/lib/ceedling/configurator_setup.rb +127 -127
  121. data/lib/ceedling/configurator_validator.rb +193 -193
  122. data/lib/ceedling/constants.rb +97 -97
  123. data/lib/ceedling/defaults.rb +418 -418
  124. data/lib/ceedling/dependinator.rb +98 -91
  125. data/lib/ceedling/erb_wrapper.rb +8 -8
  126. data/lib/ceedling/file_finder.rb +149 -149
  127. data/lib/ceedling/file_finder_helper.rb +54 -54
  128. data/lib/ceedling/file_path_utils.rb +200 -200
  129. data/lib/ceedling/file_system_utils.rb +69 -69
  130. data/lib/ceedling/file_system_wrapper.rb +9 -9
  131. data/lib/ceedling/file_wrapper.rb +83 -83
  132. data/lib/ceedling/flaginator.rb +74 -74
  133. data/lib/ceedling/generator.rb +183 -176
  134. data/lib/ceedling/generator_helper.rb +40 -40
  135. data/lib/ceedling/generator_test_results.rb +89 -89
  136. data/lib/ceedling/generator_test_results_sanity_checker.rb +65 -65
  137. data/lib/ceedling/generator_test_runner.rb +56 -52
  138. data/lib/ceedling/loginator.rb +31 -31
  139. data/lib/ceedling/makefile.rb +46 -46
  140. data/lib/ceedling/objects.yml +310 -307
  141. data/lib/ceedling/par_map.rb +19 -19
  142. data/lib/ceedling/plugin.rb +80 -80
  143. data/lib/ceedling/plugin_builder.rb +52 -52
  144. data/lib/ceedling/plugin_manager.rb +107 -107
  145. data/lib/ceedling/plugin_manager_helper.rb +19 -19
  146. data/lib/ceedling/plugin_reportinator.rb +76 -76
  147. data/lib/ceedling/plugin_reportinator_helper.rb +51 -51
  148. data/lib/ceedling/preprocessinator.rb +42 -43
  149. data/lib/ceedling/preprocessinator_extractor.rb +30 -30
  150. data/lib/ceedling/preprocessinator_file_handler.rb +21 -21
  151. data/lib/ceedling/preprocessinator_helper.rb +46 -46
  152. data/lib/ceedling/preprocessinator_includes_handler.rb +181 -96
  153. data/lib/ceedling/project_config_manager.rb +46 -37
  154. data/lib/ceedling/project_file_loader.rb +99 -99
  155. data/lib/ceedling/rake_utils.rb +17 -17
  156. data/lib/ceedling/rake_wrapper.rb +33 -33
  157. data/lib/ceedling/rakefile.rb +86 -86
  158. data/lib/ceedling/release_invoker.rb +73 -73
  159. data/lib/ceedling/release_invoker_helper.rb +19 -19
  160. data/lib/ceedling/reportinator.rb +26 -26
  161. data/lib/ceedling/rules_cmock.rake +9 -9
  162. data/lib/ceedling/rules_preprocess.rake +26 -26
  163. data/lib/ceedling/rules_release.rake +86 -86
  164. data/lib/ceedling/rules_release_deep_dependencies.rake +15 -15
  165. data/lib/ceedling/rules_tests.rake +74 -74
  166. data/lib/ceedling/rules_tests_deep_dependencies.rake +15 -15
  167. data/lib/ceedling/setupinator.rb +53 -53
  168. data/lib/ceedling/stream_wrapper.rb +28 -20
  169. data/lib/ceedling/streaminator.rb +40 -40
  170. data/lib/ceedling/streaminator_helper.rb +15 -15
  171. data/lib/ceedling/system_utils.rb +37 -37
  172. data/lib/ceedling/system_wrapper.rb +80 -80
  173. data/lib/ceedling/target_loader.rb +38 -38
  174. data/lib/ceedling/task_invoker.rb +117 -101
  175. data/lib/ceedling/tasks_base.rake +111 -112
  176. data/lib/ceedling/tasks_filesystem.rake +103 -100
  177. data/lib/ceedling/tasks_release.rake +30 -30
  178. data/lib/ceedling/tasks_release_deep_dependencies.rake +9 -9
  179. data/lib/ceedling/tasks_tests.rake +60 -55
  180. data/lib/ceedling/tasks_tests_deep_dependencies.rake +9 -9
  181. data/lib/ceedling/tasks_vendor.rake +35 -35
  182. data/lib/ceedling/test_includes_extractor.rb +85 -85
  183. data/lib/ceedling/test_invoker.rb +188 -164
  184. data/lib/ceedling/test_invoker_helper.rb +32 -32
  185. data/lib/ceedling/tool_executor.rb +229 -223
  186. data/lib/ceedling/tool_executor_helper.rb +164 -164
  187. data/lib/ceedling/verbosinator.rb +10 -10
  188. data/lib/ceedling/version.rb +36 -15
  189. data/lib/ceedling/yaml_wrapper.rb +17 -17
  190. data/license.txt +31 -31
  191. data/out.fail +22 -21
  192. data/plugins/beep/README.md +22 -22
  193. data/plugins/beep/lib/beep.rb +40 -40
  194. data/plugins/bullseye/assets/template.erb +15 -15
  195. data/plugins/bullseye/bullseye.rake +169 -169
  196. data/plugins/bullseye/config/defaults.yml +57 -57
  197. data/plugins/bullseye/lib/bullseye.rb +194 -194
  198. data/plugins/colour_report/lib/colour_report.rb +16 -0
  199. data/plugins/command_hooks/README.md +53 -52
  200. data/plugins/command_hooks/lib/command_hooks.rb +92 -75
  201. data/plugins/fake_function_framework/README.md +250 -250
  202. data/plugins/fake_function_framework/Rakefile +18 -18
  203. data/plugins/fake_function_framework/examples/fff_example/project.yml +71 -71
  204. data/plugins/fake_function_framework/examples/fff_example/rakefile.rb +7 -7
  205. data/plugins/fake_function_framework/examples/fff_example/src/bar.c +1 -1
  206. data/plugins/fake_function_framework/examples/fff_example/src/bar.h +14 -14
  207. data/plugins/fake_function_framework/examples/fff_example/src/custom_types.h +6 -6
  208. data/plugins/fake_function_framework/examples/fff_example/src/display.c +6 -6
  209. data/plugins/fake_function_framework/examples/fff_example/src/display.h +16 -16
  210. data/plugins/fake_function_framework/examples/fff_example/src/event_processor.c +93 -93
  211. data/plugins/fake_function_framework/examples/fff_example/src/event_processor.h +11 -11
  212. data/plugins/fake_function_framework/examples/fff_example/src/foo.c +16 -16
  213. data/plugins/fake_function_framework/examples/fff_example/src/foo.h +8 -8
  214. data/plugins/fake_function_framework/examples/fff_example/src/subfolder/zzz.c +1 -1
  215. data/plugins/fake_function_framework/examples/fff_example/src/subfolder/zzz.h +6 -6
  216. data/plugins/fake_function_framework/examples/fff_example/test/test_event_processor.c +155 -155
  217. data/plugins/fake_function_framework/examples/fff_example/test/test_foo.c +47 -47
  218. data/plugins/fake_function_framework/lib/fake_function_framework.rb +87 -87
  219. data/plugins/fake_function_framework/lib/fff_mock_generator.rb +163 -163
  220. data/plugins/fake_function_framework/spec/fff_mock_header_generator_spec.rb +304 -304
  221. data/plugins/fake_function_framework/spec/fff_mock_source_generator_spec.rb +148 -148
  222. data/plugins/fake_function_framework/spec/header_generator.rb +50 -50
  223. data/plugins/fake_function_framework/spec/spec_helper.rb +96 -96
  224. data/plugins/fake_function_framework/src/fff_unity_helper.h +32 -32
  225. data/plugins/gcov/README.md +101 -42
  226. data/plugins/gcov/assets/template.erb +15 -15
  227. data/plugins/gcov/config/defaults.yml +73 -66
  228. data/plugins/gcov/gcov.rake +220 -180
  229. data/plugins/gcov/lib/gcov.rb +113 -106
  230. data/plugins/gcov/lib/gcov_constants.rb +19 -18
  231. data/plugins/junit_tests_report/README.md +36 -0
  232. data/plugins/junit_tests_report/lib/junit_tests_report.rb +129 -118
  233. data/plugins/module_generator/config/module_generator.yml +3 -3
  234. data/plugins/module_generator/lib/module_generator.rb +70 -51
  235. data/plugins/module_generator/module_generator.rake +47 -43
  236. data/plugins/raw_output_report/lib/raw_output_report.rb +41 -41
  237. data/plugins/stdout_gtestlike_tests_report/assets/template.erb +84 -84
  238. data/plugins/stdout_gtestlike_tests_report/assets/template.erb copy +59 -59
  239. data/plugins/stdout_gtestlike_tests_report/config/stdout_gtestlike_tests_report.yml +4 -4
  240. data/plugins/stdout_gtestlike_tests_report/lib/stdout_gtestlike_tests_report.rb +43 -43
  241. data/plugins/stdout_ide_tests_report/config/stdout_ide_tests_report.yml +4 -4
  242. data/plugins/stdout_ide_tests_report/lib/stdout_ide_tests_report.rb +44 -44
  243. data/plugins/stdout_pretty_tests_report/assets/template.erb +59 -59
  244. data/plugins/stdout_pretty_tests_report/config/stdout_pretty_tests_report.yml +4 -4
  245. data/plugins/stdout_pretty_tests_report/lib/stdout_pretty_tests_report.rb +47 -47
  246. data/plugins/subprojects/README.md +63 -63
  247. data/plugins/subprojects/config/defaults.yml +33 -33
  248. data/plugins/subprojects/lib/subprojects.rb +92 -92
  249. data/plugins/subprojects/subprojects.rake +78 -78
  250. data/plugins/teamcity_tests_report/config/teamcity_tests_report.yml +4 -4
  251. data/plugins/teamcity_tests_report/lib/teamcity_tests_report.rb +57 -57
  252. data/plugins/warnings_report/lib/warnings_report.rb +69 -69
  253. data/plugins/xml_tests_report/README.md +36 -0
  254. data/plugins/xml_tests_report/lib/xml_tests_report.rb +110 -108
  255. data/spec/build_invoker_utils_spec.rb +54 -54
  256. data/spec/ceedling_spec.rb +154 -154
  257. data/spec/configurator_builder_spec.rb +6 -6
  258. data/spec/configurator_helper_spec.rb +4 -4
  259. data/spec/configurator_spec.rb +9 -9
  260. data/spec/file_finder_helper_spec.rb +53 -53
  261. data/spec/gcov/gcov_deployment_spec.rb +70 -70
  262. data/spec/gcov/gcov_test_cases_spec.rb +91 -91
  263. data/spec/generator_test_results_sanity_checker_spec.rb +88 -88
  264. data/spec/generator_test_results_spec.rb +107 -107
  265. data/spec/par_map_spec.rb +57 -57
  266. data/spec/preprocessinator_extractor_spec.rb +45 -45
  267. data/spec/preprocessinator_includes_handler_spec.rb +202 -186
  268. data/spec/reportinator_spec.rb +19 -19
  269. data/spec/spec_helper.rb +27 -27
  270. data/spec/spec_system_helper.rb +575 -481
  271. data/spec/support/test_example.fail +22 -22
  272. data/spec/support/test_example.pass +22 -22
  273. data/spec/support/test_example_empty.pass +14 -14
  274. data/spec/support/test_example_ignore.pass +22 -22
  275. data/spec/support/test_example_mangled.pass +20 -20
  276. data/spec/support/test_example_with_time.pass +22 -22
  277. data/spec/system/deployment_spec.rb +219 -197
  278. data/spec/system_utils_spec.rb +56 -56
  279. data/spec/target_loader_spec.rb +30 -30
  280. data/spec/tool_executor_helper_spec.rb +310 -310
  281. data/spec/uncatagorized_specs_spec.rb +8 -8
  282. data/vendor/behaviors/Manifest.txt +9 -9
  283. data/vendor/behaviors/Rakefile +19 -19
  284. data/vendor/behaviors/lib/behaviors.rb +76 -76
  285. data/vendor/behaviors/lib/behaviors/reporttask.rb +158 -158
  286. data/vendor/behaviors/test/behaviors_tasks_test.rb +73 -73
  287. data/vendor/behaviors/test/behaviors_test.rb +50 -50
  288. data/vendor/behaviors/test/tasks_test/Rakefile +19 -19
  289. data/vendor/behaviors/test/tasks_test/lib/user.rb +2 -2
  290. data/vendor/behaviors/test/tasks_test/test/user_test.rb +17 -17
  291. data/vendor/c_exception/Gemfile +4 -4
  292. data/vendor/c_exception/Gemfile.lock +12 -12
  293. data/vendor/c_exception/LICENSE.txt +30 -30
  294. data/vendor/c_exception/README.md +162 -162
  295. data/vendor/c_exception/Rakefile +42 -42
  296. data/vendor/c_exception/docs/CException.md +292 -292
  297. data/vendor/c_exception/docs/ThrowTheSwitchCodingStandard.md +207 -207
  298. data/vendor/c_exception/lib/CException.c +46 -46
  299. data/vendor/c_exception/lib/CException.h +115 -110
  300. data/vendor/c_exception/makefile +23 -23
  301. data/vendor/c_exception/test/CExceptionConfig.h +46 -46
  302. data/vendor/c_exception/test/TestException.c +391 -391
  303. data/vendor/c_exception/test/TestException_Runner.c +67 -67
  304. data/vendor/c_exception/vendor/unity/README.md +220 -0
  305. data/vendor/c_exception/vendor/unity/auto/colour_prompt.rb +118 -0
  306. data/vendor/c_exception/vendor/unity/auto/colour_reporter.rb +39 -0
  307. data/vendor/c_exception/vendor/unity/auto/generate_config.yml +36 -0
  308. data/vendor/c_exception/vendor/unity/auto/generate_module.rb +308 -0
  309. data/vendor/c_exception/vendor/unity/auto/generate_test_runner.rb +437 -0
  310. data/vendor/c_exception/vendor/unity/auto/parse_output.rb +220 -0
  311. data/vendor/c_exception/vendor/unity/auto/stylize_as_junit.rb +252 -0
  312. data/vendor/c_exception/vendor/unity/auto/test_file_filter.rb +25 -0
  313. data/vendor/c_exception/vendor/unity/auto/type_sanitizer.rb +6 -0
  314. data/vendor/c_exception/vendor/unity/auto/unity_test_summary.py +139 -0
  315. data/vendor/c_exception/vendor/unity/auto/unity_test_summary.rb +136 -0
  316. data/vendor/c_exception/vendor/unity/auto/unity_to_junit.py +146 -0
  317. data/vendor/c_exception/vendor/unity/docs/ThrowTheSwitchCodingStandard.md +207 -0
  318. data/vendor/c_exception/vendor/unity/docs/UnityAssertionsCheatSheetSuitableforPrintingandPossiblyFraming.pdf +0 -0
  319. data/vendor/c_exception/vendor/unity/docs/UnityAssertionsReference.md +716 -0
  320. data/vendor/c_exception/vendor/unity/docs/UnityConfigurationGuide.md +398 -0
  321. data/vendor/c_exception/vendor/unity/docs/UnityGettingStartedGuide.md +191 -0
  322. data/vendor/c_exception/vendor/unity/docs/UnityHelperScriptsGuide.md +242 -0
  323. data/vendor/{cmock → c_exception}/vendor/unity/docs/license.txt +21 -21
  324. data/vendor/c_exception/vendor/unity/examples/example_1/makefile +71 -0
  325. data/vendor/c_exception/vendor/unity/examples/example_1/readme.txt +5 -0
  326. data/vendor/c_exception/vendor/unity/examples/example_1/src/ProductionCode.c +24 -0
  327. data/vendor/c_exception/vendor/unity/examples/example_1/src/ProductionCode.h +3 -0
  328. data/vendor/c_exception/vendor/unity/examples/example_1/src/ProductionCode2.c +11 -0
  329. data/vendor/c_exception/vendor/unity/examples/example_1/src/ProductionCode2.h +2 -0
  330. data/vendor/c_exception/vendor/unity/examples/example_1/test/TestProductionCode.c +62 -0
  331. data/vendor/c_exception/vendor/unity/examples/example_1/test/TestProductionCode2.c +31 -0
  332. data/vendor/c_exception/vendor/unity/examples/example_1/test/test_runners/TestProductionCode2_Runner.c +53 -0
  333. data/vendor/c_exception/vendor/unity/examples/example_1/test/test_runners/TestProductionCode_Runner.c +57 -0
  334. data/vendor/c_exception/vendor/unity/examples/example_2/makefile +70 -0
  335. data/vendor/c_exception/vendor/unity/examples/example_2/readme.txt +5 -0
  336. data/vendor/c_exception/vendor/unity/examples/example_2/src/ProductionCode.c +24 -0
  337. data/vendor/c_exception/vendor/unity/examples/example_2/src/ProductionCode.h +3 -0
  338. data/vendor/c_exception/vendor/unity/examples/example_2/src/ProductionCode2.c +11 -0
  339. data/vendor/c_exception/vendor/unity/examples/example_2/src/ProductionCode2.h +2 -0
  340. data/vendor/c_exception/vendor/unity/examples/example_2/test/TestProductionCode.c +64 -0
  341. data/vendor/c_exception/vendor/unity/examples/example_2/test/TestProductionCode2.c +33 -0
  342. data/vendor/c_exception/vendor/unity/examples/example_2/test/test_runners/TestProductionCode2_Runner.c +9 -0
  343. data/vendor/c_exception/vendor/unity/examples/example_2/test/test_runners/TestProductionCode_Runner.c +11 -0
  344. data/vendor/c_exception/vendor/unity/examples/example_2/test/test_runners/all_tests.c +12 -0
  345. data/vendor/c_exception/vendor/unity/examples/example_3/helper/UnityHelper.c +10 -0
  346. data/vendor/c_exception/vendor/unity/examples/example_3/helper/UnityHelper.h +12 -0
  347. data/vendor/c_exception/vendor/unity/examples/example_3/rakefile.rb +43 -0
  348. data/vendor/c_exception/vendor/unity/examples/example_3/rakefile_helper.rb +249 -0
  349. data/vendor/c_exception/vendor/unity/examples/example_3/readme.txt +13 -0
  350. data/vendor/c_exception/vendor/unity/examples/example_3/src/ProductionCode.c +24 -0
  351. data/vendor/c_exception/vendor/unity/examples/example_3/src/ProductionCode.h +3 -0
  352. data/vendor/c_exception/vendor/unity/examples/example_3/src/ProductionCode2.c +11 -0
  353. data/vendor/c_exception/vendor/unity/examples/example_3/src/ProductionCode2.h +2 -0
  354. data/vendor/c_exception/vendor/unity/examples/example_3/target_gcc_32.yml +46 -0
  355. data/vendor/c_exception/vendor/unity/examples/example_3/test/TestProductionCode.c +62 -0
  356. data/vendor/c_exception/vendor/unity/examples/example_3/test/TestProductionCode2.c +31 -0
  357. data/vendor/c_exception/vendor/unity/examples/unity_config.h +237 -0
  358. data/vendor/c_exception/vendor/unity/extras/eclipse/error_parsers.txt +26 -0
  359. data/vendor/c_exception/vendor/unity/extras/fixture/rakefile.rb +48 -0
  360. data/vendor/c_exception/vendor/unity/extras/fixture/rakefile_helper.rb +178 -0
  361. data/vendor/{cmock → c_exception}/vendor/unity/extras/fixture/readme.txt +8 -8
  362. data/vendor/c_exception/vendor/unity/extras/fixture/src/unity_fixture.c +432 -0
  363. data/vendor/c_exception/vendor/unity/extras/fixture/src/unity_fixture.h +83 -0
  364. data/vendor/c_exception/vendor/unity/extras/fixture/src/unity_fixture_internals.h +51 -0
  365. data/vendor/{unity → c_exception/vendor/unity}/extras/fixture/src/unity_fixture_malloc_overrides.h +47 -47
  366. data/vendor/c_exception/vendor/unity/extras/fixture/test/Makefile +74 -0
  367. data/vendor/c_exception/vendor/unity/extras/fixture/test/main/AllTests.c +22 -0
  368. data/vendor/c_exception/vendor/unity/extras/fixture/test/template_fixture_tests.c +39 -0
  369. data/vendor/c_exception/vendor/unity/extras/fixture/test/unity_fixture_Test.c +543 -0
  370. data/vendor/c_exception/vendor/unity/extras/fixture/test/unity_fixture_TestRunner.c +57 -0
  371. data/vendor/{cmock → c_exception}/vendor/unity/extras/fixture/test/unity_output_Spy.c +57 -57
  372. data/vendor/{cmock → c_exception}/vendor/unity/extras/fixture/test/unity_output_Spy.h +17 -17
  373. data/vendor/c_exception/vendor/unity/release/build.info +2 -0
  374. data/vendor/c_exception/vendor/unity/release/version.info +2 -0
  375. data/vendor/c_exception/vendor/unity/src/unity.c +1517 -0
  376. data/vendor/c_exception/vendor/unity/src/unity.h +339 -0
  377. data/vendor/c_exception/vendor/unity/src/unity_internals.h +784 -0
  378. data/vendor/c_exception/vendor/unity/test/Makefile +63 -0
  379. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_cmd.c +61 -0
  380. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_def.c +57 -0
  381. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_head1.c +55 -0
  382. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_head1.h +15 -0
  383. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_cmd.c +80 -0
  384. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_def.c +76 -0
  385. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_head1.c +75 -0
  386. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_head1.h +13 -0
  387. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_new1.c +89 -0
  388. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_new2.c +89 -0
  389. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_param.c +77 -0
  390. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_run1.c +89 -0
  391. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_run2.c +89 -0
  392. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_yaml.c +90 -0
  393. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_new1.c +67 -0
  394. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_new2.c +70 -0
  395. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_param.c +58 -0
  396. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_run1.c +67 -0
  397. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_run2.c +70 -0
  398. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_yaml.c +71 -0
  399. data/vendor/c_exception/vendor/unity/test/rakefile +125 -0
  400. data/vendor/c_exception/vendor/unity/test/rakefile_helper.rb +260 -0
  401. data/vendor/c_exception/vendor/unity/test/spec/generate_module_existing_file_spec.rb +158 -0
  402. data/vendor/c_exception/vendor/unity/test/targets/clang_file.yml +78 -0
  403. data/vendor/c_exception/vendor/unity/test/targets/clang_strict.yml +78 -0
  404. data/vendor/c_exception/vendor/unity/test/targets/gcc_32.yml +49 -0
  405. data/vendor/c_exception/vendor/unity/test/targets/gcc_64.yml +50 -0
  406. data/vendor/c_exception/vendor/unity/test/targets/gcc_auto_limits.yml +47 -0
  407. data/vendor/c_exception/vendor/unity/test/targets/gcc_auto_stdint.yml +59 -0
  408. data/vendor/c_exception/vendor/unity/test/targets/gcc_manual_math.yml +47 -0
  409. data/vendor/c_exception/vendor/unity/test/targets/hitech_picc18.yml +101 -0
  410. data/vendor/c_exception/vendor/unity/test/targets/iar_arm_v4.yml +90 -0
  411. data/vendor/c_exception/vendor/unity/test/targets/iar_arm_v5.yml +80 -0
  412. data/vendor/c_exception/vendor/unity/test/targets/iar_arm_v5_3.yml +80 -0
  413. data/vendor/c_exception/vendor/unity/test/targets/iar_armcortex_LM3S9B92_v5_4.yml +94 -0
  414. data/vendor/c_exception/vendor/unity/test/targets/iar_cortexm3_v5.yml +84 -0
  415. data/vendor/c_exception/vendor/unity/test/targets/iar_msp430.yml +95 -0
  416. data/vendor/c_exception/vendor/unity/test/targets/iar_sh2a_v6.yml +86 -0
  417. data/vendor/c_exception/vendor/unity/test/testdata/CException.h +11 -0
  418. data/vendor/c_exception/vendor/unity/test/testdata/Defs.h +8 -0
  419. data/vendor/c_exception/vendor/unity/test/testdata/cmock.h +14 -0
  420. data/vendor/c_exception/vendor/unity/test/testdata/mockMock.h +13 -0
  421. data/vendor/c_exception/vendor/unity/test/testdata/testRunnerGenerator.c +183 -0
  422. data/vendor/c_exception/vendor/unity/test/testdata/testRunnerGeneratorSmall.c +67 -0
  423. data/vendor/c_exception/vendor/unity/test/testdata/testRunnerGeneratorWithMocks.c +192 -0
  424. data/vendor/c_exception/vendor/unity/test/tests/test_generate_test_runner.rb +1252 -0
  425. data/vendor/c_exception/vendor/unity/test/tests/testparameterized.c +110 -0
  426. data/vendor/c_exception/vendor/unity/test/tests/testunity.c +4993 -0
  427. data/vendor/cmock/Gemfile +9 -9
  428. data/vendor/cmock/{docs/license.txt → LICENSE.txt} +18 -18
  429. data/vendor/cmock/README.md +34 -34
  430. data/vendor/cmock/config/production_environment.rb +14 -14
  431. data/vendor/cmock/config/test_environment.rb +16 -16
  432. data/vendor/cmock/docs/CMock_Summary.md +689 -603
  433. data/vendor/cmock/docs/ThrowTheSwitchCodingStandard.md +207 -207
  434. data/vendor/cmock/examples/make_example/Makefile +30 -30
  435. data/vendor/cmock/examples/make_example/src/foo.c +5 -5
  436. data/vendor/cmock/examples/make_example/src/foo.h +5 -5
  437. data/vendor/cmock/examples/make_example/src/main.c +15 -15
  438. data/vendor/cmock/examples/make_example/test/test_foo.c +17 -17
  439. data/vendor/cmock/examples/make_example/test/test_main.c +15 -15
  440. data/vendor/cmock/examples/temp_sensor/gcc.yml +44 -44
  441. data/vendor/cmock/examples/temp_sensor/iar_v4.yml +92 -92
  442. data/vendor/cmock/examples/temp_sensor/iar_v5.yml +81 -81
  443. data/vendor/cmock/examples/temp_sensor/rakefile.rb +42 -42
  444. data/vendor/cmock/examples/temp_sensor/rakefile_helper.rb +272 -272
  445. data/vendor/cmock/examples/temp_sensor/src/AT91SAM7X256.h +2556 -2556
  446. data/vendor/cmock/examples/temp_sensor/src/AdcConductor.c +42 -42
  447. data/vendor/cmock/examples/temp_sensor/src/AdcConductor.h +11 -11
  448. data/vendor/cmock/examples/temp_sensor/src/AdcHardware.c +27 -27
  449. data/vendor/cmock/examples/temp_sensor/src/AdcHardware.h +9 -9
  450. data/vendor/cmock/examples/temp_sensor/src/AdcHardwareConfigurator.c +18 -18
  451. data/vendor/cmock/examples/temp_sensor/src/AdcHardwareConfigurator.h +10 -10
  452. data/vendor/cmock/examples/temp_sensor/src/AdcModel.c +33 -33
  453. data/vendor/cmock/examples/temp_sensor/src/AdcModel.h +13 -13
  454. data/vendor/cmock/examples/temp_sensor/src/AdcTemperatureSensor.c +51 -51
  455. data/vendor/cmock/examples/temp_sensor/src/AdcTemperatureSensor.h +10 -10
  456. data/vendor/cmock/examples/temp_sensor/src/Executor.c +25 -25
  457. data/vendor/cmock/examples/temp_sensor/src/Executor.h +9 -9
  458. data/vendor/cmock/examples/temp_sensor/src/IntrinsicsWrapper.c +18 -18
  459. data/vendor/cmock/examples/temp_sensor/src/IntrinsicsWrapper.h +7 -7
  460. data/vendor/cmock/examples/temp_sensor/src/Main.c +46 -46
  461. data/vendor/cmock/examples/temp_sensor/src/Main.h +7 -7
  462. data/vendor/cmock/examples/temp_sensor/src/Model.c +10 -10
  463. data/vendor/cmock/examples/temp_sensor/src/Model.h +8 -8
  464. data/vendor/cmock/examples/temp_sensor/src/ModelConfig.h +7 -7
  465. data/vendor/cmock/examples/temp_sensor/src/TaskScheduler.c +72 -72
  466. data/vendor/cmock/examples/temp_sensor/src/TaskScheduler.h +11 -11
  467. data/vendor/cmock/examples/temp_sensor/src/TemperatureCalculator.c +27 -27
  468. data/vendor/cmock/examples/temp_sensor/src/TemperatureCalculator.h +6 -6
  469. data/vendor/cmock/examples/temp_sensor/src/TemperatureFilter.c +39 -39
  470. data/vendor/cmock/examples/temp_sensor/src/TemperatureFilter.h +10 -10
  471. data/vendor/cmock/examples/temp_sensor/src/TimerConductor.c +15 -15
  472. data/vendor/cmock/examples/temp_sensor/src/TimerConductor.h +9 -9
  473. data/vendor/cmock/examples/temp_sensor/src/TimerConfigurator.c +51 -51
  474. data/vendor/cmock/examples/temp_sensor/src/TimerConfigurator.h +15 -15
  475. data/vendor/cmock/examples/temp_sensor/src/TimerHardware.c +15 -15
  476. data/vendor/cmock/examples/temp_sensor/src/TimerHardware.h +8 -8
  477. data/vendor/cmock/examples/temp_sensor/src/TimerInterruptConfigurator.c +55 -55
  478. data/vendor/cmock/examples/temp_sensor/src/TimerInterruptConfigurator.h +13 -13
  479. data/vendor/cmock/examples/temp_sensor/src/TimerInterruptHandler.c +25 -25
  480. data/vendor/cmock/examples/temp_sensor/src/TimerInterruptHandler.h +10 -10
  481. data/vendor/cmock/examples/temp_sensor/src/TimerModel.c +9 -9
  482. data/vendor/cmock/examples/temp_sensor/src/TimerModel.h +8 -8
  483. data/vendor/cmock/examples/temp_sensor/src/Types.h +103 -103
  484. data/vendor/cmock/examples/temp_sensor/src/UsartBaudRateRegisterCalculator.c +18 -18
  485. data/vendor/cmock/examples/temp_sensor/src/UsartBaudRateRegisterCalculator.h +6 -6
  486. data/vendor/cmock/examples/temp_sensor/src/UsartConductor.c +21 -21
  487. data/vendor/cmock/examples/temp_sensor/src/UsartConductor.h +7 -7
  488. data/vendor/cmock/examples/temp_sensor/src/UsartConfigurator.c +39 -39
  489. data/vendor/cmock/examples/temp_sensor/src/UsartConfigurator.h +13 -13
  490. data/vendor/cmock/examples/temp_sensor/src/UsartHardware.c +22 -22
  491. data/vendor/cmock/examples/temp_sensor/src/UsartHardware.h +9 -9
  492. data/vendor/cmock/examples/temp_sensor/src/UsartModel.c +34 -34
  493. data/vendor/cmock/examples/temp_sensor/src/UsartModel.h +10 -10
  494. data/vendor/cmock/examples/temp_sensor/src/UsartPutChar.c +16 -16
  495. data/vendor/cmock/examples/temp_sensor/src/UsartPutChar.h +8 -8
  496. data/vendor/cmock/examples/temp_sensor/src/UsartTransmitBufferStatus.c +7 -7
  497. data/vendor/cmock/examples/temp_sensor/src/UsartTransmitBufferStatus.h +8 -8
  498. data/vendor/cmock/examples/temp_sensor/test/TestAdcConductor.c +121 -121
  499. data/vendor/cmock/examples/temp_sensor/test/TestAdcHardware.c +44 -44
  500. data/vendor/cmock/examples/temp_sensor/test/TestAdcHardwareConfigurator.c +43 -43
  501. data/vendor/cmock/examples/temp_sensor/test/TestAdcModel.c +33 -33
  502. data/vendor/cmock/examples/temp_sensor/test/TestAdcTemperatureSensor.c +47 -47
  503. data/vendor/cmock/examples/temp_sensor/test/TestExecutor.c +36 -36
  504. data/vendor/cmock/examples/temp_sensor/test/TestMain.c +24 -24
  505. data/vendor/cmock/examples/temp_sensor/test/TestModel.c +20 -20
  506. data/vendor/cmock/examples/temp_sensor/test/TestTaskScheduler.c +104 -104
  507. data/vendor/cmock/examples/temp_sensor/test/TestTemperatureCalculator.c +33 -33
  508. data/vendor/cmock/examples/temp_sensor/test/TestTemperatureFilter.c +69 -69
  509. data/vendor/cmock/examples/temp_sensor/test/TestTimerConductor.c +32 -32
  510. data/vendor/cmock/examples/temp_sensor/test/TestTimerConfigurator.c +112 -112
  511. data/vendor/cmock/examples/temp_sensor/test/TestTimerHardware.c +26 -26
  512. data/vendor/cmock/examples/temp_sensor/test/TestTimerInterruptConfigurator.c +78 -78
  513. data/vendor/cmock/examples/temp_sensor/test/TestTimerInterruptHandler.c +66 -66
  514. data/vendor/cmock/examples/temp_sensor/test/TestTimerModel.c +18 -18
  515. data/vendor/cmock/examples/temp_sensor/test/TestUsartBaudRateRegisterCalculator.c +21 -21
  516. data/vendor/cmock/examples/temp_sensor/test/TestUsartConductor.c +40 -40
  517. data/vendor/cmock/examples/temp_sensor/test/TestUsartConfigurator.c +77 -77
  518. data/vendor/cmock/examples/temp_sensor/test/TestUsartHardware.c +37 -37
  519. data/vendor/cmock/examples/temp_sensor/test/TestUsartModel.c +40 -40
  520. data/vendor/cmock/examples/temp_sensor/test/TestUsartPutChar.c +43 -43
  521. data/vendor/cmock/examples/temp_sensor/test/TestUsartTransmitBufferStatus.c +22 -22
  522. data/vendor/cmock/lib/cmock.rb +86 -86
  523. data/vendor/cmock/lib/cmock_config.rb +153 -145
  524. data/vendor/cmock/lib/cmock_file_writer.rb +44 -44
  525. data/vendor/cmock/lib/cmock_generator.rb +268 -264
  526. data/vendor/cmock/lib/cmock_generator_plugin_array.rb +63 -63
  527. data/vendor/cmock/lib/cmock_generator_plugin_callback.rb +88 -98
  528. data/vendor/cmock/lib/cmock_generator_plugin_cexception.rb +51 -51
  529. data/vendor/cmock/lib/cmock_generator_plugin_expect.rb +103 -104
  530. data/vendor/cmock/lib/cmock_generator_plugin_expect_any_args.rb +53 -54
  531. data/vendor/cmock/lib/cmock_generator_plugin_ignore.rb +75 -75
  532. data/vendor/cmock/lib/cmock_generator_plugin_ignore_arg.rb +42 -42
  533. data/vendor/cmock/lib/cmock_generator_plugin_return_thru_ptr.rb +79 -73
  534. data/vendor/cmock/lib/cmock_generator_utils.rb +253 -240
  535. data/vendor/cmock/lib/cmock_header_parser.rb +364 -337
  536. data/vendor/cmock/lib/cmock_plugin_manager.rb +55 -55
  537. data/vendor/cmock/lib/cmock_unityhelper_parser.rb +75 -75
  538. data/vendor/cmock/meson.build +72 -0
  539. data/vendor/cmock/scripts/create_makefile.rb +202 -202
  540. data/vendor/cmock/scripts/create_mock.rb +8 -8
  541. data/vendor/cmock/scripts/create_runner.rb +20 -20
  542. data/vendor/cmock/scripts/test_summary.rb +19 -19
  543. data/vendor/cmock/src/cmock.c +216 -210
  544. data/vendor/cmock/src/cmock.h +40 -38
  545. data/vendor/cmock/src/cmock_internals.h +91 -89
  546. data/vendor/cmock/src/meson.build +17 -0
  547. data/vendor/cmock/test/c/TestCMockC.c +333 -323
  548. data/vendor/cmock/test/c/TestCMockC.yml +14 -13
  549. data/vendor/cmock/test/c/TestCMockCDynamic.c +186 -186
  550. data/vendor/cmock/test/c/TestCMockCDynamic.yml +12 -12
  551. data/vendor/cmock/test/c/TestCMockCDynamic_Runner.c +36 -36
  552. data/vendor/cmock/test/c/TestCMockC_Runner.c +41 -39
  553. data/vendor/cmock/test/iar/iar_v4/Resource/at91SAM7X256_FLASH.xcl +185 -185
  554. data/vendor/cmock/test/iar/iar_v4/Resource/at91SAM7X256_RAM.xcl +185 -185
  555. data/vendor/cmock/test/iar/iar_v4/Resource/ioat91sam7x256.ddf +2259 -2259
  556. data/vendor/cmock/test/iar/iar_v4/cmock_demo.dep +3691 -3691
  557. data/vendor/cmock/test/iar/iar_v4/cmock_demo.ewp +2581 -2581
  558. data/vendor/cmock/test/iar/iar_v4/incIAR/AT91SAM7X-EK.h +61 -61
  559. data/vendor/cmock/test/iar/iar_v4/incIAR/AT91SAM7X256.inc +2314 -2314
  560. data/vendor/cmock/test/iar/iar_v4/incIAR/AT91SAM7X256.rdf +4704 -4704
  561. data/vendor/cmock/test/iar/iar_v4/incIAR/AT91SAM7X256.tcl +3407 -3407
  562. data/vendor/cmock/test/iar/iar_v4/incIAR/AT91SAM7X256_inc.h +2268 -2268
  563. data/vendor/cmock/test/iar/iar_v4/incIAR/ioat91sam7x256.h +4380 -4380
  564. data/vendor/cmock/test/iar/iar_v4/incIAR/lib_AT91SAM7X256.h +4211 -4211
  565. data/vendor/cmock/test/iar/iar_v4/settings/cmock_demo.cspy.bat +32 -32
  566. data/vendor/cmock/test/iar/iar_v4/srcIAR/Cstartup.s79 +265 -265
  567. data/vendor/cmock/test/iar/iar_v4/srcIAR/Cstartup_SAM7.c +98 -98
  568. data/vendor/cmock/test/iar/iar_v5/Resource/at91SAM7X256_FLASH.icf +43 -43
  569. data/vendor/cmock/test/iar/iar_v5/Resource/at91SAM7X256_RAM.icf +42 -42
  570. data/vendor/cmock/test/iar/iar_v5/cmock_demo.dep +4204 -4204
  571. data/vendor/cmock/test/iar/iar_v5/cmock_demo.ewp +2426 -2426
  572. data/vendor/cmock/test/iar/iar_v5/incIAR/AT91SAM7X-EK.h +61 -61
  573. data/vendor/cmock/test/iar/iar_v5/incIAR/AT91SAM7X256_inc.h +2268 -2268
  574. data/vendor/cmock/test/iar/iar_v5/incIAR/lib_AT91SAM7X256.h +4211 -4211
  575. data/vendor/cmock/test/iar/iar_v5/incIAR/project.h +30 -30
  576. data/vendor/cmock/test/iar/iar_v5/settings/BasicInterrupt_SAM7X.cspy.bat +33 -33
  577. data/vendor/cmock/test/iar/iar_v5/settings/BasicInterrupt_SAM7X_FLASH_Debug.jlink +12 -12
  578. data/vendor/cmock/test/iar/iar_v5/settings/cmock_demo.cspy.bat +33 -33
  579. data/vendor/cmock/test/iar/iar_v5/settings/cmock_demo_Binary.jlink +12 -12
  580. data/vendor/cmock/test/iar/iar_v5/settings/cmock_demo_FLASH_Debug.jlink +12 -12
  581. data/vendor/cmock/test/iar/iar_v5/settings/cmock_demo_RAM_Debug.jlink +12 -12
  582. data/vendor/cmock/test/iar/iar_v5/srcIAR/Cstartup.s +299 -299
  583. data/vendor/cmock/test/iar/iar_v5/srcIAR/Cstartup_SAM7.c +98 -98
  584. data/vendor/cmock/test/rakefile +106 -106
  585. data/vendor/cmock/test/rakefile_helper.rb +382 -381
  586. data/vendor/cmock/test/system/systest_generator.rb +193 -194
  587. data/vendor/cmock/test/system/test_compilation/callingconv.h +11 -11
  588. data/vendor/cmock/test/system/test_compilation/config.yml +9 -9
  589. data/vendor/cmock/test/system/test_compilation/const.h +37 -37
  590. data/vendor/cmock/test/system/test_compilation/osek.h +275 -275
  591. data/vendor/cmock/test/system/test_compilation/parsing.h +89 -52
  592. data/vendor/cmock/test/system/test_interactions/all_plugins_but_other_limits.yml +375 -375
  593. data/vendor/cmock/test/system/test_interactions/all_plugins_coexist.yml +459 -459
  594. data/vendor/cmock/test/system/test_interactions/array_and_pointer_handling.yml +446 -446
  595. data/vendor/cmock/test/system/test_interactions/basic_expect_and_return.yml +124 -124
  596. data/vendor/cmock/test/system/test_interactions/const_primitives_handling.yml +87 -87
  597. data/vendor/cmock/test/system/test_interactions/doesnt_leave_details_behind.yml +308 -308
  598. data/vendor/cmock/test/system/test_interactions/enforce_strict_ordering.yml +247 -247
  599. data/vendor/cmock/test/system/test_interactions/expect_and_return_custom_types.yml +108 -108
  600. data/vendor/cmock/test/system/test_interactions/expect_and_return_treat_as.yml +173 -173
  601. data/vendor/cmock/test/system/test_interactions/expect_and_throw.yml +170 -170
  602. data/vendor/cmock/test/system/test_interactions/expect_any_args.yml +238 -238
  603. data/vendor/cmock/test/system/test_interactions/fancy_pointer_handling.yml +210 -210
  604. data/vendor/cmock/test/system/test_interactions/function_pointer_handling.yml +82 -82
  605. data/vendor/cmock/test/system/test_interactions/ignore_and_return.yml +329 -329
  606. data/vendor/cmock/test/system/test_interactions/ignore_strict_mock_calling.yml +37 -37
  607. data/vendor/cmock/test/system/test_interactions/newer_standards_stuff1.yml +52 -52
  608. data/vendor/cmock/test/system/test_interactions/nonstandard_parsed_stuff_1.yml +91 -91
  609. data/vendor/cmock/test/system/test_interactions/nonstandard_parsed_stuff_2.yml +59 -59
  610. data/vendor/cmock/test/system/test_interactions/out_of_memory.yml +65 -65
  611. data/vendor/cmock/test/system/test_interactions/parsing_challenges.yml +242 -242
  612. data/vendor/cmock/test/system/test_interactions/return_thru_ptr_and_expect_any_args.yml +235 -235
  613. data/vendor/cmock/test/system/test_interactions/return_thru_ptr_ignore_arg.yml +231 -231
  614. data/vendor/cmock/test/system/test_interactions/struct_union_enum_expect_and_return.yml +277 -277
  615. data/vendor/cmock/test/system/test_interactions/struct_union_enum_expect_and_return_with_plugins.yml +280 -280
  616. data/vendor/cmock/test/system/test_interactions/stubs_with_callbacks.yml +221 -221
  617. data/vendor/cmock/test/system/test_interactions/unity_64bit_support.yml +77 -77
  618. data/vendor/cmock/test/system/test_interactions/unity_ignores.yml +139 -139
  619. data/vendor/cmock/test/system/test_interactions/unity_void_pointer_compare.yml +91 -0
  620. data/vendor/cmock/test/targets/clang_strict.yml +90 -90
  621. data/vendor/cmock/test/targets/gcc.yml +58 -58
  622. data/vendor/cmock/test/targets/gcc_64.yml +58 -58
  623. data/vendor/cmock/test/targets/gcc_tiny.yml +80 -80
  624. data/vendor/cmock/test/targets/iar_arm_v4.yml +110 -110
  625. data/vendor/cmock/test/targets/iar_arm_v5.yml +95 -95
  626. data/vendor/cmock/test/test_helper.rb +44 -44
  627. data/vendor/cmock/test/unit/cmock_config_test.rb +120 -120
  628. data/vendor/cmock/test/unit/cmock_config_test.yml +5 -5
  629. data/vendor/cmock/test/unit/cmock_file_writer_test.rb +27 -27
  630. data/vendor/cmock/test/unit/cmock_generator_main_test.rb +548 -542
  631. data/vendor/cmock/test/unit/cmock_generator_plugin_array_test.rb +141 -141
  632. data/vendor/cmock/test/unit/cmock_generator_plugin_callback_test.rb +281 -259
  633. data/vendor/cmock/test/unit/cmock_generator_plugin_cexception_test.rb +96 -96
  634. data/vendor/cmock/test/unit/cmock_generator_plugin_expect_a_test.rb +183 -186
  635. data/vendor/cmock/test/unit/cmock_generator_plugin_expect_any_args_test.rb +67 -60
  636. data/vendor/cmock/test/unit/cmock_generator_plugin_expect_b_test.rb +200 -203
  637. data/vendor/cmock/test/unit/cmock_generator_plugin_ignore_arg_test.rb +116 -116
  638. data/vendor/cmock/test/unit/cmock_generator_plugin_ignore_test.rb +105 -105
  639. data/vendor/cmock/test/unit/cmock_generator_plugin_return_thru_ptr_test.rb +136 -136
  640. data/vendor/cmock/test/unit/cmock_generator_utils_test.rb +415 -394
  641. data/vendor/cmock/test/unit/cmock_header_parser_test.rb +1728 -1699
  642. data/vendor/cmock/test/unit/cmock_plugin_manager_test.rb +100 -91
  643. data/vendor/cmock/test/unit/cmock_unityhelper_parser_test.rb +223 -223
  644. data/vendor/cmock/vendor/behaviors/Manifest.txt +9 -9
  645. data/vendor/cmock/vendor/behaviors/Rakefile +19 -19
  646. data/vendor/cmock/vendor/behaviors/lib/behaviors.rb +76 -76
  647. data/vendor/cmock/vendor/behaviors/lib/behaviors/reporttask.rb +158 -158
  648. data/vendor/cmock/vendor/behaviors/test/behaviors_tasks_test.rb +73 -73
  649. data/vendor/cmock/vendor/behaviors/test/behaviors_test.rb +50 -50
  650. data/vendor/cmock/vendor/behaviors/test/tasks_test/Rakefile +19 -19
  651. data/vendor/cmock/vendor/behaviors/test/tasks_test/lib/user.rb +2 -2
  652. data/vendor/cmock/vendor/behaviors/test/tasks_test/test/user_test.rb +17 -17
  653. data/vendor/cmock/vendor/c_exception/Gemfile +4 -4
  654. data/vendor/cmock/vendor/c_exception/Gemfile.lock +12 -12
  655. data/vendor/cmock/vendor/c_exception/LICENSE.txt +30 -30
  656. data/vendor/cmock/vendor/c_exception/README.md +162 -162
  657. data/vendor/cmock/vendor/c_exception/Rakefile +42 -42
  658. data/vendor/cmock/vendor/c_exception/docs/CException.md +292 -292
  659. data/vendor/cmock/vendor/c_exception/docs/ThrowTheSwitchCodingStandard.md +207 -207
  660. data/vendor/cmock/vendor/c_exception/lib/CException.c +46 -46
  661. data/vendor/cmock/vendor/c_exception/lib/CException.h +115 -110
  662. data/vendor/cmock/vendor/c_exception/makefile +23 -23
  663. data/vendor/cmock/vendor/c_exception/test/CExceptionConfig.h +46 -46
  664. data/vendor/cmock/vendor/c_exception/test/TestException.c +391 -391
  665. data/vendor/cmock/vendor/c_exception/test/TestException_Runner.c +67 -67
  666. data/vendor/cmock/vendor/unity/CMakeLists.txt +31 -0
  667. data/vendor/{unity/docs/license.txt → cmock/vendor/unity/LICENSE.txt} +21 -21
  668. data/vendor/cmock/vendor/unity/README.md +191 -231
  669. data/vendor/cmock/vendor/unity/auto/colour_prompt.rb +119 -118
  670. data/vendor/cmock/vendor/unity/auto/colour_reporter.rb +39 -39
  671. data/vendor/cmock/vendor/unity/auto/generate_config.yml +36 -36
  672. data/vendor/cmock/vendor/unity/auto/generate_module.rb +309 -308
  673. data/vendor/cmock/vendor/unity/auto/generate_test_runner.rb +495 -457
  674. data/vendor/cmock/vendor/unity/auto/parse_output.rb +322 -323
  675. data/vendor/cmock/vendor/unity/auto/run_test.erb +36 -0
  676. data/vendor/cmock/vendor/unity/auto/stylize_as_junit.rb +251 -252
  677. data/vendor/cmock/vendor/unity/auto/test_file_filter.rb +25 -25
  678. data/vendor/cmock/vendor/unity/auto/type_sanitizer.rb +6 -6
  679. data/vendor/cmock/vendor/unity/auto/unity_test_summary.py +139 -139
  680. data/vendor/cmock/vendor/unity/auto/unity_test_summary.rb +135 -136
  681. data/vendor/cmock/vendor/unity/auto/unity_to_junit.py +146 -146
  682. data/vendor/cmock/vendor/unity/docs/ThrowTheSwitchCodingStandard.md +206 -206
  683. data/vendor/cmock/vendor/unity/docs/UnityAssertionsReference.md +850 -779
  684. data/vendor/cmock/vendor/unity/docs/UnityConfigurationGuide.md +541 -433
  685. data/vendor/cmock/vendor/unity/docs/UnityGettingStartedGuide.md +251 -192
  686. data/vendor/cmock/vendor/unity/docs/UnityHelperScriptsGuide.md +266 -260
  687. data/vendor/cmock/vendor/unity/examples/example_1/makefile +72 -71
  688. data/vendor/cmock/vendor/unity/examples/example_1/readme.txt +4 -4
  689. data/vendor/cmock/vendor/unity/examples/example_1/src/ProductionCode.c +24 -24
  690. data/vendor/cmock/vendor/unity/examples/example_1/src/ProductionCode.h +3 -3
  691. data/vendor/cmock/vendor/unity/examples/example_1/src/ProductionCode2.c +11 -11
  692. data/vendor/cmock/vendor/unity/examples/example_1/src/ProductionCode2.h +2 -2
  693. data/vendor/cmock/vendor/unity/examples/example_1/test/TestProductionCode.c +62 -62
  694. data/vendor/cmock/vendor/unity/examples/example_1/test/TestProductionCode2.c +31 -31
  695. data/vendor/cmock/vendor/unity/examples/example_1/test/test_runners/TestProductionCode2_Runner.c +53 -53
  696. data/vendor/cmock/vendor/unity/examples/example_1/test/test_runners/TestProductionCode_Runner.c +57 -57
  697. data/vendor/cmock/vendor/unity/examples/example_2/makefile +71 -70
  698. data/vendor/cmock/vendor/unity/examples/example_2/readme.txt +4 -4
  699. data/vendor/cmock/vendor/unity/examples/example_2/src/ProductionCode.c +24 -24
  700. data/vendor/cmock/vendor/unity/examples/example_2/src/ProductionCode.h +3 -3
  701. data/vendor/cmock/vendor/unity/examples/example_2/src/ProductionCode2.c +11 -11
  702. data/vendor/cmock/vendor/unity/examples/example_2/src/ProductionCode2.h +2 -2
  703. data/vendor/cmock/vendor/unity/examples/example_2/test/TestProductionCode.c +64 -64
  704. data/vendor/cmock/vendor/unity/examples/example_2/test/TestProductionCode2.c +33 -33
  705. data/vendor/cmock/vendor/unity/examples/example_2/test/test_runners/TestProductionCode2_Runner.c +8 -8
  706. data/vendor/cmock/vendor/unity/examples/example_2/test/test_runners/TestProductionCode_Runner.c +10 -10
  707. data/vendor/cmock/vendor/unity/examples/example_2/test/test_runners/all_tests.c +12 -12
  708. data/vendor/cmock/vendor/unity/examples/example_3/helper/UnityHelper.c +10 -10
  709. data/vendor/cmock/vendor/unity/examples/example_3/helper/UnityHelper.h +12 -12
  710. data/vendor/cmock/vendor/unity/examples/example_3/rakefile.rb +38 -43
  711. data/vendor/cmock/vendor/unity/examples/example_3/rakefile_helper.rb +250 -249
  712. data/vendor/cmock/vendor/unity/examples/example_3/readme.txt +13 -13
  713. data/vendor/cmock/vendor/unity/examples/example_3/src/ProductionCode.c +24 -24
  714. data/vendor/cmock/vendor/unity/examples/example_3/src/ProductionCode.h +3 -3
  715. data/vendor/cmock/vendor/unity/examples/example_3/src/ProductionCode2.c +11 -11
  716. data/vendor/cmock/vendor/unity/examples/example_3/src/ProductionCode2.h +2 -2
  717. data/vendor/cmock/vendor/unity/examples/example_3/target_gcc_32.yml +47 -46
  718. data/vendor/cmock/vendor/unity/examples/example_3/test/TestProductionCode.c +62 -62
  719. data/vendor/cmock/vendor/unity/examples/example_3/test/TestProductionCode2.c +31 -31
  720. data/vendor/cmock/vendor/unity/examples/example_4/meson.build +17 -0
  721. data/vendor/cmock/vendor/unity/examples/example_4/readme.txt +15 -0
  722. data/vendor/cmock/vendor/unity/examples/example_4/src/ProductionCode.c +24 -0
  723. data/vendor/cmock/vendor/unity/examples/example_4/src/ProductionCode.h +3 -0
  724. data/vendor/cmock/vendor/unity/examples/example_4/src/ProductionCode2.c +11 -0
  725. data/vendor/cmock/vendor/unity/examples/example_4/src/ProductionCode2.h +2 -0
  726. data/vendor/cmock/vendor/unity/examples/example_4/src/meson.build +21 -0
  727. data/vendor/cmock/vendor/unity/examples/example_4/subprojects/unity.wrap +4 -0
  728. data/vendor/cmock/vendor/unity/examples/example_4/test/TestProductionCode.c +63 -0
  729. data/vendor/cmock/vendor/unity/examples/example_4/test/TestProductionCode2.c +35 -0
  730. data/vendor/cmock/vendor/unity/examples/example_4/test/meson.build +12 -0
  731. data/vendor/cmock/vendor/unity/examples/example_4/test/test_runners/TestProductionCode2_Runner.c +53 -0
  732. data/vendor/cmock/vendor/unity/examples/example_4/test/test_runners/TestProductionCode_Runner.c +57 -0
  733. data/vendor/cmock/vendor/unity/examples/example_4/test/test_runners/meson.build +16 -0
  734. data/vendor/cmock/vendor/unity/examples/unity_config.h +263 -247
  735. data/vendor/cmock/vendor/unity/extras/eclipse/error_parsers.txt +26 -26
  736. data/vendor/cmock/vendor/unity/extras/fixture/rakefile.rb +44 -48
  737. data/vendor/cmock/vendor/unity/extras/fixture/rakefile_helper.rb +183 -178
  738. data/vendor/cmock/vendor/unity/extras/fixture/readme.md +17 -0
  739. data/vendor/cmock/vendor/unity/extras/fixture/src/unity_fixture.c +275 -436
  740. data/vendor/cmock/vendor/unity/extras/fixture/src/unity_fixture.h +83 -83
  741. data/vendor/cmock/vendor/unity/extras/fixture/src/unity_fixture_internals.h +50 -51
  742. data/vendor/cmock/vendor/unity/extras/fixture/test/Makefile +72 -75
  743. data/vendor/cmock/vendor/unity/extras/fixture/test/main/AllTests.c +20 -22
  744. data/vendor/cmock/vendor/unity/extras/fixture/test/template_fixture_tests.c +39 -39
  745. data/vendor/cmock/vendor/unity/extras/fixture/test/unity_fixture_Test.c +245 -543
  746. data/vendor/cmock/vendor/unity/extras/fixture/test/unity_fixture_TestRunner.c +32 -57
  747. data/vendor/cmock/vendor/unity/extras/memory/rakefile.rb +45 -0
  748. data/vendor/cmock/vendor/unity/extras/memory/rakefile_helper.rb +187 -0
  749. data/vendor/cmock/vendor/unity/extras/memory/readme.md +49 -0
  750. data/vendor/cmock/vendor/unity/extras/memory/src/unity_memory.c +202 -0
  751. data/vendor/cmock/vendor/unity/extras/{fixture/src/unity_fixture_malloc_overrides.h → memory/src/unity_memory.h} +60 -47
  752. data/vendor/cmock/vendor/unity/extras/memory/test/Makefile +78 -0
  753. data/vendor/cmock/vendor/unity/extras/memory/test/unity_memory_Test.c +325 -0
  754. data/vendor/cmock/vendor/unity/extras/memory/test/unity_memory_TestRunner.c +49 -0
  755. data/vendor/{unity/extras/fixture → cmock/vendor/unity/extras/memory}/test/unity_output_Spy.c +56 -57
  756. data/vendor/{unity/extras/fixture → cmock/vendor/unity/extras/memory}/test/unity_output_Spy.h +16 -17
  757. data/vendor/cmock/vendor/unity/meson.build +69 -0
  758. data/vendor/cmock/vendor/unity/src/CMakeLists.txt +22 -0
  759. data/vendor/cmock/vendor/unity/src/meson.build +16 -0
  760. data/vendor/cmock/vendor/unity/src/unity.c +2085 -1572
  761. data/vendor/cmock/vendor/unity/src/unity.h +617 -503
  762. data/vendor/cmock/vendor/unity/src/unity_internals.h +1002 -924
  763. data/vendor/cmock/vendor/unity/test/Makefile +67 -68
  764. data/vendor/cmock/vendor/unity/test/expectdata/testsample_cmd.c +61 -61
  765. data/vendor/cmock/vendor/unity/test/expectdata/testsample_def.c +57 -57
  766. data/vendor/cmock/vendor/unity/test/expectdata/testsample_head1.c +55 -55
  767. data/vendor/cmock/vendor/unity/test/expectdata/testsample_head1.h +15 -15
  768. data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_cmd.c +80 -80
  769. data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_def.c +76 -76
  770. data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_head1.c +75 -75
  771. data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_head1.h +13 -13
  772. data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_new1.c +89 -89
  773. data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_new2.c +89 -89
  774. data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_param.c +77 -77
  775. data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_run1.c +89 -89
  776. data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_run2.c +89 -89
  777. data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_yaml.c +90 -90
  778. data/vendor/cmock/vendor/unity/test/expectdata/testsample_new1.c +67 -67
  779. data/vendor/cmock/vendor/unity/test/expectdata/testsample_new2.c +70 -70
  780. data/vendor/cmock/vendor/unity/test/expectdata/testsample_param.c +58 -58
  781. data/vendor/cmock/vendor/unity/test/expectdata/testsample_run1.c +67 -67
  782. data/vendor/cmock/vendor/unity/test/expectdata/testsample_run2.c +70 -70
  783. data/vendor/cmock/vendor/unity/test/expectdata/testsample_yaml.c +71 -71
  784. data/vendor/cmock/vendor/unity/test/rakefile +124 -125
  785. data/vendor/cmock/vendor/unity/test/rakefile_helper.rb +269 -260
  786. data/vendor/cmock/vendor/unity/test/spec/generate_module_existing_file_spec.rb +158 -158
  787. data/vendor/cmock/vendor/unity/test/targets/ansi.yml +49 -0
  788. data/vendor/cmock/vendor/unity/test/targets/clang_file.yml +78 -78
  789. data/vendor/cmock/vendor/unity/test/targets/clang_strict.yml +78 -78
  790. data/vendor/cmock/vendor/unity/test/targets/gcc_32.yml +49 -49
  791. data/vendor/cmock/vendor/unity/test/targets/gcc_64.yml +50 -50
  792. data/vendor/cmock/vendor/unity/test/targets/gcc_auto_limits.yml +47 -47
  793. data/vendor/cmock/vendor/unity/test/targets/gcc_auto_stdint.yml +59 -59
  794. data/vendor/cmock/vendor/unity/test/targets/gcc_manual_math.yml +47 -47
  795. data/vendor/cmock/vendor/unity/test/targets/hitech_picc18.yml +101 -101
  796. data/vendor/cmock/vendor/unity/test/targets/iar_arm_v4.yml +90 -90
  797. data/vendor/cmock/vendor/unity/test/targets/iar_arm_v5.yml +80 -80
  798. data/vendor/cmock/vendor/unity/test/targets/iar_arm_v5_3.yml +80 -80
  799. data/vendor/cmock/vendor/unity/test/targets/iar_armcortex_LM3S9B92_v5_4.yml +94 -94
  800. data/vendor/cmock/vendor/unity/test/targets/iar_cortexm3_v5.yml +84 -84
  801. data/vendor/cmock/vendor/unity/test/targets/iar_msp430.yml +95 -95
  802. data/vendor/cmock/vendor/unity/test/targets/iar_sh2a_v6.yml +86 -86
  803. data/vendor/cmock/vendor/unity/test/testdata/CException.h +11 -11
  804. data/vendor/cmock/vendor/unity/test/testdata/Defs.h +8 -8
  805. data/vendor/cmock/vendor/unity/test/testdata/cmock.h +14 -14
  806. data/vendor/cmock/vendor/unity/test/testdata/mockMock.h +13 -13
  807. data/vendor/cmock/vendor/unity/test/testdata/testRunnerGenerator.c +189 -186
  808. data/vendor/cmock/vendor/unity/test/testdata/testRunnerGeneratorSmall.c +70 -70
  809. data/vendor/cmock/vendor/unity/test/testdata/testRunnerGeneratorWithMocks.c +197 -195
  810. data/vendor/cmock/vendor/unity/test/tests/test_generate_test_runner.rb +1268 -1252
  811. data/vendor/cmock/vendor/unity/test/tests/testparameterized.c +171 -113
  812. data/vendor/cmock/vendor/unity/test/tests/testunity.c +8168 -5371
  813. data/vendor/deep_merge/MIT-LICENSE +20 -20
  814. data/vendor/deep_merge/README +94 -94
  815. data/vendor/deep_merge/Rakefile +28 -28
  816. data/vendor/deep_merge/lib/deep_merge.rb +211 -211
  817. data/vendor/deep_merge/test/test_deep_merge.rb +553 -553
  818. data/vendor/diy/History.txt +28 -28
  819. data/vendor/diy/README.rdoc +233 -233
  820. data/vendor/diy/Rakefile +33 -33
  821. data/vendor/diy/TODO.txt +9 -9
  822. data/vendor/diy/diy.gemspec +131 -131
  823. data/vendor/diy/lib/diy.rb +403 -403
  824. data/vendor/diy/lib/diy/factory.rb +36 -36
  825. data/vendor/diy/sample_code/car.rb +7 -7
  826. data/vendor/diy/sample_code/chassis.rb +5 -5
  827. data/vendor/diy/sample_code/diy_example.rb +26 -26
  828. data/vendor/diy/sample_code/engine.rb +5 -5
  829. data/vendor/diy/sample_code/objects.yml +10 -10
  830. data/vendor/diy/test/constructor.rb +119 -119
  831. data/vendor/diy/test/diy_test.rb +608 -608
  832. data/vendor/diy/test/factory_test.rb +79 -79
  833. data/vendor/diy/test/files/broken_construction.yml +7 -7
  834. data/vendor/diy/test/files/cat/cat.rb +3 -3
  835. data/vendor/diy/test/files/cat/extra_conflict.yml +5 -5
  836. data/vendor/diy/test/files/cat/heritage.rb +2 -2
  837. data/vendor/diy/test/files/cat/needs_input.yml +3 -3
  838. data/vendor/diy/test/files/cat/the_cat_lineage.rb +1 -1
  839. data/vendor/diy/test/files/dog/dog_model.rb +3 -3
  840. data/vendor/diy/test/files/dog/dog_presenter.rb +3 -3
  841. data/vendor/diy/test/files/dog/dog_view.rb +2 -2
  842. data/vendor/diy/test/files/dog/file_resolver.rb +2 -2
  843. data/vendor/diy/test/files/dog/other_thing.rb +2 -2
  844. data/vendor/diy/test/files/dog/simple.yml +11 -11
  845. data/vendor/diy/test/files/donkey/foo.rb +8 -8
  846. data/vendor/diy/test/files/donkey/foo/bar/qux.rb +7 -7
  847. data/vendor/diy/test/files/factory/beef.rb +5 -5
  848. data/vendor/diy/test/files/factory/dog.rb +6 -6
  849. data/vendor/diy/test/files/factory/factory.yml +19 -19
  850. data/vendor/diy/test/files/factory/farm/llama.rb +7 -7
  851. data/vendor/diy/test/files/factory/farm/pork.rb +7 -7
  852. data/vendor/diy/test/files/factory/kitten.rb +13 -13
  853. data/vendor/diy/test/files/fud/objects.yml +13 -13
  854. data/vendor/diy/test/files/fud/toy.rb +14 -14
  855. data/vendor/diy/test/files/functions/attached_things_builder.rb +1 -1
  856. data/vendor/diy/test/files/functions/invalid_method.yml +4 -4
  857. data/vendor/diy/test/files/functions/method_extractor.rb +2 -2
  858. data/vendor/diy/test/files/functions/nonsingleton_objects.yml +5 -5
  859. data/vendor/diy/test/files/functions/objects.yml +21 -21
  860. data/vendor/diy/test/files/functions/thing.rb +2 -2
  861. data/vendor/diy/test/files/functions/thing_builder.rb +24 -24
  862. data/vendor/diy/test/files/functions/things_builder.rb +2 -2
  863. data/vendor/diy/test/files/gnu/objects.yml +14 -14
  864. data/vendor/diy/test/files/gnu/thinger.rb +7 -7
  865. data/vendor/diy/test/files/goat/base.rb +8 -8
  866. data/vendor/diy/test/files/goat/can.rb +6 -6
  867. data/vendor/diy/test/files/goat/goat.rb +6 -6
  868. data/vendor/diy/test/files/goat/objects.yml +12 -12
  869. data/vendor/diy/test/files/goat/paper.rb +6 -6
  870. data/vendor/diy/test/files/goat/plane.rb +7 -7
  871. data/vendor/diy/test/files/goat/shirt.rb +6 -6
  872. data/vendor/diy/test/files/goat/wings.rb +8 -8
  873. data/vendor/diy/test/files/horse/holder_thing.rb +3 -3
  874. data/vendor/diy/test/files/horse/objects.yml +7 -7
  875. data/vendor/diy/test/files/namespace/animal/bird.rb +5 -5
  876. data/vendor/diy/test/files/namespace/animal/cat.rb +5 -5
  877. data/vendor/diy/test/files/namespace/animal/reptile/hardshell/turtle.rb +8 -8
  878. data/vendor/diy/test/files/namespace/animal/reptile/lizard.rb +7 -7
  879. data/vendor/diy/test/files/namespace/bad_module_specified.yml +8 -8
  880. data/vendor/diy/test/files/namespace/class_name_combine.yml +8 -8
  881. data/vendor/diy/test/files/namespace/no_module_specified.yml +8 -8
  882. data/vendor/diy/test/files/namespace/objects.yml +21 -21
  883. data/vendor/diy/test/files/namespace/road.rb +2 -2
  884. data/vendor/diy/test/files/namespace/sky.rb +2 -2
  885. data/vendor/diy/test/files/namespace/subcontext.yml +22 -22
  886. data/vendor/diy/test/files/non_singleton/air.rb +2 -2
  887. data/vendor/diy/test/files/non_singleton/fat_cat.rb +3 -3
  888. data/vendor/diy/test/files/non_singleton/objects.yml +19 -19
  889. data/vendor/diy/test/files/non_singleton/pig.rb +3 -3
  890. data/vendor/diy/test/files/non_singleton/thread_spinner.rb +3 -3
  891. data/vendor/diy/test/files/non_singleton/tick.rb +3 -3
  892. data/vendor/diy/test/files/non_singleton/yard.rb +2 -2
  893. data/vendor/diy/test/files/yak/core_model.rb +3 -3
  894. data/vendor/diy/test/files/yak/core_presenter.rb +3 -3
  895. data/vendor/diy/test/files/yak/core_view.rb +1 -1
  896. data/vendor/diy/test/files/yak/data_source.rb +1 -1
  897. data/vendor/diy/test/files/yak/fringe_model.rb +3 -3
  898. data/vendor/diy/test/files/yak/fringe_presenter.rb +3 -3
  899. data/vendor/diy/test/files/yak/fringe_view.rb +1 -1
  900. data/vendor/diy/test/files/yak/giant_squid.rb +3 -3
  901. data/vendor/diy/test/files/yak/krill.rb +2 -2
  902. data/vendor/diy/test/files/yak/my_objects.yml +21 -21
  903. data/vendor/diy/test/files/yak/sub_sub_context_test.yml +27 -27
  904. data/vendor/diy/test/test_helper.rb +55 -55
  905. data/vendor/hardmock/CHANGES +78 -78
  906. data/vendor/hardmock/LICENSE +7 -7
  907. data/vendor/hardmock/README +70 -70
  908. data/vendor/hardmock/Rakefile +8 -8
  909. data/vendor/hardmock/config/environment.rb +12 -12
  910. data/vendor/hardmock/lib/assert_error.rb +23 -23
  911. data/vendor/hardmock/lib/extend_test_unit.rb +14 -14
  912. data/vendor/hardmock/lib/hardmock.rb +86 -86
  913. data/vendor/hardmock/lib/hardmock/errors.rb +22 -22
  914. data/vendor/hardmock/lib/hardmock/expectation.rb +229 -229
  915. data/vendor/hardmock/lib/hardmock/expectation_builder.rb +9 -9
  916. data/vendor/hardmock/lib/hardmock/expector.rb +26 -26
  917. data/vendor/hardmock/lib/hardmock/method_cleanout.rb +33 -33
  918. data/vendor/hardmock/lib/hardmock/mock.rb +180 -180
  919. data/vendor/hardmock/lib/hardmock/mock_control.rb +53 -53
  920. data/vendor/hardmock/lib/hardmock/stubbing.rb +210 -210
  921. data/vendor/hardmock/lib/hardmock/trapper.rb +31 -31
  922. data/vendor/hardmock/lib/hardmock/utils.rb +9 -9
  923. data/vendor/hardmock/lib/test_unit_before_after.rb +169 -169
  924. data/vendor/hardmock/rake_tasks/rdoc.rake +19 -19
  925. data/vendor/hardmock/rake_tasks/rdoc_options.rb +4 -4
  926. data/vendor/hardmock/rake_tasks/test.rake +22 -22
  927. data/vendor/hardmock/test/functional/assert_error_test.rb +52 -52
  928. data/vendor/hardmock/test/functional/auto_verify_test.rb +178 -178
  929. data/vendor/hardmock/test/functional/direct_mock_usage_test.rb +396 -396
  930. data/vendor/hardmock/test/functional/hardmock_test.rb +434 -434
  931. data/vendor/hardmock/test/functional/stubbing_test.rb +479 -479
  932. data/vendor/hardmock/test/test_helper.rb +43 -43
  933. data/vendor/hardmock/test/unit/expectation_builder_test.rb +19 -19
  934. data/vendor/hardmock/test/unit/expectation_test.rb +372 -372
  935. data/vendor/hardmock/test/unit/expector_test.rb +57 -57
  936. data/vendor/hardmock/test/unit/method_cleanout_test.rb +36 -36
  937. data/vendor/hardmock/test/unit/mock_control_test.rb +175 -175
  938. data/vendor/hardmock/test/unit/mock_test.rb +279 -279
  939. data/vendor/hardmock/test/unit/test_unit_before_after_test.rb +452 -452
  940. data/vendor/hardmock/test/unit/trapper_test.rb +62 -62
  941. data/vendor/hardmock/test/unit/verify_error_test.rb +40 -40
  942. data/vendor/unity/CMakeLists.txt +31 -0
  943. data/vendor/unity/LICENSE.txt +21 -0
  944. data/vendor/unity/README.md +191 -231
  945. data/vendor/unity/auto/colour_prompt.rb +119 -118
  946. data/vendor/unity/auto/colour_reporter.rb +39 -39
  947. data/vendor/unity/auto/generate_config.yml +36 -36
  948. data/vendor/unity/auto/generate_module.rb +309 -308
  949. data/vendor/unity/auto/generate_test_runner.rb +495 -457
  950. data/vendor/unity/auto/parse_output.rb +322 -323
  951. data/vendor/unity/auto/run_test.erb +36 -0
  952. data/vendor/unity/auto/stylize_as_junit.rb +251 -252
  953. data/vendor/unity/auto/test_file_filter.rb +25 -25
  954. data/vendor/unity/auto/type_sanitizer.rb +6 -6
  955. data/vendor/unity/auto/unity_test_summary.py +139 -139
  956. data/vendor/unity/auto/unity_test_summary.rb +135 -136
  957. data/vendor/unity/auto/unity_to_junit.py +146 -146
  958. data/vendor/unity/docs/ThrowTheSwitchCodingStandard.md +206 -206
  959. data/vendor/unity/docs/UnityAssertionsReference.md +850 -779
  960. data/vendor/unity/docs/UnityConfigurationGuide.md +541 -433
  961. data/vendor/unity/docs/UnityGettingStartedGuide.md +251 -192
  962. data/vendor/unity/docs/UnityHelperScriptsGuide.md +266 -260
  963. data/vendor/unity/examples/example_1/makefile +72 -71
  964. data/vendor/unity/examples/example_1/readme.txt +4 -4
  965. data/vendor/unity/examples/example_1/src/ProductionCode.c +24 -24
  966. data/vendor/unity/examples/example_1/src/ProductionCode.h +3 -3
  967. data/vendor/unity/examples/example_1/src/ProductionCode2.c +11 -11
  968. data/vendor/unity/examples/example_1/src/ProductionCode2.h +2 -2
  969. data/vendor/unity/examples/example_1/test/TestProductionCode.c +62 -62
  970. data/vendor/unity/examples/example_1/test/TestProductionCode2.c +31 -31
  971. data/vendor/unity/examples/example_1/test/test_runners/TestProductionCode2_Runner.c +53 -53
  972. data/vendor/unity/examples/example_1/test/test_runners/TestProductionCode_Runner.c +57 -57
  973. data/vendor/unity/examples/example_2/makefile +71 -70
  974. data/vendor/unity/examples/example_2/readme.txt +4 -4
  975. data/vendor/unity/examples/example_2/src/ProductionCode.c +24 -24
  976. data/vendor/unity/examples/example_2/src/ProductionCode.h +3 -3
  977. data/vendor/unity/examples/example_2/src/ProductionCode2.c +11 -11
  978. data/vendor/unity/examples/example_2/src/ProductionCode2.h +2 -2
  979. data/vendor/unity/examples/example_2/test/TestProductionCode.c +64 -64
  980. data/vendor/unity/examples/example_2/test/TestProductionCode2.c +33 -33
  981. data/vendor/unity/examples/example_2/test/test_runners/TestProductionCode2_Runner.c +8 -8
  982. data/vendor/unity/examples/example_2/test/test_runners/TestProductionCode_Runner.c +10 -10
  983. data/vendor/unity/examples/example_2/test/test_runners/all_tests.c +12 -12
  984. data/vendor/unity/examples/example_3/helper/UnityHelper.c +10 -10
  985. data/vendor/unity/examples/example_3/helper/UnityHelper.h +12 -12
  986. data/vendor/unity/examples/example_3/rakefile.rb +38 -43
  987. data/vendor/unity/examples/example_3/rakefile_helper.rb +250 -249
  988. data/vendor/unity/examples/example_3/readme.txt +13 -13
  989. data/vendor/unity/examples/example_3/src/ProductionCode.c +24 -24
  990. data/vendor/unity/examples/example_3/src/ProductionCode.h +3 -3
  991. data/vendor/unity/examples/example_3/src/ProductionCode2.c +11 -11
  992. data/vendor/unity/examples/example_3/src/ProductionCode2.h +2 -2
  993. data/vendor/unity/examples/example_3/target_gcc_32.yml +47 -46
  994. data/vendor/unity/examples/example_3/test/TestProductionCode.c +62 -62
  995. data/vendor/unity/examples/example_3/test/TestProductionCode2.c +31 -31
  996. data/vendor/unity/examples/example_4/meson.build +17 -0
  997. data/vendor/unity/examples/example_4/readme.txt +15 -0
  998. data/vendor/unity/examples/example_4/src/ProductionCode.c +24 -0
  999. data/vendor/unity/examples/example_4/src/ProductionCode.h +3 -0
  1000. data/vendor/unity/examples/example_4/src/ProductionCode2.c +11 -0
  1001. data/vendor/unity/examples/example_4/src/ProductionCode2.h +2 -0
  1002. data/vendor/unity/examples/example_4/src/meson.build +21 -0
  1003. data/vendor/unity/examples/example_4/subprojects/unity.wrap +4 -0
  1004. data/vendor/unity/examples/example_4/test/TestProductionCode.c +63 -0
  1005. data/vendor/unity/examples/example_4/test/TestProductionCode2.c +35 -0
  1006. data/vendor/unity/examples/example_4/test/meson.build +12 -0
  1007. data/vendor/unity/examples/example_4/test/test_runners/TestProductionCode2_Runner.c +53 -0
  1008. data/vendor/unity/examples/example_4/test/test_runners/TestProductionCode_Runner.c +57 -0
  1009. data/vendor/unity/examples/example_4/test/test_runners/meson.build +16 -0
  1010. data/vendor/unity/examples/unity_config.h +263 -247
  1011. data/vendor/unity/extras/eclipse/error_parsers.txt +26 -26
  1012. data/vendor/unity/extras/fixture/rakefile.rb +44 -48
  1013. data/vendor/unity/extras/fixture/rakefile_helper.rb +183 -178
  1014. data/vendor/unity/extras/fixture/readme.md +17 -0
  1015. data/vendor/unity/extras/fixture/src/unity_fixture.c +275 -436
  1016. data/vendor/unity/extras/fixture/src/unity_fixture.h +83 -83
  1017. data/vendor/unity/extras/fixture/src/unity_fixture_internals.h +50 -51
  1018. data/vendor/unity/extras/fixture/test/Makefile +72 -75
  1019. data/vendor/unity/extras/fixture/test/main/AllTests.c +20 -22
  1020. data/vendor/unity/extras/fixture/test/template_fixture_tests.c +39 -39
  1021. data/vendor/unity/extras/fixture/test/unity_fixture_Test.c +245 -543
  1022. data/vendor/unity/extras/fixture/test/unity_fixture_TestRunner.c +32 -57
  1023. data/vendor/unity/extras/memory/rakefile.rb +45 -0
  1024. data/vendor/unity/extras/memory/rakefile_helper.rb +187 -0
  1025. data/vendor/unity/extras/memory/readme.md +49 -0
  1026. data/vendor/unity/extras/memory/src/unity_memory.c +202 -0
  1027. data/vendor/unity/extras/memory/src/unity_memory.h +60 -0
  1028. data/vendor/unity/extras/memory/test/Makefile +78 -0
  1029. data/vendor/unity/extras/memory/test/unity_memory_Test.c +325 -0
  1030. data/vendor/unity/extras/memory/test/unity_memory_TestRunner.c +49 -0
  1031. data/vendor/unity/extras/memory/test/unity_output_Spy.c +56 -0
  1032. data/vendor/unity/extras/memory/test/unity_output_Spy.h +16 -0
  1033. data/vendor/unity/meson.build +69 -0
  1034. data/vendor/unity/src/CMakeLists.txt +22 -0
  1035. data/vendor/unity/src/meson.build +16 -0
  1036. data/vendor/unity/src/unity.c +2085 -1572
  1037. data/vendor/unity/src/unity.h +617 -503
  1038. data/vendor/unity/src/unity_internals.h +1002 -924
  1039. data/vendor/unity/test/Makefile +67 -68
  1040. data/vendor/unity/test/expectdata/testsample_cmd.c +61 -61
  1041. data/vendor/unity/test/expectdata/testsample_def.c +57 -57
  1042. data/vendor/unity/test/expectdata/testsample_head1.c +55 -55
  1043. data/vendor/unity/test/expectdata/testsample_head1.h +15 -15
  1044. data/vendor/unity/test/expectdata/testsample_mock_cmd.c +80 -80
  1045. data/vendor/unity/test/expectdata/testsample_mock_def.c +76 -76
  1046. data/vendor/unity/test/expectdata/testsample_mock_head1.c +75 -75
  1047. data/vendor/unity/test/expectdata/testsample_mock_head1.h +13 -13
  1048. data/vendor/unity/test/expectdata/testsample_mock_new1.c +89 -89
  1049. data/vendor/unity/test/expectdata/testsample_mock_new2.c +89 -89
  1050. data/vendor/unity/test/expectdata/testsample_mock_param.c +77 -77
  1051. data/vendor/unity/test/expectdata/testsample_mock_run1.c +89 -89
  1052. data/vendor/unity/test/expectdata/testsample_mock_run2.c +89 -89
  1053. data/vendor/unity/test/expectdata/testsample_mock_yaml.c +90 -90
  1054. data/vendor/unity/test/expectdata/testsample_new1.c +67 -67
  1055. data/vendor/unity/test/expectdata/testsample_new2.c +70 -70
  1056. data/vendor/unity/test/expectdata/testsample_param.c +58 -58
  1057. data/vendor/unity/test/expectdata/testsample_run1.c +67 -67
  1058. data/vendor/unity/test/expectdata/testsample_run2.c +70 -70
  1059. data/vendor/unity/test/expectdata/testsample_yaml.c +71 -71
  1060. data/vendor/unity/test/rakefile +124 -125
  1061. data/vendor/unity/test/rakefile_helper.rb +269 -260
  1062. data/vendor/unity/test/spec/generate_module_existing_file_spec.rb +158 -158
  1063. data/vendor/unity/test/targets/ansi.yml +49 -0
  1064. data/vendor/unity/test/targets/clang_file.yml +78 -78
  1065. data/vendor/unity/test/targets/clang_strict.yml +78 -78
  1066. data/vendor/unity/test/targets/gcc_32.yml +49 -49
  1067. data/vendor/unity/test/targets/gcc_64.yml +50 -50
  1068. data/vendor/unity/test/targets/gcc_auto_limits.yml +47 -47
  1069. data/vendor/unity/test/targets/gcc_auto_stdint.yml +59 -59
  1070. data/vendor/unity/test/targets/gcc_manual_math.yml +47 -47
  1071. data/vendor/unity/test/targets/hitech_picc18.yml +101 -101
  1072. data/vendor/unity/test/targets/iar_arm_v4.yml +90 -90
  1073. data/vendor/unity/test/targets/iar_arm_v5.yml +80 -80
  1074. data/vendor/unity/test/targets/iar_arm_v5_3.yml +80 -80
  1075. data/vendor/unity/test/targets/iar_armcortex_LM3S9B92_v5_4.yml +94 -94
  1076. data/vendor/unity/test/targets/iar_cortexm3_v5.yml +84 -84
  1077. data/vendor/unity/test/targets/iar_msp430.yml +95 -95
  1078. data/vendor/unity/test/targets/iar_sh2a_v6.yml +86 -86
  1079. data/vendor/unity/test/testdata/CException.h +11 -11
  1080. data/vendor/unity/test/testdata/Defs.h +8 -8
  1081. data/vendor/unity/test/testdata/cmock.h +14 -14
  1082. data/vendor/unity/test/testdata/mockMock.h +13 -13
  1083. data/vendor/unity/test/testdata/testRunnerGenerator.c +189 -186
  1084. data/vendor/unity/test/testdata/testRunnerGeneratorSmall.c +70 -70
  1085. data/vendor/unity/test/testdata/testRunnerGeneratorWithMocks.c +197 -195
  1086. data/vendor/unity/test/tests/test_generate_test_runner.rb +1268 -1252
  1087. data/vendor/unity/test/tests/testparameterized.c +171 -113
  1088. data/vendor/unity/test/tests/testunity.c +8168 -5371
  1089. metadata +201 -27
  1090. data/lib/ceedling/version.rb.erb +0 -15
  1091. data/vendor/c_exception/release/build.info +0 -2
  1092. data/vendor/c_exception/release/version.info +0 -2
  1093. data/vendor/cmock/release/build.info +0 -2
  1094. data/vendor/cmock/release/version.info +0 -2
  1095. data/vendor/cmock/vendor/c_exception/release/build.info +0 -2
  1096. data/vendor/cmock/vendor/c_exception/release/version.info +0 -2
  1097. data/vendor/cmock/vendor/unity/release/build.info +0 -2
  1098. data/vendor/cmock/vendor/unity/release/version.info +0 -2
  1099. data/vendor/unity/extras/fixture/readme.txt +0 -9
  1100. data/vendor/unity/release/build.info +0 -2
  1101. data/vendor/unity/release/version.info +0 -2
@@ -1,457 +1,495 @@
1
- # ==========================================
2
- # Unity Project - A Test Framework for C
3
- # Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
4
- # [Released under MIT License. Please refer to license.txt for details]
5
- # ==========================================
6
-
7
- File.expand_path(File.join(File.dirname(__FILE__), 'colour_prompt'))
8
-
9
- class UnityTestRunnerGenerator
10
- def initialize(options = nil)
11
- @options = UnityTestRunnerGenerator.default_options
12
- case options
13
- when NilClass then @options
14
- when String then @options.merge!(UnityTestRunnerGenerator.grab_config(options))
15
- when Hash then @options.merge!(options)
16
- else raise 'If you specify arguments, it should be a filename or a hash of options'
17
- end
18
- require "#{File.expand_path(File.dirname(__FILE__))}/type_sanitizer"
19
- end
20
-
21
- def self.default_options
22
- {
23
- includes: [],
24
- defines: [],
25
- plugins: [],
26
- framework: :unity,
27
- test_prefix: 'test|spec|should',
28
- mock_prefix: 'Mock',
29
- mock_suffix: '',
30
- setup_name: 'setUp',
31
- teardown_name: 'tearDown',
32
- main_name: 'main', # set to :auto to automatically generate each time
33
- main_export_decl: '',
34
- cmdline_args: false,
35
- use_param_tests: false
36
- }
37
- end
38
-
39
- def self.grab_config(config_file)
40
- options = default_options
41
- unless config_file.nil? || config_file.empty?
42
- require 'yaml'
43
- yaml_guts = YAML.load_file(config_file)
44
- options.merge!(yaml_guts[:unity] || yaml_guts[:cmock])
45
- raise "No :unity or :cmock section found in #{config_file}" unless options
46
- end
47
- options
48
- end
49
-
50
- def run(input_file, output_file, options = nil)
51
- @options.merge!(options) unless options.nil?
52
-
53
- # pull required data from source file
54
- source = File.read(input_file)
55
- source = source.force_encoding('ISO-8859-1').encode('utf-8', replace: nil)
56
- tests = find_tests(source)
57
- headers = find_includes(source)
58
- testfile_includes = (headers[:local] + headers[:system])
59
- used_mocks = find_mocks(testfile_includes)
60
- testfile_includes = (testfile_includes - used_mocks)
61
- testfile_includes.delete_if { |inc| inc =~ /(unity|cmock)/ }
62
-
63
- # build runner file
64
- generate(input_file, output_file, tests, used_mocks, testfile_includes)
65
-
66
- # determine which files were used to return them
67
- all_files_used = [input_file, output_file]
68
- all_files_used += testfile_includes.map { |filename| filename + '.c' } unless testfile_includes.empty?
69
- all_files_used += @options[:includes] unless @options[:includes].empty?
70
- all_files_used += headers[:linkonly] unless headers[:linkonly].empty?
71
- all_files_used.uniq
72
- end
73
-
74
- def generate(input_file, output_file, tests, used_mocks, testfile_includes)
75
- File.open(output_file, 'w') do |output|
76
- create_header(output, used_mocks, testfile_includes)
77
- create_externs(output, tests, used_mocks)
78
- create_mock_management(output, used_mocks)
79
- create_suite_setup(output)
80
- create_suite_teardown(output)
81
- create_reset(output, used_mocks)
82
- create_main(output, input_file, tests, used_mocks)
83
- end
84
-
85
- return unless @options[:header_file] && !@options[:header_file].empty?
86
-
87
- File.open(@options[:header_file], 'w') do |output|
88
- create_h_file(output, @options[:header_file], tests, testfile_includes, used_mocks)
89
- end
90
- end
91
-
92
- def find_tests(source)
93
- tests_and_line_numbers = []
94
-
95
- source_scrubbed = source.clone
96
- source_scrubbed = source_scrubbed.gsub(/"[^"\n]*"/, '') # remove things in strings
97
- source_scrubbed = source_scrubbed.gsub(/\/\/.*$/, '') # remove line comments
98
- source_scrubbed = source_scrubbed.gsub(/\/\*.*?\*\//m, '') # remove block comments
99
- lines = source_scrubbed.split(/(^\s*\#.*$) # Treat preprocessor directives as a logical line
100
- | (;|\{|\}) /x) # Match ;, {, and } as end of lines
101
-
102
- lines.each_with_index do |line, _index|
103
- # find tests
104
- next unless line =~ /^((?:\s*TEST_CASE\s*\(.*?\)\s*)*)\s*void\s+((?:#{@options[:test_prefix]}).*)\s*\(\s*(.*)\s*\)/
105
- arguments = Regexp.last_match(1)
106
- name = Regexp.last_match(2)
107
- call = Regexp.last_match(3)
108
- params = Regexp.last_match(4)
109
- args = nil
110
- if @options[:use_param_tests] && !arguments.empty?
111
- args = []
112
- arguments.scan(/\s*TEST_CASE\s*\((.*)\)\s*$/) { |a| args << a[0] }
113
- end
114
- tests_and_line_numbers << { test: name, args: args, call: call, params: params, line_number: 0 }
115
- end
116
- tests_and_line_numbers.uniq! { |v| v[:test] }
117
-
118
- # determine line numbers and create tests to run
119
- source_lines = source.split("\n")
120
- source_index = 0
121
- tests_and_line_numbers.size.times do |i|
122
- source_lines[source_index..-1].each_with_index do |line, index|
123
- next unless line =~ /\s+#{tests_and_line_numbers[i][:test]}(?:\s|\()/
124
- source_index += index
125
- tests_and_line_numbers[i][:line_number] = source_index + 1
126
- break
127
- end
128
- end
129
-
130
- tests_and_line_numbers
131
- end
132
-
133
- def find_includes(source)
134
- # remove comments (block and line, in three steps to ensure correct precedence)
135
- source.gsub!(/\/\/(?:.+\/\*|\*(?:$|[^\/])).*$/, '') # remove line comments that comment out the start of blocks
136
- source.gsub!(/\/\*.*?\*\//m, '') # remove block comments
137
- source.gsub!(/\/\/.*$/, '') # remove line comments (all that remain)
138
-
139
- # parse out includes
140
- includes = {
141
- local: source.scan(/^\s*#include\s+\"\s*(.+)\.[hH]\s*\"/).flatten,
142
- system: source.scan(/^\s*#include\s+<\s*(.+)\s*>/).flatten.map { |inc| "<#{inc}>" },
143
- linkonly: source.scan(/^TEST_FILE\(\s*\"\s*(.+)\.[cC]\w*\s*\"/).flatten
144
- }
145
- includes
146
- end
147
-
148
- def find_mocks(includes)
149
- mock_headers = []
150
- includes.each do |include_path|
151
- include_file = File.basename(include_path)
152
- mock_headers << include_path if include_file =~ /^#{@options[:mock_prefix]}.*#{@options[:mock_suffix]}$/i
153
- end
154
- mock_headers
155
- end
156
-
157
- def create_header(output, mocks, testfile_includes = [])
158
- output.puts('/* AUTOGENERATED FILE. DO NOT EDIT. */')
159
- create_runtest(output, mocks)
160
- output.puts("\n/*=======Automagically Detected Files To Include=====*/")
161
- output.puts('#ifdef __WIN32__')
162
- output.puts('#define UNITY_INCLUDE_SETUP_STUBS')
163
- output.puts('#endif')
164
- output.puts("#include \"#{@options[:framework]}.h\"")
165
- output.puts('#include "cmock.h"') unless mocks.empty?
166
- output.puts('#ifndef UNITY_EXCLUDE_SETJMP_H')
167
- output.puts('#include <setjmp.h>')
168
- output.puts("#endif")
169
- output.puts('#include <stdio.h>')
170
- if @options[:defines] && !@options[:defines].empty?
171
- @options[:defines].each { |d| output.puts("#define #{d}") }
172
- end
173
- if @options[:header_file] && !@options[:header_file].empty?
174
- output.puts("#include \"#{File.basename(@options[:header_file])}\"")
175
- else
176
- @options[:includes].flatten.uniq.compact.each do |inc|
177
- output.puts("#include #{inc.include?('<') ? inc : "\"#{inc.gsub('.h', '')}.h\""}")
178
- end
179
- testfile_includes.each do |inc|
180
- output.puts("#include #{inc.include?('<') ? inc : "\"#{inc.gsub('.h', '')}.h\""}")
181
- end
182
- end
183
- mocks.each do |mock|
184
- output.puts("#include \"#{mock.gsub('.h', '')}.h\"")
185
- end
186
- output.puts('#include "CException.h"') if @options[:plugins].include?(:cexception)
187
-
188
- return unless @options[:enforce_strict_ordering]
189
-
190
- output.puts('')
191
- output.puts('int GlobalExpectCount;')
192
- output.puts('int GlobalVerifyOrder;')
193
- output.puts('char* GlobalOrderError;')
194
- end
195
-
196
- def create_externs(output, tests, _mocks)
197
- output.puts("\n/*=======External Functions This Runner Calls=====*/")
198
- output.puts("extern void #{@options[:setup_name]}(void);")
199
- output.puts("extern void #{@options[:teardown_name]}(void);")
200
- tests.each do |test|
201
- output.puts("extern void #{test[:test]}(#{test[:call] || 'void'});")
202
- end
203
- output.puts('')
204
- end
205
-
206
- def create_mock_management(output, mock_headers)
207
- return if mock_headers.empty?
208
-
209
- output.puts("\n/*=======Mock Management=====*/")
210
- output.puts('static void CMock_Init(void)')
211
- output.puts('{')
212
-
213
- if @options[:enforce_strict_ordering]
214
- output.puts(' GlobalExpectCount = 0;')
215
- output.puts(' GlobalVerifyOrder = 0;')
216
- output.puts(' GlobalOrderError = NULL;')
217
- end
218
-
219
- mocks = mock_headers.map { |mock| File.basename(mock) }
220
- mocks.each do |mock|
221
- mock_clean = TypeSanitizer.sanitize_c_identifier(mock)
222
- output.puts(" #{mock_clean}_Init();")
223
- end
224
- output.puts("}\n")
225
-
226
- output.puts('static void CMock_Verify(void)')
227
- output.puts('{')
228
- mocks.each do |mock|
229
- mock_clean = TypeSanitizer.sanitize_c_identifier(mock)
230
- output.puts(" #{mock_clean}_Verify();")
231
- end
232
- output.puts("}\n")
233
-
234
- output.puts('static void CMock_Destroy(void)')
235
- output.puts('{')
236
- mocks.each do |mock|
237
- mock_clean = TypeSanitizer.sanitize_c_identifier(mock)
238
- output.puts(" #{mock_clean}_Destroy();")
239
- end
240
- output.puts("}\n")
241
- end
242
-
243
- def create_suite_setup(output)
244
- output.puts("\n/*=======Suite Setup=====*/")
245
- output.puts('static void suite_setup(void)')
246
- output.puts('{')
247
- if @options[:suite_setup].nil?
248
- # New style, call suiteSetUp() if we can use weak symbols
249
- output.puts('#if defined(UNITY_WEAK_ATTRIBUTE) || defined(UNITY_WEAK_PRAGMA)')
250
- output.puts(' suiteSetUp();')
251
- output.puts('#endif')
252
- else
253
- # Old style, C code embedded in the :suite_setup option
254
- output.puts(@options[:suite_setup])
255
- end
256
- output.puts('}')
257
- end
258
-
259
- def create_suite_teardown(output)
260
- output.puts("\n/*=======Suite Teardown=====*/")
261
- output.puts('static int suite_teardown(int num_failures)')
262
- output.puts('{')
263
- if @options[:suite_teardown].nil?
264
- # New style, call suiteTearDown() if we can use weak symbols
265
- output.puts('#if defined(UNITY_WEAK_ATTRIBUTE) || defined(UNITY_WEAK_PRAGMA)')
266
- output.puts(' return suiteTearDown(num_failures);')
267
- output.puts('#else')
268
- output.puts(' return num_failures;')
269
- output.puts('#endif')
270
- else
271
- # Old style, C code embedded in the :suite_teardown option
272
- output.puts(@options[:suite_teardown])
273
- end
274
- output.puts('}')
275
- end
276
-
277
- def create_runtest(output, used_mocks)
278
- cexception = @options[:plugins].include? :cexception
279
- va_args1 = @options[:use_param_tests] ? ', ...' : ''
280
- va_args2 = @options[:use_param_tests] ? '__VA_ARGS__' : ''
281
- output.puts("\n/*=======Test Runner Used To Run Each Test Below=====*/")
282
- output.puts('#define RUN_TEST_NO_ARGS') if @options[:use_param_tests]
283
- output.puts("#define RUN_TEST(TestFunc, TestLineNum#{va_args1}) \\")
284
- output.puts('{ \\')
285
- output.puts(" Unity.CurrentTestName = #TestFunc#{va_args2.empty? ? '' : " \"(\" ##{va_args2} \")\""}; \\")
286
- output.puts(' Unity.CurrentTestLineNumber = TestLineNum; \\')
287
- output.puts(' if (UnityTestMatches()) { \\') if @options[:cmdline_args]
288
- output.puts(' Unity.NumberOfTests++; \\')
289
- output.puts(' CMock_Init(); \\') unless used_mocks.empty?
290
- output.puts(' UNITY_CLR_DETAILS(); \\') unless used_mocks.empty?
291
- output.puts(' if (TEST_PROTECT()) \\')
292
- output.puts(' { \\')
293
- output.puts(' CEXCEPTION_T e; \\') if cexception
294
- output.puts(' Try { \\') if cexception
295
- output.puts(" #{@options[:setup_name]}(); \\")
296
- output.puts(" TestFunc(#{va_args2}); \\")
297
- output.puts(' } Catch(e) { TEST_ASSERT_EQUAL_HEX32_MESSAGE(CEXCEPTION_NONE, e, "Unhandled Exception!"); } \\') if cexception
298
- output.puts(' } \\')
299
- output.puts(' if (TEST_PROTECT()) \\')
300
- output.puts(' { \\')
301
- output.puts(" #{@options[:teardown_name]}(); \\")
302
- output.puts(' CMock_Verify(); \\') unless used_mocks.empty?
303
- output.puts(' } \\')
304
- output.puts(' CMock_Destroy(); \\') unless used_mocks.empty?
305
- output.puts(' UnityConcludeTest(); \\')
306
- output.puts(' } \\') if @options[:cmdline_args]
307
- output.puts("}\n")
308
- end
309
-
310
- def create_reset(output, used_mocks)
311
- output.puts("\n/*=======Test Reset Option=====*/")
312
- output.puts('void resetTest(void);')
313
- output.puts('void resetTest(void)')
314
- output.puts('{')
315
- output.puts(' CMock_Verify();') unless used_mocks.empty?
316
- output.puts(' CMock_Destroy();') unless used_mocks.empty?
317
- output.puts(" #{@options[:teardown_name]}();")
318
- output.puts(' CMock_Init();') unless used_mocks.empty?
319
- output.puts(" #{@options[:setup_name]}();")
320
- output.puts('}')
321
- end
322
-
323
- def create_main(output, filename, tests, used_mocks)
324
- output.puts("\n\n/*=======MAIN=====*/")
325
- main_name = @options[:main_name].to_sym == :auto ? "main_#{filename.gsub('.c', '')}" : (@options[:main_name]).to_s
326
- if @options[:cmdline_args]
327
- if main_name != 'main'
328
- output.puts("#{@options[:main_export_decl]} int #{main_name}(int argc, char** argv);")
329
- end
330
- output.puts("#{@options[:main_export_decl]} int #{main_name}(int argc, char** argv)")
331
- output.puts('{')
332
- output.puts(' int parse_status = UnityParseOptions(argc, argv);')
333
- output.puts(' if (parse_status != 0)')
334
- output.puts(' {')
335
- output.puts(' if (parse_status < 0)')
336
- output.puts(' {')
337
- output.puts(" UnityPrint(\"#{filename.gsub('.c', '')}.\");")
338
- output.puts(' UNITY_PRINT_EOL();')
339
- if @options[:use_param_tests]
340
- tests.each do |test|
341
- if test[:args].nil? || test[:args].empty?
342
- output.puts(" UnityPrint(\" #{test[:test]}(RUN_TEST_NO_ARGS)\");")
343
- output.puts(' UNITY_PRINT_EOL();')
344
- else
345
- test[:args].each do |args|
346
- output.puts(" UnityPrint(\" #{test[:test]}(#{args})\");")
347
- output.puts(' UNITY_PRINT_EOL();')
348
- end
349
- end
350
- end
351
- else
352
- tests.each { |test| output.puts(" UnityPrint(\" #{test[:test]}\");\n UNITY_PRINT_EOL();") }
353
- end
354
- output.puts(' return 0;')
355
- output.puts(' }')
356
- output.puts(' return parse_status;')
357
- output.puts(' }')
358
- else
359
- if main_name != 'main'
360
- output.puts("#{@options[:main_export_decl]} int #{main_name}(void);")
361
- end
362
- output.puts("int #{main_name}(void)")
363
- output.puts('{')
364
- end
365
- output.puts(' suite_setup();')
366
- output.puts(" UnityBegin(\"#{filename.gsub(/\\/, '\\\\\\')}\");")
367
- if @options[:use_param_tests]
368
- tests.each do |test|
369
- if test[:args].nil? || test[:args].empty?
370
- output.puts(" RUN_TEST(#{test[:test]}, #{test[:line_number]}, RUN_TEST_NO_ARGS);")
371
- else
372
- test[:args].each { |args| output.puts(" RUN_TEST(#{test[:test]}, #{test[:line_number]}, #{args});") }
373
- end
374
- end
375
- else
376
- tests.each { |test| output.puts(" RUN_TEST(#{test[:test]}, #{test[:line_number]});") }
377
- end
378
- output.puts
379
- output.puts(' CMock_Guts_MemFreeFinal();') unless used_mocks.empty?
380
- output.puts(" return suite_teardown(UnityEnd());")
381
- output.puts('}')
382
- end
383
-
384
- def create_h_file(output, filename, tests, testfile_includes, used_mocks)
385
- filename = File.basename(filename).gsub(/[-\/\\\.\,\s]/, '_').upcase
386
- output.puts('/* AUTOGENERATED FILE. DO NOT EDIT. */')
387
- output.puts("#ifndef _#{filename}")
388
- output.puts("#define _#{filename}\n\n")
389
- output.puts("#include \"#{@options[:framework]}.h\"")
390
- output.puts('#include "cmock.h"') unless used_mocks.empty?
391
- @options[:includes].flatten.uniq.compact.each do |inc|
392
- output.puts("#include #{inc.include?('<') ? inc : "\"#{inc.gsub('.h', '')}.h\""}")
393
- end
394
- testfile_includes.each do |inc|
395
- output.puts("#include #{inc.include?('<') ? inc : "\"#{inc.gsub('.h', '')}.h\""}")
396
- end
397
- output.puts "\n"
398
- tests.each do |test|
399
- if test[:params].nil? || test[:params].empty?
400
- output.puts("void #{test[:test]}(void);")
401
- else
402
- output.puts("void #{test[:test]}(#{test[:params]});")
403
- end
404
- end
405
- output.puts("#endif\n\n")
406
- end
407
- end
408
-
409
- if $0 == __FILE__
410
- options = { includes: [] }
411
-
412
- # parse out all the options first (these will all be removed as we go)
413
- ARGV.reject! do |arg|
414
- case arg
415
- when '-cexception'
416
- options[:plugins] = [:cexception]
417
- true
418
- when /\.*\.ya?ml/
419
- options = UnityTestRunnerGenerator.grab_config(arg)
420
- true
421
- when /--(\w+)=\"?(.*)\"?/
422
- options[Regexp.last_match(1).to_sym] = Regexp.last_match(2)
423
- true
424
- when /\.*\.h/
425
- options[:includes] << arg
426
- true
427
- else false
428
- end
429
- end
430
-
431
- # make sure there is at least one parameter left (the input file)
432
- unless ARGV[0]
433
- puts ["\nusage: ruby #{__FILE__} (files) (options) input_test_file (output)",
434
- "\n input_test_file - this is the C file you want to create a runner for",
435
- ' output - this is the name of the runner file to generate',
436
- ' defaults to (input_test_file)_Runner',
437
- ' files:',
438
- ' *.yml / *.yaml - loads configuration from here in :unity or :cmock',
439
- ' *.h - header files are added as #includes in runner',
440
- ' options:',
441
- ' -cexception - include cexception support',
442
- ' --setup_name="" - redefine setUp func name to something else',
443
- ' --teardown_name="" - redefine tearDown func name to something else',
444
- ' --main_name="" - redefine main func name to something else',
445
- ' --test_prefix="" - redefine test prefix from default test|spec|should',
446
- ' --suite_setup="" - code to execute for setup of entire suite',
447
- ' --suite_teardown="" - code to execute for teardown of entire suite',
448
- ' --use_param_tests=1 - enable parameterized tests (disabled by default)',
449
- ' --header_file="" - path/name of test header file to generate too'].join("\n")
450
- exit 1
451
- end
452
-
453
- # create the default test runner name if not specified
454
- ARGV[1] = ARGV[0].gsub('.c', '_Runner.c') unless ARGV[1]
455
-
456
- UnityTestRunnerGenerator.new(options).run(ARGV[0], ARGV[1])
457
- end
1
+ # ==========================================
2
+ # Unity Project - A Test Framework for C
3
+ # Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
4
+ # [Released under MIT License. Please refer to license.txt for details]
5
+ # ==========================================
6
+
7
+ class UnityTestRunnerGenerator
8
+ def initialize(options = nil)
9
+ @options = UnityTestRunnerGenerator.default_options
10
+ case options
11
+ when NilClass
12
+ @options
13
+ when String
14
+ @options.merge!(UnityTestRunnerGenerator.grab_config(options))
15
+ when Hash
16
+ # Check if some of these have been specified
17
+ @options[:has_setup] = !options[:setup_name].nil?
18
+ @options[:has_teardown] = !options[:teardown_name].nil?
19
+ @options[:has_suite_setup] = !options[:suite_setup].nil?
20
+ @options[:has_suite_teardown] = !options[:suite_teardown].nil?
21
+ @options.merge!(options)
22
+ else
23
+ raise 'If you specify arguments, it should be a filename or a hash of options'
24
+ end
25
+ require_relative 'type_sanitizer'
26
+ end
27
+
28
+ def self.default_options
29
+ {
30
+ includes: [],
31
+ defines: [],
32
+ plugins: [],
33
+ framework: :unity,
34
+ test_prefix: 'test|spec|should',
35
+ mock_prefix: 'Mock',
36
+ mock_suffix: '',
37
+ setup_name: 'setUp',
38
+ teardown_name: 'tearDown',
39
+ test_reset_name: 'resetTest',
40
+ test_verify_name: 'verifyTest',
41
+ main_name: 'main', # set to :auto to automatically generate each time
42
+ main_export_decl: '',
43
+ cmdline_args: false,
44
+ omit_begin_end: false,
45
+ use_param_tests: false
46
+ }
47
+ end
48
+
49
+ def self.grab_config(config_file)
50
+ options = default_options
51
+ unless config_file.nil? || config_file.empty?
52
+ require 'yaml'
53
+ yaml_guts = YAML.load_file(config_file)
54
+ options.merge!(yaml_guts[:unity] || yaml_guts[:cmock])
55
+ raise "No :unity or :cmock section found in #{config_file}" unless options
56
+ end
57
+ options
58
+ end
59
+
60
+ def run(input_file, output_file, options = nil)
61
+ @options.merge!(options) unless options.nil?
62
+
63
+ # pull required data from source file
64
+ source = File.read(input_file)
65
+ source = source.force_encoding('ISO-8859-1').encode('utf-8', replace: nil)
66
+ tests = find_tests(source)
67
+ headers = find_includes(source)
68
+ testfile_includes = (headers[:local] + headers[:system])
69
+ used_mocks = find_mocks(testfile_includes)
70
+ testfile_includes = (testfile_includes - used_mocks)
71
+ testfile_includes.delete_if { |inc| inc =~ /(unity|cmock)/ }
72
+ find_setup_and_teardown(source)
73
+
74
+ # build runner file
75
+ generate(input_file, output_file, tests, used_mocks, testfile_includes)
76
+
77
+ # determine which files were used to return them
78
+ all_files_used = [input_file, output_file]
79
+ all_files_used += testfile_includes.map { |filename| filename + '.c' } unless testfile_includes.empty?
80
+ all_files_used += @options[:includes] unless @options[:includes].empty?
81
+ all_files_used += headers[:linkonly] unless headers[:linkonly].empty?
82
+ all_files_used.uniq
83
+ end
84
+
85
+ def generate(input_file, output_file, tests, used_mocks, testfile_includes)
86
+ File.open(output_file, 'w') do |output|
87
+ create_header(output, used_mocks, testfile_includes)
88
+ create_externs(output, tests, used_mocks)
89
+ create_mock_management(output, used_mocks)
90
+ create_setup(output)
91
+ create_teardown(output)
92
+ create_suite_setup(output)
93
+ create_suite_teardown(output)
94
+ create_reset(output)
95
+ create_run_test(output)
96
+ create_args_wrappers(output, tests)
97
+ create_main(output, input_file, tests, used_mocks)
98
+ end
99
+
100
+ return unless @options[:header_file] && !@options[:header_file].empty?
101
+
102
+ File.open(@options[:header_file], 'w') do |output|
103
+ create_h_file(output, @options[:header_file], tests, testfile_includes, used_mocks)
104
+ end
105
+ end
106
+
107
+ def find_tests(source)
108
+ tests_and_line_numbers = []
109
+
110
+ # contains characters which will be substituted from within strings, doing
111
+ # this prevents these characters from interferring with scrubbers
112
+ # @ is not a valid C character, so there should be no clashes with files genuinely containing these markers
113
+ substring_subs = { '{' => '@co@', '}' => '@cc@', ';' => '@ss@', '/' => '@fs@' }
114
+ substring_re = Regexp.union(substring_subs.keys)
115
+ substring_unsubs = substring_subs.invert # the inverse map will be used to fix the strings afterwords
116
+ substring_unsubs['@quote@'] = '\\"'
117
+ substring_unsubs['@apos@'] = '\\\''
118
+ substring_unre = Regexp.union(substring_unsubs.keys)
119
+ source_scrubbed = source.clone
120
+ source_scrubbed = source_scrubbed.gsub(/\\"/, '@quote@') # hide escaped quotes to allow capture of the full string/char
121
+ source_scrubbed = source_scrubbed.gsub(/\\'/, '@apos@') # hide escaped apostrophes to allow capture of the full string/char
122
+ source_scrubbed = source_scrubbed.gsub(/("[^"\n]*")|('[^'\n]*')/) { |s| s.gsub(substring_re, substring_subs) } # temporarily hide problematic characters within strings
123
+ source_scrubbed = source_scrubbed.gsub(/\/\/(?:.+\/\*|\*(?:$|[^\/])).*$/, '') # remove line comments that comment out the start of blocks
124
+ source_scrubbed = source_scrubbed.gsub(/\/\*.*?\*\//m, '') # remove block comments
125
+ source_scrubbed = source_scrubbed.gsub(/\/\/.*$/, '') # remove line comments (all that remain)
126
+ lines = source_scrubbed.split(/(^\s*\#.*$) | (;|\{|\}) /x) # Treat preprocessor directives as a logical line. Match ;, {, and } as end of lines
127
+ .map { |line| line.gsub(substring_unre, substring_unsubs) } # unhide the problematic characters previously removed
128
+
129
+ lines.each_with_index do |line, _index|
130
+ # find tests
131
+ next unless line =~ /^((?:\s*TEST_CASE\s*\(.*?\)\s*)*)\s*void\s+((?:#{@options[:test_prefix]}).*)\s*\(\s*(.*)\s*\)/m
132
+
133
+ arguments = Regexp.last_match(1)
134
+ name = Regexp.last_match(2)
135
+ call = Regexp.last_match(3)
136
+ params = Regexp.last_match(4)
137
+ args = nil
138
+
139
+ if @options[:use_param_tests] && !arguments.empty?
140
+ args = []
141
+ arguments.scan(/\s*TEST_CASE\s*\((.*)\)\s*$/) { |a| args << a[0] }
142
+ end
143
+
144
+ tests_and_line_numbers << { test: name, args: args, call: call, params: params, line_number: 0 }
145
+ end
146
+
147
+ tests_and_line_numbers.uniq! { |v| v[:test] }
148
+
149
+ # determine line numbers and create tests to run
150
+ source_lines = source.split("\n")
151
+ source_index = 0
152
+ tests_and_line_numbers.size.times do |i|
153
+ source_lines[source_index..-1].each_with_index do |line, index|
154
+ next unless line =~ /\s+#{tests_and_line_numbers[i][:test]}(?:\s|\()/
155
+
156
+ source_index += index
157
+ tests_and_line_numbers[i][:line_number] = source_index + 1
158
+ break
159
+ end
160
+ end
161
+
162
+ tests_and_line_numbers
163
+ end
164
+
165
+ def find_includes(source)
166
+ # remove comments (block and line, in three steps to ensure correct precedence)
167
+ source.gsub!(/\/\/(?:.+\/\*|\*(?:$|[^\/])).*$/, '') # remove line comments that comment out the start of blocks
168
+ source.gsub!(/\/\*.*?\*\//m, '') # remove block comments
169
+ source.gsub!(/\/\/.*$/, '') # remove line comments (all that remain)
170
+
171
+ # parse out includes
172
+ includes = {
173
+ local: source.scan(/^\s*#include\s+\"\s*(.+)\.[hH]\s*\"/).flatten,
174
+ system: source.scan(/^\s*#include\s+<\s*(.+)\s*>/).flatten.map { |inc| "<#{inc}>" },
175
+ linkonly: source.scan(/^TEST_FILE\(\s*\"\s*(.+)\.[cC]\w*\s*\"/).flatten
176
+ }
177
+ includes
178
+ end
179
+
180
+ def find_mocks(includes)
181
+ mock_headers = []
182
+ includes.each do |include_path|
183
+ include_file = File.basename(include_path)
184
+ mock_headers << include_path if include_file =~ /^#{@options[:mock_prefix]}.*#{@options[:mock_suffix]}$/i
185
+ end
186
+ mock_headers
187
+ end
188
+
189
+ def find_setup_and_teardown(source)
190
+ @options[:has_setup] = source =~ /void\s+#{@options[:setup_name]}\s*\(/
191
+ @options[:has_teardown] = source =~ /void\s+#{@options[:teardown_name]}\s*\(/
192
+ @options[:has_suite_setup] ||= (source =~ /void\s+suiteSetUp\s*\(/)
193
+ @options[:has_suite_teardown] ||= (source =~ /void\s+suiteTearDown\s*\(/)
194
+ end
195
+
196
+ def create_header(output, mocks, testfile_includes = [])
197
+ output.puts('/* AUTOGENERATED FILE. DO NOT EDIT. */')
198
+ output.puts("\n/*=======Automagically Detected Files To Include=====*/")
199
+ output.puts("#include \"#{@options[:framework]}.h\"")
200
+ output.puts('#include "cmock.h"') unless mocks.empty?
201
+ if @options[:defines] && !@options[:defines].empty?
202
+ @options[:defines].each { |d| output.puts("#ifndef #{d}\n#define #{d}\n#endif /* #{d} */") }
203
+ end
204
+ if @options[:header_file] && !@options[:header_file].empty?
205
+ output.puts("#include \"#{File.basename(@options[:header_file])}\"")
206
+ else
207
+ @options[:includes].flatten.uniq.compact.each do |inc|
208
+ output.puts("#include #{inc.include?('<') ? inc : "\"#{inc.gsub('.h', '')}.h\""}")
209
+ end
210
+ testfile_includes.each do |inc|
211
+ output.puts("#include #{inc.include?('<') ? inc : "\"#{inc.gsub('.h', '')}.h\""}")
212
+ end
213
+ end
214
+ mocks.each do |mock|
215
+ output.puts("#include \"#{mock.gsub('.h', '')}.h\"")
216
+ end
217
+ output.puts('#include "CException.h"') if @options[:plugins].include?(:cexception)
218
+
219
+ return unless @options[:enforce_strict_ordering]
220
+
221
+ output.puts('')
222
+ output.puts('int GlobalExpectCount;')
223
+ output.puts('int GlobalVerifyOrder;')
224
+ output.puts('char* GlobalOrderError;')
225
+ end
226
+
227
+ def create_externs(output, tests, _mocks)
228
+ output.puts("\n/*=======External Functions This Runner Calls=====*/")
229
+ output.puts("extern void #{@options[:setup_name]}(void);")
230
+ output.puts("extern void #{@options[:teardown_name]}(void);")
231
+ output.puts("\n#ifdef __cplusplus\nextern \"C\"\n{\n#endif") if @options[:externc]
232
+ tests.each do |test|
233
+ output.puts("extern void #{test[:test]}(#{test[:call] || 'void'});")
234
+ end
235
+ output.puts("#ifdef __cplusplus\n}\n#endif") if @options[:externc]
236
+ output.puts('')
237
+ end
238
+
239
+ def create_mock_management(output, mock_headers)
240
+ output.puts("\n/*=======Mock Management=====*/")
241
+ output.puts('static void CMock_Init(void)')
242
+ output.puts('{')
243
+
244
+ if @options[:enforce_strict_ordering]
245
+ output.puts(' GlobalExpectCount = 0;')
246
+ output.puts(' GlobalVerifyOrder = 0;')
247
+ output.puts(' GlobalOrderError = NULL;')
248
+ end
249
+
250
+ mocks = mock_headers.map { |mock| File.basename(mock) }
251
+ mocks.each do |mock|
252
+ mock_clean = TypeSanitizer.sanitize_c_identifier(mock)
253
+ output.puts(" #{mock_clean}_Init();")
254
+ end
255
+ output.puts("}\n")
256
+
257
+ output.puts('static void CMock_Verify(void)')
258
+ output.puts('{')
259
+ mocks.each do |mock|
260
+ mock_clean = TypeSanitizer.sanitize_c_identifier(mock)
261
+ output.puts(" #{mock_clean}_Verify();")
262
+ end
263
+ output.puts("}\n")
264
+
265
+ output.puts('static void CMock_Destroy(void)')
266
+ output.puts('{')
267
+ mocks.each do |mock|
268
+ mock_clean = TypeSanitizer.sanitize_c_identifier(mock)
269
+ output.puts(" #{mock_clean}_Destroy();")
270
+ end
271
+ output.puts("}\n")
272
+ end
273
+
274
+ def create_setup(output)
275
+ return if @options[:has_setup]
276
+
277
+ output.puts("\n/*=======Setup (stub)=====*/")
278
+ output.puts("void #{@options[:setup_name]}(void) {}")
279
+ end
280
+
281
+ def create_teardown(output)
282
+ return if @options[:has_teardown]
283
+
284
+ output.puts("\n/*=======Teardown (stub)=====*/")
285
+ output.puts("void #{@options[:teardown_name]}(void) {}")
286
+ end
287
+
288
+ def create_suite_setup(output)
289
+ return if @options[:suite_setup].nil?
290
+
291
+ output.puts("\n/*=======Suite Setup=====*/")
292
+ output.puts('void suiteSetUp(void)')
293
+ output.puts('{')
294
+ output.puts(@options[:suite_setup])
295
+ output.puts('}')
296
+ end
297
+
298
+ def create_suite_teardown(output)
299
+ return if @options[:suite_teardown].nil?
300
+
301
+ output.puts("\n/*=======Suite Teardown=====*/")
302
+ output.puts('int suiteTearDown(int num_failures)')
303
+ output.puts('{')
304
+ output.puts(@options[:suite_teardown])
305
+ output.puts('}')
306
+ end
307
+
308
+ def create_reset(output)
309
+ output.puts("\n/*=======Test Reset Options=====*/")
310
+ output.puts("void #{@options[:test_reset_name]}(void);")
311
+ output.puts("void #{@options[:test_reset_name]}(void)")
312
+ output.puts('{')
313
+ output.puts(" #{@options[:teardown_name]}();")
314
+ output.puts(' CMock_Verify();')
315
+ output.puts(' CMock_Destroy();')
316
+ output.puts(' CMock_Init();')
317
+ output.puts(" #{@options[:setup_name]}();")
318
+ output.puts('}')
319
+ output.puts("void #{@options[:test_verify_name]}(void);")
320
+ output.puts("void #{@options[:test_verify_name]}(void)")
321
+ output.puts('{')
322
+ output.puts(' CMock_Verify();')
323
+ output.puts('}')
324
+ end
325
+
326
+ def create_run_test(output)
327
+ require 'erb'
328
+ template = ERB.new(File.read(File.join(__dir__, 'run_test.erb')))
329
+ output.puts(template.result(binding))
330
+ end
331
+
332
+ def create_args_wrappers(output, tests)
333
+ return unless @options[:use_param_tests]
334
+
335
+ output.puts("\n/*=======Parameterized Test Wrappers=====*/")
336
+ tests.each do |test|
337
+ next if test[:args].nil? || test[:args].empty?
338
+
339
+ test[:args].each.with_index(1) do |args, idx|
340
+ output.puts("static void runner_args#{idx}_#{test[:test]}(void)")
341
+ output.puts('{')
342
+ output.puts(" #{test[:test]}(#{args});")
343
+ output.puts("}\n")
344
+ end
345
+ end
346
+ end
347
+
348
+ def create_main(output, filename, tests, used_mocks)
349
+ output.puts("\n\n/*=======MAIN=====*/")
350
+ main_name = @options[:main_name].to_sym == :auto ? "main_#{filename.gsub('.c', '')}" : (@options[:main_name]).to_s
351
+ if @options[:cmdline_args]
352
+ if main_name != 'main'
353
+ output.puts("#{@options[:main_export_decl]} int #{main_name}(int argc, char** argv);")
354
+ end
355
+ output.puts("#{@options[:main_export_decl]} int #{main_name}(int argc, char** argv)")
356
+ output.puts('{')
357
+ output.puts(' int parse_status = UnityParseOptions(argc, argv);')
358
+ output.puts(' if (parse_status != 0)')
359
+ output.puts(' {')
360
+ output.puts(' if (parse_status < 0)')
361
+ output.puts(' {')
362
+ output.puts(" UnityPrint(\"#{filename.gsub('.c', '')}.\");")
363
+ output.puts(' UNITY_PRINT_EOL();')
364
+ tests.each do |test|
365
+ if (!@options[:use_param_tests]) || test[:args].nil? || test[:args].empty?
366
+ output.puts(" UnityPrint(\" #{test[:test]}\");")
367
+ output.puts(' UNITY_PRINT_EOL();')
368
+ else
369
+ test[:args].each do |args|
370
+ output.puts(" UnityPrint(\" #{test[:test]}(#{args})\");")
371
+ output.puts(' UNITY_PRINT_EOL();')
372
+ end
373
+ end
374
+ end
375
+ output.puts(' return 0;')
376
+ output.puts(' }')
377
+ output.puts(' return parse_status;')
378
+ output.puts(' }')
379
+ else
380
+ main_return = @options[:omit_begin_end] ? 'void' : 'int'
381
+ if main_name != 'main'
382
+ output.puts("#{@options[:main_export_decl]} #{main_return} #{main_name}(void);")
383
+ end
384
+ output.puts("#{main_return} #{main_name}(void)")
385
+ output.puts('{')
386
+ end
387
+ output.puts(' suiteSetUp();') if @options[:has_suite_setup]
388
+ if @options[:omit_begin_end]
389
+ output.puts(" UnitySetTestFile(\"#{filename.gsub(/\\/, '\\\\\\')}\");")
390
+ else
391
+ output.puts(" UnityBegin(\"#{filename.gsub(/\\/, '\\\\\\')}\");")
392
+ end
393
+ tests.each do |test|
394
+ if (!@options[:use_param_tests]) || test[:args].nil? || test[:args].empty?
395
+ output.puts(" run_test(#{test[:test]}, \"#{test[:test]}\", #{test[:line_number]});")
396
+ else
397
+ test[:args].each.with_index(1) do |args, idx|
398
+ wrapper = "runner_args#{idx}_#{test[:test]}"
399
+ testname = "#{test[:test]}(#{args})".dump
400
+ output.puts(" run_test(#{wrapper}, #{testname}, #{test[:line_number]});")
401
+ end
402
+ end
403
+ end
404
+ output.puts
405
+ output.puts(' CMock_Guts_MemFreeFinal();') unless used_mocks.empty?
406
+ if @options[:has_suite_teardown]
407
+ if @options[:omit_begin_end]
408
+ output.puts(' (void) suite_teardown(0);')
409
+ else
410
+ output.puts(' return suiteTearDown(UnityEnd());')
411
+ end
412
+ else
413
+ output.puts(' return UnityEnd();') if not @options[:omit_begin_end]
414
+ end
415
+ output.puts('}')
416
+ end
417
+
418
+ def create_h_file(output, filename, tests, testfile_includes, used_mocks)
419
+ filename = File.basename(filename).gsub(/[-\/\\\.\,\s]/, '_').upcase
420
+ output.puts('/* AUTOGENERATED FILE. DO NOT EDIT. */')
421
+ output.puts("#ifndef _#{filename}")
422
+ output.puts("#define _#{filename}\n\n")
423
+ output.puts("#include \"#{@options[:framework]}.h\"")
424
+ output.puts('#include "cmock.h"') unless used_mocks.empty?
425
+ @options[:includes].flatten.uniq.compact.each do |inc|
426
+ output.puts("#include #{inc.include?('<') ? inc : "\"#{inc.gsub('.h', '')}.h\""}")
427
+ end
428
+ testfile_includes.each do |inc|
429
+ output.puts("#include #{inc.include?('<') ? inc : "\"#{inc.gsub('.h', '')}.h\""}")
430
+ end
431
+ output.puts "\n"
432
+ tests.each do |test|
433
+ if test[:params].nil? || test[:params].empty?
434
+ output.puts("void #{test[:test]}(void);")
435
+ else
436
+ output.puts("void #{test[:test]}(#{test[:params]});")
437
+ end
438
+ end
439
+ output.puts("#endif\n\n")
440
+ end
441
+ end
442
+
443
+ if $0 == __FILE__
444
+ options = { includes: [] }
445
+
446
+ # parse out all the options first (these will all be removed as we go)
447
+ ARGV.reject! do |arg|
448
+ case arg
449
+ when '-cexception'
450
+ options[:plugins] = [:cexception]
451
+ true
452
+ when /\.*\.ya?ml/
453
+ options = UnityTestRunnerGenerator.grab_config(arg)
454
+ true
455
+ when /--(\w+)=\"?(.*)\"?/
456
+ options[Regexp.last_match(1).to_sym] = Regexp.last_match(2)
457
+ true
458
+ when /\.*\.h/
459
+ options[:includes] << arg
460
+ true
461
+ else false
462
+ end
463
+ end
464
+
465
+ # make sure there is at least one parameter left (the input file)
466
+ unless ARGV[0]
467
+ puts ["\nusage: ruby #{__FILE__} (files) (options) input_test_file (output)",
468
+ "\n input_test_file - this is the C file you want to create a runner for",
469
+ ' output - this is the name of the runner file to generate',
470
+ ' defaults to (input_test_file)_Runner',
471
+ ' files:',
472
+ ' *.yml / *.yaml - loads configuration from here in :unity or :cmock',
473
+ ' *.h - header files are added as #includes in runner',
474
+ ' options:',
475
+ ' -cexception - include cexception support',
476
+ ' -externc - add extern "C" for cpp support',
477
+ ' --setup_name="" - redefine setUp func name to something else',
478
+ ' --teardown_name="" - redefine tearDown func name to something else',
479
+ ' --main_name="" - redefine main func name to something else',
480
+ ' --test_prefix="" - redefine test prefix from default test|spec|should',
481
+ ' --test_reset_name="" - redefine resetTest func name to something else',
482
+ ' --test_verify_name="" - redefine verifyTest func name to something else',
483
+ ' --suite_setup="" - code to execute for setup of entire suite',
484
+ ' --suite_teardown="" - code to execute for teardown of entire suite',
485
+ ' --use_param_tests=1 - enable parameterized tests (disabled by default)',
486
+ ' --omit_begin_end=1 - omit calls to UnityBegin and UnityEnd (disabled by default)',
487
+ ' --header_file="" - path/name of test header file to generate too'].join("\n")
488
+ exit 1
489
+ end
490
+
491
+ # create the default test runner name if not specified
492
+ ARGV[1] = ARGV[0].gsub('.c', '_Runner.c') unless ARGV[1]
493
+
494
+ UnityTestRunnerGenerator.new(options).run(ARGV[0], ARGV[1])
495
+ end