ceedling 1.0.1 → 1.1.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 (1263) hide show
  1. checksums.yaml +4 -4
  2. data/GIT_COMMIT_SHA +1 -1
  3. data/Gemfile +7 -1
  4. data/Gemfile.lock +19 -12
  5. data/README.md +140 -156
  6. data/Rakefile +189 -9
  7. data/assets/example_file.c +1 -1
  8. data/assets/example_file.h +1 -1
  9. data/assets/example_file_call.c +1 -1
  10. data/assets/example_file_call.h +1 -1
  11. data/assets/example_file_with_statics.c +10 -0
  12. data/assets/example_file_with_stdio.c +13 -0
  13. data/assets/example_file_with_stdio.h +15 -0
  14. data/assets/project.yml +20 -18
  15. data/assets/test_example_file.c +1 -1
  16. data/assets/test_example_file_boom.c +1 -1
  17. data/assets/test_example_file_crash_assert.c +25 -0
  18. data/assets/{test_example_file_crash.c → test_example_file_crash_sigsegv.c} +4 -3
  19. data/assets/test_example_file_source_include.c +17 -0
  20. data/assets/test_example_file_success.c +1 -1
  21. data/assets/test_example_file_unity_printf.c +1 -1
  22. data/assets/test_example_file_verbose.c +1 -1
  23. data/assets/test_example_file_with_mock.c +1 -1
  24. data/assets/test_example_file_with_stdio.c +18 -0
  25. data/assets/test_example_with_parameterized_tests.c +1 -1
  26. data/assets/tests_with_defines/src/adc_hardware.c +1 -1
  27. data/assets/tests_with_defines/src/adc_hardware.h +1 -1
  28. data/assets/tests_with_defines/src/adc_hardware_configurator.c +1 -1
  29. data/assets/tests_with_defines/src/adc_hardware_configurator.h +1 -1
  30. data/assets/tests_with_defines/test/test_adc_hardware.c +1 -1
  31. data/assets/tests_with_defines/test/test_adc_hardware_special.c +1 -1
  32. data/assets/tests_with_encoding/src/unicoder.c +12 -0
  33. data/assets/tests_with_encoding/src/unicoder.h +14 -0
  34. data/assets/tests_with_encoding/test/test_unicoder.c +15 -0
  35. data/assets/tests_with_encoding/test/test_unicoder_partial.c +17 -0
  36. data/assets/tests_with_fallback_conditionals/src/conditional_module.c +18 -0
  37. data/assets/tests_with_fallback_conditionals/src/conditional_module.h +13 -0
  38. data/assets/tests_with_fallback_conditionals/src/optional_dep.h +12 -0
  39. data/assets/tests_with_fallback_conditionals/test/test_conditionals.c +49 -0
  40. data/assets/tests_with_preprocessing/src/adc_hardwareA.c +1 -1
  41. data/assets/tests_with_preprocessing/src/adc_hardwareA.h +1 -1
  42. data/assets/tests_with_preprocessing/src/adc_hardwareB.c +1 -1
  43. data/assets/tests_with_preprocessing/src/adc_hardwareB.h +1 -1
  44. data/assets/tests_with_preprocessing/src/adc_hardwareC.c +1 -1
  45. data/assets/tests_with_preprocessing/src/adc_hardwareC.h +1 -1
  46. data/assets/tests_with_preprocessing/src/adc_hardware_configuratorA.h +1 -1
  47. data/assets/tests_with_preprocessing/src/adc_hardware_configuratorB.h +1 -1
  48. data/assets/tests_with_preprocessing/src/adc_hardware_configuratorC.h +1 -1
  49. data/assets/tests_with_preprocessing/test/test_adc_hardwareA.c +1 -1
  50. data/assets/tests_with_preprocessing/test/test_adc_hardwareB.c +1 -1
  51. data/assets/tests_with_preprocessing/test/test_adc_hardwareC.c +1 -1
  52. data/assets/uncovered_example_file.c +1 -1
  53. data/bin/actions_wrapper.rb +1 -1
  54. data/bin/app_cfg.rb +1 -1
  55. data/bin/ceedling +14 -3
  56. data/bin/cli.rb +110 -38
  57. data/bin/cli_handler.rb +167 -68
  58. data/bin/cli_helper.rb +179 -55
  59. data/bin/configinator.rb +71 -12
  60. data/bin/merginator.rb +82 -0
  61. data/bin/mixin_standardizer.rb +127 -0
  62. data/bin/mixinator.rb +199 -33
  63. data/bin/mixins.rb +4 -2
  64. data/bin/objects.yml +22 -1
  65. data/bin/path_validator.rb +1 -1
  66. data/bin/projectinator.rb +29 -20
  67. data/bin/rake_patches.rb +31 -0
  68. data/bin/recursive_merger.rb +128 -0
  69. data/bin/versionator.rb +2 -2
  70. data/ceedling.gemspec +31 -14
  71. data/config/test_environment.rb +1 -1
  72. data/docs/BreakingChanges.md +16 -3
  73. data/docs/Changelog.md +177 -6
  74. data/docs/KnownIssues.md +26 -0
  75. data/docs/ReleaseNotes.md +133 -19
  76. data/docs/mkdocs/assets/images/ceedling-logo-circle.png +0 -0
  77. data/docs/mkdocs/assets/images/ceedling.svg +90 -0
  78. data/docs/mkdocs/assets/images/favicon.png +0 -0
  79. data/docs/mkdocs/assets/stylesheets/admonitions.css +152 -0
  80. data/docs/mkdocs/assets/stylesheets/fixes-local.css +15 -0
  81. data/docs/mkdocs/assets/stylesheets/styling.css +102 -0
  82. data/docs/mkdocs/configuration/environment-vars.md +14 -0
  83. data/docs/mkdocs/configuration/global-collections.md +156 -0
  84. data/docs/mkdocs/configuration/index.md +75 -0
  85. data/docs/mkdocs/configuration/loading.md +89 -0
  86. data/docs/mkdocs/configuration/mixins.md +607 -0
  87. data/docs/mkdocs/configuration/parallel-builds.md +97 -0
  88. data/docs/mkdocs/configuration/project-file.md +198 -0
  89. data/docs/mkdocs/configuration/reference/cexception.md +35 -0
  90. data/docs/mkdocs/configuration/reference/cmock.md +106 -0
  91. data/docs/mkdocs/configuration/reference/defines.md +352 -0
  92. data/docs/mkdocs/configuration/reference/environment.md +55 -0
  93. data/docs/mkdocs/configuration/reference/extension.md +63 -0
  94. data/docs/mkdocs/configuration/reference/files.md +154 -0
  95. data/docs/mkdocs/configuration/reference/flags.md +296 -0
  96. data/docs/mkdocs/configuration/reference/index.md +168 -0
  97. data/docs/mkdocs/configuration/reference/libraries.md +82 -0
  98. data/docs/mkdocs/configuration/reference/mixins.md +24 -0
  99. data/docs/mkdocs/configuration/reference/paths.md +276 -0
  100. data/docs/mkdocs/configuration/reference/plugins.md +60 -0
  101. data/docs/mkdocs/configuration/reference/project.md +333 -0
  102. data/docs/mkdocs/configuration/reference/release-build.md +62 -0
  103. data/docs/mkdocs/configuration/reference/test-build.md +55 -0
  104. data/docs/mkdocs/configuration/reference/test-runner.md +61 -0
  105. data/docs/mkdocs/configuration/reference/tools.md +457 -0
  106. data/docs/mkdocs/configuration/reference/unity.md +49 -0
  107. data/docs/mkdocs/configuration/which-ceedling.md +77 -0
  108. data/docs/mkdocs/development/index.md +50 -0
  109. data/docs/mkdocs/development/plugins/configuration.md +164 -0
  110. data/docs/mkdocs/development/plugins/index.md +84 -0
  111. data/docs/{PluginDevelopmentGuide.md → mkdocs/development/plugins/plugin-subclass.md} +61 -312
  112. data/docs/mkdocs/development/plugins/rake-tasks.md +54 -0
  113. data/docs/mkdocs/development/workflow.md +284 -0
  114. data/docs/mkdocs/getting-started/command-line.md +477 -0
  115. data/docs/mkdocs/getting-started/example-projects/cipher-quest.md +65 -0
  116. data/docs/mkdocs/getting-started/example-projects/index.md +49 -0
  117. data/docs/mkdocs/getting-started/example-projects/temp-sensor.md +60 -0
  118. data/docs/mkdocs/getting-started/example-projects/wondrous-forest.md +45 -0
  119. data/docs/mkdocs/getting-started/index.md +41 -0
  120. data/docs/mkdocs/getting-started/installation.md +172 -0
  121. data/docs/mkdocs/getting-started/quick-start.md +65 -0
  122. data/docs/mkdocs/help.md +49 -0
  123. data/docs/mkdocs/index.md +215 -0
  124. data/docs/mkdocs/overview/build-system.md +115 -0
  125. data/docs/mkdocs/overview/index.md +29 -0
  126. data/docs/mkdocs/overview/test-environments.md +33 -0
  127. data/docs/mkdocs/overview/tools-and-frameworks.md +115 -0
  128. data/{plugins/beep/README.md → docs/mkdocs/plugins/beep.md} +10 -9
  129. data/{plugins/bullseye/README.md → docs/mkdocs/plugins/bullseye.md} +8 -12
  130. data/{plugins/command_hooks/README.md → docs/mkdocs/plugins/command-hooks.md} +69 -47
  131. data/{plugins/compile_commands_json_db/README.md → docs/mkdocs/plugins/compile-commands-json-db.md} +7 -5
  132. data/docs/mkdocs/plugins/cppcheck.md +377 -0
  133. data/{plugins/dependencies/README.md → docs/mkdocs/plugins/dependencies.md} +39 -50
  134. data/{plugins/fff/README.md → docs/mkdocs/plugins/fff.md} +42 -37
  135. data/docs/mkdocs/plugins/gcov/examples.md +92 -0
  136. data/docs/mkdocs/plugins/gcov/gcovr.md +251 -0
  137. data/docs/mkdocs/plugins/gcov/index.md +68 -0
  138. data/docs/mkdocs/plugins/gcov/overview.md +145 -0
  139. data/docs/mkdocs/plugins/gcov/reportgenerator.md +58 -0
  140. data/docs/mkdocs/plugins/gcov/reporting.md +147 -0
  141. data/docs/mkdocs/plugins/gcov/setup.md +232 -0
  142. data/docs/mkdocs/plugins/gcov/tool-versions.md +60 -0
  143. data/docs/mkdocs/plugins/gcov/troubleshooting.md +78 -0
  144. data/docs/mkdocs/plugins/index.md +221 -0
  145. data/{plugins/module_generator/README.md → docs/mkdocs/plugins/module-generator.md} +44 -44
  146. data/{plugins/report_build_warnings_log/README.md → docs/mkdocs/plugins/report-build-warnings-log.md} +6 -4
  147. data/{plugins/report_tests_gtestlike_stdout/README.md → docs/mkdocs/plugins/report-tests-gtestlike-stdout.md} +9 -7
  148. data/{plugins/report_tests_ide_stdout/README.md → docs/mkdocs/plugins/report-tests-ide-stdout.md} +8 -7
  149. data/{plugins/report_tests_log_factory/README.md → docs/mkdocs/plugins/report-tests-log-factory.md} +44 -36
  150. data/{plugins/report_tests_pretty_stdout/README.md → docs/mkdocs/plugins/report-tests-pretty-stdout.md} +8 -6
  151. data/{plugins/report_tests_raw_output_log/README.md → docs/mkdocs/plugins/report-tests-raw-output-log.md} +9 -7
  152. data/{plugins/report_tests_teamcity_stdout/README.md → docs/mkdocs/plugins/report-tests-teamcity-stdout.md} +8 -6
  153. data/docs/mkdocs/plugins/sample_html_report.png +0 -0
  154. data/docs/mkdocs/plugins/valgrind.md +192 -0
  155. data/docs/mkdocs/project/release-history.md +61 -0
  156. data/docs/{CeedlingUpgrade.md → mkdocs/project/upgrade.md} +9 -7
  157. data/docs/mkdocs/reference/build-directives.md +37 -0
  158. data/docs/mkdocs/reference/command-line.md +323 -0
  159. data/docs/mkdocs/reference/environment-vars.md +60 -0
  160. data/docs/mkdocs/reference/gcov-plugin.md +577 -0
  161. data/docs/mkdocs/reference/global-collections.md +160 -0
  162. data/docs/mkdocs/reference/index.md +65 -0
  163. data/docs/mkdocs/reference/partials-macros.md +79 -0
  164. data/docs/mkdocs/reference/project-configuration.md +46 -0
  165. data/docs/mkdocs/snapshot/assets/project.yml +404 -0
  166. data/docs/mkdocs/snapshot/examples/cipher_quest/README.md +210 -0
  167. data/docs/mkdocs/snapshot/examples/temp_sensor/README.md +283 -0
  168. data/docs/mkdocs/snapshot/examples/wondrous_forest/README.md +92 -0
  169. data/docs/mkdocs/snapshot/plugins/gcov/config/defaults.yml +33 -0
  170. data/docs/mkdocs/snapshot/plugins/gcov/config/defaults_gcov.rb +136 -0
  171. data/docs/mkdocs/snapshot.yml +20 -0
  172. data/docs/mkdocs/testing-guide/build-directives.md +153 -0
  173. data/docs/mkdocs/testing-guide/conventions.md +616 -0
  174. data/docs/mkdocs/testing-guide/frameworks.md +192 -0
  175. data/docs/mkdocs/testing-guide/index.md +80 -0
  176. data/docs/mkdocs/testing-guide/partials/configuration.md +67 -0
  177. data/docs/mkdocs/testing-guide/partials/conventions.md +68 -0
  178. data/docs/mkdocs/testing-guide/partials/directives.md +212 -0
  179. data/docs/mkdocs/testing-guide/partials/example.md +149 -0
  180. data/docs/mkdocs/testing-guide/partials/index.md +79 -0
  181. data/docs/mkdocs/testing-guide/partials/overview.md +81 -0
  182. data/docs/mkdocs/testing-guide/partials/variables.md +244 -0
  183. data/docs/mkdocs/testing-guide/test-cases.md +194 -0
  184. data/docs/mkdocs/testing-guide/test-sample.md +94 -0
  185. data/docs/mkdocs/testing-guide/test-suite-anatomy.md +58 -0
  186. data/examples/cipher_quest/README.md +210 -0
  187. data/examples/cipher_quest/mixin/release_analyze.yml +28 -0
  188. data/examples/cipher_quest/mixin/release_caesar.yml +28 -0
  189. data/examples/cipher_quest/mixin/release_full.yml +30 -0
  190. data/examples/cipher_quest/mixin/release_rot13.yml +28 -0
  191. data/examples/cipher_quest/project.yml +108 -0
  192. data/examples/cipher_quest/src/analyzer.c +83 -0
  193. data/examples/cipher_quest/src/analyzer.h +29 -0
  194. data/examples/cipher_quest/src/cipher.c +59 -0
  195. data/examples/cipher_quest/src/cipher.h +27 -0
  196. data/examples/cipher_quest/src/main.c +151 -0
  197. data/examples/cipher_quest/src/text_utils.c +119 -0
  198. data/examples/cipher_quest/src/text_utils.h +23 -0
  199. data/examples/cipher_quest/test/TestAnalyzer.c +133 -0
  200. data/examples/cipher_quest/test/TestCipherCaesar.c +81 -0
  201. data/examples/cipher_quest/test/TestCipherRot13.c +74 -0
  202. data/examples/cipher_quest/test/TestTextUtils.c +184 -0
  203. data/examples/temp_sensor/README.md +279 -14
  204. data/examples/temp_sensor/mixin/add_gcov.yml +1 -1
  205. data/examples/temp_sensor/mixin/add_unity_helper.yml +1 -1
  206. data/examples/temp_sensor/project.yml +4 -15
  207. data/examples/temp_sensor/src/AdcConductor.c +5 -1
  208. data/examples/temp_sensor/src/AdcConductor.h +1 -1
  209. data/examples/temp_sensor/src/AdcHardware.c +1 -1
  210. data/examples/temp_sensor/src/AdcHardware.h +1 -1
  211. data/examples/temp_sensor/src/AdcHardwareConfigurator.c +2 -1
  212. data/examples/temp_sensor/src/AdcHardwareConfigurator.h +1 -1
  213. data/examples/temp_sensor/src/AdcModel.c +2 -2
  214. data/examples/temp_sensor/src/AdcModel.h +1 -1
  215. data/examples/temp_sensor/src/AdcTemperatureSensor.c +2 -1
  216. data/examples/temp_sensor/src/AdcTemperatureSensor.h +1 -1
  217. data/examples/temp_sensor/src/Executor.c +1 -1
  218. data/examples/temp_sensor/src/Executor.h +1 -1
  219. data/examples/temp_sensor/src/IntrinsicsWrapper.c +1 -1
  220. data/examples/temp_sensor/src/IntrinsicsWrapper.h +1 -1
  221. data/examples/temp_sensor/src/Main.c +3 -3
  222. data/examples/temp_sensor/src/Main.h +1 -1
  223. data/examples/temp_sensor/src/Model.c +1 -1
  224. data/examples/temp_sensor/src/Model.h +1 -1
  225. data/examples/temp_sensor/src/ModelConfig.h +1 -1
  226. data/examples/temp_sensor/src/TaskScheduler.c +1 -1
  227. data/examples/temp_sensor/src/TaskScheduler.h +1 -1
  228. data/examples/temp_sensor/src/TemperatureFilter.c +1 -1
  229. data/examples/temp_sensor/src/TemperatureFilter.h +1 -1
  230. data/examples/temp_sensor/src/TimerConductor.c +1 -1
  231. data/examples/temp_sensor/src/TimerConductor.h +1 -1
  232. data/examples/temp_sensor/src/TimerConfigurator.c +2 -1
  233. data/examples/temp_sensor/src/TimerConfigurator.h +1 -1
  234. data/examples/temp_sensor/src/TimerHardware.c +1 -1
  235. data/examples/temp_sensor/src/TimerHardware.h +1 -1
  236. data/examples/temp_sensor/src/TimerInterruptConfigurator.c +2 -1
  237. data/examples/temp_sensor/src/TimerInterruptConfigurator.h +1 -1
  238. data/examples/temp_sensor/src/TimerInterruptHandler.c +2 -1
  239. data/examples/temp_sensor/src/TimerInterruptHandler.h +1 -1
  240. data/examples/temp_sensor/src/TimerModel.c +1 -1
  241. data/examples/temp_sensor/src/TimerModel.h +1 -1
  242. data/examples/temp_sensor/src/Types.h +5 -2
  243. data/examples/temp_sensor/src/UsartConductor.c +1 -1
  244. data/examples/temp_sensor/src/UsartConductor.h +1 -1
  245. data/examples/temp_sensor/src/UsartConfigurator.c +2 -1
  246. data/examples/temp_sensor/src/UsartConfigurator.h +1 -1
  247. data/examples/temp_sensor/src/UsartHardware.c +1 -1
  248. data/examples/temp_sensor/src/UsartHardware.h +1 -1
  249. data/examples/temp_sensor/src/UsartModel.c +2 -2
  250. data/examples/temp_sensor/src/UsartModel.h +1 -1
  251. data/examples/temp_sensor/src/UsartPutChar.c +2 -1
  252. data/examples/temp_sensor/src/UsartPutChar.h +1 -1
  253. data/examples/temp_sensor/src/UsartTransmitBufferStatus.c +2 -1
  254. data/examples/temp_sensor/src/UsartTransmitBufferStatus.h +1 -1
  255. data/examples/temp_sensor/src/{TemperatureCalculator.c → calculators/TemperatureCalculator.c} +1 -1
  256. data/examples/temp_sensor/src/{TemperatureCalculator.h → calculators/TemperatureCalculator.h} +1 -1
  257. data/examples/temp_sensor/src/{UsartBaudRateRegisterCalculator.c → calculators/UsartBaudRateRegisterCalculator.c} +1 -1
  258. data/examples/temp_sensor/src/{UsartBaudRateRegisterCalculator.h → calculators/UsartBaudRateRegisterCalculator.h} +1 -1
  259. data/examples/temp_sensor/test/TestExecutor.c +1 -1
  260. data/examples/temp_sensor/test/TestMain.c +5 -1
  261. data/examples/temp_sensor/test/TestModel.c +1 -1
  262. data/examples/temp_sensor/test/TestTaskScheduler.c +1 -1
  263. data/examples/temp_sensor/test/TestTemperatureCalculator.c +2 -2
  264. data/examples/temp_sensor/test/TestTemperatureFilter.c +5 -2
  265. data/examples/temp_sensor/test/TestTimerConductor.c +1 -1
  266. data/examples/temp_sensor/test/TestTimerHardware.c +1 -1
  267. data/examples/temp_sensor/test/TestTimerIntegrated.c +8 -4
  268. data/examples/temp_sensor/test/TestTimerModel.c +1 -1
  269. data/examples/temp_sensor/test/TestTimerPlatformStandin.c +154 -0
  270. data/examples/temp_sensor/test/TestUsartBaudRateRegisterCalculator.c +1 -1
  271. data/examples/temp_sensor/test/TestUsartConductor.c +1 -1
  272. data/examples/temp_sensor/test/TestUsartHardware.c +1 -1
  273. data/examples/temp_sensor/test/TestUsartIntegrated.c +9 -5
  274. data/examples/temp_sensor/test/TestUsartModel.c +2 -2
  275. data/examples/temp_sensor/test/TestUsartPlatformStandin.c +145 -0
  276. data/examples/temp_sensor/test/adc/TestAdcConductor.c +1 -1
  277. data/examples/temp_sensor/test/adc/TestAdcHardware.c +1 -1
  278. data/examples/temp_sensor/test/adc/TestAdcModel.c +1 -1
  279. data/examples/temp_sensor/test/adc/TestAdcPlatformStandin.c +100 -0
  280. data/examples/temp_sensor/test/platform/at91sam7s256.c +25 -0
  281. data/examples/temp_sensor/test/platform/at91sam7s256.h +183 -0
  282. data/examples/temp_sensor/test/support/UnityHelper.c +1 -1
  283. data/examples/temp_sensor/test/support/UnityHelper.h +1 -1
  284. data/examples/wondrous_forest/README.md +92 -0
  285. data/{lib/ceedling/release_invoker_helper.rb → examples/wondrous_forest/mixin/add_gcov.yml} +14 -4
  286. data/examples/wondrous_forest/project.yml +86 -0
  287. data/examples/wondrous_forest/src/AlertManager.c +125 -0
  288. data/examples/wondrous_forest/src/AlertManager.h +30 -0
  289. data/examples/wondrous_forest/src/EventQueue.c +73 -0
  290. data/examples/wondrous_forest/src/EventQueue.h +22 -0
  291. data/examples/wondrous_forest/src/ForestMonitor.c +88 -0
  292. data/examples/wondrous_forest/src/ForestMonitor.h +18 -0
  293. data/examples/wondrous_forest/src/HumiditySensor.c +57 -0
  294. data/examples/wondrous_forest/src/HumiditySensor.h +17 -0
  295. data/examples/wondrous_forest/src/LightSensor.c +51 -0
  296. data/examples/wondrous_forest/src/LightSensor.h +18 -0
  297. data/examples/wondrous_forest/src/SensorHal.c +62 -0
  298. data/examples/wondrous_forest/src/SensorHal.h +19 -0
  299. data/examples/wondrous_forest/src/SoilMoisture.c +61 -0
  300. data/examples/wondrous_forest/src/SoilMoisture.h +19 -0
  301. data/examples/wondrous_forest/src/TemperatureSensor.c +67 -0
  302. data/examples/wondrous_forest/src/TemperatureSensor.h +18 -0
  303. data/examples/wondrous_forest/src/Types.h +84 -0
  304. data/examples/wondrous_forest/src/UartDriver.c +55 -0
  305. data/examples/wondrous_forest/src/UartDriver.h +18 -0
  306. data/examples/wondrous_forest/test/TestAlertManager.c +105 -0
  307. data/examples/wondrous_forest/test/TestEventQueue.c +117 -0
  308. data/examples/wondrous_forest/test/TestForestMonitor.c +118 -0
  309. data/examples/wondrous_forest/test/TestHumiditySensor.c +85 -0
  310. data/examples/wondrous_forest/test/TestLightSensor.c +79 -0
  311. data/examples/wondrous_forest/test/TestSensorHal.c +58 -0
  312. data/examples/wondrous_forest/test/TestSoilMoisture.c +96 -0
  313. data/examples/wondrous_forest/test/TestTemperatureSensor.c +100 -0
  314. data/examples/wondrous_forest/test/TestUartDriver.c +55 -0
  315. data/lib/ceedling/application.rb +1 -1
  316. data/lib/ceedling/array_patches.rb +28 -0
  317. data/lib/ceedling/batchinator.rb +76 -0
  318. data/lib/ceedling/c_extractor/c_extractor.rb +340 -0
  319. data/lib/ceedling/c_extractor/c_extractor_code_text.rb +283 -0
  320. data/lib/ceedling/c_extractor/c_extractor_constants.rb +38 -0
  321. data/lib/ceedling/c_extractor/c_extractor_declarations.rb +415 -0
  322. data/lib/ceedling/c_extractor/c_extractor_definitions.rb +157 -0
  323. data/lib/ceedling/c_extractor/c_extractor_functions.rb +402 -0
  324. data/lib/ceedling/c_extractor/c_extractor_preprocessing.rb +262 -0
  325. data/lib/ceedling/c_extractor/c_extractor_types.rb +122 -0
  326. data/lib/ceedling/cacheinator.rb +1 -1
  327. data/lib/ceedling/cacheinator_helper.rb +23 -4
  328. data/lib/ceedling/ceedling.h +40 -0
  329. data/lib/ceedling/{config_matchinator.rb → config/config_matchinator.rb} +67 -5
  330. data/lib/ceedling/{config_walkinator.rb → config/config_walkinator.rb} +1 -1
  331. data/lib/ceedling/{configurator.rb → config/configurator.rb} +269 -107
  332. data/lib/ceedling/{configurator_builder.rb → config/configurator_builder.rb} +25 -6
  333. data/lib/ceedling/{configurator_plugins.rb → config/configurator_plugins.rb} +2 -4
  334. data/lib/ceedling/{configurator_setup.rb → config/configurator_setup.rb} +39 -71
  335. data/lib/ceedling/{configurator_validator.rb → config/configurator_validator.rb} +1 -1
  336. data/lib/ceedling/constants.rb +59 -18
  337. data/lib/ceedling/defaults.rb +31 -44
  338. data/lib/ceedling/defineinator.rb +2 -2
  339. data/lib/ceedling/dependinator.rb +1 -1
  340. data/lib/ceedling/encodinator.rb +1 -1
  341. data/lib/ceedling/erb_wrapper.rb +1 -1
  342. data/lib/ceedling/exceptions.rb +23 -3
  343. data/lib/ceedling/file_finder.rb +39 -10
  344. data/lib/ceedling/file_finder_helper.rb +2 -2
  345. data/lib/ceedling/file_path_collection_utils.rb +37 -23
  346. data/lib/ceedling/file_path_utils.rb +183 -26
  347. data/lib/ceedling/file_system_wrapper.rb +1 -1
  348. data/lib/ceedling/file_wrapper.rb +14 -1
  349. data/lib/ceedling/flaginator.rb +1 -1
  350. data/lib/ceedling/{generator.rb → generators/generator.rb} +86 -23
  351. data/lib/ceedling/{generator_helper.rb → generators/generator_helper.rb} +17 -11
  352. data/lib/ceedling/{generator_mocks.rb → generators/generator_mocks.rb} +1 -1
  353. data/lib/ceedling/generators/generator_partials.rb +177 -0
  354. data/lib/ceedling/{generator_test_results.rb → generators/generator_test_results.rb} +43 -17
  355. data/lib/ceedling/generators/generator_test_results_backtrace.rb +290 -0
  356. data/lib/ceedling/{generator_test_results_sanity_checker.rb → generators/generator_test_results_sanity_checker.rb} +1 -1
  357. data/lib/ceedling/generators/generator_test_runner.rb +97 -0
  358. data/lib/ceedling/includes/include_factory.rb +43 -0
  359. data/lib/ceedling/{include_pathinator.rb → includes/include_pathinator.rb} +1 -1
  360. data/lib/ceedling/includes/includes.rb +341 -0
  361. data/lib/ceedling/loginator.rb +115 -12
  362. data/lib/ceedling/makefile.rb +1 -1
  363. data/lib/ceedling/objects.yml +145 -43
  364. data/lib/ceedling/parsing_parcels.rb +35 -9
  365. data/lib/ceedling/partials/partializer.rb +444 -0
  366. data/lib/ceedling/partials/partializer_config.rb +217 -0
  367. data/lib/ceedling/partials/partializer_helper.rb +344 -0
  368. data/lib/ceedling/partials/partializer_runtime.rb +29 -0
  369. data/lib/ceedling/partials/partializer_utils.rb +222 -0
  370. data/lib/ceedling/partials/partials.rb +82 -0
  371. data/lib/ceedling/{plugin.rb → plugins/plugin.rb} +1 -1
  372. data/lib/ceedling/{plugin_manager.rb → plugins/plugin_manager.rb} +47 -21
  373. data/lib/ceedling/{plugin_manager_helper.rb → plugins/plugin_manager_helper.rb} +1 -1
  374. data/lib/ceedling/{plugin_reportinator.rb → plugins/plugin_reportinator.rb} +10 -18
  375. data/lib/ceedling/{plugin_reportinator_helper.rb → plugins/plugin_reportinator_helper.rb} +22 -26
  376. data/lib/ceedling/plugins/report_tests_stdout_plugin.rb +88 -0
  377. data/lib/ceedling/preprocess/README.md +184 -0
  378. data/lib/ceedling/preprocess/c_comment_scanner.rb +194 -0
  379. data/lib/ceedling/preprocess/c_preprocessor_conditionals.rb +170 -0
  380. data/lib/ceedling/preprocess/preprocessinator.rb +605 -0
  381. data/lib/ceedling/preprocess/preprocessinator_bare_includes_extractor.rb +69 -0
  382. data/lib/ceedling/preprocess/preprocessinator_code_finder.rb +150 -0
  383. data/lib/ceedling/preprocess/preprocessinator_comment_stripper.rb +80 -0
  384. data/lib/ceedling/preprocess/preprocessinator_file_assembler.rb +378 -0
  385. data/lib/ceedling/preprocess/preprocessinator_includes_handler.rb +224 -0
  386. data/lib/ceedling/preprocess/preprocessinator_line_marker_includes_extractor.rb +215 -0
  387. data/lib/ceedling/preprocess/preprocessinator_reconstructor.rb +398 -0
  388. data/lib/ceedling/rake_app/rake_invocation_tracker.rb +39 -0
  389. data/lib/ceedling/rake_app/rake_task_registry.rb +210 -0
  390. data/lib/ceedling/{rake_utils.rb → rake_app/rake_utils.rb} +1 -1
  391. data/lib/ceedling/{rake_wrapper.rb → rake_app/rake_wrapper.rb} +1 -1
  392. data/lib/ceedling/rake_app/rakefile_component_resolver.rb +77 -0
  393. data/lib/ceedling/rakefile.rb +16 -8
  394. data/lib/ceedling/release_invoker.rb +48 -4
  395. data/lib/ceedling/reportinator.rb +39 -18
  396. data/lib/ceedling/ruby_expandinator.rb +61 -0
  397. data/lib/ceedling/rules_release.rake +4 -2
  398. data/lib/ceedling/rules_tests.rake +1 -23
  399. data/lib/ceedling/setupinator.rb +23 -11
  400. data/lib/ceedling/stream_wrapper.rb +1 -1
  401. data/lib/ceedling/system_utils.rb +1 -1
  402. data/lib/ceedling/system_wrapper.rb +18 -21
  403. data/lib/ceedling/tasks_base.rake +3 -3
  404. data/lib/ceedling/tasks_filesystem.rake +22 -12
  405. data/lib/ceedling/tasks_release.rake +11 -18
  406. data/lib/ceedling/tasks_tests.rake +1 -1
  407. data/lib/ceedling/test_context_extractor.rb +178 -109
  408. data/lib/ceedling/test_invoker/test_build_executor.rb +661 -0
  409. data/lib/ceedling/test_invoker/test_build_planner.rb +277 -0
  410. data/lib/ceedling/test_invoker/test_build_setup.rb +441 -0
  411. data/lib/ceedling/test_invoker/test_invoker.rb +251 -0
  412. data/lib/ceedling/test_invoker/test_invoker_types.rb +56 -0
  413. data/lib/ceedling/test_runner_manager.rb +1 -1
  414. data/lib/ceedling/tool_executor.rb +29 -19
  415. data/lib/ceedling/tool_executor_helper.rb +7 -15
  416. data/lib/ceedling/tool_validator.rb +24 -8
  417. data/lib/ceedling/verbosinator.rb +1 -1
  418. data/lib/ceedling/yaml_wrapper.rb +72 -12
  419. data/lib/ceedling.rb +1 -1
  420. data/lib/snapshot.rb +43 -0
  421. data/lib/version.rb +2 -2
  422. data/license.txt +1 -1
  423. data/mkdocs.local.yml +45 -0
  424. data/mkdocs.yml +202 -0
  425. data/plugins/beep/config/defaults.yml +1 -1
  426. data/plugins/beep/config/defaults_beep.rb +1 -1
  427. data/plugins/beep/lib/beep.rb +7 -5
  428. data/plugins/bullseye/assets/template.erb +1 -1
  429. data/plugins/bullseye/bullseye.rake +1 -1
  430. data/plugins/bullseye/config/defaults.yml +1 -1
  431. data/plugins/bullseye/lib/bullseye.rb +9 -9
  432. data/plugins/command_hooks/lib/command_hooks.rb +43 -38
  433. data/plugins/compile_commands_json_db/lib/compile_commands_json_db.rb +2 -2
  434. data/plugins/cppcheck/AUTHORS.md +8 -0
  435. data/plugins/cppcheck/config/defaults.yml +44 -0
  436. data/plugins/cppcheck/config/defaults_cppcheck.rb +32 -0
  437. data/plugins/cppcheck/cppcheck.rake +54 -0
  438. data/plugins/cppcheck/lib/cppcheck.rb +247 -0
  439. data/plugins/cppcheck/lib/cppcheck_constants.rb +20 -0
  440. data/plugins/cppcheck/lib/cppcheck_reports.rb +160 -0
  441. data/plugins/dependencies/Rakefile +1 -1
  442. data/plugins/dependencies/config/defaults.yml +1 -1
  443. data/plugins/dependencies/dependencies.rake +3 -3
  444. data/plugins/dependencies/example/boss/project.yml +1 -3
  445. data/plugins/dependencies/example/boss/src/boss.c +1 -1
  446. data/plugins/dependencies/example/boss/src/boss.h +1 -1
  447. data/plugins/dependencies/example/boss/src/main.c +1 -1
  448. data/plugins/dependencies/example/boss/test/test_boss.c +1 -1
  449. data/plugins/dependencies/example/supervisor/project.yml +1 -3
  450. data/plugins/dependencies/example/supervisor/src/supervisor.c +1 -1
  451. data/plugins/dependencies/example/supervisor/src/supervisor.h +1 -1
  452. data/plugins/dependencies/example/supervisor/test/test_supervisor.c +1 -1
  453. data/plugins/dependencies/lib/dependencies.rb +14 -2
  454. data/plugins/fff/Rakefile +1 -1
  455. data/plugins/fff/config/fff.yml +1 -1
  456. data/plugins/fff/examples/fff_example/project.yml +2 -2
  457. data/plugins/fff/examples/fff_example/src/bar.c +1 -1
  458. data/plugins/fff/examples/fff_example/src/bar.h +1 -1
  459. data/plugins/fff/examples/fff_example/src/custom_types.h +1 -1
  460. data/plugins/fff/examples/fff_example/src/display.c +1 -1
  461. data/plugins/fff/examples/fff_example/src/display.h +1 -1
  462. data/plugins/fff/examples/fff_example/src/event_processor.c +1 -1
  463. data/plugins/fff/examples/fff_example/src/event_processor.h +1 -1
  464. data/plugins/fff/examples/fff_example/src/foo.c +1 -1
  465. data/plugins/fff/examples/fff_example/src/foo.h +1 -1
  466. data/plugins/fff/examples/fff_example/src/subfolder/zzz.c +1 -1
  467. data/plugins/fff/examples/fff_example/src/subfolder/zzz.h +1 -1
  468. data/plugins/fff/examples/fff_example/test/test_event_processor.c +1 -1
  469. data/plugins/fff/examples/fff_example/test/test_foo.c +1 -1
  470. data/plugins/fff/lib/fff.rb +10 -5
  471. data/plugins/fff/lib/fff_mock_generator.rb +1 -1
  472. data/plugins/fff/spec/fff_mock_header_generator_spec.rb +1 -1
  473. data/plugins/fff/spec/fff_mock_source_generator_spec.rb +1 -1
  474. data/plugins/fff/spec/header_generator.rb +1 -1
  475. data/plugins/fff/spec/spec_helper.rb +1 -1
  476. data/plugins/fff/src/fff_unity_helper.h +1 -1
  477. data/plugins/gcov/config/defaults.yml +4 -1
  478. data/plugins/gcov/config/defaults_gcov.rb +40 -13
  479. data/plugins/gcov/gcov.rake +31 -1
  480. data/plugins/gcov/lib/console_reportinator.rb +180 -0
  481. data/plugins/gcov/lib/gcov.rb +189 -103
  482. data/plugins/gcov/lib/gcov_constants.rb +16 -4
  483. data/plugins/gcov/lib/gcov_reportinator.rb +63 -0
  484. data/{spec/configurator_helper_spec.rb → plugins/gcov/lib/gcov_types.rb} +2 -6
  485. data/plugins/gcov/lib/gcovr_reportinator.rb +237 -136
  486. data/plugins/gcov/lib/reportgenerator_reportinator.rb +242 -116
  487. data/plugins/module_generator/Rakefile +1 -1
  488. data/plugins/module_generator/assets/stubby1.h +1 -1
  489. data/plugins/module_generator/assets/stubby2.h +1 -1
  490. data/plugins/module_generator/config/module_generator.yml +1 -1
  491. data/plugins/module_generator/example/project.yml +1 -3
  492. data/plugins/module_generator/lib/module_generator.rb +2 -2
  493. data/plugins/module_generator/module_generator.rake +1 -1
  494. data/plugins/report_build_warnings_log/lib/report_build_warnings_log.rb +14 -20
  495. data/plugins/report_tests_gtestlike_stdout/assets/template.erb +3 -3
  496. data/plugins/report_tests_gtestlike_stdout/config/report_tests_gtestlike_stdout.yml +1 -1
  497. data/plugins/report_tests_gtestlike_stdout/lib/report_tests_gtestlike_stdout.rb +4 -61
  498. data/plugins/report_tests_ide_stdout/config/report_tests_ide_stdout.yml +1 -1
  499. data/plugins/report_tests_ide_stdout/lib/report_tests_ide_stdout.rb +7 -60
  500. data/plugins/report_tests_log_factory/config/defaults.yml +1 -1
  501. data/plugins/report_tests_log_factory/lib/cppunit_tests_reporter.rb +5 -5
  502. data/plugins/report_tests_log_factory/lib/html_tests_reporter.rb +302 -133
  503. data/plugins/report_tests_log_factory/lib/json_tests_reporter.rb +9 -7
  504. data/plugins/report_tests_log_factory/lib/junit_tests_reporter.rb +6 -5
  505. data/plugins/report_tests_log_factory/lib/report_tests_log_factory.rb +72 -36
  506. data/plugins/report_tests_log_factory/lib/tests_reporter.rb +8 -8
  507. data/plugins/report_tests_pretty_stdout/assets/template.erb +1 -2
  508. data/plugins/report_tests_pretty_stdout/config/report_tests_pretty_stdout.yml +1 -1
  509. data/plugins/report_tests_pretty_stdout/lib/report_tests_pretty_stdout.rb +4 -65
  510. data/plugins/report_tests_raw_output_log/lib/report_tests_raw_output_log.rb +4 -4
  511. data/plugins/report_tests_teamcity_stdout/config/defaults.yml +1 -1
  512. data/plugins/report_tests_teamcity_stdout/config/report_tests_teamcity_stdout.yml +1 -1
  513. data/plugins/report_tests_teamcity_stdout/lib/report_tests_teamcity_stdout.rb +2 -2
  514. data/plugins/valgrind/config/defaults.yml +19 -0
  515. data/plugins/valgrind/config/defaults_valgrind.rb +20 -0
  516. data/plugins/valgrind/lib/valgrind.rb +132 -0
  517. data/plugins/valgrind/lib/valgrind_constants.rb +13 -0
  518. data/plugins/valgrind/valgrind.rake +87 -0
  519. data/site-local/404.html +4002 -0
  520. data/site-local/assets/images/ceedling-logo-circle.png +0 -0
  521. data/site-local/assets/images/ceedling.svg +90 -0
  522. data/site-local/assets/images/favicon.png +0 -0
  523. data/site-local/assets/javascripts/bundle.79ae519e.min.js +16 -0
  524. data/site-local/assets/javascripts/bundle.79ae519e.min.js.map +7 -0
  525. data/site-local/assets/javascripts/lunr/min/lunr.ar.min.js +1 -0
  526. data/site-local/assets/javascripts/lunr/min/lunr.da.min.js +18 -0
  527. data/site-local/assets/javascripts/lunr/min/lunr.de.min.js +18 -0
  528. data/site-local/assets/javascripts/lunr/min/lunr.du.min.js +18 -0
  529. data/site-local/assets/javascripts/lunr/min/lunr.el.min.js +1 -0
  530. data/site-local/assets/javascripts/lunr/min/lunr.es.min.js +18 -0
  531. data/site-local/assets/javascripts/lunr/min/lunr.fi.min.js +18 -0
  532. data/site-local/assets/javascripts/lunr/min/lunr.fr.min.js +18 -0
  533. data/site-local/assets/javascripts/lunr/min/lunr.he.min.js +1 -0
  534. data/site-local/assets/javascripts/lunr/min/lunr.hi.min.js +1 -0
  535. data/site-local/assets/javascripts/lunr/min/lunr.hu.min.js +18 -0
  536. data/site-local/assets/javascripts/lunr/min/lunr.hy.min.js +1 -0
  537. data/site-local/assets/javascripts/lunr/min/lunr.it.min.js +18 -0
  538. data/site-local/assets/javascripts/lunr/min/lunr.ja.min.js +1 -0
  539. data/site-local/assets/javascripts/lunr/min/lunr.jp.min.js +1 -0
  540. data/site-local/assets/javascripts/lunr/min/lunr.kn.min.js +1 -0
  541. data/site-local/assets/javascripts/lunr/min/lunr.ko.min.js +1 -0
  542. data/site-local/assets/javascripts/lunr/min/lunr.multi.min.js +1 -0
  543. data/site-local/assets/javascripts/lunr/min/lunr.nl.min.js +18 -0
  544. data/site-local/assets/javascripts/lunr/min/lunr.no.min.js +18 -0
  545. data/site-local/assets/javascripts/lunr/min/lunr.pt.min.js +18 -0
  546. data/site-local/assets/javascripts/lunr/min/lunr.ro.min.js +18 -0
  547. data/site-local/assets/javascripts/lunr/min/lunr.ru.min.js +18 -0
  548. data/site-local/assets/javascripts/lunr/min/lunr.sa.min.js +1 -0
  549. data/site-local/assets/javascripts/lunr/min/lunr.stemmer.support.min.js +1 -0
  550. data/site-local/assets/javascripts/lunr/min/lunr.sv.min.js +18 -0
  551. data/site-local/assets/javascripts/lunr/min/lunr.ta.min.js +1 -0
  552. data/site-local/assets/javascripts/lunr/min/lunr.te.min.js +1 -0
  553. data/site-local/assets/javascripts/lunr/min/lunr.th.min.js +1 -0
  554. data/site-local/assets/javascripts/lunr/min/lunr.tr.min.js +18 -0
  555. data/site-local/assets/javascripts/lunr/min/lunr.vi.min.js +1 -0
  556. data/site-local/assets/javascripts/lunr/min/lunr.zh.min.js +1 -0
  557. data/site-local/assets/javascripts/lunr/tinyseg.js +206 -0
  558. data/site-local/assets/javascripts/lunr/wordcut.js +6708 -0
  559. data/site-local/assets/javascripts/workers/search.2c215733.min.js +42 -0
  560. data/site-local/assets/javascripts/workers/search.2c215733.min.js.map +7 -0
  561. data/site-local/assets/stylesheets/admonitions.css +152 -0
  562. data/site-local/assets/stylesheets/fixes-local.css +15 -0
  563. data/site-local/assets/stylesheets/main.484c7ddc.min.css +1 -0
  564. data/site-local/assets/stylesheets/main.484c7ddc.min.css.map +1 -0
  565. data/site-local/assets/stylesheets/palette.ab4e12ef.min.css +1 -0
  566. data/site-local/assets/stylesheets/palette.ab4e12ef.min.css.map +1 -0
  567. data/site-local/assets/stylesheets/styling.css +102 -0
  568. data/site-local/configuration/environment-vars.html +4102 -0
  569. data/site-local/configuration/global-collections.html +4248 -0
  570. data/site-local/configuration/index.html +4169 -0
  571. data/site-local/configuration/loading.html +4348 -0
  572. data/site-local/configuration/mixins.html +5060 -0
  573. data/site-local/configuration/parallel-builds.html +4347 -0
  574. data/site-local/configuration/project-file.html +4474 -0
  575. data/site-local/configuration/reference/cexception.html +4225 -0
  576. data/site-local/configuration/reference/cmock.html +4401 -0
  577. data/site-local/configuration/reference/defines.html +4734 -0
  578. data/site-local/configuration/reference/environment.html +4242 -0
  579. data/site-local/configuration/reference/extension.html +4387 -0
  580. data/site-local/configuration/reference/files.html +4541 -0
  581. data/site-local/configuration/reference/flags.html +4681 -0
  582. data/site-local/configuration/reference/index.html +4290 -0
  583. data/site-local/configuration/reference/libraries.html +4365 -0
  584. data/site-local/configuration/reference/mixins.html +4195 -0
  585. data/site-local/configuration/reference/paths.html +4714 -0
  586. data/site-local/configuration/reference/plugins.html +4262 -0
  587. data/site-local/configuration/reference/project.html +4777 -0
  588. data/site-local/configuration/reference/release-build.html +4287 -0
  589. data/site-local/configuration/reference/test-build.html +4264 -0
  590. data/site-local/configuration/reference/test-runner.html +4289 -0
  591. data/site-local/configuration/reference/tools.html +5120 -0
  592. data/site-local/configuration/reference/unity.html +4255 -0
  593. data/site-local/configuration/which-ceedling.html +4269 -0
  594. data/site-local/development/index.html +4148 -0
  595. data/site-local/development/plugins/configuration.html +4446 -0
  596. data/site-local/development/plugins/index.html +4212 -0
  597. data/site-local/development/plugins/plugin-subclass.html +5068 -0
  598. data/site-local/development/plugins/rake-tasks.html +4236 -0
  599. data/site-local/development/workflow.html +4664 -0
  600. data/site-local/getting-started/command-line.html +5498 -0
  601. data/site-local/getting-started/example-projects/cipher-quest.html +4272 -0
  602. data/site-local/getting-started/example-projects/index.html +4173 -0
  603. data/site-local/getting-started/example-projects/temp-sensor.html +4322 -0
  604. data/site-local/getting-started/example-projects/wondrous-forest.html +4290 -0
  605. data/site-local/getting-started/index.html +4116 -0
  606. data/site-local/getting-started/installation.html +4452 -0
  607. data/site-local/getting-started/quick-start.html +4262 -0
  608. data/site-local/help.html +4081 -0
  609. data/site-local/index.html +4364 -0
  610. data/site-local/overview/build-system.html +4288 -0
  611. data/site-local/overview/index.html +4103 -0
  612. data/site-local/overview/test-environments.html +4116 -0
  613. data/site-local/overview/tools-and-frameworks.html +4433 -0
  614. data/site-local/plugins/beep.html +4413 -0
  615. data/site-local/plugins/bullseye.html +4249 -0
  616. data/site-local/plugins/command-hooks.html +5023 -0
  617. data/site-local/plugins/compile-commands-json-db.html +4243 -0
  618. data/site-local/plugins/cppcheck.html +4851 -0
  619. data/site-local/plugins/dependencies.html +4828 -0
  620. data/site-local/plugins/fff.html +4661 -0
  621. data/site-local/plugins/gcov/examples.html +4293 -0
  622. data/site-local/plugins/gcov/gcovr.html +4512 -0
  623. data/site-local/plugins/gcov/index.html +4150 -0
  624. data/site-local/plugins/gcov/overview.html +4410 -0
  625. data/site-local/plugins/gcov/reportgenerator.html +4164 -0
  626. data/site-local/plugins/gcov/reporting.html +4336 -0
  627. data/site-local/plugins/gcov/setup.html +4597 -0
  628. data/site-local/plugins/gcov/tool-versions.html +4269 -0
  629. data/site-local/plugins/gcov/troubleshooting.html +4313 -0
  630. data/site-local/plugins/index.html +4348 -0
  631. data/site-local/plugins/module-generator.html +4588 -0
  632. data/site-local/plugins/report-build-warnings-log.html +4229 -0
  633. data/site-local/plugins/report-tests-gtestlike-stdout.html +4357 -0
  634. data/site-local/plugins/report-tests-ide-stdout.html +4270 -0
  635. data/site-local/plugins/report-tests-log-factory.html +4792 -0
  636. data/site-local/plugins/report-tests-pretty-stdout.html +4265 -0
  637. data/site-local/plugins/report-tests-raw-output-log.html +4292 -0
  638. data/site-local/plugins/report-tests-teamcity-stdout.html +4291 -0
  639. data/site-local/plugins/sample_html_report.png +0 -0
  640. data/site-local/plugins/valgrind.html +4605 -0
  641. data/site-local/project/release-history.html +4225 -0
  642. data/site-local/project/upgrade.html +4314 -0
  643. data/site-local/reference/build-directives.html +4210 -0
  644. data/site-local/reference/command-line.html +4989 -0
  645. data/site-local/reference/environment-vars.html +4278 -0
  646. data/site-local/reference/gcov-plugin.html +5886 -0
  647. data/site-local/reference/global-collections.html +4385 -0
  648. data/site-local/reference/index.html +4126 -0
  649. data/site-local/reference/partials-macros.html +4326 -0
  650. data/site-local/reference/project-configuration.html +4253 -0
  651. data/site-local/sitemap.xml +3 -0
  652. data/site-local/sitemap.xml.gz +0 -0
  653. data/site-local/snapshot/assets/project.yml +404 -0
  654. data/site-local/snapshot/examples/cipher_quest/index.html +4292 -0
  655. data/site-local/snapshot/examples/temp_sensor/index.html +4416 -0
  656. data/site-local/snapshot/examples/wondrous_forest/index.html +4200 -0
  657. data/site-local/snapshot/plugins/gcov/config/defaults.yml +33 -0
  658. data/site-local/snapshot/plugins/gcov/config/defaults_gcov.rb +136 -0
  659. data/site-local/testing-guide/build-directives.html +4481 -0
  660. data/site-local/testing-guide/conventions.html +5233 -0
  661. data/site-local/testing-guide/frameworks.html +4488 -0
  662. data/site-local/testing-guide/index.html +4174 -0
  663. data/site-local/testing-guide/partials/configuration.html +4347 -0
  664. data/site-local/testing-guide/partials/conventions.html +4327 -0
  665. data/site-local/testing-guide/partials/directives.html +4680 -0
  666. data/site-local/testing-guide/partials/example.html +4448 -0
  667. data/site-local/testing-guide/partials/index.html +4167 -0
  668. data/site-local/testing-guide/partials/overview.html +4322 -0
  669. data/site-local/testing-guide/partials/variables.html +4548 -0
  670. data/site-local/testing-guide/test-cases.html +4436 -0
  671. data/site-local/testing-guide/test-sample.html +4265 -0
  672. data/site-local/testing-guide/test-suite-anatomy.html +4249 -0
  673. data/spec/manual/stress_test.rb +1 -1
  674. data/spec/support/other_target.yml +1 -1
  675. data/spec/support/spec_helper.rb +20 -0
  676. data/spec/support/system/gem_dir_layout.rb +20 -0
  677. data/spec/support/system/spec_system_helper.rb +206 -0
  678. data/spec/support/system/system_context.rb +310 -0
  679. data/spec/support/system/system_test_output.rb +28 -0
  680. data/spec/support/target.yml +1 -1
  681. data/spec/system/cppcheck_deployment_spec.rb +49 -0
  682. data/spec/system/deployment_as_gem_spec.rb +86 -48
  683. data/spec/system/deployment_as_vendor_spec.rb +141 -79
  684. data/spec/system/encoding_stress_spec.rb +153 -0
  685. data/spec/system/example_cipher_quest_spec.rb +186 -0
  686. data/spec/system/example_temp_sensor_spec.rb +41 -35
  687. data/spec/system/example_wondrous_forest_spec.rb +117 -0
  688. data/spec/{gcov → system}/gcov_deployment_spec.rb +55 -26
  689. data/spec/system/mixin_ordering_spec.rb +548 -0
  690. data/spec/system/preprocessing_encoding_spec.rb +114 -0
  691. data/spec/system/preprocessing_fallback_conditionals_spec.rb +166 -0
  692. data/spec/system/preprocessing_locale_spec.rb +153 -0
  693. data/spec/system/preprocessing_parameterized_tests_spec.rb +183 -0
  694. data/spec/system/ruby_replacement_spec.rb +141 -0
  695. data/spec/{spec_system_helper.rb → system/support/common_test_cases.rb} +301 -350
  696. data/spec/system/support/cppcheck_common_test_cases.rb +98 -0
  697. data/spec/system/support/cppcheck_helpers.rb +27 -0
  698. data/spec/{gcov/gcov_test_cases_spec.rb → system/support/gcov_common_test_cases.rb} +224 -111
  699. data/spec/system/support/gcov_helpers.rb +81 -0
  700. data/spec/system/support/valgrind_common_test_cases.rb +120 -0
  701. data/spec/system/support/valgrind_helpers.rb +21 -0
  702. data/spec/system/upgrade_as_vendor_spec.rb +74 -39
  703. data/spec/system/valgrind_deployment_spec.rb +53 -0
  704. data/spec/units/bin/cli_helper_spec.rb +69 -0
  705. data/spec/units/bin/merginator_spec.rb +279 -0
  706. data/spec/units/bin/mixin_standardizer_spec.rb +231 -0
  707. data/spec/units/bin/mixinator_spec.rb +583 -0
  708. data/spec/units/bin/projectinator_mixin_spec.rb +362 -0
  709. data/spec/units/bin/recursive_merger_spec.rb +241 -0
  710. data/spec/units/c_extractor/c_extractor_code_text_spec.rb +2091 -0
  711. data/spec/units/c_extractor/c_extractor_declarations_spec.rb +746 -0
  712. data/spec/units/c_extractor/c_extractor_definitions_spec.rb +417 -0
  713. data/spec/units/c_extractor/c_extractor_functions_spec.rb +2742 -0
  714. data/spec/units/c_extractor/c_extractor_integration_spec.rb +935 -0
  715. data/spec/units/c_extractor/c_extractor_preprocessing_spec.rb +497 -0
  716. data/spec/units/c_extractor/c_extractor_spec.rb +356 -0
  717. data/spec/units/config_matchinator_spec.rb +401 -0
  718. data/spec/{config_walkinator_spec.rb → units/config_walkinator_spec.rb} +2 -2
  719. data/spec/{configurator_builder_spec.rb → units/configurator_builder_spec.rb} +1 -1
  720. data/spec/units/configurator_spec.rb +187 -0
  721. data/spec/{file_finder_helper_spec.rb → units/file_finder_helper_spec.rb} +1 -1
  722. data/spec/units/file_path_collection_utils_spec.rb +222 -0
  723. data/spec/units/file_path_utils_spec.rb +274 -0
  724. data/spec/units/generators/generator_helper_spec.rb +112 -0
  725. data/spec/units/generators/generator_partials_spec.rb +795 -0
  726. data/spec/units/generators/generator_test_results_backtrace_spec.rb +492 -0
  727. data/spec/{generator_test_results_sanity_checker_spec.rb → units/generators/generator_test_results_sanity_checker_spec.rb} +5 -4
  728. data/spec/units/generators/generator_test_results_spec.rb +412 -0
  729. data/spec/units/generators/generator_test_runner_spec.rb +120 -0
  730. data/spec/units/includes/include_spec.rb +716 -0
  731. data/spec/units/includes/includes_spec.rb +1069 -0
  732. data/spec/units/parsing_parcels_spec.rb +139 -0
  733. data/spec/units/partials/partializer_config_spec.rb +388 -0
  734. data/spec/units/partials/partializer_helper_spec.rb +992 -0
  735. data/spec/units/partials/partializer_spec.rb +1629 -0
  736. data/spec/units/partials/partializer_utils_spec.rb +587 -0
  737. data/spec/units/plugin_manager_spec.rb +48 -0
  738. data/spec/units/plugins/cppcheck_spec.rb +557 -0
  739. data/spec/units/preprocess/c_comment_scanner_spec.rb +409 -0
  740. data/spec/units/preprocess/c_preprocessor_conditionals_spec.rb +396 -0
  741. data/spec/units/preprocess/preprocessinator_code_finder_spec.rb +361 -0
  742. data/spec/units/preprocess/preprocessinator_comment_stripper_spec.rb +580 -0
  743. data/spec/units/preprocess/preprocessinator_file_assembler_spec.rb +263 -0
  744. data/spec/units/preprocess/preprocessinator_includes_handler_spec.rb +337 -0
  745. data/spec/{preprocessinator_extractor_spec.rb → units/preprocess/preprocessinator_reconstructor_spec.rb} +297 -5
  746. data/spec/units/reportinator_spec.rb +251 -0
  747. data/spec/units/ruby_expandinator_spec.rb +91 -0
  748. data/spec/{system_utils_spec.rb → units/system_utils_spec.rb} +4 -4
  749. data/spec/units/test_context_extractor_spec.rb +437 -0
  750. data/spec/{tool_executor_helper_spec.rb → units/tool_executor_helper_spec.rb} +19 -33
  751. data/spec/units/tool_executor_spec.rb +83 -0
  752. data/spec/units/tool_validator_spec.rb +60 -0
  753. data/spec/units/yaml_wrapper_spec.rb +108 -0
  754. data/vendor/cmock/Gemfile +4 -1
  755. data/vendor/cmock/LICENSE.txt +1 -1
  756. data/vendor/cmock/config/production_environment.rb +1 -1
  757. data/vendor/cmock/config/test_environment.rb +1 -1
  758. data/vendor/cmock/docs/CMockChangeLog.md +47 -0
  759. data/vendor/cmock/docs/CMockKnownIssues.md +0 -1
  760. data/vendor/cmock/docs/CMock_ArgumentValidation.md +180 -25
  761. data/vendor/cmock/docs/CMock_Summary.md +158 -16
  762. data/vendor/cmock/examples/make_example/Makefile +1 -1
  763. data/vendor/cmock/examples/make_example/src/foo.c +1 -1
  764. data/vendor/cmock/examples/make_example/src/foo.h +1 -1
  765. data/vendor/cmock/examples/make_example/src/main.c +1 -1
  766. data/vendor/cmock/examples/make_example/test/test_foo.c +1 -1
  767. data/vendor/cmock/examples/make_example/test/test_main.c +2 -2
  768. data/vendor/cmock/examples/temp_sensor/project.yml +75 -0
  769. data/vendor/cmock/examples/temp_sensor/rakefile.rb +3 -3
  770. data/vendor/cmock/examples/temp_sensor/rakefile_helper.rb +163 -119
  771. data/vendor/cmock/examples/temp_sensor/src/AT91SAM7X256.h +1 -1
  772. data/vendor/cmock/examples/temp_sensor/src/AdcConductor.c +1 -1
  773. data/vendor/cmock/examples/temp_sensor/src/AdcConductor.h +1 -1
  774. data/vendor/cmock/examples/temp_sensor/src/AdcHardware.c +1 -1
  775. data/vendor/cmock/examples/temp_sensor/src/AdcHardware.h +1 -1
  776. data/vendor/cmock/examples/temp_sensor/src/AdcHardwareConfigurator.c +1 -1
  777. data/vendor/cmock/examples/temp_sensor/src/AdcHardwareConfigurator.h +1 -1
  778. data/vendor/cmock/examples/temp_sensor/src/AdcModel.c +3 -1
  779. data/vendor/cmock/examples/temp_sensor/src/AdcModel.h +1 -1
  780. data/vendor/cmock/examples/temp_sensor/src/AdcTemperatureSensor.c +1 -1
  781. data/vendor/cmock/examples/temp_sensor/src/AdcTemperatureSensor.h +1 -1
  782. data/vendor/cmock/examples/temp_sensor/src/Executor.c +1 -1
  783. data/vendor/cmock/examples/temp_sensor/src/Executor.h +1 -1
  784. data/vendor/cmock/examples/temp_sensor/src/IntrinsicsWrapper.c +1 -1
  785. data/vendor/cmock/examples/temp_sensor/src/IntrinsicsWrapper.h +1 -1
  786. data/vendor/cmock/examples/temp_sensor/src/Main.c +1 -1
  787. data/vendor/cmock/examples/temp_sensor/src/Main.h +1 -1
  788. data/vendor/cmock/examples/temp_sensor/src/Model.c +1 -1
  789. data/vendor/cmock/examples/temp_sensor/src/Model.h +1 -1
  790. data/vendor/cmock/examples/temp_sensor/src/ModelConfig.h +1 -1
  791. data/vendor/cmock/examples/temp_sensor/src/TaskScheduler.c +1 -1
  792. data/vendor/cmock/examples/temp_sensor/src/TaskScheduler.h +1 -1
  793. data/vendor/cmock/examples/temp_sensor/src/TemperatureCalculator.c +1 -1
  794. data/vendor/cmock/examples/temp_sensor/src/TemperatureCalculator.h +1 -1
  795. data/vendor/cmock/examples/temp_sensor/src/TemperatureFilter.c +2 -2
  796. data/vendor/cmock/examples/temp_sensor/src/TemperatureFilter.h +1 -1
  797. data/vendor/cmock/examples/temp_sensor/src/TimerConductor.c +1 -1
  798. data/vendor/cmock/examples/temp_sensor/src/TimerConductor.h +1 -1
  799. data/vendor/cmock/examples/temp_sensor/src/TimerConfigurator.c +2 -2
  800. data/vendor/cmock/examples/temp_sensor/src/TimerConfigurator.h +1 -1
  801. data/vendor/cmock/examples/temp_sensor/src/TimerHardware.c +1 -1
  802. data/vendor/cmock/examples/temp_sensor/src/TimerHardware.h +1 -1
  803. data/vendor/cmock/examples/temp_sensor/src/TimerInterruptConfigurator.c +10 -1
  804. data/vendor/cmock/examples/temp_sensor/src/TimerInterruptConfigurator.h +1 -1
  805. data/vendor/cmock/examples/temp_sensor/src/TimerInterruptHandler.c +1 -1
  806. data/vendor/cmock/examples/temp_sensor/src/TimerInterruptHandler.h +1 -1
  807. data/vendor/cmock/examples/temp_sensor/src/TimerModel.c +1 -1
  808. data/vendor/cmock/examples/temp_sensor/src/TimerModel.h +1 -1
  809. data/vendor/cmock/examples/temp_sensor/src/Types.h +1 -1
  810. data/vendor/cmock/examples/temp_sensor/src/UsartBaudRateRegisterCalculator.c +1 -1
  811. data/vendor/cmock/examples/temp_sensor/src/UsartBaudRateRegisterCalculator.h +1 -1
  812. data/vendor/cmock/examples/temp_sensor/src/UsartConductor.c +1 -1
  813. data/vendor/cmock/examples/temp_sensor/src/UsartConductor.h +1 -1
  814. data/vendor/cmock/examples/temp_sensor/src/UsartConfigurator.c +1 -1
  815. data/vendor/cmock/examples/temp_sensor/src/UsartConfigurator.h +1 -1
  816. data/vendor/cmock/examples/temp_sensor/src/UsartHardware.c +1 -1
  817. data/vendor/cmock/examples/temp_sensor/src/UsartHardware.h +1 -1
  818. data/vendor/cmock/examples/temp_sensor/src/UsartModel.c +2 -2
  819. data/vendor/cmock/examples/temp_sensor/src/UsartModel.h +1 -1
  820. data/vendor/cmock/examples/temp_sensor/src/UsartPutChar.c +2 -2
  821. data/vendor/cmock/examples/temp_sensor/src/UsartPutChar.h +1 -1
  822. data/vendor/cmock/examples/temp_sensor/src/UsartTransmitBufferStatus.c +1 -1
  823. data/vendor/cmock/examples/temp_sensor/src/UsartTransmitBufferStatus.h +1 -1
  824. data/vendor/cmock/examples/temp_sensor/test/TestAdcConductor.c +1 -1
  825. data/vendor/cmock/examples/temp_sensor/test/TestAdcHardware.c +1 -1
  826. data/vendor/cmock/examples/temp_sensor/test/TestAdcHardwareConfigurator.c +1 -1
  827. data/vendor/cmock/examples/temp_sensor/test/TestAdcModel.c +1 -1
  828. data/vendor/cmock/examples/temp_sensor/test/TestAdcTemperatureSensor.c +1 -1
  829. data/vendor/cmock/examples/temp_sensor/test/TestExecutor.c +1 -1
  830. data/vendor/cmock/examples/temp_sensor/test/TestMain.c +1 -1
  831. data/vendor/cmock/examples/temp_sensor/test/TestModel.c +1 -1
  832. data/vendor/cmock/examples/temp_sensor/test/TestTaskScheduler.c +1 -1
  833. data/vendor/cmock/examples/temp_sensor/test/TestTemperatureCalculator.c +1 -1
  834. data/vendor/cmock/examples/temp_sensor/test/TestTemperatureFilter.c +2 -2
  835. data/vendor/cmock/examples/temp_sensor/test/TestTimerConductor.c +1 -1
  836. data/vendor/cmock/examples/temp_sensor/test/TestTimerConfigurator.c +1 -1
  837. data/vendor/cmock/examples/temp_sensor/test/TestTimerHardware.c +1 -1
  838. data/vendor/cmock/examples/temp_sensor/test/TestTimerInterruptConfigurator.c +1 -1
  839. data/vendor/cmock/examples/temp_sensor/test/TestTimerInterruptHandler.c +1 -1
  840. data/vendor/cmock/examples/temp_sensor/test/TestTimerModel.c +1 -1
  841. data/vendor/cmock/examples/temp_sensor/test/TestUsartBaudRateRegisterCalculator.c +1 -1
  842. data/vendor/cmock/examples/temp_sensor/test/TestUsartConductor.c +7 -5
  843. data/vendor/cmock/examples/temp_sensor/test/TestUsartConfigurator.c +1 -1
  844. data/vendor/cmock/examples/temp_sensor/test/TestUsartHardware.c +3 -2
  845. data/vendor/cmock/examples/temp_sensor/test/TestUsartModel.c +1 -1
  846. data/vendor/cmock/examples/temp_sensor/test/TestUsartPutChar.c +1 -1
  847. data/vendor/cmock/examples/temp_sensor/test/TestUsartTransmitBufferStatus.c +1 -1
  848. data/vendor/cmock/lib/cmock.rb +1 -1
  849. data/vendor/cmock/lib/cmock_config.rb +8 -2
  850. data/vendor/cmock/lib/cmock_file_writer.rb +38 -1
  851. data/vendor/cmock/lib/cmock_generator.rb +44 -27
  852. data/vendor/cmock/lib/cmock_generator_plugin_array.rb +68 -15
  853. data/vendor/cmock/lib/cmock_generator_plugin_callback.rb +13 -3
  854. data/vendor/cmock/lib/cmock_generator_plugin_cexception.rb +12 -3
  855. data/vendor/cmock/lib/cmock_generator_plugin_expect.rb +33 -15
  856. data/vendor/cmock/lib/cmock_generator_plugin_expect_any_args.rb +13 -8
  857. data/vendor/cmock/lib/cmock_generator_plugin_ignore.rb +15 -10
  858. data/vendor/cmock/lib/cmock_generator_plugin_ignore_arg.rb +4 -2
  859. data/vendor/cmock/lib/cmock_generator_plugin_ignore_stateless.rb +15 -10
  860. data/vendor/cmock/lib/cmock_generator_plugin_return_thru_ptr.rb +53 -3
  861. data/vendor/cmock/lib/cmock_generator_utils.rb +159 -43
  862. data/vendor/cmock/lib/cmock_header_parser.rb +217 -26
  863. data/vendor/cmock/lib/cmock_plugin_manager.rb +1 -1
  864. data/vendor/cmock/lib/cmock_unityhelper_parser.rb +7 -2
  865. data/vendor/cmock/lib/cmock_version.rb +1 -1
  866. data/vendor/cmock/scripts/create_makefile.rb +7 -5
  867. data/vendor/cmock/src/cmock.c +132 -129
  868. data/vendor/cmock/src/cmock.h +7 -13
  869. data/vendor/cmock/src/cmock_internals.h +73 -39
  870. data/vendor/cmock/test/c/TestCMockC.c +1 -7
  871. data/vendor/cmock/test/c/TestCMockC.yml +1 -1
  872. data/vendor/cmock/test/c/TestCMockCDynamic.c +1 -7
  873. data/vendor/cmock/test/c/TestCMockCDynamic.yml +1 -1
  874. data/vendor/cmock/test/c/TestCMockCDynamic_Runner.c +1 -7
  875. data/vendor/cmock/test/c/TestCMockC_Runner.c +1 -7
  876. data/vendor/cmock/{vendor/unity/test/targets/gcc_manual_math.yml → test/gcc_64_valgrind.yml} +8 -17
  877. data/vendor/cmock/test/iar/iar_v4/incIAR/AT91SAM7X-EK.h +1 -1
  878. data/vendor/cmock/test/iar/iar_v4/incIAR/AT91SAM7X256_inc.h +1 -1
  879. data/vendor/cmock/test/iar/iar_v4/incIAR/ioat91sam7x256.h +1 -1
  880. data/vendor/cmock/test/iar/iar_v4/srcIAR/Cstartup_SAM7.c +1 -1
  881. data/vendor/cmock/test/iar/iar_v5/incIAR/AT91SAM7X-EK.h +1 -1
  882. data/vendor/cmock/test/iar/iar_v5/incIAR/AT91SAM7X256_inc.h +1 -1
  883. data/vendor/cmock/test/iar/iar_v5/incIAR/project.h +1 -1
  884. data/vendor/cmock/test/iar/iar_v5/srcIAR/Cstartup_SAM7.c +1 -1
  885. data/vendor/cmock/test/project.yml +32 -0
  886. data/vendor/cmock/test/rakefile +74 -58
  887. data/vendor/cmock/test/rakefile_helper.rb +359 -152
  888. data/vendor/cmock/test/system/systest_generator.rb +2 -2
  889. data/vendor/cmock/test/system/test_compilation/callingconv.h +1 -7
  890. data/vendor/cmock/test/system/test_compilation/config.yml +10 -1
  891. data/vendor/cmock/test/system/test_compilation/const.h +7 -13
  892. data/vendor/cmock/test/system/test_compilation/inline.h +1 -2
  893. data/vendor/cmock/test/system/test_compilation/osek.h +1 -7
  894. data/vendor/cmock/test/system/test_compilation/parsing.h +37 -7
  895. data/vendor/cmock/test/system/test_interactions/all_plugins_but_other_limits.yml +5 -13
  896. data/vendor/cmock/test/system/test_interactions/all_plugins_coexist.yml +5 -5
  897. data/vendor/cmock/test/system/test_interactions/array_handling.yml +758 -0
  898. data/vendor/cmock/test/system/test_interactions/basic_expect_and_return.yml +2 -2
  899. data/vendor/cmock/test/system/test_interactions/char_string_array_plugin.yml +113 -0
  900. data/vendor/cmock/test/system/test_interactions/const_custom_type.yml +68 -0
  901. data/vendor/cmock/test/system/test_interactions/const_primitives_handling.yml +4 -3
  902. data/vendor/cmock/test/system/test_interactions/const_ptr_return_and_arg.yml +89 -0
  903. data/vendor/cmock/test/system/test_interactions/debug_output.yml +235 -0
  904. data/vendor/cmock/test/system/test_interactions/doesnt_leave_details_behind.yml +16 -16
  905. data/vendor/cmock/test/system/test_interactions/enforce_strict_ordering.yml +1 -1
  906. data/vendor/cmock/test/system/test_interactions/expect_and_return_custom_types.yml +1 -1
  907. data/vendor/cmock/test/system/test_interactions/expect_and_return_treat_as.yml +3 -3
  908. data/vendor/cmock/test/system/test_interactions/expect_and_throw.yml +1 -1
  909. data/vendor/cmock/test/system/test_interactions/expect_any_args.yml +1 -1
  910. data/vendor/cmock/test/system/test_interactions/fancy_pointer_handling.yml +3 -3
  911. data/vendor/cmock/test/system/test_interactions/function_pointer_handling.yml +1 -1
  912. data/vendor/cmock/test/system/test_interactions/ignore_and_return.yml +1 -1
  913. data/vendor/cmock/test/system/test_interactions/ignore_and_return_stateless.yml +1 -1
  914. data/vendor/cmock/test/system/test_interactions/ignore_strict_mock_calling.yml +1 -1
  915. data/vendor/cmock/test/system/test_interactions/newer_standards_stuff1.yml +1 -1
  916. data/vendor/cmock/test/system/test_interactions/nonstandard_parsed_stuff_1.yml +2 -2
  917. data/vendor/cmock/test/system/test_interactions/nonstandard_parsed_stuff_2.yml +7 -4
  918. data/vendor/cmock/test/system/test_interactions/out_of_memory.yml +65 -8
  919. data/vendor/cmock/test/system/test_interactions/parsing_challenges.yml +1 -1
  920. data/vendor/cmock/test/system/test_interactions/parsing_challenges_with_func_pointers.yml +88 -0
  921. data/vendor/cmock/test/system/test_interactions/pointer_handling.yml +465 -0
  922. data/vendor/cmock/test/system/test_interactions/{return_thru_ptr_and_expect_any_args.yml → return_thru_ptr_expect_any_args.yml} +9 -13
  923. data/vendor/cmock/test/system/test_interactions/return_thru_ptr_ignore.yml +142 -0
  924. data/vendor/cmock/test/system/test_interactions/return_thru_ptr_ignore_arg.yml +13 -9
  925. data/vendor/cmock/test/system/test_interactions/skeleton.yml +1 -1
  926. data/vendor/cmock/test/system/test_interactions/skeleton_update.yml +1 -1
  927. data/vendor/cmock/test/system/test_interactions/struct_union_enum_expect_and_return.yml +1 -1
  928. data/vendor/cmock/test/system/test_interactions/struct_union_enum_expect_and_return_with_plugins.yml +1 -1
  929. data/vendor/cmock/test/system/test_interactions/stubs_with_callbacks.yml +14 -2
  930. data/vendor/cmock/test/system/test_interactions/teardown_mock_calls.yml +57 -0
  931. data/vendor/cmock/test/system/test_interactions/teardown_mock_expectations.yml +59 -0
  932. data/vendor/cmock/test/system/test_interactions/unity_64bit_support.yml +1 -1
  933. data/vendor/cmock/test/system/test_interactions/unity_ignores.yml +1 -1
  934. data/vendor/cmock/test/system/test_interactions/unity_void_pointer_compare.yml +9 -9
  935. data/vendor/cmock/test/system/test_interactions/void_pointer_no_array_plugin.yml +133 -0
  936. data/vendor/cmock/test/system/test_interactions/void_pointer_treat_as_void_array_plugin.yml +102 -0
  937. data/vendor/cmock/test/system/test_interactions/volatile_pointer_handling.yml +291 -0
  938. data/vendor/cmock/test/system/test_interactions/wrong_expect_and_return.yml +9 -1
  939. data/vendor/cmock/test/targets/iar_arm.yml +14 -0
  940. data/vendor/cmock/test/targets/tiny.yml +36 -0
  941. data/vendor/cmock/test/test_helper.rb +1 -2
  942. data/vendor/cmock/test/unit/cmock_config_test.rb +1 -2
  943. data/vendor/cmock/test/unit/cmock_config_test.yml +1 -1
  944. data/vendor/cmock/test/unit/cmock_file_writer_test.rb +1 -1
  945. data/vendor/cmock/test/unit/cmock_generator_main_test.rb +6 -0
  946. data/vendor/cmock/test/unit/cmock_generator_no_error_stubs_plugin_array_test.rb +90 -0
  947. data/vendor/cmock/test/unit/cmock_generator_no_error_stubs_plugin_expect_any_args_test.rb +38 -0
  948. data/vendor/cmock/test/unit/cmock_generator_no_error_stubs_plugin_expect_test.rb +55 -0
  949. data/vendor/cmock/test/unit/cmock_generator_no_error_stubs_plugin_ignore_stateless_test.rb +42 -0
  950. data/vendor/cmock/test/unit/cmock_generator_no_error_stubs_plugin_ignore_test.rb +42 -0
  951. data/vendor/cmock/test/unit/cmock_generator_plugin_array_test.rb +63 -2
  952. data/vendor/cmock/test/unit/cmock_generator_plugin_callback_test.rb +24 -6
  953. data/vendor/cmock/test/unit/cmock_generator_plugin_cexception_test.rb +1 -1
  954. data/vendor/cmock/test/unit/cmock_generator_plugin_expect_a_test.rb +118 -2
  955. data/vendor/cmock/test/unit/cmock_generator_plugin_expect_any_args_test.rb +2 -2
  956. data/vendor/cmock/test/unit/cmock_generator_plugin_expect_b_test.rb +4 -2
  957. data/vendor/cmock/test/unit/cmock_generator_plugin_ignore_arg_test.rb +2 -1
  958. data/vendor/cmock/test/unit/cmock_generator_plugin_ignore_stateless_test.rb +2 -2
  959. data/vendor/cmock/test/unit/cmock_generator_plugin_ignore_test.rb +2 -2
  960. data/vendor/cmock/test/unit/cmock_generator_plugin_return_thru_ptr_test.rb +135 -3
  961. data/vendor/cmock/test/unit/cmock_generator_utils_test.rb +177 -9
  962. data/vendor/cmock/test/unit/cmock_header_parser_test.rb +705 -109
  963. data/vendor/cmock/test/unit/cmock_plugin_manager_test.rb +4 -2
  964. data/vendor/cmock/test/unit/cmock_unityhelper_parser_test.rb +1 -1
  965. data/vendor/cmock/vendor/unity/CMakeLists.txt +10 -0
  966. data/vendor/cmock/vendor/unity/LICENSE.txt +1 -1
  967. data/vendor/cmock/vendor/unity/README.md +2 -2
  968. data/vendor/cmock/vendor/unity/auto/__init__.py +1 -1
  969. data/vendor/cmock/vendor/unity/auto/colour_prompt.rb +1 -1
  970. data/vendor/cmock/vendor/unity/auto/colour_reporter.rb +7 -1
  971. data/vendor/cmock/vendor/unity/auto/extract_version.py +1 -1
  972. data/vendor/cmock/vendor/unity/auto/generate_config.yml +1 -1
  973. data/vendor/cmock/vendor/unity/auto/generate_module.rb +6 -6
  974. data/vendor/cmock/vendor/unity/auto/generate_test_runner.rb +95 -14
  975. data/vendor/cmock/vendor/unity/auto/parse_output.rb +10 -7
  976. data/vendor/cmock/vendor/unity/auto/stylize_as_junit.py +4 -3
  977. data/vendor/cmock/vendor/unity/auto/stylize_as_junit.rb +4 -2
  978. data/vendor/cmock/vendor/unity/auto/test_file_filter.rb +1 -1
  979. data/vendor/cmock/vendor/unity/auto/type_sanitizer.rb +1 -1
  980. data/vendor/cmock/vendor/unity/auto/unity_test_summary.py +2 -2
  981. data/vendor/cmock/vendor/unity/auto/unity_test_summary.rb +5 -2
  982. data/vendor/cmock/vendor/unity/auto/yaml_helper.rb +1 -1
  983. data/vendor/cmock/vendor/unity/docs/ThrowTheSwitchCodingStandard.md +2 -2
  984. data/vendor/cmock/vendor/unity/docs/UnityAssertionsReference.md +66 -1
  985. data/vendor/cmock/vendor/unity/docs/UnityChangeLog.md +41 -0
  986. data/vendor/cmock/vendor/unity/docs/UnityConfigurationGuide.md +2 -2
  987. data/vendor/cmock/vendor/unity/docs/UnityHelperScriptsGuide.md +28 -12
  988. data/vendor/cmock/vendor/unity/examples/example_1/makefile +1 -1
  989. data/vendor/cmock/vendor/unity/examples/example_1/src/ProductionCode.c +1 -1
  990. data/vendor/cmock/vendor/unity/examples/example_1/src/ProductionCode.h +1 -1
  991. data/vendor/cmock/vendor/unity/examples/example_1/src/ProductionCode2.c +1 -1
  992. data/vendor/cmock/vendor/unity/examples/example_1/src/ProductionCode2.h +1 -1
  993. data/vendor/cmock/vendor/unity/examples/example_1/test/TestProductionCode.c +1 -1
  994. data/vendor/cmock/vendor/unity/examples/example_1/test/TestProductionCode2.c +1 -1
  995. data/vendor/cmock/vendor/unity/examples/example_2/makefile +1 -1
  996. data/vendor/cmock/vendor/unity/examples/example_2/src/ProductionCode.c +1 -1
  997. data/vendor/cmock/vendor/unity/examples/example_2/src/ProductionCode.h +1 -1
  998. data/vendor/cmock/vendor/unity/examples/example_2/src/ProductionCode2.c +1 -1
  999. data/vendor/cmock/vendor/unity/examples/example_2/src/ProductionCode2.h +1 -1
  1000. data/vendor/cmock/vendor/unity/examples/example_2/test/TestProductionCode.c +1 -1
  1001. data/vendor/cmock/vendor/unity/examples/example_2/test/TestProductionCode2.c +1 -1
  1002. data/vendor/cmock/vendor/unity/examples/example_2/test/test_runners/TestProductionCode2_Runner.c +1 -1
  1003. data/vendor/cmock/vendor/unity/examples/example_2/test/test_runners/TestProductionCode_Runner.c +1 -1
  1004. data/vendor/cmock/vendor/unity/examples/example_2/test/test_runners/all_tests.c +1 -1
  1005. data/vendor/cmock/vendor/unity/examples/example_3/helper/UnityHelper.c +1 -1
  1006. data/vendor/cmock/vendor/unity/examples/example_3/helper/UnityHelper.h +1 -1
  1007. data/vendor/cmock/vendor/unity/examples/example_3/project.yml +24 -0
  1008. data/vendor/cmock/vendor/unity/examples/example_3/rakefile.rb +2 -3
  1009. data/vendor/cmock/vendor/unity/examples/example_3/rakefile_helper.rb +107 -153
  1010. data/vendor/cmock/vendor/unity/examples/example_3/src/ProductionCode.c +3 -3
  1011. data/vendor/cmock/vendor/unity/examples/example_3/src/ProductionCode.h +1 -1
  1012. data/vendor/cmock/vendor/unity/examples/example_3/src/ProductionCode2.c +1 -1
  1013. data/vendor/cmock/vendor/unity/examples/example_3/src/ProductionCode2.h +1 -1
  1014. data/vendor/cmock/vendor/unity/examples/example_3/test/TestProductionCode.c +1 -1
  1015. data/vendor/cmock/vendor/unity/examples/example_3/test/TestProductionCode2.c +1 -1
  1016. data/vendor/cmock/vendor/unity/examples/example_4/src/ProductionCode.c +1 -1
  1017. data/vendor/cmock/vendor/unity/examples/example_4/src/ProductionCode.h +1 -1
  1018. data/vendor/cmock/vendor/unity/examples/example_4/src/ProductionCode2.c +1 -1
  1019. data/vendor/cmock/vendor/unity/examples/example_4/src/ProductionCode2.h +1 -1
  1020. data/vendor/cmock/vendor/unity/examples/example_4/test/TestProductionCode.c +1 -1
  1021. data/vendor/cmock/vendor/unity/examples/example_4/test/TestProductionCode2.c +1 -1
  1022. data/vendor/cmock/vendor/unity/examples/example_5/makefile +63 -0
  1023. data/vendor/cmock/vendor/unity/examples/example_5/readme.txt +38 -0
  1024. data/vendor/cmock/vendor/unity/examples/example_5/src/ProductionCode.c +56 -0
  1025. data/vendor/cmock/vendor/unity/examples/example_5/src/ProductionCode.h +16 -0
  1026. data/vendor/cmock/vendor/unity/examples/example_5/subprojects/unity.wrap +3 -0
  1027. data/vendor/cmock/vendor/unity/examples/example_5/test/TestProductionCode.c +45 -0
  1028. data/vendor/cmock/vendor/unity/examples/example_5/test/test_runners/TestProductionCode_Runner.c +48 -0
  1029. data/vendor/cmock/vendor/unity/examples/example_5/test/unity_detail_config.h +25 -0
  1030. data/vendor/cmock/vendor/unity/examples/unity_config.h +5 -3
  1031. data/vendor/cmock/vendor/unity/extras/bdd/src/unity_bdd.h +1 -1
  1032. data/vendor/cmock/vendor/unity/extras/bdd/test/test_bdd.c +1 -1
  1033. data/vendor/cmock/vendor/unity/extras/fixture/src/unity_fixture.c +59 -15
  1034. data/vendor/cmock/vendor/unity/extras/fixture/src/unity_fixture.h +1 -1
  1035. data/vendor/cmock/vendor/unity/extras/fixture/src/unity_fixture_internals.h +4 -1
  1036. data/vendor/cmock/vendor/unity/extras/fixture/test/main/AllTests.c +1 -1
  1037. data/vendor/cmock/vendor/unity/extras/fixture/test/template_fixture_tests.c +1 -1
  1038. data/vendor/cmock/vendor/unity/extras/fixture/test/unity_fixture_Test.c +46 -1
  1039. data/vendor/cmock/vendor/unity/extras/fixture/test/unity_fixture_TestRunner.c +4 -1
  1040. data/vendor/cmock/vendor/unity/extras/memory/src/unity_memory.c +1 -1
  1041. data/vendor/cmock/vendor/unity/extras/memory/src/unity_memory.h +1 -1
  1042. data/vendor/cmock/vendor/unity/extras/memory/test/unity_memory_Test.c +1 -1
  1043. data/vendor/cmock/vendor/unity/extras/memory/test/unity_memory_TestRunner.c +1 -1
  1044. data/vendor/cmock/vendor/unity/extras/memory/test/unity_output_Spy.c +1 -1
  1045. data/vendor/cmock/vendor/unity/extras/memory/test/unity_output_Spy.h +1 -1
  1046. data/vendor/cmock/vendor/unity/library.json +0 -7
  1047. data/vendor/cmock/vendor/unity/meson.build +16 -8
  1048. data/vendor/cmock/vendor/unity/meson_options.txt +5 -3
  1049. data/vendor/cmock/vendor/unity/src/unity.c +480 -141
  1050. data/vendor/cmock/vendor/unity/src/unity.h +16 -4
  1051. data/vendor/cmock/vendor/unity/src/unity_internals.h +291 -148
  1052. data/vendor/cmock/vendor/unity/test/Makefile +4 -6
  1053. data/vendor/cmock/vendor/unity/test/rakefile +42 -21
  1054. data/vendor/cmock/vendor/unity/test/rakefile_helper.rb +154 -15
  1055. data/vendor/cmock/vendor/unity/test/spec/generate_module_existing_file_spec.rb +1 -1
  1056. data/vendor/cmock/vendor/unity/test/targets/clang.yml +157 -0
  1057. data/vendor/cmock/vendor/unity/test/targets/gcc.yml +139 -0
  1058. data/vendor/cmock/vendor/unity/test/targets/hitech_picc18.yml +9 -16
  1059. data/vendor/cmock/vendor/unity/test/targets/iar_arm.yml +88 -0
  1060. data/vendor/cmock/vendor/unity/test/targets/no_stdlib.yml +23 -0
  1061. data/vendor/cmock/vendor/unity/test/testdata/CException.h +1 -1
  1062. data/vendor/cmock/vendor/unity/test/testdata/Defs.h +1 -1
  1063. data/vendor/cmock/vendor/unity/test/testdata/cmock.h +1 -1
  1064. data/vendor/cmock/vendor/unity/test/testdata/mockMock.h +1 -1
  1065. data/vendor/cmock/vendor/unity/test/testdata/testRunnerGenerator.c +1 -1
  1066. data/vendor/cmock/vendor/unity/test/testdata/testRunnerGeneratorSmall.c +1 -1
  1067. data/vendor/cmock/vendor/unity/test/testdata/testRunnerGeneratorWithMocks.c +1 -1
  1068. data/vendor/cmock/vendor/unity/test/tests/self_assessment_utils.h +23 -7
  1069. data/vendor/cmock/vendor/unity/test/tests/test_generate_test_runner.rb +1 -4
  1070. data/vendor/cmock/vendor/unity/test/tests/test_unity_arrays.c +1 -1
  1071. data/vendor/cmock/vendor/unity/test/tests/test_unity_core.c +33 -38
  1072. data/vendor/cmock/vendor/unity/test/tests/test_unity_doubles.c +4 -4
  1073. data/vendor/cmock/vendor/unity/test/tests/test_unity_floats.c +15 -6
  1074. data/vendor/cmock/vendor/unity/test/tests/test_unity_integers.c +35 -1
  1075. data/vendor/cmock/vendor/unity/test/tests/test_unity_integers_64.c +1 -1
  1076. data/vendor/cmock/vendor/unity/test/tests/test_unity_memory.c +69 -1
  1077. data/vendor/cmock/vendor/unity/test/tests/test_unity_parameterized.c +5 -5
  1078. data/vendor/cmock/vendor/unity/test/tests/test_unity_parameterizedDemo.c +1 -1
  1079. data/vendor/cmock/vendor/unity/test/tests/test_unity_strings.c +65 -1
  1080. data/vendor/cmock/vendor/unity/test/tests/types_for_test.h +1 -1
  1081. data/vendor/unity/CMakeLists.txt +10 -0
  1082. data/vendor/unity/LICENSE.txt +1 -1
  1083. data/vendor/unity/README.md +2 -2
  1084. data/vendor/unity/auto/__init__.py +1 -1
  1085. data/vendor/unity/auto/colour_prompt.rb +1 -1
  1086. data/vendor/unity/auto/colour_reporter.rb +7 -1
  1087. data/vendor/unity/auto/extract_version.py +1 -1
  1088. data/vendor/unity/auto/generate_config.yml +1 -1
  1089. data/vendor/unity/auto/generate_module.rb +6 -6
  1090. data/vendor/unity/auto/generate_test_runner.rb +95 -14
  1091. data/vendor/unity/auto/parse_output.rb +10 -7
  1092. data/vendor/unity/auto/stylize_as_junit.py +4 -3
  1093. data/vendor/unity/auto/stylize_as_junit.rb +4 -2
  1094. data/vendor/unity/auto/test_file_filter.rb +1 -1
  1095. data/vendor/unity/auto/type_sanitizer.rb +1 -1
  1096. data/vendor/unity/auto/unity_test_summary.py +2 -2
  1097. data/vendor/unity/auto/unity_test_summary.rb +5 -2
  1098. data/vendor/unity/auto/yaml_helper.rb +1 -1
  1099. data/vendor/unity/docs/ThrowTheSwitchCodingStandard.md +2 -2
  1100. data/vendor/unity/docs/UnityAssertionsReference.md +66 -1
  1101. data/vendor/unity/docs/UnityChangeLog.md +41 -0
  1102. data/vendor/unity/docs/UnityConfigurationGuide.md +2 -2
  1103. data/vendor/unity/docs/UnityHelperScriptsGuide.md +28 -12
  1104. data/vendor/unity/examples/example_1/makefile +1 -1
  1105. data/vendor/unity/examples/example_1/src/ProductionCode.c +1 -1
  1106. data/vendor/unity/examples/example_1/src/ProductionCode.h +1 -1
  1107. data/vendor/unity/examples/example_1/src/ProductionCode2.c +1 -1
  1108. data/vendor/unity/examples/example_1/src/ProductionCode2.h +1 -1
  1109. data/vendor/unity/examples/example_1/test/TestProductionCode.c +1 -1
  1110. data/vendor/unity/examples/example_1/test/TestProductionCode2.c +1 -1
  1111. data/vendor/unity/examples/example_2/makefile +1 -1
  1112. data/vendor/unity/examples/example_2/src/ProductionCode.c +1 -1
  1113. data/vendor/unity/examples/example_2/src/ProductionCode.h +1 -1
  1114. data/vendor/unity/examples/example_2/src/ProductionCode2.c +1 -1
  1115. data/vendor/unity/examples/example_2/src/ProductionCode2.h +1 -1
  1116. data/vendor/unity/examples/example_2/test/TestProductionCode.c +1 -1
  1117. data/vendor/unity/examples/example_2/test/TestProductionCode2.c +1 -1
  1118. data/vendor/unity/examples/example_2/test/test_runners/TestProductionCode2_Runner.c +1 -1
  1119. data/vendor/unity/examples/example_2/test/test_runners/TestProductionCode_Runner.c +1 -1
  1120. data/vendor/unity/examples/example_2/test/test_runners/all_tests.c +1 -1
  1121. data/vendor/unity/examples/example_3/helper/UnityHelper.c +1 -1
  1122. data/vendor/unity/examples/example_3/helper/UnityHelper.h +1 -1
  1123. data/vendor/unity/examples/example_3/project.yml +24 -0
  1124. data/vendor/unity/examples/example_3/rakefile.rb +2 -3
  1125. data/vendor/unity/examples/example_3/rakefile_helper.rb +107 -153
  1126. data/vendor/unity/examples/example_3/src/ProductionCode.c +3 -3
  1127. data/vendor/unity/examples/example_3/src/ProductionCode.h +1 -1
  1128. data/vendor/unity/examples/example_3/src/ProductionCode2.c +1 -1
  1129. data/vendor/unity/examples/example_3/src/ProductionCode2.h +1 -1
  1130. data/vendor/unity/examples/example_3/test/TestProductionCode.c +1 -1
  1131. data/vendor/unity/examples/example_3/test/TestProductionCode2.c +1 -1
  1132. data/vendor/unity/examples/example_4/src/ProductionCode.c +1 -1
  1133. data/vendor/unity/examples/example_4/src/ProductionCode.h +1 -1
  1134. data/vendor/unity/examples/example_4/src/ProductionCode2.c +1 -1
  1135. data/vendor/unity/examples/example_4/src/ProductionCode2.h +1 -1
  1136. data/vendor/unity/examples/example_4/test/TestProductionCode.c +1 -1
  1137. data/vendor/unity/examples/example_4/test/TestProductionCode2.c +1 -1
  1138. data/vendor/unity/examples/example_5/makefile +63 -0
  1139. data/vendor/unity/examples/example_5/readme.txt +38 -0
  1140. data/vendor/unity/examples/example_5/src/ProductionCode.c +56 -0
  1141. data/vendor/unity/examples/example_5/src/ProductionCode.h +16 -0
  1142. data/vendor/unity/examples/example_5/subprojects/unity.wrap +3 -0
  1143. data/vendor/unity/examples/example_5/test/TestProductionCode.c +45 -0
  1144. data/vendor/unity/examples/example_5/test/test_runners/TestProductionCode_Runner.c +48 -0
  1145. data/vendor/unity/examples/example_5/test/unity_detail_config.h +25 -0
  1146. data/vendor/unity/examples/unity_config.h +5 -3
  1147. data/vendor/unity/extras/bdd/src/unity_bdd.h +1 -1
  1148. data/vendor/unity/extras/bdd/test/test_bdd.c +1 -1
  1149. data/vendor/unity/extras/fixture/src/unity_fixture.c +59 -15
  1150. data/vendor/unity/extras/fixture/src/unity_fixture.h +1 -1
  1151. data/vendor/unity/extras/fixture/src/unity_fixture_internals.h +4 -1
  1152. data/vendor/unity/extras/fixture/test/main/AllTests.c +1 -1
  1153. data/vendor/unity/extras/fixture/test/template_fixture_tests.c +1 -1
  1154. data/vendor/unity/extras/fixture/test/unity_fixture_Test.c +46 -1
  1155. data/vendor/unity/extras/fixture/test/unity_fixture_TestRunner.c +4 -1
  1156. data/vendor/unity/extras/memory/src/unity_memory.c +1 -1
  1157. data/vendor/unity/extras/memory/src/unity_memory.h +1 -1
  1158. data/vendor/unity/extras/memory/test/unity_memory_Test.c +1 -1
  1159. data/vendor/unity/extras/memory/test/unity_memory_TestRunner.c +1 -1
  1160. data/vendor/unity/extras/memory/test/unity_output_Spy.c +1 -1
  1161. data/vendor/unity/extras/memory/test/unity_output_Spy.h +1 -1
  1162. data/vendor/unity/library.json +0 -7
  1163. data/vendor/unity/meson.build +16 -8
  1164. data/vendor/unity/meson_options.txt +5 -3
  1165. data/vendor/unity/src/unity.c +480 -141
  1166. data/vendor/unity/src/unity.h +16 -4
  1167. data/vendor/unity/src/unity_internals.h +291 -148
  1168. data/vendor/unity/test/Makefile +4 -6
  1169. data/vendor/unity/test/rakefile +42 -21
  1170. data/vendor/unity/test/rakefile_helper.rb +154 -15
  1171. data/vendor/unity/test/spec/generate_module_existing_file_spec.rb +1 -1
  1172. data/vendor/unity/test/targets/clang.yml +157 -0
  1173. data/vendor/unity/test/targets/gcc.yml +139 -0
  1174. data/vendor/unity/test/targets/hitech_picc18.yml +9 -16
  1175. data/vendor/unity/test/targets/iar_arm.yml +88 -0
  1176. data/vendor/unity/test/targets/no_stdlib.yml +23 -0
  1177. data/vendor/unity/test/testdata/CException.h +1 -1
  1178. data/vendor/unity/test/testdata/Defs.h +1 -1
  1179. data/vendor/unity/test/testdata/cmock.h +1 -1
  1180. data/vendor/unity/test/testdata/mockMock.h +1 -1
  1181. data/vendor/unity/test/testdata/testRunnerGenerator.c +1 -1
  1182. data/vendor/unity/test/testdata/testRunnerGeneratorSmall.c +1 -1
  1183. data/vendor/unity/test/testdata/testRunnerGeneratorWithMocks.c +1 -1
  1184. data/vendor/unity/test/tests/self_assessment_utils.h +23 -7
  1185. data/vendor/unity/test/tests/test_generate_test_runner.rb +1 -4
  1186. data/vendor/unity/test/tests/test_unity_arrays.c +1 -1
  1187. data/vendor/unity/test/tests/test_unity_core.c +33 -38
  1188. data/vendor/unity/test/tests/test_unity_doubles.c +4 -4
  1189. data/vendor/unity/test/tests/test_unity_floats.c +15 -6
  1190. data/vendor/unity/test/tests/test_unity_integers.c +35 -1
  1191. data/vendor/unity/test/tests/test_unity_integers_64.c +1 -1
  1192. data/vendor/unity/test/tests/test_unity_memory.c +69 -1
  1193. data/vendor/unity/test/tests/test_unity_parameterized.c +5 -5
  1194. data/vendor/unity/test/tests/test_unity_parameterizedDemo.c +1 -1
  1195. data/vendor/unity/test/tests/test_unity_strings.c +65 -1
  1196. data/vendor/unity/test/tests/types_for_test.h +1 -1
  1197. metadata +702 -177
  1198. data/docs/CeedlingPacket.md +0 -5651
  1199. data/lib/ceedling/build_batchinator.rb +0 -113
  1200. data/lib/ceedling/generator_test_results_backtrace.rb +0 -215
  1201. data/lib/ceedling/generator_test_runner.rb +0 -84
  1202. data/lib/ceedling/preprocessinator.rb +0 -239
  1203. data/lib/ceedling/preprocessinator_extractor.rb +0 -257
  1204. data/lib/ceedling/preprocessinator_file_handler.rb +0 -229
  1205. data/lib/ceedling/preprocessinator_includes_handler.rb +0 -382
  1206. data/lib/ceedling/task_invoker.rb +0 -70
  1207. data/lib/ceedling/test_invoker.rb +0 -506
  1208. data/lib/ceedling/test_invoker_helper.rb +0 -347
  1209. data/plugins/gcov/README.md +0 -893
  1210. data/plugins/gcov/lib/reportinator_helper.rb +0 -30
  1211. data/plugins/report_tests_log_factory/sample_html_report.png +0 -0
  1212. data/spec/configurator_spec.rb +0 -18
  1213. data/spec/generator_test_results_spec.rb +0 -131
  1214. data/spec/parsing_parcels_spec.rb +0 -66
  1215. data/spec/preprocessinator_includes_handler_spec.rb +0 -289
  1216. data/spec/reportinator_spec.rb +0 -26
  1217. data/spec/spec_helper.rb +0 -31
  1218. data/spec/test_context_extractor_spec.rb +0 -328
  1219. data/spec/uncategorized_specs_spec.rb +0 -15
  1220. data/vendor/cmock/examples/temp_sensor/targets/gcc.yml +0 -97
  1221. data/vendor/cmock/examples/temp_sensor/targets/iar_v4.yml +0 -143
  1222. data/vendor/cmock/examples/temp_sensor/targets/iar_v5.yml +0 -132
  1223. data/vendor/cmock/scripts/create_mock.rb +0 -15
  1224. data/vendor/cmock/scripts/create_runner.rb +0 -25
  1225. data/vendor/cmock/scripts/test_summary.rb +0 -25
  1226. data/vendor/cmock/test/system/test_interactions/array_and_pointer_handling.yml +0 -453
  1227. data/vendor/cmock/test/targets/clang_strict.yml +0 -97
  1228. data/vendor/cmock/test/targets/gcc.yml +0 -65
  1229. data/vendor/cmock/test/targets/gcc_64.yml +0 -65
  1230. data/vendor/cmock/test/targets/gcc_tiny.yml +0 -87
  1231. data/vendor/cmock/test/targets/iar_arm_v4.yml +0 -117
  1232. data/vendor/cmock/test/targets/iar_arm_v5.yml +0 -102
  1233. data/vendor/cmock/vendor/unity/examples/example_3/target_gcc_32.yml +0 -54
  1234. data/vendor/cmock/vendor/unity/test/targets/ansi.yml +0 -51
  1235. data/vendor/cmock/vendor/unity/test/targets/clang_file.yml +0 -79
  1236. data/vendor/cmock/vendor/unity/test/targets/clang_strict.yml +0 -79
  1237. data/vendor/cmock/vendor/unity/test/targets/gcc_32.yml +0 -52
  1238. data/vendor/cmock/vendor/unity/test/targets/gcc_64.yml +0 -53
  1239. data/vendor/cmock/vendor/unity/test/targets/gcc_auto_limits.yml +0 -50
  1240. data/vendor/cmock/vendor/unity/test/targets/gcc_auto_stdint.yml +0 -62
  1241. data/vendor/cmock/vendor/unity/test/targets/iar_arm_v4.yml +0 -105
  1242. data/vendor/cmock/vendor/unity/test/targets/iar_arm_v5.yml +0 -99
  1243. data/vendor/cmock/vendor/unity/test/targets/iar_arm_v5_3.yml +0 -99
  1244. data/vendor/cmock/vendor/unity/test/targets/iar_armcortex_LM3S9B92_v5_4.yml +0 -97
  1245. data/vendor/cmock/vendor/unity/test/targets/iar_cortexm3_v5.yml +0 -101
  1246. data/vendor/cmock/vendor/unity/test/targets/iar_msp430.yml +0 -119
  1247. data/vendor/cmock/vendor/unity/test/targets/iar_sh2a_v6.yml +0 -106
  1248. data/vendor/unity/examples/example_3/target_gcc_32.yml +0 -54
  1249. data/vendor/unity/test/targets/ansi.yml +0 -51
  1250. data/vendor/unity/test/targets/clang_file.yml +0 -79
  1251. data/vendor/unity/test/targets/clang_strict.yml +0 -79
  1252. data/vendor/unity/test/targets/gcc_32.yml +0 -52
  1253. data/vendor/unity/test/targets/gcc_64.yml +0 -53
  1254. data/vendor/unity/test/targets/gcc_auto_limits.yml +0 -50
  1255. data/vendor/unity/test/targets/gcc_auto_stdint.yml +0 -62
  1256. data/vendor/unity/test/targets/gcc_manual_math.yml +0 -50
  1257. data/vendor/unity/test/targets/iar_arm_v4.yml +0 -105
  1258. data/vendor/unity/test/targets/iar_arm_v5.yml +0 -99
  1259. data/vendor/unity/test/targets/iar_arm_v5_3.yml +0 -99
  1260. data/vendor/unity/test/targets/iar_armcortex_LM3S9B92_v5_4.yml +0 -97
  1261. data/vendor/unity/test/targets/iar_cortexm3_v5.yml +0 -101
  1262. data/vendor/unity/test/targets/iar_msp430.yml +0 -119
  1263. data/vendor/unity/test/targets/iar_sh2a_v6.yml +0 -106
@@ -1,7 +1,7 @@
1
1
  # =========================================================================
2
2
  # CMock - Automatic Mock Generation for C
3
3
  # ThrowTheSwitch.org
4
- # Copyright (c) 2007-25 Mike Karlesky, Mark VanderVoord, & Greg Williams
4
+ # Copyright (c) 2007-26 Mike Karlesky, Mark VanderVoord, & Greg Williams
5
5
  # SPDX-License-Identifier: MIT
6
6
  # =========================================================================
7
7
 
@@ -27,6 +27,7 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
27
27
  @config.expect :inline_function_patterns, ['(static\s+inline|inline\s+static)\s*', '(\bstatic\b|\binline\b)\s*']
28
28
  @config.expect :array_size_type, ['int', 'size_t']
29
29
  @config.expect :array_size_name, 'size|len'
30
+ @config.expect :ct_assert_patterns, ['ct_assert', '_?[Ss]tatic_[Aa]ssert', '_Static_assert', 'STATIC_ASSERT', 'BUILD_ASSERT', 'CTASSERT']
30
31
 
31
32
  @parser = CMockHeaderParser.new(@config)
32
33
 
@@ -146,6 +147,118 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
146
147
  assert_equal(expected, @parser.import_source(source, @test_project))
147
148
  end
148
149
 
150
+ it "remove code inside #if 0 blocks" do
151
+ source =
152
+ "void before(void);\n" +
153
+ "#if 0\n" +
154
+ "void hidden(void);\n" +
155
+ "#endif\n" +
156
+ "void after(void);\n"
157
+
158
+ expected = ["void before(void)", "void after(void)"]
159
+
160
+ assert_equal(expected, @parser.import_source(source, @test_project).map! { |s| s.strip })
161
+ end
162
+
163
+ it "keep code inside #if 1 blocks" do
164
+ source =
165
+ "void before(void);\n" +
166
+ "#if 1\n" +
167
+ "void visible(void);\n" +
168
+ "#endif\n" +
169
+ "void after(void);\n"
170
+
171
+ expected = ["void before(void)", "void visible(void)", "void after(void)"]
172
+
173
+ assert_equal(expected, @parser.import_source(source, @test_project).map! { |s| s.strip })
174
+ end
175
+
176
+ it "keep else branch of #if 0 blocks" do
177
+ source =
178
+ "void before(void);\n" +
179
+ "#if 0\n" +
180
+ "void hidden(void);\n" +
181
+ "#else\n" +
182
+ "void visible(void);\n" +
183
+ "#endif\n" +
184
+ "void after(void);\n"
185
+
186
+ expected = ["void before(void)", "void visible(void)", "void after(void)"]
187
+
188
+ assert_equal(expected, @parser.import_source(source, @test_project).map! { |s| s.strip })
189
+ end
190
+
191
+ it "remove else branch of #if 1 blocks" do
192
+ source =
193
+ "void before(void);\n" +
194
+ "#if 1\n" +
195
+ "void visible(void);\n" +
196
+ "#else\n" +
197
+ "void hidden(void);\n" +
198
+ "#endif\n" +
199
+ "void after(void);\n"
200
+
201
+ expected = ["void before(void)", "void visible(void)", "void after(void)"]
202
+
203
+ assert_equal(expected, @parser.import_source(source, @test_project).map! { |s| s.strip })
204
+ end
205
+
206
+ it "handle nested #if 1 blocks inside #if 0" do
207
+ source =
208
+ "void before(void);\n" +
209
+ "#if 0\n" +
210
+ "void hidden1(void);\n" +
211
+ "#if 1\n" +
212
+ "void hidden2(void);\n" +
213
+ "#endif\n" +
214
+ "void hidden3(void);\n" +
215
+ "#endif\n" +
216
+ "void after(void);\n"
217
+
218
+ expected = ["void before(void)", "void after(void)"]
219
+
220
+ assert_equal(expected, @parser.import_source(source, @test_project).map! { |s| s.strip })
221
+ end
222
+
223
+ it "handle nested #if 0 blocks inside #if 1" do
224
+ source =
225
+ "void before(void);\n" +
226
+ "#if 1\n" +
227
+ "void visible1(void);\n" +
228
+ "#if 0\n" +
229
+ "void hidden1(void);\n" +
230
+ "#endif\n" +
231
+ "void visible2(void);\n" +
232
+ "#endif\n" +
233
+ "void after(void);\n"
234
+
235
+ expected = ["void before(void)", "void visible1(void)", "void visible2(void)", "void after(void)"]
236
+
237
+ assert_equal(expected, @parser.import_source(source, @test_project).map! { |s| s.strip })
238
+ end
239
+
240
+ it "handle back to back #if 1 blocks and #if 0 blocks" do
241
+ source =
242
+ "void before(void);\n" +
243
+ "#if 0\n" +
244
+ "void hidden1(void);\n" +
245
+ "#endif\n" +
246
+ "#if 1\n" +
247
+ "void visible1(void);\n" +
248
+ "#endif\n" +
249
+ "#if 0\n" +
250
+ "void hidden2(void);\n" +
251
+ "#endif\n" +
252
+ "#if 1\n" +
253
+ "void visible2(void);\n" +
254
+ "#endif\n" +
255
+ "void after(void);\n"
256
+
257
+ expected = ["void before(void)", "void visible1(void)", "void visible2(void)", "void after(void)"]
258
+
259
+ assert_equal(expected, @parser.import_source(source, @test_project).map! { |s| s.strip })
260
+ end
261
+
149
262
 
150
263
  it "remove assembler pragma sections" do
151
264
  source =
@@ -259,6 +372,32 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
259
372
  end
260
373
 
261
374
 
375
+ it "ignore compile-time assertions and not treat them as function prototypes" do
376
+ source =
377
+ "static_assert(BLAH_BOOLEAN_TRAIT);\n" +
378
+ "void real_func(int a);\n" +
379
+ "ct_assert(COMMIT_ID_H, ID_SIZE == (sizeof(ID)) - 1);\n" +
380
+ "CTASSERT(OTHER_HEADER_H, BUF_SIZE != 0);\n" +
381
+ "BUILD_ASSERT(MAX_LEN <= 256);\n" +
382
+ "STATIC_ASSERT(sizeof(MyStruct) >= 4);\n"
383
+
384
+ expected = ["void real_func(int a)"]
385
+
386
+ assert_equal(expected, @parser.import_source(source, @test_project).map! { |s| s.strip })
387
+ end
388
+
389
+
390
+ it "ignore function pointer variables with pointer return types and not treat them as function prototypes" do
391
+ source =
392
+ "struct_t * (*func)(some_argument);\n" +
393
+ "void real_func(int a);\n"
394
+
395
+ expected = ["void real_func(int a)"]
396
+
397
+ assert_equal(expected, @parser.import_source(source, @test_project).map! { |s| s.strip })
398
+ end
399
+
400
+
262
401
  it "remove struct statements" do
263
402
  source =
264
403
  "struct _NamedStruct1 {\n" +
@@ -597,7 +736,7 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
597
736
  },
598
737
  :modifier=>"",
599
738
  :contains_ptr? => false,
600
- :args=>[{:type=>"int", :name=>"a", :ptr? => false, :const? => false, :const_ptr? => false}],
739
+ :args=>[{:type=>"int", :name=>"a", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false}],
601
740
  :args_string=>"int a",
602
741
  :args_call=>"a"}
603
742
  assert_equal(expected, @parser.parse_declaration(@test_project, source))
@@ -643,7 +782,7 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
643
782
  },
644
783
  :modifier=>"",
645
784
  :contains_ptr? => true,
646
- :args=>[{:type=>"MY_FUNKY_VOID*", :name=>"bluh", :ptr? => true, :const? => false, :const_ptr? => false}],
785
+ :args=>[{:type=>"MY_FUNKY_VOID*", :name=>"bluh", :ptr? => true, :string? => false, :const? => false, :const_ptr? => false}],
647
786
  :args_string=>"MY_FUNKY_VOID* bluh",
648
787
  :args_call=>"bluh" }
649
788
  assert_equal(expected, @parser.parse_declaration(@test_project, source))
@@ -745,8 +884,8 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
745
884
  },
746
885
  :modifier=>"",
747
886
  :contains_ptr? => false,
748
- :args=>[ {:type=>"int", :name=>"a", :ptr? => false, :const? => false, :const_ptr? => false},
749
- {:type=>"unsigned int", :name=>"b", :ptr? => false, :const? => false, :const_ptr? => false}
887
+ :args=>[ {:type=>"int", :name=>"a", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false},
888
+ {:type=>"unsigned int", :name=>"b", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false}
750
889
  ],
751
890
  :args_string=>"int a, unsigned int b",
752
891
  :args_call=>"a, b" }
@@ -771,9 +910,9 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
771
910
  :class=>nil,
772
911
  :modifier=>"",
773
912
  :contains_ptr? => false,
774
- :args=>[ {:type=>"uint", :name=>"la", :ptr? => false, :const? => false, :const_ptr? => false},
775
- {:type=>"int", :name=>"de", :ptr? => false, :const? => false, :const_ptr? => false},
776
- {:type=>"bool", :name=>"da", :ptr? => false, :const? => false, :const_ptr? => false}
913
+ :args=>[ {:type=>"uint", :name=>"la", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false},
914
+ {:type=>"int", :name=>"de", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false},
915
+ {:type=>"bool", :name=>"da", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false}
777
916
  ],
778
917
  :args_string=>"uint la, int de, bool da",
779
918
  :args_call=>"la, de, da" }
@@ -822,8 +961,8 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
822
961
  :class=>nil,
823
962
  :modifier=>"const",
824
963
  :contains_ptr? => true,
825
- :args=>[ {:type=>"int", :name=>"Trinity", :ptr? => false, :const? => false, :const_ptr? => false},
826
- {:type=>"unsigned int*", :name=>"Neo", :ptr? => true, :const? => false, :const_ptr? => false}
964
+ :args=>[ {:type=>"int", :name=>"Trinity", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false},
965
+ {:type=>"unsigned int*", :name=>"Neo", :ptr? => true, :string? => false, :const? => false, :const_ptr? => false}
827
966
  ],
828
967
  :args_string=>"int Trinity, unsigned int* Neo",
829
968
  :args_call=>"Trinity, Neo" }
@@ -849,8 +988,8 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
849
988
  :modifier=>"const",
850
989
  :c_calling_convention=>"__stdcall",
851
990
  :contains_ptr? => true,
852
- :args=>[ {:type=>"int", :name=>"Trinity", :ptr? => false, :const? => false, :const_ptr? => false},
853
- {:type=>"unsigned int*", :name=>"Neo", :ptr? => true, :const? => false, :const_ptr? => false}
991
+ :args=>[ {:type=>"int", :name=>"Trinity", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false},
992
+ {:type=>"unsigned int*", :name=>"Neo", :ptr? => true, :string? => false, :const? => false, :const_ptr? => false}
854
993
  ],
855
994
  :args_string=>"int Trinity, unsigned int* Neo",
856
995
  :args_call=>"Trinity, Neo" }
@@ -874,8 +1013,8 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
874
1013
  },
875
1014
  :modifier=>"",
876
1015
  :contains_ptr? => false,
877
- :args=>[ {:type=>"int", :name=>"a", :ptr? => false, :const? => false, :const_ptr? => false},
878
- {:type=>"unsigned int", :name=>"b", :ptr? => false, :const? => false, :const_ptr? => false}
1016
+ :args=>[ {:type=>"int", :name=>"a", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false},
1017
+ {:type=>"unsigned int", :name=>"b", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false}
879
1018
  ],
880
1019
  :args_string=>"int a, unsigned int b",
881
1020
  :args_call=>"a, b" }
@@ -902,8 +1041,8 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
902
1041
  :class=>nil,
903
1042
  :modifier=>"const",
904
1043
  :contains_ptr? => true,
905
- :args=>[ {:type=>"int", :name=>"Trinity", :ptr? => false, :const? => false, :const_ptr? => false},
906
- {:type=>"unsigned int*", :name=>"Neo", :ptr? => true, :const? => false, :const_ptr? => false}
1044
+ :args=>[ {:type=>"int", :name=>"Trinity", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false},
1045
+ {:type=>"unsigned int*", :name=>"Neo", :ptr? => true, :string? => false, :const? => false, :const_ptr? => false}
907
1046
  ],
908
1047
  :args_string=>"int Trinity, unsigned int* Neo",
909
1048
  :args_call=>"Trinity, Neo" },
@@ -922,8 +1061,8 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
922
1061
  :class=>nil,
923
1062
  :modifier=>"",
924
1063
  :contains_ptr? => true,
925
- :args=>[ {:type=>"int", :name=>"cmock_arg1", :ptr? => false, :const? => false, :const_ptr? => false},
926
- {:type=>"unsigned int*", :name=>"cmock_arg2", :ptr? => true, :const? => false, :const_ptr? => false}
1064
+ :args=>[ {:type=>"int", :name=>"cmock_arg1", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false},
1065
+ {:type=>"unsigned int*", :name=>"cmock_arg2", :ptr? => true, :string? => false, :const? => false, :const_ptr? => false}
927
1066
  ],
928
1067
  :args_string=>"int cmock_arg1, unsigned int* cmock_arg2",
929
1068
  :args_call=>"cmock_arg1, cmock_arg2"
@@ -951,8 +1090,8 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
951
1090
  },
952
1091
  :modifier=>"const",
953
1092
  :contains_ptr? => true,
954
- :args=>[ {:type=>"int", :name=>"Trinity", :ptr? => false, :const? => false, :const_ptr? => false},
955
- {:type=>"unsigned int*", :name=>"Neo", :ptr? => true, :const? => false, :const_ptr? => false}
1093
+ :args=>[ {:type=>"int", :name=>"Trinity", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false},
1094
+ {:type=>"unsigned int*", :name=>"Neo", :ptr? => true, :string? => false, :const? => false, :const_ptr? => false}
956
1095
  ],
957
1096
  :args_string=>"int Trinity, unsigned int* Neo",
958
1097
  :args_call=>"Trinity, Neo"
@@ -1038,7 +1177,7 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
1038
1177
  :ptr? => true,
1039
1178
  :const? => false,
1040
1179
  :const_ptr? => true,
1041
- :str => "int* cmock_to_return",
1180
+ :str => "int* const cmock_to_return",
1042
1181
  :void? => false
1043
1182
  },
1044
1183
  :modifier=>"const",
@@ -1070,14 +1209,14 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
1070
1209
  :var_arg => nil,
1071
1210
  :args_string => "int const* cmock_arg1, int* const cmock_arg2, const int* cmock_arg3, const int* const cmock_arg4, " +
1072
1211
  "int const* const cmock_arg5, int* cmock_arg6, int cmock_arg7, const int cmock_arg8",
1073
- :args => [{ :type=>"int const*", :name => "cmock_arg1", :ptr? => true, :const? => true, :const_ptr? => false },
1074
- { :type=>"int*", :name => "cmock_arg2", :ptr? => true, :const? => false, :const_ptr? => true },
1075
- { :type=>"const int*", :name => "cmock_arg3", :ptr? => true, :const? => true, :const_ptr? => false },
1076
- { :type=>"const int*", :name => "cmock_arg4", :ptr? => true, :const? => true, :const_ptr? => true },
1077
- { :type=>"int const*", :name => "cmock_arg5", :ptr? => true, :const? => true, :const_ptr? => true },
1078
- { :type=>"int*", :name => "cmock_arg6", :ptr? => true, :const? => false, :const_ptr? => false },
1079
- { :type=>"int", :name => "cmock_arg7", :ptr? => false, :const? => false, :const_ptr? => false },
1080
- { :type=>"int", :name => "cmock_arg8", :ptr? => false, :const? => true, :const_ptr? => false }],
1212
+ :args => [{ :type=>"int const*", :name => "cmock_arg1", :ptr? => true, :string? => false, :const? => true, :const_ptr? => false },
1213
+ { :type=>"int*", :name => "cmock_arg2", :ptr? => true, :string? => false, :const? => false, :const_ptr? => true },
1214
+ { :type=>"const int*", :name => "cmock_arg3", :ptr? => true, :string? => false, :const? => true, :const_ptr? => false },
1215
+ { :type=>"const int*", :name => "cmock_arg4", :ptr? => true, :string? => false, :const? => true, :const_ptr? => true },
1216
+ { :type=>"int const*", :name => "cmock_arg5", :ptr? => true, :string? => false, :const? => true, :const_ptr? => true },
1217
+ { :type=>"int*", :name => "cmock_arg6", :ptr? => true, :string? => false, :const? => false, :const_ptr? => false },
1218
+ { :type=>"int", :name => "cmock_arg7", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false },
1219
+ { :type=>"int", :name => "cmock_arg8", :ptr? => false, :string? => false, :const? => true, :const_ptr? => false }],
1081
1220
  :args_call => "cmock_arg1, cmock_arg2, cmock_arg3, cmock_arg4, cmock_arg5, cmock_arg6, cmock_arg7, cmock_arg8",
1082
1221
  :contains_ptr? => true
1083
1222
  }]
@@ -1105,20 +1244,112 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
1105
1244
  :var_arg => nil,
1106
1245
  :args_string => "int const* param1, int* const param2, const int* param3, const int* const param4, " +
1107
1246
  "int const* const param5, int* param6, int param7, const int param8",
1108
- :args => [{ :type=>"int const*", :name => "param1", :ptr? => true, :const? => true, :const_ptr? => false },
1109
- { :type=>"int*", :name => "param2", :ptr? => true, :const? => false, :const_ptr? => true },
1110
- { :type=>"const int*", :name => "param3", :ptr? => true, :const? => true, :const_ptr? => false },
1111
- { :type=>"const int*", :name => "param4", :ptr? => true, :const? => true, :const_ptr? => true },
1112
- { :type=>"int const*", :name => "param5", :ptr? => true, :const? => true, :const_ptr? => true },
1113
- { :type=>"int*", :name => "param6", :ptr? => true, :const? => false, :const_ptr? => false },
1114
- { :type=>"int", :name => "param7", :ptr? => false, :const? => false, :const_ptr? => false },
1115
- { :type=>"int", :name => "param8", :ptr? => false, :const? => true, :const_ptr? => false }],
1247
+ :args => [{ :type=>"int const*", :name => "param1", :ptr? => true, :string? => false, :const? => true, :const_ptr? => false },
1248
+ { :type=>"int*", :name => "param2", :ptr? => true, :string? => false, :const? => false, :const_ptr? => true },
1249
+ { :type=>"const int*", :name => "param3", :ptr? => true, :string? => false, :const? => true, :const_ptr? => false },
1250
+ { :type=>"const int*", :name => "param4", :ptr? => true, :string? => false, :const? => true, :const_ptr? => true },
1251
+ { :type=>"int const*", :name => "param5", :ptr? => true, :string? => false, :const? => true, :const_ptr? => true },
1252
+ { :type=>"int*", :name => "param6", :ptr? => true, :string? => false, :const? => false, :const_ptr? => false },
1253
+ { :type=>"int", :name => "param7", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false },
1254
+ { :type=>"int", :name => "param8", :ptr? => false, :string? => false, :const? => true, :const_ptr? => false }],
1116
1255
  :args_call => "param1, param2, param3, param4, param5, param6, param7, param8",
1117
1256
  :contains_ptr? => true
1118
1257
  }].freeze
1119
1258
  assert_equal(expected, @parser.parse("module", source)[:functions])
1120
1259
  end
1121
1260
 
1261
+ it "properly parses volatile pointer argument types" do
1262
+
1263
+ source = "int16_t foo(volatile struct foo_obj *foo_handle, int plain, volatile int not_a_ptr);\n"
1264
+
1265
+ expected = [{ :name => "foo",
1266
+ :unscoped_name => "foo",
1267
+ :namespace=>[],
1268
+ :class=>nil,
1269
+ :modifier => "",
1270
+ :return => { :type => "int16_t",
1271
+ :name => "cmock_to_return",
1272
+ :str => "int16_t cmock_to_return",
1273
+ :void? => false,
1274
+ :ptr? => false,
1275
+ :const? => false,
1276
+ :const_ptr? => false
1277
+ },
1278
+ :var_arg => nil,
1279
+ :args_string => "volatile struct foo_obj* foo_handle, int plain, volatile int not_a_ptr",
1280
+ :args => [{ :type => "struct foo_obj*", :name => "foo_handle",
1281
+ :ptr? => true, :string? => false, :const? => false, :const_ptr? => false, :volatile? => true },
1282
+ { :type => "int", :name => "plain",
1283
+ :ptr? => false, :string? => false, :const? => false, :const_ptr? => false },
1284
+ { :type => "volatile int", :name => "not_a_ptr",
1285
+ :ptr? => false, :string? => false, :const? => false, :const_ptr? => false }],
1286
+ :args_call => "foo_handle, plain, not_a_ptr",
1287
+ :contains_ptr? => true
1288
+ }]
1289
+ assert_equal(expected, @parser.parse("module", source)[:functions])
1290
+ end
1291
+
1292
+ it "properly parses T volatile* style volatile pointer argument types" do
1293
+ # volatile can appear before OR after the base type; both mean "pointer to volatile T"
1294
+ # e.g. "int volatile*" is identical to "volatile int*" in C
1295
+
1296
+ source = "void bar(int volatile* a, struct foo_obj volatile* b);\n"
1297
+
1298
+ expected = [{ :name => "bar",
1299
+ :unscoped_name => "bar",
1300
+ :namespace=>[],
1301
+ :class=>nil,
1302
+ :modifier => "",
1303
+ :return => { :type => "void",
1304
+ :name => "cmock_to_return",
1305
+ :str => "void cmock_to_return",
1306
+ :void? => true,
1307
+ :ptr? => false,
1308
+ :const? => false,
1309
+ :const_ptr? => false
1310
+ },
1311
+ :var_arg => nil,
1312
+ :args_string => "int volatile* a, struct foo_obj volatile* b",
1313
+ :args => [{ :type => "int*", :name => "a",
1314
+ :ptr? => true, :string? => false, :const? => false, :const_ptr? => false, :volatile? => true },
1315
+ { :type => "struct foo_obj*", :name => "b",
1316
+ :ptr? => true, :string? => false, :const? => false, :const_ptr? => false, :volatile? => true }],
1317
+ :args_call => "a, b",
1318
+ :contains_ptr? => true
1319
+ }]
1320
+ assert_equal(expected, @parser.parse("module", source)[:functions])
1321
+ end
1322
+
1323
+ it "treats int*volatile (volatile pointer to non-volatile type) as a plain pointer without volatile? flag" do
1324
+ # "int * volatile p" = volatile pointer to int (the pointer itself is volatile, not the pointed-to value)
1325
+ # This is distinct from "volatile int *p" (pointer to volatile int).
1326
+ # CMock must NOT set volatile? here: the pointed-to type is not volatile, so no cast-qual issue.
1327
+
1328
+ source = "void baz(int * volatile p);\n"
1329
+
1330
+ expected = [{ :name => "baz",
1331
+ :unscoped_name => "baz",
1332
+ :namespace=>[],
1333
+ :class=>nil,
1334
+ :modifier => "",
1335
+ :return => { :type => "void",
1336
+ :name => "cmock_to_return",
1337
+ :str => "void cmock_to_return",
1338
+ :void? => true,
1339
+ :ptr? => false,
1340
+ :const? => false,
1341
+ :const_ptr? => false
1342
+ },
1343
+ :var_arg => nil,
1344
+ :args_string => "int* volatile p",
1345
+ :args => [{ :type => "int* volatile", :name => "p",
1346
+ :ptr? => true, :string? => false, :const? => false, :const_ptr? => false }],
1347
+ :args_call => "p",
1348
+ :contains_ptr? => true
1349
+ }]
1350
+ assert_equal(expected, @parser.parse("module", source)[:functions])
1351
+ end
1352
+
1122
1353
  it "converts typedef'd array arguments to pointers" do
1123
1354
 
1124
1355
  source = "Book AddToBook(Book book, const IntArray values);\n"
@@ -1137,8 +1368,8 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
1137
1368
  :const_ptr? => false
1138
1369
  },
1139
1370
  :var_arg => nil,
1140
- :args => [{ :type => "Page*", :name => "book", :ptr? => true, :const? => false, :const_ptr? => false },
1141
- { :type => "const int*", :name => "values", :ptr? => true, :const? => true, :const_ptr? => false }],
1371
+ :args => [{ :type => "Page*", :name => "book", :ptr? => true, :string? => false, :const? => false, :const_ptr? => false },
1372
+ { :type => "const int*", :name => "values", :ptr? => true, :string? => false, :const? => true, :const_ptr? => false }],
1142
1373
  :args_string => "Book book, const IntArray values",
1143
1374
  :args_call => "book, values",
1144
1375
  :contains_ptr? => true
@@ -1170,7 +1401,7 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
1170
1401
  },
1171
1402
  :modifier=>"",
1172
1403
  :contains_ptr? => false,
1173
- :args=>[ {:type=>"int", :name=>"SingAlong", :ptr? => false, :const? => false, :const_ptr? => false} ],
1404
+ :args=>[ {:type=>"int", :name=>"SingAlong", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false} ],
1174
1405
  :args_string=>"int SingAlong",
1175
1406
  :args_call=>"SingAlong"
1176
1407
  },
@@ -1217,7 +1448,7 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
1217
1448
  :class=>nil,
1218
1449
  :modifier=>"",
1219
1450
  :contains_ptr? => false,
1220
- :args=>[ {:type=>"struct SingAlong", :name=>"Blog", :ptr? => false, :const? => false, :const_ptr? => false} ],
1451
+ :args=>[ {:type=>"struct SingAlong", :name=>"Blog", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false} ],
1221
1452
  :args_string=>"struct SingAlong Blog",
1222
1453
  :args_call=>"Blog"
1223
1454
  },
@@ -1236,7 +1467,7 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
1236
1467
  :class=>nil,
1237
1468
  :modifier=>"",
1238
1469
  :contains_ptr? => true,
1239
- :args=>[ {:type=>"struct const _KeepYourHeadUp_*", :name=>"BillyBuddy", :ptr? => true, :const? => true, :const_ptr? => true} ],
1470
+ :args=>[ {:type=>"struct const _KeepYourHeadUp_*", :name=>"BillyBuddy", :ptr? => true, :string? => false, :const? => true, :const_ptr? => true} ],
1240
1471
  :args_string=>"struct const _KeepYourHeadUp_* const BillyBuddy",
1241
1472
  :args_call=>"BillyBuddy"
1242
1473
  },
@@ -1279,8 +1510,8 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
1279
1510
  :class=>nil,
1280
1511
  :modifier=>"",
1281
1512
  :contains_ptr? => true,
1282
- :args=>[ {:type=>"union STARS_AND_STRIPES*", :name=>"a", :ptr? => true, :const? => false, :const_ptr? => false},
1283
- {:type=>"union AFL_CIO", :name=>"b", :ptr? => false, :const? => false, :const_ptr? => false}
1513
+ :args=>[ {:type=>"union STARS_AND_STRIPES*", :name=>"a", :ptr? => true, :string? => false, :const? => false, :const_ptr? => false},
1514
+ {:type=>"union AFL_CIO", :name=>"b", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false}
1284
1515
  ],
1285
1516
  :args_string=>"union STARS_AND_STRIPES* a, union AFL_CIO b",
1286
1517
  :args_call=>"a, b" }]
@@ -1305,11 +1536,11 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
1305
1536
  :class=>nil,
1306
1537
  :modifier=>"",
1307
1538
  :contains_ptr? => true,
1308
- :args=>[ {:type=> "unsigned int", :name=>"const_param", :ptr? => false, :const? => true, :const_ptr? => false},
1309
- {:type=>"int", :name=>"int_param", :ptr? => false, :const? => false, :const_ptr? => false},
1310
- {:type=>"int", :name=>"integer", :ptr? => false, :const? => false, :const_ptr? => false},
1311
- {:type=>"char", :name=>"character", :ptr? => false, :const? => false, :const_ptr? => false},
1312
- {:type=>"int*", :name=>"constant", :ptr? => true, :const? => false, :const_ptr? => true}
1539
+ :args=>[ {:type=> "unsigned int", :name=>"const_param", :ptr? => false, :string? => false, :const? => true, :const_ptr? => false},
1540
+ {:type=>"int", :name=>"int_param", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false},
1541
+ {:type=>"int", :name=>"integer", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false},
1542
+ {:type=>"char", :name=>"character", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false},
1543
+ {:type=>"int*", :name=>"constant", :ptr? => true, :string? => false, :const? => false, :const_ptr? => true}
1313
1544
  ],
1314
1545
  :args_string=>"const unsigned int const_param, int int_param, int integer, char character, int* const constant",
1315
1546
  :args_call=>"const_param, int_param, integer, character, constant" }]
@@ -1334,11 +1565,11 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
1334
1565
  :class=>nil,
1335
1566
  :modifier=>"",
1336
1567
  :contains_ptr? => true,
1337
- :args=>[ {:type=>"integer", :name=>"param", :ptr? => false, :const? => false, :const_ptr? => false},
1338
- {:type=>"character", :name=>"thing", :ptr? => false, :const? => false, :const_ptr? => false},
1339
- {:type=>"longint*", :name=>"junk", :ptr? => true, :const? => false, :const_ptr? => false},
1340
- {:type=>"constant", :name=>"value", :ptr? => false, :const? => false, :const_ptr? => false},
1341
- {:type=>"int32_t", :name=>"number", :ptr? => false, :const? => true, :const_ptr? => false}
1568
+ :args=>[ {:type=>"integer", :name=>"param", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false},
1569
+ {:type=>"character", :name=>"thing", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false},
1570
+ {:type=>"longint*", :name=>"junk", :ptr? => true, :string? => false, :const? => false, :const_ptr? => false},
1571
+ {:type=>"constant", :name=>"value", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false},
1572
+ {:type=>"int32_t", :name=>"number", :ptr? => false, :string? => false, :const? => true, :const_ptr? => false}
1342
1573
  ],
1343
1574
  :args_string=>"integer param, character thing, longint* junk, constant value, int32_t const number",
1344
1575
  :args_call=>"param, thing, junk, value, number" }]
@@ -1363,10 +1594,10 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
1363
1594
  :class=>nil,
1364
1595
  :modifier=>"",
1365
1596
  :contains_ptr? => false,
1366
- :args=>[ {:type=>"signed char", :name=>"abc", :ptr? => false, :const? => false, :const_ptr? => false},
1367
- {:type=>"unsigned long int", :name=>"xyz_123", :ptr? => false, :const? => true, :const_ptr? => false},
1368
- {:type=>"unsigned int", :name=>"abc_123", :ptr? => false, :const? => true, :const_ptr? => false},
1369
- {:type=>"long long", :name=>"arm_of_the_law", :ptr? => false, :const? => false, :const_ptr? => false}
1597
+ :args=>[ {:type=>"signed char", :name=>"abc", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false},
1598
+ {:type=>"unsigned long int", :name=>"xyz_123", :ptr? => false, :string? => false, :const? => true, :const_ptr? => false},
1599
+ {:type=>"unsigned int", :name=>"abc_123", :ptr? => false, :string? => false, :const? => true, :const_ptr? => false},
1600
+ {:type=>"long long", :name=>"arm_of_the_law", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false}
1370
1601
  ],
1371
1602
  :args_string=>"signed char abc, const unsigned long int xyz_123, unsigned int const abc_123, long long arm_of_the_law",
1372
1603
  :args_call=>"abc, xyz_123, abc_123, arm_of_the_law" }]
@@ -1391,10 +1622,10 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
1391
1622
  :class=>nil,
1392
1623
  :modifier=>"",
1393
1624
  :contains_ptr? => true,
1394
- :args=>[ {:type=>"CUSTOM_TYPE", :name=>"abc", :ptr? => false, :const? => false, :const_ptr? => false},
1395
- {:type=>"CUSTOM_TYPE*", :name=>"xyz_123", :ptr? => true, :const? => false, :const_ptr? => false},
1396
- {:type=>"CUSTOM_TYPE", :name=>"abcxyz", :ptr? => false, :const? => true, :const_ptr? => false},
1397
- {:type=>"struct CUSTOM_TYPE const*", :name=>"abc123", :ptr? => true, :const? => true, :const_ptr? => true}
1625
+ :args=>[ {:type=>"CUSTOM_TYPE", :name=>"abc", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false},
1626
+ {:type=>"CUSTOM_TYPE*", :name=>"xyz_123", :ptr? => true, :string? => false, :const? => false, :const_ptr? => false},
1627
+ {:type=>"CUSTOM_TYPE", :name=>"abcxyz", :ptr? => false, :string? => false, :const? => true, :const_ptr? => false},
1628
+ {:type=>"struct CUSTOM_TYPE const*", :name=>"abc123", :ptr? => true, :string? => false, :const? => true, :const_ptr? => true}
1398
1629
  ],
1399
1630
  :args_string=>"CUSTOM_TYPE abc, CUSTOM_TYPE* xyz_123, CUSTOM_TYPE const abcxyz, struct CUSTOM_TYPE const* const abc123",
1400
1631
  :args_call=>"abc, xyz_123, abcxyz, abc123" }]
@@ -1406,13 +1637,11 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
1406
1637
  source = 'void KeyOperated(CUSTOM_TYPE thing1[], int thing2 [ ], ' \
1407
1638
  'char thing3 [][2 ][ 3], int* thing4[4], u8 thing5[((u8)((5 + 5*2)/3))])'
1408
1639
  expected_args = [
1409
- { type: 'CUSTOM_TYPE*', name: 'thing1', ptr?: true, const?: false, const_ptr?: false },
1410
- { type: 'int*', name: 'thing2', ptr?: true, const?: false, const_ptr?: false },
1411
- # this one will likely change in the future when we improve multidimensional array support
1412
- { type: 'char*', name: 'thing3', ptr?: false, const?: false, const_ptr?: false },
1413
- # this one will likely change in the future when we improve multidimensional array support
1414
- { type: 'int**', name: 'thing4', ptr?: true, const?: false, const_ptr?: false },
1415
- { type: 'u8*', name: 'thing5', ptr?: true, const?: false, const_ptr?: false }
1640
+ { type: 'CUSTOM_TYPE*', name: 'thing1', ptr?: true, string?: false, const?: false, const_ptr?: false, array_dims: [''] },
1641
+ { type: 'int*', name: 'thing2', ptr?: true, string?: false, const?: false, const_ptr?: false, array_dims: [''] },
1642
+ { type: 'char*', name: 'thing3', ptr?: false, string?: true, const?: false, const_ptr?: false, array_dims: ['', '2', '3'] },
1643
+ { type: 'int**', name: 'thing4', ptr?: true, string?: false, const?: false, const_ptr?: false, array_dims: ['4'] },
1644
+ { type: 'u8*', name: 'thing5', ptr?: true, string?: false, const?: false, const_ptr?: false, array_dims: ['((u8)((5 + 5*2)/3))'] }
1416
1645
  ]
1417
1646
  expected = [{:var_arg=>nil,
1418
1647
  :return=>{ :type => "void",
@@ -1430,8 +1659,7 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
1430
1659
  :modifier=>"",
1431
1660
  :contains_ptr? => true,
1432
1661
  :args => expected_args,
1433
- :args_string => 'CUSTOM_TYPE* thing1, int* thing2, ' \
1434
- 'char* thing3, int** thing4, u8* thing5',
1662
+ :args_string => 'CUSTOM_TYPE thing1[], int thing2[], char thing3[][2][3], int* thing4[4], u8 thing5[((u8)((5 + 5*2)/3))]',
1435
1663
  :args_call => 'thing1, thing2, thing3, thing4, thing5' }]
1436
1664
  result = @parser.parse("module", source)
1437
1665
  assert_equal(expected, result[:functions])
@@ -1454,9 +1682,9 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
1454
1682
  :class=>nil,
1455
1683
  :modifier=>"",
1456
1684
  :contains_ptr? => false,
1457
- :args=>[ {:type=>"unsigned CUSTOM_TYPE", :name=>"abc", :ptr? => false, :const? => false, :const_ptr? => false},
1458
- {:type=>"unsigned", :name=>"xyz", :ptr? => false, :const? => false, :const_ptr? => false},
1459
- {:type=>"CUSTOM_TYPE1 CUSTOM_TYPE2", :name=>"pdq", :ptr? => false, :const? => false, :const_ptr? => false}
1685
+ :args=>[ {:type=>"unsigned CUSTOM_TYPE", :name=>"abc", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false},
1686
+ {:type=>"unsigned", :name=>"xyz", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false},
1687
+ {:type=>"CUSTOM_TYPE1 CUSTOM_TYPE2", :name=>"pdq", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false}
1460
1688
  ],
1461
1689
  :args_string=>"unsigned CUSTOM_TYPE abc, unsigned xyz, CUSTOM_TYPE1 CUSTOM_TYPE2 pdq",
1462
1690
  :args_call=>"abc, xyz, pdq" }]
@@ -1481,7 +1709,7 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
1481
1709
  :class=>nil,
1482
1710
  :modifier=>"",
1483
1711
  :contains_ptr? => false,
1484
- :args=>[ {:type=>"cmock_module_func_ptr1", :name=>"func_ptr", :ptr? => false, :const? => false, :const_ptr? => false}
1712
+ :args=>[ {:type=>"cmock_module_func_ptr1", :name=>"func_ptr", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false}
1485
1713
  ],
1486
1714
  :args_string=>"cmock_module_func_ptr1 func_ptr",
1487
1715
  :args_call=>"func_ptr" }]
@@ -1508,7 +1736,7 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
1508
1736
  :class=>nil,
1509
1737
  :modifier=>"",
1510
1738
  :contains_ptr? => false,
1511
- :args=>[ {:type=>"cmock_module_func_ptr1", :name=>"func_ptr", :ptr? => false, :const? => false, :const_ptr? => false}
1739
+ :args=>[ {:type=>"cmock_module_func_ptr1", :name=>"func_ptr", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false}
1512
1740
  ],
1513
1741
  :args_string=>"cmock_module_func_ptr1 func_ptr",
1514
1742
  :args_call=>"func_ptr" }]
@@ -1518,6 +1746,33 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
1518
1746
  assert_equal(typedefs, result[:typedefs])
1519
1747
  end
1520
1748
 
1749
+ it "extract functions using a function pointer with shorthand notation and a calling convention" do
1750
+ source = "void FunkyTurkey(void __stdcall * func_ptr(int arg0))"
1751
+ expected = [{ :var_arg=>nil,
1752
+ :return=>{ :type => "void",
1753
+ :name => 'cmock_to_return',
1754
+ :ptr? => false,
1755
+ :const? => false,
1756
+ :const_ptr? => false,
1757
+ :str => "void cmock_to_return",
1758
+ :void? => true
1759
+ },
1760
+ :name=>"FunkyTurkey",
1761
+ :unscoped_name=>"FunkyTurkey",
1762
+ :namespace=>[],
1763
+ :class=>nil,
1764
+ :modifier=>"",
1765
+ :contains_ptr? => false,
1766
+ :args=>[ {:type=>"cmock_module_func_ptr1", :name=>"func_ptr", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false}
1767
+ ],
1768
+ :args_string=>"cmock_module_func_ptr1 func_ptr",
1769
+ :args_call=>"func_ptr" }]
1770
+ typedefs = ["typedef void *(__stdcall *cmock_module_func_ptr1)(int arg0);"]
1771
+ result = @parser.parse("module", source)
1772
+ assert_equal(expected, result[:functions])
1773
+ assert_equal(typedefs, result[:typedefs])
1774
+ end
1775
+
1521
1776
  it "extract functions containing a function pointer with a void" do
1522
1777
  source = "void FunkyTurkey(void (*func_ptr)(void))"
1523
1778
  expected = [{ :var_arg=>nil,
@@ -1535,7 +1790,7 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
1535
1790
  :class=>nil,
1536
1791
  :modifier=>"",
1537
1792
  :contains_ptr? => false,
1538
- :args=>[ {:type=>"cmock_module_func_ptr1", :name=>"func_ptr", :ptr? => false, :const? => false, :const_ptr? => false}
1793
+ :args=>[ {:type=>"cmock_module_func_ptr1", :name=>"func_ptr", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false}
1539
1794
  ],
1540
1795
  :args_string=>"cmock_module_func_ptr1 func_ptr",
1541
1796
  :args_call=>"func_ptr" }]
@@ -1562,7 +1817,7 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
1562
1817
  :class=>nil,
1563
1818
  :modifier=>"",
1564
1819
  :contains_ptr? => false,
1565
- :args=>[ {:type=>"cmock_module_func_ptr1", :name=>"func_ptr", :ptr? => false, :const? => false, :const_ptr? => false}
1820
+ :args=>[ {:type=>"cmock_module_func_ptr1", :name=>"func_ptr", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false}
1566
1821
  ],
1567
1822
  :args_string=>"cmock_module_func_ptr1 func_ptr",
1568
1823
  :args_call=>"func_ptr" }]
@@ -1589,7 +1844,7 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
1589
1844
  :class=>nil,
1590
1845
  :modifier=>"",
1591
1846
  :contains_ptr? => false,
1592
- :args=>[ {:type=>"cmock_module_func_ptr1", :name=>"func_ptr", :ptr? => false, :const? => true, :const_ptr? => false}
1847
+ :args=>[ {:type=>"cmock_module_func_ptr1", :name=>"func_ptr", :ptr? => false, :string? => false, :const? => true, :const_ptr? => false}
1593
1848
  ],
1594
1849
  :args_string=>"cmock_module_func_ptr1 const func_ptr",
1595
1850
  :args_call=>"func_ptr" }]
@@ -1604,7 +1859,7 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
1604
1859
  # expected = [{ :var_arg=>nil,
1605
1860
  # :return=>{ :type => "void",
1606
1861
  # :name => 'cmock_to_return',
1607
- # :ptr? => false,
1862
+ # :ptr? => false, :string? => false,
1608
1863
  # :const? => false,
1609
1864
  # :const_ptr? => false,
1610
1865
  # :str => "void cmock_to_return",
@@ -1616,7 +1871,7 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
1616
1871
  # :class=>nil,
1617
1872
  # :modifier=>"",
1618
1873
  # :contains_ptr? => false,
1619
- # :args=>[ {:type=>"cmock_module_func_ptr1", :name=>"func_ptr", :ptr? => false, :const? => false, :const_ptr? => false}
1874
+ # :args=>[ {:type=>"cmock_module_func_ptr1", :name=>"func_ptr", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false}
1620
1875
  # ],
1621
1876
  # :args_string=>"cmock_module_func_ptr1 func_ptr",
1622
1877
  # :args_call=>"func_ptr" }]
@@ -1643,8 +1898,8 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
1643
1898
  :class=>nil,
1644
1899
  :modifier=>"",
1645
1900
  :contains_ptr? => false,
1646
- :args=>[ {:type=>"cmock_module_func_ptr1", :name=>"func_ptr1", :ptr? => false, :const? => false, :const_ptr? => false},
1647
- {:type=>"cmock_module_func_ptr2", :name=>"func_ptr2", :ptr? => false, :const? => false, :const_ptr? => false}
1901
+ :args=>[ {:type=>"cmock_module_func_ptr1", :name=>"func_ptr1", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false},
1902
+ {:type=>"cmock_module_func_ptr2", :name=>"func_ptr2", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false}
1648
1903
  ],
1649
1904
  :args_string=>"cmock_module_func_ptr1 func_ptr1, cmock_module_func_ptr2 func_ptr2",
1650
1905
  :args_call=>"func_ptr1, func_ptr2" }]
@@ -1671,9 +1926,9 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
1671
1926
  :class=>nil,
1672
1927
  :modifier=>"",
1673
1928
  :contains_ptr? => false,
1674
- :args=>[ {:type=>"uint16_t", :name=>"num1", :ptr? => false, :const? => false, :const_ptr? => false},
1675
- {:type=>"uint16_t", :name=>"num2", :ptr? => false, :const? => false, :const_ptr? => false},
1676
- {:type=>"cmock_module_func_ptr1", :name=>"func_ptr1", :ptr? => false, :const? => false, :const_ptr? => false}
1929
+ :args=>[ {:type=>"uint16_t", :name=>"num1", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false},
1930
+ {:type=>"uint16_t", :name=>"num2", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false},
1931
+ {:type=>"cmock_module_func_ptr1", :name=>"func_ptr1", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false}
1677
1932
  ],
1678
1933
  :args_string=>"uint16_t num1, uint16_t num2, cmock_module_func_ptr1 func_ptr1",
1679
1934
  :args_call=>"num1, num2, func_ptr1" }]
@@ -1700,7 +1955,7 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
1700
1955
  :class=>nil,
1701
1956
  :modifier=>"",
1702
1957
  :contains_ptr? => false,
1703
- :args=>[ {:type=>"cmock_module_func_ptr1", :name=>"cmock_arg1", :ptr? => false, :const? => true, :const_ptr? => false}
1958
+ :args=>[ {:type=>"cmock_module_func_ptr1", :name=>"cmock_arg1", :ptr? => false, :string? => false, :const? => true, :const_ptr? => false}
1704
1959
  ],
1705
1960
  :args_string=>"cmock_module_func_ptr1 const cmock_arg1",
1706
1961
  :args_call=>"cmock_arg1" }]
@@ -1727,7 +1982,7 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
1727
1982
  :class=>nil,
1728
1983
  :modifier=>"",
1729
1984
  :contains_ptr? => false,
1730
- :args=>[ {:type=>"char", :name=>"op_code", :ptr? => false, :const? => true, :const_ptr? => false}
1985
+ :args=>[ {:type=>"char", :name=>"op_code", :ptr? => false, :string? => false, :const? => true, :const_ptr? => false}
1731
1986
  ],
1732
1987
  :args_string=>"const char op_code",
1733
1988
  :args_call=>"op_code" }]
@@ -1806,8 +2061,8 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
1806
2061
  :class=>nil,
1807
2062
  :modifier=>"",
1808
2063
  :contains_ptr? => true,
1809
- :args=>[ {:type=>"double*", :name=>"foo", :ptr? => true, :const? => false, :const_ptr? => false},
1810
- {:type=>"THING*", :name=>"bar", :ptr? => true, :const? => false, :const_ptr? => false}
2064
+ :args=>[ {:type=>"double*", :name=>"foo", :ptr? => true, :string? => false, :const? => false, :const_ptr? => false},
2065
+ {:type=>"THING*", :name=>"bar", :ptr? => true, :string? => false, :const? => false, :const_ptr? => false}
1811
2066
  ],
1812
2067
  :args_string=>"double* foo, THING* bar",
1813
2068
  :args_call=>"foo, bar" }]
@@ -1834,11 +2089,11 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
1834
2089
  :class=>nil,
1835
2090
  :modifier=>"SQLITE_API",
1836
2091
  :contains_ptr? => true,
1837
- :args=>[ {:type=>"sqlite3_stmt*", :name=>"cmock_arg2", :ptr? => true, :const? => false, :const_ptr? => false},
1838
- {:type=>"int", :name=>"cmock_arg3", :ptr? => false, :const? => false, :const_ptr? => false},
1839
- {:type=>"const char*", :name=>"cmock_arg4", :ptr? => false, :const? => true, :const_ptr? => false},
1840
- {:type=>"int", :name=>"n", :ptr? => false, :const? => false, :const_ptr? => false},
1841
- {:type=>"cmock_module_func_ptr1", :name=>"cmock_arg1", :ptr? => false, :const? => false, :const_ptr? => false}
2092
+ :args=>[ {:type=>"sqlite3_stmt*", :name=>"cmock_arg2", :ptr? => true, :string? => false, :const? => false, :const_ptr? => false},
2093
+ {:type=>"int", :name=>"cmock_arg3", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false},
2094
+ {:type=>"const char*", :name=>"cmock_arg4", :ptr? => false, :string? => true, :const? => true, :const_ptr? => false},
2095
+ {:type=>"int", :name=>"n", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false},
2096
+ {:type=>"cmock_module_func_ptr1", :name=>"cmock_arg1", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false}
1842
2097
  ],
1843
2098
  :args_string=>"sqlite3_stmt* cmock_arg2, int cmock_arg3, const char* cmock_arg4, int n, cmock_module_func_ptr1 cmock_arg1",
1844
2099
  :args_call=>"cmock_arg2, cmock_arg3, cmock_arg4, n, cmock_arg1" }]
@@ -1848,6 +2103,59 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
1848
2103
  assert_equal(typedefs, result[:typedefs])
1849
2104
  end
1850
2105
 
2106
+ it "extract functions containing a parenthesized pointer argument" do
2107
+ source = "void func(char *str, int (* numb))"
2108
+ expected = [{ :var_arg=>nil,
2109
+ :return=>{ :type => "void",
2110
+ :name => 'cmock_to_return',
2111
+ :ptr? => false,
2112
+ :const? => false,
2113
+ :const_ptr? => false,
2114
+ :str => "void cmock_to_return",
2115
+ :void? => true
2116
+ },
2117
+ :name=>"func",
2118
+ :unscoped_name=>"func",
2119
+ :namespace=>[],
2120
+ :class=>nil,
2121
+ :modifier=>"",
2122
+ :contains_ptr? => true,
2123
+ :args=>[ {:type=>"char*", :name=>"str", :ptr? => false, :string? => true, :const? => false, :const_ptr? => false},
2124
+ {:type=>"int*", :name=>"numb", :ptr? => true, :string? => false, :const? => false, :const_ptr? => false}
2125
+ ],
2126
+ :args_string=>"char* str, int* numb",
2127
+ :args_call=>"str, numb" }]
2128
+ result = @parser.parse("module", source)
2129
+ assert_equal(expected, result[:functions])
2130
+ assert_equal([], result[:typedefs])
2131
+ end
2132
+
2133
+ it "extract functions containing a parenthesized const pointer argument" do
2134
+ source = "void func(int (* const numb))"
2135
+ expected = [{ :var_arg=>nil,
2136
+ :return=>{ :type => "void",
2137
+ :name => 'cmock_to_return',
2138
+ :ptr? => false,
2139
+ :const? => false,
2140
+ :const_ptr? => false,
2141
+ :str => "void cmock_to_return",
2142
+ :void? => true
2143
+ },
2144
+ :name=>"func",
2145
+ :unscoped_name=>"func",
2146
+ :namespace=>[],
2147
+ :class=>nil,
2148
+ :modifier=>"",
2149
+ :contains_ptr? => true,
2150
+ :args=>[ {:type=>"int*", :name=>"numb", :ptr? => true, :string? => false, :const? => false, :const_ptr? => true}
2151
+ ],
2152
+ :args_string=>"int* const numb",
2153
+ :args_call=>"numb" }]
2154
+ result = @parser.parse("module", source)
2155
+ assert_equal(expected, result[:functions])
2156
+ assert_equal([], result[:typedefs])
2157
+ end
2158
+
1851
2159
  it "extract functions with varargs" do
1852
2160
  source = "int XFiles(int Scully, int Mulder, ...);\n"
1853
2161
  expected = [{ :var_arg=>"...",
@@ -1865,8 +2173,8 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
1865
2173
  :class=>nil,
1866
2174
  :modifier=>"",
1867
2175
  :contains_ptr? => false,
1868
- :args=>[ {:type=>"int", :name=>"Scully", :ptr? => false, :const? => false, :const_ptr? => false},
1869
- {:type=>"int", :name=>"Mulder", :ptr? => false, :const? => false, :const_ptr? => false}
2176
+ :args=>[ {:type=>"int", :name=>"Scully", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false},
2177
+ {:type=>"int", :name=>"Mulder", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false}
1870
2178
  ],
1871
2179
  :args_string=>"int Scully, int Mulder",
1872
2180
  :args_call=>"Scully, Mulder"
@@ -1891,7 +2199,7 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
1891
2199
  :class=>nil,
1892
2200
  :modifier=>"",
1893
2201
  :contains_ptr? => true,
1894
- :args=>[ {:type=>"void*", :name=>"stuff", :ptr? => true, :const? => false, :const_ptr? => false}
2202
+ :args=>[ {:type=>"void*", :name=>"stuff", :ptr? => true, :string? => false, :const? => false, :const_ptr? => false}
1895
2203
  ],
1896
2204
  :args_string=>"void* stuff",
1897
2205
  :args_call=>"stuff"
@@ -1916,8 +2224,8 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
1916
2224
  :class=>nil,
1917
2225
  :modifier=>"",
1918
2226
  :contains_ptr? => false,
1919
- :args=>[ {:type=>"int", :name=>"Lenny", :ptr? => false, :const? => false, :const_ptr? => false},
1920
- {:type=>"int", :name=>"Squiggy", :ptr? => false, :const? => false, :const_ptr? => false}
2227
+ :args=>[ {:type=>"int", :name=>"Lenny", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false},
2228
+ {:type=>"int", :name=>"Squiggy", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false}
1921
2229
  ],
1922
2230
  :args_string=>"int Lenny, int Squiggy",
1923
2231
  :args_call=>"Lenny, Squiggy"
@@ -1942,8 +2250,8 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
1942
2250
  :class=>nil,
1943
2251
  :modifier=>"",
1944
2252
  :contains_ptr? => false,
1945
- :args=>[ {:type=>"int", :name=>"Cliff", :ptr? => false, :const? => false, :const_ptr? => false},
1946
- {:type=>"int", :name=>"Claire", :ptr? => false, :const? => false, :const_ptr? => false}
2253
+ :args=>[ {:type=>"int", :name=>"Cliff", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false},
2254
+ {:type=>"int", :name=>"Claire", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false}
1947
2255
  ],
1948
2256
  :args_string=>"int Cliff, int Claire",
1949
2257
  :args_call=>"Cliff, Claire"
@@ -1981,7 +2289,7 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
1981
2289
  assert_equal(@parser.divine_ptr(entry[0]), entry[1])
1982
2290
  assert_equal(@parser.divine_const(entry[0]), entry[2])
1983
2291
  assert_equal(@parser.divine_ptr_and_const(entry[0]),
1984
- { ptr?: entry[1], const?: entry[2], const_ptr?: entry[3] })
2292
+ { ptr?: entry[1], string?: false, const?: entry[2], const_ptr?: entry[3] })
1985
2293
  end
1986
2294
  end
1987
2295
 
@@ -2348,8 +2656,8 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
2348
2656
  :class=>nil,
2349
2657
  :modifier=>"",
2350
2658
  :contains_ptr? => false,
2351
- :args=>[ {:type=>"int", :name=>"Lenny", :ptr? => false, :const? => false, :const_ptr? => false},
2352
- {:type=>"int", :name=>"Squiggy", :ptr? => false, :const? => false, :const_ptr? => false}
2659
+ :args=>[ {:type=>"int", :name=>"Lenny", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false},
2660
+ {:type=>"int", :name=>"Squiggy", :ptr? => false, :string? => false, :const? => false, :const_ptr? => false}
2353
2661
  ],
2354
2662
  :args_string=>"int Lenny, int Squiggy",
2355
2663
  :args_call=>"Lenny, Squiggy"
@@ -2592,7 +2900,7 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
2592
2900
  :var_arg => nil,
2593
2901
  :args_string => "int a",
2594
2902
  :args => [
2595
- { :ptr? => false,
2903
+ { :ptr? => false, :string? => false,
2596
2904
  :const? => false,
2597
2905
  :const_ptr? => false,
2598
2906
  :name => "a",
@@ -2615,7 +2923,7 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
2615
2923
  :var_arg => nil,
2616
2924
  :args_string => "int* a",
2617
2925
  :args => [
2618
- { :ptr? => true,
2926
+ { :ptr? => true, :string? => false,
2619
2927
  :const? => false,
2620
2928
  :const_ptr? => false,
2621
2929
  :name => "a",
@@ -2664,7 +2972,7 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
2664
2972
  :var_arg => nil,
2665
2973
  :args_string => "int a",
2666
2974
  :args => [
2667
- { :ptr? => false,
2975
+ { :ptr? => false, :string? => false,
2668
2976
  :const? => false,
2669
2977
  :const_ptr? => false,
2670
2978
  :name => "a",
@@ -2687,7 +2995,7 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
2687
2995
  :var_arg => nil,
2688
2996
  :args_string => "int* a",
2689
2997
  :args => [
2690
- { :ptr? => true,
2998
+ { :ptr? => true, :string? => false,
2691
2999
  :const? => false,
2692
3000
  :const_ptr? => false,
2693
3001
  :name => "a",
@@ -2882,5 +3190,293 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
2882
3190
  assert_equal(expected, @parser.transform_inline_functions(source))
2883
3191
  end
2884
3192
 
3193
+ it "pairs size arg with adjacent pointer when no name affinity exists" do
3194
+ source = "void process(int *data, int size)"
3195
+
3196
+ result = @parser.parse("module", source)
3197
+ args = result[:functions].first[:args]
3198
+
3199
+ data_arg = args.find { |a| a[:name] == 'data' }
3200
+ size_arg = args.find { |a| a[:name] == 'size' }
3201
+
3202
+ assert_equal(:after, data_arg[:array_size_order], "data should be paired with size (after)")
3203
+ assert_equal(true, size_arg[:array_size?], "size should be marked as array_size?")
3204
+ end
3205
+
3206
+ it "pairs size arg with the pointer whose name it matches, even when a different pointer is adjacent" do
3207
+ # buf_size is adjacent to status, but 'buf' root matches 'buf' exactly
3208
+ source = "void store(int *status, int buf_size, int *buf)"
3209
+
3210
+ result = @parser.parse("module", source)
3211
+ args = result[:functions].first[:args]
3212
+
3213
+ status_arg = args.find { |a| a[:name] == 'status' }
3214
+ buf_size_arg = args.find { |a| a[:name] == 'buf_size' }
3215
+ buf_arg = args.find { |a| a[:name] == 'buf' }
3216
+
3217
+ assert_nil(status_arg[:array_size_order], "status should NOT be paired")
3218
+ assert_equal(:before, buf_arg[:array_size_order], "buf should be paired with size (before)")
3219
+ assert_equal(true, buf_size_arg[:array_size?], "buf_size should be marked as array_size?")
3220
+ end
3221
+
3222
+ it "pairs size arg with pointer that comes after it when name affinity is stronger than adjacency" do
3223
+ # buff_size is adjacent to bytes_to_read, but 'buff' root is a prefix of 'buffer'
3224
+ source = "void read_interface(size_t *bytes_to_read, size_t buff_size, char **buffer)"
3225
+
3226
+ result = @parser.parse("module", source)
3227
+ args = result[:functions].first[:args]
3228
+
3229
+ bytes_arg = args.find { |a| a[:name] == 'bytes_to_read' }
3230
+ buff_size_arg = args.find { |a| a[:name] == 'buff_size' }
3231
+ buffer_arg = args.find { |a| a[:name] == 'buffer' }
3232
+
3233
+ assert_nil(bytes_arg[:array_size_order], "bytes_to_read should NOT be paired")
3234
+ assert_equal(:before, buffer_arg[:array_size_order], "buffer should be paired with size (before)")
3235
+ assert_equal(true, buff_size_arg[:array_size?], "buff_size should be marked as array_size?")
3236
+ end
3237
+
3238
+ it "pairs multiple size args each with their best-matched pointer" do
3239
+ source = "void copy(int *dst, int dst_len, int *src, int src_len)"
3240
+
3241
+ result = @parser.parse("module", source)
3242
+ args = result[:functions].first[:args]
3243
+
3244
+ dst_arg = args.find { |a| a[:name] == 'dst' }
3245
+ dst_len_arg = args.find { |a| a[:name] == 'dst_len' }
3246
+ src_arg = args.find { |a| a[:name] == 'src' }
3247
+ src_len_arg = args.find { |a| a[:name] == 'src_len' }
3248
+
3249
+ assert_equal(:after, dst_arg[:array_size_order], "dst should be paired with size (after)")
3250
+ assert_equal(true, dst_len_arg[:array_size?], "dst_len should be marked as array_size?")
3251
+ assert_equal(:after, src_arg[:array_size_order], "src should be paired with size (after)")
3252
+ assert_equal(true, src_len_arg[:array_size?], "src_len should be marked as array_size?")
3253
+ end
3254
+
3255
+ it "pairs size arg with adjacent array when no name affinity exists" do
3256
+ source = "void process(int data[], int size)"
3257
+
3258
+ result = @parser.parse("module", source)
3259
+ args = result[:functions].first[:args]
3260
+
3261
+ data_arg = args.find { |a| a[:name] == 'data' }
3262
+ size_arg = args.find { |a| a[:name] == 'size' }
3263
+
3264
+ assert_equal(:after, data_arg[:array_size_order], "data should be paired with size (after)")
3265
+ assert_equal(true, size_arg[:array_size?], "size should be marked as array_size?")
3266
+ end
3267
+
3268
+ it "pairs size arg with the array whose name it matches, even when a different pointer is adjacent" do
3269
+ # buf_size is adjacent to status, but 'buf' root matches 'buf' exactly
3270
+ source = "void store(int status[], int buf_size, int buf[])"
3271
+
3272
+ result = @parser.parse("module", source)
3273
+ args = result[:functions].first[:args]
3274
+
3275
+ status_arg = args.find { |a| a[:name] == 'status' }
3276
+ buf_size_arg = args.find { |a| a[:name] == 'buf_size' }
3277
+ buf_arg = args.find { |a| a[:name] == 'buf' }
3278
+
3279
+ assert_nil(status_arg[:array_size_order], "status should NOT be paired")
3280
+ assert_equal(:before, buf_arg[:array_size_order], "buf should be paired with size (before)")
3281
+ assert_equal(true, buf_size_arg[:array_size?], "buf_size should be marked as array_size?")
3282
+ end
3283
+
3284
+ it "pairs size arg with array that comes after it when name affinity is stronger than adjacency" do
3285
+ # buff_size is adjacent to bytes_to_read, but 'buff' root is a prefix of 'buffer'
3286
+ source = "void read_interface(size_t bytes_to_read[], size_t buff_size, char *buffer[])"
3287
+
3288
+ result = @parser.parse("module", source)
3289
+ args = result[:functions].first[:args]
3290
+
3291
+ bytes_arg = args.find { |a| a[:name] == 'bytes_to_read' }
3292
+ buff_size_arg = args.find { |a| a[:name] == 'buff_size' }
3293
+ buffer_arg = args.find { |a| a[:name] == 'buffer' }
3294
+
3295
+ assert_nil(bytes_arg[:array_size_order], "bytes_to_read should NOT be paired")
3296
+ assert_equal(:before, buffer_arg[:array_size_order], "buffer should be paired with size (before)")
3297
+ assert_equal(true, buff_size_arg[:array_size?], "buff_size should be marked as array_size?")
3298
+ end
3299
+
3300
+ it "pairs multiple size args each with their best-matched array" do
3301
+ source = "void copy(int dst[], int dst_len, int src[], int src_len)"
3302
+
3303
+ result = @parser.parse("module", source)
3304
+ args = result[:functions].first[:args]
3305
+
3306
+ dst_arg = args.find { |a| a[:name] == 'dst' }
3307
+ dst_len_arg = args.find { |a| a[:name] == 'dst_len' }
3308
+ src_arg = args.find { |a| a[:name] == 'src' }
3309
+ src_len_arg = args.find { |a| a[:name] == 'src_len' }
3310
+
3311
+ assert_equal(:after, dst_arg[:array_size_order], "dst should be paired with size (after)")
3312
+ assert_equal(true, dst_len_arg[:array_size?], "dst_len should be marked as array_size?")
3313
+ assert_equal(:after, src_arg[:array_size_order], "src should be paired with size (after)")
3314
+ assert_equal(true, src_len_arg[:array_size?], "src_len should be marked as array_size?")
3315
+ end
3316
+
3317
+ it "correctly parse const int* const return type (both const qualifiers)" do
3318
+ sources = [
3319
+ "const int* const DoubleConst(void);\n",
3320
+ "const int *const DoubleConst(void);\n",
3321
+ ]
3322
+
3323
+ # The trailing 'const' (const_ptr?) also lands in :modifier, matching the existing
3324
+ # behavior seen for 'int* const' return types (see the test above for PorkRoast).
3325
+ # The generated mock correctly uses return[:str] and function_return_type() which
3326
+ # reconstruct the full "const int* const" from :type + const_ptr? without needing :modifier.
3327
+ expected = [{ :var_arg => nil,
3328
+ :name => "DoubleConst",
3329
+ :unscoped_name => "DoubleConst",
3330
+ :namespace => [],
3331
+ :class => nil,
3332
+ :return => { :type => "const int*",
3333
+ :name => 'cmock_to_return',
3334
+ :ptr? => true,
3335
+ :const? => true,
3336
+ :const_ptr? => true,
3337
+ :str => "const int* const cmock_to_return",
3338
+ :void? => false
3339
+ },
3340
+ :modifier => "const",
3341
+ :contains_ptr? => false,
3342
+ :args => [],
3343
+ :args_string => "void",
3344
+ :args_call => ""
3345
+ }]
3346
+
3347
+ sources.each do |source|
3348
+ assert_equal(expected, @parser.parse("module", source)[:functions])
3349
+ end
3350
+ end
3351
+
3352
+ it "correctly parse int const* const return type (trailing-const form, both qualifiers)" do
3353
+ sources = [
3354
+ "int const* const DoubleConst(void);\n",
3355
+ "int const *const DoubleConst(void);\n",
3356
+ ]
3357
+
3358
+ expected = [{ :var_arg => nil,
3359
+ :name => "DoubleConst",
3360
+ :unscoped_name => "DoubleConst",
3361
+ :namespace => [],
3362
+ :class => nil,
3363
+ :return => { :type => "int const*",
3364
+ :name => 'cmock_to_return',
3365
+ :ptr? => true,
3366
+ :const? => true,
3367
+ :const_ptr? => true,
3368
+ :str => "int const* const cmock_to_return",
3369
+ :void? => false
3370
+ },
3371
+ :modifier => "const",
3372
+ :contains_ptr? => false,
3373
+ :args => [],
3374
+ :args_string => "void",
3375
+ :args_call => ""
3376
+ }]
3377
+
3378
+ sources.each do |source|
3379
+ assert_equal(expected, @parser.parse("module", source)[:functions])
3380
+ end
3381
+ end
3382
+
3383
+ it "correctly parse double-pointer argument types preserving const and pointer ordering" do
3384
+ # Tests the full parse pipeline for double-pointer args (not just divine_ptr_and_const).
3385
+ # const int** p → const? false (const is not before the final *), type preserves "const int**"
3386
+ # int** const q → const_ptr? true, type is "int**"
3387
+ # int* const* p → const? true (const* before the last *), type is "int* const*"
3388
+ source = "void TriplePlay(const int** a, int** const b, int* const* c);\n"
3389
+
3390
+ expected = [{ :var_arg => nil,
3391
+ :name => "TriplePlay",
3392
+ :unscoped_name => "TriplePlay",
3393
+ :namespace => [],
3394
+ :class => nil,
3395
+ :return => { :type => "void",
3396
+ :name => 'cmock_to_return',
3397
+ :ptr? => false,
3398
+ :const? => false,
3399
+ :const_ptr? => false,
3400
+ :str => "void cmock_to_return",
3401
+ :void? => true
3402
+ },
3403
+ :modifier => "",
3404
+ :contains_ptr? => true,
3405
+ :args => [
3406
+ { :type => "const int**", :name => "a", :ptr? => true, :string? => false,
3407
+ :const? => false, :const_ptr? => false },
3408
+ { :type => "int**", :name => "b", :ptr? => true, :string? => false,
3409
+ :const? => false, :const_ptr? => true },
3410
+ { :type => "int* const*", :name => "c", :ptr? => true, :string? => false,
3411
+ :const? => true, :const_ptr? => false },
3412
+ ],
3413
+ :args_string => "const int** a, int** const b, int* const* c",
3414
+ :args_call => "a, b, c"
3415
+ }]
3416
+
3417
+ assert_equal(expected, @parser.parse("module", source)[:functions])
3418
+ end
3419
+
3420
+ it "correctly parse double-pointer argument types with all consts" do
3421
+ # const int** const p → both const forms: type "const int**", const?=false, const_ptr?=true
3422
+ # int* const* const q → both const forms: type "int* const*", const?=true, const_ptr?=true
3423
+ source = "void AllConst(const int** const a, int* const* const b);\n"
3424
+
3425
+ expected = [{ :var_arg => nil,
3426
+ :name => "AllConst",
3427
+ :unscoped_name => "AllConst",
3428
+ :namespace => [],
3429
+ :class => nil,
3430
+ :return => { :type => "void",
3431
+ :name => 'cmock_to_return',
3432
+ :ptr? => false,
3433
+ :const? => false,
3434
+ :const_ptr? => false,
3435
+ :str => "void cmock_to_return",
3436
+ :void? => true
3437
+ },
3438
+ :modifier => "",
3439
+ :contains_ptr? => true,
3440
+ :args => [
3441
+ { :type => "const int**", :name => "a", :ptr? => true, :string? => false,
3442
+ :const? => false, :const_ptr? => true },
3443
+ { :type => "int* const*", :name => "b", :ptr? => true, :string? => false,
3444
+ :const? => true, :const_ptr? => true },
3445
+ ],
3446
+ :args_string => "const int** const a, int* const* const b",
3447
+ :args_call => "a, b"
3448
+ }]
3449
+
3450
+ assert_equal(expected, @parser.parse("module", source)[:functions])
3451
+ end
3452
+
3453
+ it "preserve const on non-pointer custom type arguments (e.g. const MyType_t)" do
3454
+ source = "int myFunc(const MyType_t t_MyType);\n"
3455
+
3456
+ expected = [{ :var_arg => nil,
3457
+ :name => "myFunc",
3458
+ :unscoped_name => "myFunc",
3459
+ :namespace => [],
3460
+ :class => nil,
3461
+ :return => { :type => "int",
3462
+ :name => 'cmock_to_return',
3463
+ :ptr? => false,
3464
+ :const? => false,
3465
+ :const_ptr? => false,
3466
+ :str => "int cmock_to_return",
3467
+ :void? => false
3468
+ },
3469
+ :modifier => "",
3470
+ :contains_ptr? => false,
3471
+ :args => [
3472
+ { :type => "MyType_t", :name => "t_MyType", :ptr? => false, :string? => false,
3473
+ :const? => true, :const_ptr? => false }
3474
+ ],
3475
+ :args_string => "const MyType_t t_MyType",
3476
+ :args_call => "t_MyType"
3477
+ }]
3478
+
3479
+ assert_equal(expected, @parser.parse("module", source)[:functions])
3480
+ end
2885
3481
 
2886
3482
  end