ceedling 0.19.0 → 0.20.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (426) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +10 -10
  3. data/bin/ceedling +205 -92
  4. data/ceedling-0.19.0.gem +0 -0
  5. data/config/test_environment.rb +12 -12
  6. data/docs/CeedlingPacket.md +866 -853
  7. data/docs/CeedlingPacket.odt +0 -0
  8. data/docs/CeedlingPacket.pdf +0 -0
  9. data/examples/temp_sensor/rakefile.rb +4 -4
  10. data/examples/temp_sensor/src/AdcConductor.c +42 -42
  11. data/examples/temp_sensor/src/AdcConductor.h +13 -13
  12. data/examples/temp_sensor/src/AdcHardware.c +27 -27
  13. data/examples/temp_sensor/src/AdcHardware.h +11 -11
  14. data/examples/temp_sensor/src/AdcHardwareConfigurator.c +18 -18
  15. data/examples/temp_sensor/src/AdcHardwareConfigurator.h +10 -10
  16. data/examples/temp_sensor/src/AdcModel.c +33 -33
  17. data/examples/temp_sensor/src/AdcModel.h +13 -13
  18. data/examples/temp_sensor/src/AdcTemperatureSensor.c +51 -51
  19. data/examples/temp_sensor/src/AdcTemperatureSensor.h +10 -10
  20. data/examples/temp_sensor/src/Executor.c +25 -25
  21. data/examples/temp_sensor/src/Executor.h +9 -9
  22. data/examples/temp_sensor/src/IntrinsicsWrapper.c +18 -18
  23. data/examples/temp_sensor/src/IntrinsicsWrapper.h +7 -7
  24. data/examples/temp_sensor/src/Main.c +46 -46
  25. data/examples/temp_sensor/src/Main.h +7 -7
  26. data/examples/temp_sensor/src/Model.c +10 -10
  27. data/examples/temp_sensor/src/Model.h +8 -8
  28. data/examples/temp_sensor/src/ModelConfig.h +7 -7
  29. data/examples/temp_sensor/src/TaskScheduler.c +72 -72
  30. data/examples/temp_sensor/src/TaskScheduler.h +11 -11
  31. data/examples/temp_sensor/src/TemperatureCalculator.c +27 -27
  32. data/examples/temp_sensor/src/TemperatureCalculator.h +8 -8
  33. data/examples/temp_sensor/src/TemperatureFilter.c +38 -38
  34. data/examples/temp_sensor/src/TemperatureFilter.h +10 -10
  35. data/examples/temp_sensor/src/TimerConductor.c +15 -15
  36. data/examples/temp_sensor/src/TimerConductor.h +9 -9
  37. data/examples/temp_sensor/src/TimerConfigurator.c +51 -51
  38. data/examples/temp_sensor/src/TimerConfigurator.h +15 -15
  39. data/examples/temp_sensor/src/TimerHardware.c +15 -15
  40. data/examples/temp_sensor/src/TimerHardware.h +8 -8
  41. data/examples/temp_sensor/src/TimerInterruptConfigurator.c +55 -55
  42. data/examples/temp_sensor/src/TimerInterruptConfigurator.h +13 -13
  43. data/examples/temp_sensor/src/TimerInterruptHandler.c +25 -25
  44. data/examples/temp_sensor/src/TimerInterruptHandler.h +10 -10
  45. data/examples/temp_sensor/src/TimerModel.c +9 -9
  46. data/examples/temp_sensor/src/TimerModel.h +8 -8
  47. data/examples/temp_sensor/src/Types.h +90 -90
  48. data/examples/temp_sensor/src/UsartBaudRateRegisterCalculator.c +18 -18
  49. data/examples/temp_sensor/src/UsartBaudRateRegisterCalculator.h +8 -8
  50. data/examples/temp_sensor/src/UsartConductor.c +21 -21
  51. data/examples/temp_sensor/src/UsartConductor.h +7 -7
  52. data/examples/temp_sensor/src/UsartConfigurator.c +39 -39
  53. data/examples/temp_sensor/src/UsartConfigurator.h +13 -13
  54. data/examples/temp_sensor/src/UsartHardware.c +22 -22
  55. data/examples/temp_sensor/src/UsartHardware.h +9 -9
  56. data/examples/temp_sensor/src/UsartModel.c +34 -34
  57. data/examples/temp_sensor/src/UsartModel.h +10 -10
  58. data/examples/temp_sensor/src/UsartPutChar.c +16 -16
  59. data/examples/temp_sensor/src/UsartPutChar.h +8 -8
  60. data/examples/temp_sensor/src/UsartTransmitBufferStatus.c +7 -7
  61. data/examples/temp_sensor/src/UsartTransmitBufferStatus.h +8 -8
  62. data/examples/temp_sensor/test/TestAdcConductor.c +121 -121
  63. data/examples/temp_sensor/test/TestAdcHardware.c +44 -44
  64. data/examples/temp_sensor/test/TestAdcModel.c +33 -33
  65. data/examples/temp_sensor/test/TestExecutor.c +36 -36
  66. data/examples/temp_sensor/test/TestMain.c +24 -24
  67. data/examples/temp_sensor/test/TestModel.c +20 -20
  68. data/examples/temp_sensor/test/TestTaskScheduler.c +104 -104
  69. data/examples/temp_sensor/test/TestTemperatureCalculator.c +33 -33
  70. data/examples/temp_sensor/test/TestTemperatureFilter.c +79 -79
  71. data/examples/temp_sensor/test/TestTimerConductor.c +32 -32
  72. data/examples/temp_sensor/test/TestTimerHardware.c +26 -26
  73. data/examples/temp_sensor/test/TestTimerModel.c +18 -18
  74. data/examples/temp_sensor/test/TestUsartBaudRateRegisterCalculator.c +21 -21
  75. data/examples/temp_sensor/test/TestUsartConductor.c +40 -40
  76. data/examples/temp_sensor/test/TestUsartHardware.c +36 -36
  77. data/examples/temp_sensor/test/TestUsartModel.c +36 -36
  78. data/examples/temp_sensor/test/support/UnityHelper.c +12 -12
  79. data/examples/temp_sensor/test/support/UnityHelper.h +12 -12
  80. data/lib/ceedling/configurator_builder.rb +1 -1
  81. data/lib/ceedling/tasks_base.rake +10 -2
  82. data/lib/ceedling/tool_executor.rb +3 -0
  83. data/lib/ceedling/version.rb +3 -3
  84. data/license.txt +1 -1
  85. data/plugins/bullseye/bullseye.rake +162 -162
  86. data/plugins/gcov/gcov.rake +152 -152
  87. data/plugins/module_generator/lib/module_generator.rb +145 -145
  88. data/plugins/module_generator/module_generator.rake +14 -14
  89. data/plugins/stdout_gtestlike_tests_report/assets/template.erb +84 -0
  90. data/plugins/stdout_gtestlike_tests_report/assets/template.erb copy +59 -0
  91. data/plugins/stdout_gtestlike_tests_report/config/stdout_gtestlike_tests_report.yml +4 -0
  92. data/plugins/stdout_gtestlike_tests_report/lib/stdout_gtestlike_tests_report.rb +43 -0
  93. data/spec/system/deployment_spec.rb +0 -1
  94. data/test_graveyard/integration/paths_test.rb +80 -80
  95. data/test_graveyard/integration/rake_rules_aux_dependencies_test.rb +75 -75
  96. data/test_graveyard/integration/rake_rules_cmock_test.rb +74 -74
  97. data/test_graveyard/integration/rake_rules_preprocess_test.rb +178 -178
  98. data/test_graveyard/integration/rake_rules_test.rb +268 -268
  99. data/test_graveyard/integration/rake_tasks_test.rb +103 -103
  100. data/test_graveyard/integration_test_helper.rb +34 -34
  101. data/test_graveyard/rakefile_rules.rb +10 -10
  102. data/test_graveyard/rakefile_rules_aux_dependencies.rb +10 -10
  103. data/test_graveyard/rakefile_rules_cmock.rb +10 -10
  104. data/test_graveyard/rakefile_rules_preprocess.rb +10 -10
  105. data/test_graveyard/rakefile_tasks.rb +10 -10
  106. data/test_graveyard/system/file_system_test.rb +78 -78
  107. data/test_graveyard/system/project_mocks_test.rb +38 -38
  108. data/test_graveyard/system/project_simple_test.rb +39 -39
  109. data/test_graveyard/system/rule_mocks_test.rb +44 -44
  110. data/test_graveyard/system/rule_runners_test.rb +44 -44
  111. data/test_graveyard/system_test_helper.rb +73 -73
  112. data/test_graveyard/test_helper.rb +93 -93
  113. data/test_graveyard/unit/busted/configurator_builder_test.rb +569 -569
  114. data/test_graveyard/unit/busted/configurator_helper_test.rb +234 -234
  115. data/test_graveyard/unit/busted/configurator_test.rb +232 -232
  116. data/test_graveyard/unit/busted/configurator_validator_test.rb +169 -169
  117. data/test_graveyard/unit/busted/deep_merge_fix_test.rb +55 -55
  118. data/test_graveyard/unit/busted/dependinator_test.rb +129 -129
  119. data/test_graveyard/unit/busted/file_finder_helper_test.rb +45 -45
  120. data/test_graveyard/unit/busted/file_finder_test.rb +114 -114
  121. data/test_graveyard/unit/busted/file_path_utils_test.rb +97 -97
  122. data/test_graveyard/unit/busted/file_system_utils_test.rb +21 -21
  123. data/test_graveyard/unit/busted/generator_test.rb +187 -187
  124. data/test_graveyard/unit/busted/generator_test_results_test.rb +129 -129
  125. data/test_graveyard/unit/busted/generator_test_runner_test.rb +475 -475
  126. data/test_graveyard/unit/busted/preprocessinator_file_handler_test.rb +39 -39
  127. data/test_graveyard/unit/busted/preprocessinator_helper_test.rb +156 -156
  128. data/test_graveyard/unit/busted/preprocessinator_includes_handler_test.rb +93 -93
  129. data/test_graveyard/unit/busted/preprocessinator_test.rb +57 -57
  130. data/test_graveyard/unit/busted/project_file_loader_test.rb +142 -142
  131. data/test_graveyard/unit/busted/setupinator_test.rb +45 -45
  132. data/test_graveyard/unit/busted/streaminator_test.rb +49 -49
  133. data/test_graveyard/unit/busted/task_invoker_test.rb +69 -69
  134. data/test_graveyard/unit/busted/test_includes_extractor_test.rb +111 -111
  135. data/test_graveyard/unit/busted/test_invoker_helper_test.rb +62 -62
  136. data/test_graveyard/unit/busted/test_invoker_test.rb +47 -47
  137. data/test_graveyard/unit/busted/tool_executor_helper_test.rb +100 -100
  138. data/test_graveyard/unit/busted/tool_executor_test.rb +351 -351
  139. data/test_graveyard/unit/busted/verbosinator_test.rb +65 -65
  140. data/test_graveyard/unit/preprocessinator_extractor_test.rb +731 -731
  141. data/test_graveyard/unit_test_helper.rb +16 -16
  142. data/vendor/c_exception/LICENSE.txt +30 -30
  143. data/vendor/c_exception/README.md +11 -1
  144. data/vendor/c_exception/docs/CExceptionSummary.odt +0 -0
  145. data/vendor/c_exception/docs/CExceptionSummary.pdf +0 -0
  146. data/vendor/c_exception/docs/readme.txt +261 -242
  147. data/vendor/c_exception/lib/CException.c +46 -46
  148. data/vendor/c_exception/lib/CException.h +110 -86
  149. data/vendor/c_exception/makefile +23 -23
  150. data/vendor/c_exception/test/CExceptionConfig.h +46 -46
  151. data/vendor/c_exception/test/TestException.c +391 -342
  152. data/vendor/c_exception/test/TestException_Runner.c +5 -12
  153. data/vendor/c_exception/vendor/unity/README.md +211 -0
  154. data/vendor/c_exception/vendor/unity/auto/colour_prompt.rb +1 -1
  155. data/vendor/c_exception/vendor/unity/auto/colour_reporter.rb +38 -38
  156. data/vendor/c_exception/vendor/unity/auto/generate_config.yml +36 -36
  157. data/vendor/c_exception/vendor/unity/auto/generate_module.rb +202 -202
  158. data/vendor/c_exception/vendor/unity/auto/generate_test_runner.rb +391 -320
  159. data/vendor/c_exception/vendor/unity/auto/parseOutput.rb +2 -0
  160. data/vendor/c_exception/vendor/unity/auto/stylize_as_junit.rb +260 -0
  161. data/vendor/c_exception/vendor/unity/auto/type_sanitizer.rb +8 -0
  162. data/vendor/c_exception/vendor/unity/auto/unity_test_summary.py +135 -0
  163. data/vendor/c_exception/vendor/unity/auto/unity_test_summary.rb +148 -139
  164. data/vendor/c_exception/vendor/unity/docs/Unity Summary.odt +0 -0
  165. data/vendor/c_exception/vendor/unity/docs/Unity Summary.pdf +0 -0
  166. data/vendor/c_exception/vendor/unity/docs/Unity Summary.txt +224 -216
  167. data/vendor/c_exception/vendor/unity/docs/license.txt +21 -31
  168. data/vendor/c_exception/vendor/unity/examples/example_1/makefile +40 -15
  169. data/vendor/c_exception/vendor/unity/examples/example_1/src/ProductionCode2.c +2 -0
  170. data/vendor/c_exception/vendor/unity/examples/example_1/test/test_runners/TestProductionCode2_Runner.c +32 -25
  171. data/vendor/c_exception/vendor/unity/examples/example_1/test/test_runners/TestProductionCode_Runner.c +29 -22
  172. data/vendor/c_exception/vendor/unity/examples/example_2/makefile +40 -14
  173. data/vendor/c_exception/vendor/unity/examples/example_2/src/ProductionCode2.c +2 -0
  174. data/vendor/c_exception/vendor/unity/examples/example_2/test/test_runners/all_tests.c +2 -2
  175. data/vendor/c_exception/vendor/unity/examples/example_3/rakefile.rb +0 -1
  176. data/vendor/c_exception/vendor/unity/examples/example_3/src/ProductionCode2.c +2 -0
  177. data/vendor/c_exception/vendor/unity/extras/fixture/rakefile.rb +48 -37
  178. data/vendor/c_exception/vendor/unity/extras/fixture/rakefile_helper.rb +179 -179
  179. data/vendor/c_exception/vendor/unity/extras/fixture/src/unity_fixture.c +135 -94
  180. data/vendor/c_exception/vendor/unity/extras/fixture/src/unity_fixture.h +13 -17
  181. data/vendor/c_exception/vendor/unity/extras/fixture/src/unity_fixture_internals.h +12 -18
  182. data/vendor/c_exception/vendor/unity/extras/fixture/src/unity_fixture_malloc_overrides.h +30 -0
  183. data/vendor/c_exception/vendor/unity/extras/fixture/test/Makefile +60 -0
  184. data/vendor/c_exception/vendor/unity/extras/fixture/test/main/AllTests.c +4 -3
  185. data/vendor/c_exception/vendor/unity/extras/fixture/test/{testunity_fixture.c → template_fixture_tests.c} +0 -0
  186. data/vendor/c_exception/vendor/unity/extras/fixture/test/unity_fixture_Test.c +182 -27
  187. data/vendor/c_exception/vendor/unity/extras/fixture/test/unity_fixture_TestRunner.c +13 -0
  188. data/vendor/c_exception/vendor/unity/extras/fixture/test/unity_output_Spy.c +8 -6
  189. data/vendor/c_exception/vendor/unity/extras/fixture/test/unity_output_Spy.h +2 -2
  190. data/vendor/c_exception/vendor/unity/release/build.info +1 -1
  191. data/vendor/c_exception/vendor/unity/release/version.info +1 -1
  192. data/vendor/c_exception/vendor/unity/src/unity.c +1333 -1145
  193. data/vendor/c_exception/vendor/unity/src/unity.h +290 -307
  194. data/vendor/c_exception/vendor/unity/src/unity_internals.h +758 -620
  195. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_cmd.c +7 -3
  196. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_def.c +7 -3
  197. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_head1.c +55 -0
  198. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_head1.h +15 -0
  199. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_cmd.c +4 -3
  200. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_def.c +4 -3
  201. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_head1.c +75 -0
  202. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_head1.h +13 -0
  203. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_new1.c +6 -5
  204. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_new2.c +4 -3
  205. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_param.c +4 -3
  206. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_run1.c +6 -5
  207. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_run2.c +4 -3
  208. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_yaml.c +7 -6
  209. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_new1.c +9 -5
  210. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_new2.c +7 -3
  211. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_param.c +7 -3
  212. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_run1.c +9 -5
  213. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_run2.c +7 -3
  214. data/vendor/c_exception/vendor/unity/test/expectdata/testsample_yaml.c +10 -6
  215. data/vendor/c_exception/vendor/unity/{rakefile.rb → test/rakefile} +60 -61
  216. data/vendor/c_exception/vendor/unity/{rakefile_helper.rb → test/rakefile_helper.rb} +255 -249
  217. data/vendor/c_exception/vendor/unity/test/targets/clang_file.yml +83 -0
  218. data/vendor/c_exception/vendor/unity/{targets → test/targets}/clang_strict.yml +83 -83
  219. data/vendor/c_exception/vendor/unity/test/targets/gcc_32.yml +49 -0
  220. data/vendor/c_exception/vendor/unity/test/targets/gcc_64.yml +50 -0
  221. data/vendor/c_exception/vendor/unity/{targets/gcc_64.yml → test/targets/gcc_auto_limits.yml} +46 -45
  222. data/vendor/c_exception/vendor/unity/test/targets/gcc_auto_sizeof.yml +47 -0
  223. data/vendor/c_exception/vendor/unity/test/targets/gcc_auto_stdint.yml +58 -0
  224. data/vendor/{cmock/vendor/c_exception/vendor/unity/targets/gcc_64.yml → c_exception/vendor/unity/test/targets/gcc_manual_math.yml} +46 -45
  225. data/vendor/{cmock/vendor/c_exception/vendor/unity → c_exception/vendor/unity/test}/targets/hitech_picc18.yml +101 -101
  226. data/vendor/{cmock/vendor/c_exception/vendor/unity → c_exception/vendor/unity/test}/targets/iar_arm_v4.yml +89 -89
  227. data/vendor/{cmock/vendor/c_exception/vendor/unity → c_exception/vendor/unity/test}/targets/iar_arm_v5.yml +79 -79
  228. data/vendor/c_exception/vendor/unity/{targets → test/targets}/iar_arm_v5_3.yml +79 -79
  229. data/vendor/{cmock/vendor/c_exception/vendor/unity → c_exception/vendor/unity/test}/targets/iar_armcortex_LM3S9B92_v5_4.yml +93 -93
  230. data/vendor/c_exception/vendor/unity/{targets → test/targets}/iar_cortexm3_v5.yml +83 -83
  231. data/vendor/{cmock/vendor/c_exception/vendor/unity → c_exception/vendor/unity/test}/targets/iar_msp430.yml +94 -94
  232. data/vendor/c_exception/vendor/unity/{targets → test/targets}/iar_sh2a_v6.yml +85 -85
  233. data/vendor/c_exception/vendor/unity/test/testdata/mocksample.c +51 -51
  234. data/vendor/c_exception/vendor/unity/test/testdata/sample.yml +8 -8
  235. data/vendor/c_exception/vendor/unity/test/testdata/testsample.c +68 -51
  236. data/vendor/{cmock/vendor/c_exception/vendor/unity/test → c_exception/vendor/unity/test/tests}/test_generate_test_runner.rb +102 -88
  237. data/vendor/{cmock/vendor/c_exception/vendor/unity/test → c_exception/vendor/unity/test/tests}/testparameterized.c +104 -101
  238. data/vendor/c_exception/vendor/unity/test/{testunity.c → tests/testunity.c} +3682 -3447
  239. data/vendor/cmock/docs/CMock_Summary.md +3 -0
  240. data/vendor/cmock/lib/cmock_config.rb +1 -0
  241. data/vendor/cmock/lib/cmock_file_writer.rb +7 -3
  242. data/vendor/cmock/lib/cmock_generator.rb +3 -2
  243. data/vendor/cmock/lib/cmock_header_parser.rb +12 -5
  244. data/vendor/cmock/release/version.info +1 -1
  245. data/vendor/cmock/test/system/test_compilation/parsing.h +3 -0
  246. data/vendor/cmock/test/unit/cmock_generator_main_test.rb +7 -0
  247. data/vendor/cmock/test/unit/cmock_header_parser_test.rb +57 -1
  248. data/vendor/cmock/vendor/c_exception/LICENSE.txt +30 -30
  249. data/vendor/cmock/vendor/c_exception/README.md +11 -1
  250. data/vendor/cmock/vendor/c_exception/docs/CExceptionSummary.odt +0 -0
  251. data/vendor/cmock/vendor/c_exception/docs/CExceptionSummary.pdf +0 -0
  252. data/vendor/cmock/vendor/c_exception/docs/readme.txt +261 -242
  253. data/vendor/cmock/vendor/c_exception/lib/CException.c +46 -46
  254. data/vendor/cmock/vendor/c_exception/lib/CException.h +110 -86
  255. data/vendor/cmock/vendor/c_exception/makefile +23 -23
  256. data/vendor/cmock/vendor/c_exception/test/CExceptionConfig.h +46 -46
  257. data/vendor/cmock/vendor/c_exception/test/TestException.c +391 -342
  258. data/vendor/cmock/vendor/c_exception/test/TestException_Runner.c +5 -12
  259. data/vendor/cmock/vendor/c_exception/vendor/unity/README.md +211 -0
  260. data/vendor/cmock/vendor/c_exception/vendor/unity/auto/colour_prompt.rb +1 -1
  261. data/vendor/cmock/vendor/c_exception/vendor/unity/auto/colour_reporter.rb +38 -38
  262. data/vendor/cmock/vendor/c_exception/vendor/unity/auto/generate_config.yml +36 -36
  263. data/vendor/cmock/vendor/c_exception/vendor/unity/auto/generate_module.rb +202 -202
  264. data/vendor/cmock/vendor/c_exception/vendor/unity/auto/generate_test_runner.rb +391 -320
  265. data/vendor/cmock/vendor/c_exception/vendor/unity/auto/parseOutput.rb +2 -0
  266. data/vendor/cmock/vendor/c_exception/vendor/unity/auto/stylize_as_junit.rb +260 -0
  267. data/vendor/cmock/vendor/c_exception/vendor/unity/auto/type_sanitizer.rb +8 -0
  268. data/vendor/cmock/vendor/c_exception/vendor/unity/auto/unity_test_summary.py +135 -0
  269. data/vendor/cmock/vendor/c_exception/vendor/unity/auto/unity_test_summary.rb +148 -139
  270. data/vendor/cmock/vendor/c_exception/vendor/unity/docs/Unity Summary.odt +0 -0
  271. data/vendor/cmock/vendor/c_exception/vendor/unity/docs/Unity Summary.pdf +0 -0
  272. data/vendor/cmock/vendor/c_exception/vendor/unity/docs/Unity Summary.txt +224 -216
  273. data/vendor/cmock/vendor/c_exception/vendor/unity/docs/license.txt +21 -31
  274. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_1/makefile +40 -15
  275. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_1/src/ProductionCode2.c +2 -0
  276. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_1/test/test_runners/TestProductionCode2_Runner.c +32 -25
  277. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_1/test/test_runners/TestProductionCode_Runner.c +29 -22
  278. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_2/makefile +40 -14
  279. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_2/src/ProductionCode2.c +2 -0
  280. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_2/test/test_runners/all_tests.c +2 -2
  281. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_3/rakefile.rb +0 -1
  282. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_3/src/ProductionCode2.c +2 -0
  283. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/rakefile.rb +48 -37
  284. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/rakefile_helper.rb +179 -179
  285. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/src/unity_fixture.c +135 -94
  286. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/src/unity_fixture.h +13 -17
  287. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/src/unity_fixture_internals.h +12 -18
  288. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/src/unity_fixture_malloc_overrides.h +30 -0
  289. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/test/Makefile +60 -0
  290. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/test/main/AllTests.c +4 -3
  291. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/test/{testunity_fixture.c → template_fixture_tests.c} +0 -0
  292. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/test/unity_fixture_Test.c +182 -27
  293. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/test/unity_fixture_TestRunner.c +13 -0
  294. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/test/unity_output_Spy.c +8 -6
  295. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/test/unity_output_Spy.h +2 -2
  296. data/vendor/cmock/vendor/c_exception/vendor/unity/release/build.info +1 -1
  297. data/vendor/cmock/vendor/c_exception/vendor/unity/release/version.info +1 -1
  298. data/vendor/cmock/vendor/c_exception/vendor/unity/src/unity.c +1333 -1145
  299. data/vendor/cmock/vendor/c_exception/vendor/unity/src/unity.h +290 -307
  300. data/vendor/cmock/vendor/c_exception/vendor/unity/src/unity_internals.h +758 -620
  301. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_cmd.c +7 -3
  302. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_def.c +7 -3
  303. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_head1.c +55 -0
  304. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_head1.h +15 -0
  305. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_cmd.c +4 -3
  306. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_def.c +4 -3
  307. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_head1.c +75 -0
  308. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_head1.h +13 -0
  309. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_new1.c +6 -5
  310. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_new2.c +4 -3
  311. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_param.c +4 -3
  312. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_run1.c +6 -5
  313. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_run2.c +4 -3
  314. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_mock_yaml.c +7 -6
  315. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_new1.c +9 -5
  316. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_new2.c +7 -3
  317. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_param.c +7 -3
  318. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_run1.c +9 -5
  319. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_run2.c +7 -3
  320. data/vendor/cmock/vendor/c_exception/vendor/unity/test/expectdata/testsample_yaml.c +10 -6
  321. data/vendor/cmock/vendor/c_exception/vendor/unity/{rakefile.rb → test/rakefile} +60 -61
  322. data/vendor/cmock/vendor/c_exception/vendor/unity/{rakefile_helper.rb → test/rakefile_helper.rb} +255 -249
  323. data/vendor/cmock/vendor/c_exception/vendor/unity/test/targets/clang_file.yml +83 -0
  324. data/vendor/cmock/vendor/c_exception/vendor/unity/{targets → test/targets}/clang_strict.yml +83 -83
  325. data/vendor/cmock/vendor/c_exception/vendor/unity/test/targets/gcc_32.yml +49 -0
  326. data/vendor/cmock/vendor/c_exception/vendor/unity/test/targets/gcc_64.yml +50 -0
  327. data/vendor/cmock/vendor/c_exception/vendor/unity/{targets/gcc_32.yml → test/targets/gcc_auto_limits.yml} +46 -44
  328. data/vendor/cmock/vendor/c_exception/vendor/unity/test/targets/gcc_auto_sizeof.yml +47 -0
  329. data/vendor/cmock/vendor/c_exception/vendor/unity/test/targets/gcc_auto_stdint.yml +58 -0
  330. data/vendor/{c_exception/vendor/unity/targets/gcc_32.yml → cmock/vendor/c_exception/vendor/unity/test/targets/gcc_manual_math.yml} +46 -44
  331. data/vendor/{c_exception/vendor/unity → cmock/vendor/c_exception/vendor/unity/test}/targets/hitech_picc18.yml +101 -101
  332. data/vendor/{c_exception/vendor/unity → cmock/vendor/c_exception/vendor/unity/test}/targets/iar_arm_v4.yml +89 -89
  333. data/vendor/{c_exception/vendor/unity → cmock/vendor/c_exception/vendor/unity/test}/targets/iar_arm_v5.yml +79 -79
  334. data/vendor/cmock/vendor/c_exception/vendor/unity/{targets → test/targets}/iar_arm_v5_3.yml +79 -79
  335. data/vendor/{c_exception/vendor/unity → cmock/vendor/c_exception/vendor/unity/test}/targets/iar_armcortex_LM3S9B92_v5_4.yml +93 -93
  336. data/vendor/cmock/vendor/c_exception/vendor/unity/{targets → test/targets}/iar_cortexm3_v5.yml +83 -83
  337. data/vendor/{c_exception/vendor/unity → cmock/vendor/c_exception/vendor/unity/test}/targets/iar_msp430.yml +94 -94
  338. data/vendor/cmock/vendor/c_exception/vendor/unity/{targets → test/targets}/iar_sh2a_v6.yml +85 -85
  339. data/vendor/cmock/vendor/c_exception/vendor/unity/test/testdata/mocksample.c +51 -51
  340. data/vendor/cmock/vendor/c_exception/vendor/unity/test/testdata/sample.yml +8 -8
  341. data/vendor/cmock/vendor/c_exception/vendor/unity/test/testdata/testsample.c +68 -51
  342. data/vendor/{c_exception/vendor/unity/test → cmock/vendor/c_exception/vendor/unity/test/tests}/test_generate_test_runner.rb +102 -88
  343. data/vendor/{c_exception/vendor/unity/test → cmock/vendor/c_exception/vendor/unity/test/tests}/testparameterized.c +104 -101
  344. data/vendor/cmock/vendor/c_exception/vendor/unity/test/{testunity.c → tests/testunity.c} +3682 -3447
  345. data/vendor/cmock/vendor/unity/auto/generate_test_runner.rb +30 -13
  346. data/vendor/cmock/vendor/unity/auto/stylize_as_junit.rb +260 -0
  347. data/vendor/cmock/vendor/unity/extras/fixture/src/unity_fixture.c +96 -93
  348. data/vendor/cmock/vendor/unity/extras/fixture/src/unity_fixture.h +1 -1
  349. data/vendor/cmock/vendor/unity/extras/fixture/src/unity_fixture_internals.h +12 -19
  350. data/vendor/cmock/vendor/unity/extras/fixture/src/unity_fixture_malloc_overrides.h +18 -17
  351. data/vendor/cmock/vendor/unity/extras/fixture/test/Makefile +66 -5
  352. data/vendor/cmock/vendor/unity/extras/fixture/test/main/AllTests.c +2 -1
  353. data/vendor/cmock/vendor/unity/extras/fixture/test/{testunity_fixture.c → template_fixture_tests.c} +0 -0
  354. data/vendor/cmock/vendor/unity/extras/fixture/test/unity_fixture_Test.c +187 -27
  355. data/vendor/cmock/vendor/unity/extras/fixture/test/unity_fixture_TestRunner.c +14 -0
  356. data/vendor/cmock/vendor/unity/extras/fixture/test/unity_output_Spy.c +6 -5
  357. data/vendor/cmock/vendor/unity/release/version.info +1 -1
  358. data/vendor/cmock/vendor/unity/src/unity.c +38 -27
  359. data/vendor/cmock/vendor/unity/src/unity.h +5 -0
  360. data/vendor/cmock/vendor/unity/src/unity_internals.h +22 -18
  361. data/vendor/cmock/vendor/unity/test/Makefile +52 -0
  362. data/vendor/cmock/vendor/unity/test/expectdata/testsample_cmd.c +4 -0
  363. data/vendor/cmock/vendor/unity/test/expectdata/testsample_def.c +4 -0
  364. data/vendor/cmock/vendor/unity/test/expectdata/testsample_head1.c +4 -0
  365. data/vendor/cmock/vendor/unity/test/expectdata/testsample_head1.h +7 -4
  366. data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_head1.h +6 -4
  367. data/vendor/cmock/vendor/unity/test/expectdata/testsample_new1.c +4 -0
  368. data/vendor/cmock/vendor/unity/test/expectdata/testsample_new2.c +4 -0
  369. data/vendor/cmock/vendor/unity/test/expectdata/testsample_param.c +4 -0
  370. data/vendor/cmock/vendor/unity/test/expectdata/testsample_run1.c +4 -0
  371. data/vendor/cmock/vendor/unity/test/expectdata/testsample_run2.c +4 -0
  372. data/vendor/cmock/vendor/unity/test/expectdata/testsample_yaml.c +4 -0
  373. data/vendor/cmock/vendor/unity/test/rakefile_helper.rb +1 -1
  374. data/vendor/cmock/vendor/unity/test/targets/clang_file.yml +0 -1
  375. data/vendor/cmock/vendor/unity/test/targets/clang_strict.yml +0 -1
  376. data/vendor/cmock/vendor/unity/test/targets/gcc_32.yml +0 -1
  377. data/vendor/cmock/vendor/unity/test/targets/gcc_64.yml +0 -1
  378. data/vendor/cmock/vendor/unity/test/targets/gcc_auto_limits.yml +0 -1
  379. data/vendor/cmock/vendor/unity/test/targets/gcc_auto_sizeof.yml +0 -1
  380. data/vendor/cmock/vendor/unity/test/targets/gcc_auto_stdint.yml +0 -1
  381. data/vendor/cmock/vendor/unity/test/targets/gcc_manual_math.yml +0 -1
  382. data/vendor/cmock/vendor/unity/test/testdata/testsample.c +19 -2
  383. data/vendor/cmock/vendor/unity/test/tests/testunity.c +55 -4
  384. data/vendor/unity/auto/generate_test_runner.rb +4 -2
  385. data/vendor/unity/auto/stylize_as_junit.rb +260 -0
  386. data/vendor/unity/extras/fixture/src/unity_fixture.c +24 -41
  387. data/vendor/unity/extras/fixture/src/unity_fixture.h +1 -1
  388. data/vendor/unity/extras/fixture/src/unity_fixture_internals.h +5 -7
  389. data/vendor/unity/extras/fixture/test/Makefile +53 -8
  390. data/vendor/unity/extras/fixture/test/{testunity_fixture.c → template_fixture_tests.c} +0 -0
  391. data/vendor/unity/extras/fixture/test/unity_fixture_Test.c +129 -32
  392. data/vendor/unity/extras/fixture/test/unity_fixture_TestRunner.c +6 -0
  393. data/vendor/unity/extras/fixture/test/unity_output_Spy.c +4 -4
  394. data/vendor/unity/release/version.info +1 -1
  395. data/vendor/unity/src/unity.c +32 -21
  396. data/vendor/unity/src/unity.h +5 -0
  397. data/vendor/unity/src/unity_internals.h +7 -3
  398. data/vendor/unity/test/Makefile +52 -0
  399. data/vendor/unity/test/expectdata/testsample_cmd.c +4 -0
  400. data/vendor/unity/test/expectdata/testsample_def.c +4 -0
  401. data/vendor/unity/test/expectdata/testsample_head1.c +4 -0
  402. data/vendor/unity/test/expectdata/testsample_head1.h +7 -4
  403. data/vendor/unity/test/expectdata/testsample_mock_head1.h +6 -4
  404. data/vendor/unity/test/expectdata/testsample_new1.c +4 -0
  405. data/vendor/unity/test/expectdata/testsample_new2.c +4 -0
  406. data/vendor/unity/test/expectdata/testsample_param.c +4 -0
  407. data/vendor/unity/test/expectdata/testsample_run1.c +4 -0
  408. data/vendor/unity/test/expectdata/testsample_run2.c +4 -0
  409. data/vendor/unity/test/expectdata/testsample_yaml.c +4 -0
  410. data/vendor/unity/test/testdata/testsample.c +19 -2
  411. data/vendor/unity/test/tests/testunity.c +35 -4
  412. metadata +75 -52
  413. data/ceedling-0.18.0.gem +0 -0
  414. data/docs/CeedlingLogo.png +0 -0
  415. data/vendor/c_exception/vendor/unity/Gemfile +0 -4
  416. data/vendor/c_exception/vendor/unity/Gemfile.lock +0 -12
  417. data/vendor/c_exception/vendor/unity/examples/example_3/makefile +0 -41
  418. data/vendor/c_exception/vendor/unity/examples/example_3/test/no_ruby/TestProductionCode2_Runner.c +0 -46
  419. data/vendor/c_exception/vendor/unity/examples/example_3/test/no_ruby/TestProductionCode_Runner.c +0 -50
  420. data/vendor/c_exception/vendor/unity/makefile +0 -37
  421. data/vendor/cmock/vendor/c_exception/vendor/unity/Gemfile +0 -4
  422. data/vendor/cmock/vendor/c_exception/vendor/unity/Gemfile.lock +0 -12
  423. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_3/makefile +0 -41
  424. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_3/test/no_ruby/TestProductionCode2_Runner.c +0 -46
  425. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_3/test/no_ruby/TestProductionCode_Runner.c +0 -50
  426. data/vendor/cmock/vendor/c_exception/vendor/unity/makefile +0 -37
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 815958f80bc12e86b6441872fe5822ec2f2f9ddb
4
- data.tar.gz: 6a6e083623424fc18b14c582f5b8c749271c2c76
3
+ metadata.gz: 1aff03f6dbcd85cb8d6bf618998935423324403e
4
+ data.tar.gz: 393d461963ddd536aa561916ed2c97ef9ba388e5
5
5
  SHA512:
6
- metadata.gz: 830683a53aa10672251438c079224bb00c53aa776c3722ea87b476b68a223440d1677441596244448561a4ff8461e2081ee4df90bd22de4cd85c154b816cefc7
7
- data.tar.gz: f7db6b3fc409f5a49e5587d12d6d69870e8cfd1873a4f54e3ab183df64ae4026239f88aba673daabc3b034696cefb874b7a126be912adfb0b2338a37e71c999c
6
+ metadata.gz: 5210173ce2d66525a3a032639d2c71493b06b8e92ce7a753325cbed191eb78e0914dd1d848fdb6634df1f12012ddaa7445fa5c47cfce300d1e4638d85c50c32d
7
+ data.tar.gz: dd6b7a3ded702d7661924e8246449fc9aab3ea1768c154c247752e0981483bb2fa942579cc612c4ddc5e019f93a12fe68bbf5772bbdc72475616557e73c90e11
data/Rakefile CHANGED
@@ -1,10 +1,10 @@
1
- #!/usr/bin/env rake
2
- require 'bundler'
3
- require 'rspec/core/rake_task'
4
-
5
- desc "Run all rspecs"
6
- RSpec::Core::RakeTask.new(:spec) do |t|
7
- t.pattern = 'spec/**/*_spec.rb'
8
- end
9
-
10
- task :ci => [:spec]
1
+ #!/usr/bin/env rake
2
+ require 'bundler'
3
+ require 'rspec/core/rake_task'
4
+
5
+ desc "Run all rspecs"
6
+ RSpec::Core::RakeTask.new(:spec) do |t|
7
+ t.pattern = 'spec/**/*_spec.rb'
8
+ end
9
+
10
+ task :ci => [:spec]
@@ -1,128 +1,241 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
+ #these are always used
3
4
  require 'rubygems'
4
5
  require 'fileutils'
5
- require 'thor'
6
6
 
7
- def here
8
- File.dirname(__FILE__) + "/.."
9
- end
7
+ unless (File.exists?("project.yml"))
8
+ #===================================== We Do Not Have A Project ================================================
10
9
 
11
- class CeedlingTasks < Thor
12
- include Thor::Actions
13
-
14
- desc "new PROJECT_NAME", "new a new ceedling project"
15
- method_option :nodocs, :type => :boolean, :default => false, :desc => "No docs in vendor directory"
16
- method_option :as_gem, :type => :boolean, :default => false, :desc => "Create the scaffold using Ceedling as a gem instead of filling in the vendor directory. Implies --no-docs."
17
- def new(name, silent = false)
18
- ceedling_path = File.join(name, 'vendor', 'ceedling')
19
- source_path = File.join(name, 'src')
20
- test_path = File.join(name, 'test')
21
- test_support_path = File.join(name, 'test/support')
22
- build_path = File.join(name, 'build')
23
-
24
- [source_path, test_path, test_support_path, build_path].each do |d|
25
- FileUtils.mkdir_p d
26
- end
10
+ puts "Welcome to Ceedling!"
11
+ require 'thor'
27
12
 
28
- unless options[:as_gem]
29
- FileUtils.mkdir_p ceedling_path
13
+ def here
14
+ File.dirname(__FILE__) + "/.."
15
+ end
16
+
17
+ class CeedlingTasks < Thor
18
+ include Thor::Actions
19
+
20
+ desc "new PROJECT_NAME", "create a new ceedling project"
21
+ method_option :nodocs, :type => :boolean, :default => false, :desc => "No docs in vendor directory"
22
+ method_option :as_gem, :type => :boolean, :default => false, :desc => "Create the scaffold using Ceedling as a gem instead of filling in the vendor directory. Implies --no-docs."
23
+ def new(name, silent = false)
24
+ ceedling_path = File.join(name, 'vendor', 'ceedling')
25
+ source_path = File.join(name, 'src')
26
+ test_path = File.join(name, 'test')
27
+ test_support_path = File.join(name, 'test/support')
28
+ build_path = File.join(name, 'build')
29
+
30
+ [source_path, test_path, test_support_path, build_path].each do |d|
31
+ FileUtils.mkdir_p d
32
+ end
30
33
 
31
- unless options[:nodocs]
32
- doc_path = File.join(ceedling_path, 'docs')
33
- FileUtils.mkdir_p doc_path
34
+ unless options[:as_gem]
35
+ FileUtils.mkdir_p ceedling_path
34
36
 
35
- in_doc_path = lambda {|f| File.join(doc_path, f)}
37
+ unless options[:nodocs]
38
+ doc_path = File.join(ceedling_path, 'docs')
39
+ FileUtils.mkdir_p doc_path
40
+
41
+ in_doc_path = lambda {|f| File.join(doc_path, f)}
42
+
43
+ doc_files = [
44
+ 'docs/CeedlingPacket.pdf',
45
+ 'vendor/c_exception/docs/CExceptionSummary.pdf',
46
+ 'vendor/cmock/docs/CMock Summary.pdf',
47
+ 'vendor/unity/docs/Unity Summary.pdf',
48
+ ]
49
+
50
+ doc_files.each do |f|
51
+ copy_file f, in_doc_path.call(File.basename(f))
52
+ end
53
+ end
36
54
 
37
- doc_files = [
38
- 'docs/CeedlingPacket.pdf',
39
- 'vendor/c_exception/docs/CExceptionSummary.pdf',
40
- 'vendor/cmock/docs/CMock Summary.pdf',
41
- 'vendor/unity/docs/Unity Summary.pdf',
42
- ]
55
+ folders = %w{plugins lib}
56
+ folders.map do |f|
57
+ {:src => f, :dst => File.join(ceedling_path, f)}
58
+ end.each do |f|
59
+ directory f[:src], f[:dst]
60
+ end
43
61
 
44
- doc_files.each do |f|
45
- copy_file f, in_doc_path.call(File.basename(f))
62
+ sub_components = [
63
+ {:src => 'vendor/c_exception/lib/', :dst => 'vendor/c_exception/lib'},
64
+ {:src => 'vendor/c_exception/release/', :dst => 'vendor/c_exception/release'},
65
+ {:src => 'vendor/cmock/config/', :dst => 'vendor/cmock/config'},
66
+ {:src => 'vendor/cmock/lib/', :dst => 'vendor/cmock/lib'},
67
+ {:src => 'vendor/cmock/release/', :dst => 'vendor/cmock/release'},
68
+ {:src => 'vendor/cmock/src/', :dst => 'vendor/cmock/src'},
69
+ {:src => 'vendor/constructor/lib/', :dst => 'vendor/constructor/lib'},
70
+ {:src => 'vendor/deep_merge/lib/', :dst => 'vendor/deep_merge/lib'},
71
+ {:src => 'vendor/diy/lib', :dst => 'vendor/diy/lib'},
72
+ {:src => 'vendor/unity/auto/', :dst => 'vendor/unity/auto'},
73
+ {:src => 'vendor/unity/release/', :dst => 'vendor/unity/release'},
74
+ {:src => 'vendor/unity/src/', :dst => 'vendor/unity/src'},
75
+ ]
76
+
77
+ sub_components.each do |c|
78
+ directory c[:src], File.join(ceedling_path, c[:dst])
46
79
  end
47
80
  end
48
81
 
49
- folders = %w{plugins lib}
50
- folders.map do |f|
51
- {:src => f, :dst => File.join(ceedling_path, f)}
52
- end.each do |f|
53
- directory f[:src], f[:dst]
82
+ if options[:as_gem]
83
+ copy_file File.join('assets', 'project_as_gem.yml'), File.join(name, 'project.yml')
84
+ copy_file File.join('assets', 'rakefile_as_gem.rb'), File.join(name, 'rakefile.rb')
85
+ else
86
+ copy_file File.join('assets', 'project_with_guts.yml'), File.join(name, 'project.yml')
87
+ copy_file File.join('assets', 'rakefile_with_guts.rb'), File.join(name, 'rakefile.rb')
54
88
  end
55
89
 
56
- sub_components = [
57
- {:src => 'vendor/c_exception/lib/', :dst => 'vendor/c_exception/lib'},
58
- {:src => 'vendor/c_exception/release/', :dst => 'vendor/c_exception/release'},
59
- {:src => 'vendor/cmock/config/', :dst => 'vendor/cmock/config'},
60
- {:src => 'vendor/cmock/lib/', :dst => 'vendor/cmock/lib'},
61
- {:src => 'vendor/cmock/release/', :dst => 'vendor/cmock/release'},
62
- {:src => 'vendor/cmock/src/', :dst => 'vendor/cmock/src'},
63
- {:src => 'vendor/constructor/lib/', :dst => 'vendor/constructor/lib'},
64
- {:src => 'vendor/deep_merge/lib/', :dst => 'vendor/deep_merge/lib'},
65
- {:src => 'vendor/diy/lib', :dst => 'vendor/diy/lib'},
66
- {:src => 'vendor/unity/auto/', :dst => 'vendor/unity/auto'},
67
- {:src => 'vendor/unity/release/', :dst => 'vendor/unity/release'},
68
- {:src => 'vendor/unity/src/', :dst => 'vendor/unity/src'},
69
- ]
70
-
71
- sub_components.each do |c|
72
- directory c[:src], File.join(ceedling_path, c[:dst])
90
+ unless silent
91
+ puts "\n"
92
+ puts "Project '#{name}' created!"
93
+ puts " - Tool documentation is located in vendor/ceedling/docs" if (not options[:nodocs]) and (not options[:as_gem])
94
+ puts " - Execute 'rake -T' to view available test & build tasks"
95
+ puts ''
73
96
  end
74
97
  end
75
98
 
76
- if options[:as_gem]
77
- copy_file File.join('assets', 'project_as_gem.yml'), File.join(name, 'project.yml')
78
- copy_file File.join('assets', 'rakefile_as_gem.rb'), File.join(name, 'rakefile.rb')
79
- else
80
- copy_file File.join('assets', 'project_with_guts.yml'), File.join(name, 'project.yml')
81
- copy_file File.join('assets', 'rakefile_with_guts.rb'), File.join(name, 'rakefile.rb')
99
+ desc "examples", "list available example projects"
100
+ def examples()
101
+ puts "Available sample projects:"
102
+ FileUtils.cd(File.join(here, "examples")) do
103
+ Dir["*"].each {|proj| puts " #{proj}"}
104
+ end
82
105
  end
83
106
 
84
- unless silent
107
+ desc "example PROJ_NAME [DEST]", "new specified example project (in DEST, if specified)"
108
+ def example(proj_name, dest=nil)
109
+ if dest.nil? then dest = proj_name end
110
+
111
+ invoke :new, [dest, true]
112
+
113
+ dest_src = File.join(dest,'src')
114
+ dest_test = File.join(dest,'test')
115
+ dest_rakefile = File.join(dest,'rakefile.rb')
116
+ dest_project = File.join(dest,'project.yml')
117
+
118
+ directory "examples/#{proj_name}/src", dest_src
119
+ directory "examples/#{proj_name}/test", dest_test
120
+ remove_file dest_rakefile
121
+ remove_file dest_project
122
+ copy_file "examples/#{proj_name}/rakefile.rb", dest_rakefile
123
+ copy_file "examples/#{proj_name}/project.yml", dest_project
124
+
85
125
  puts "\n"
86
- puts "Project '#{name}' created!"
87
- puts " - Tool documentation is located in vendor/ceedling/docs" if (not options[:nodocs]) and (not options[:as_gem])
126
+ puts "Example project '#{proj_name}' created!"
127
+ puts " - Tool documentation is located in vendor/ceedling/docs"
88
128
  puts " - Execute 'rake -T' to view available test & build tasks"
89
129
  puts ''
90
130
  end
91
131
  end
92
132
 
93
- desc "examples", "list available example projects"
94
- def examples()
95
- puts "Available sample projects:"
96
- FileUtils.cd(File.join(here, "examples")) do
97
- Dir["*"].each {|proj| puts " #{proj}"}
133
+ if (ARGV[0] =~ /^\-T$/)
134
+ puts "\n(No Project Detected, Therefore Showing Options to Create Projects)"
135
+ CeedlingTasks.tasks.each_pair do |k,v|
136
+ puts v.usage.ljust(25,' ') + v.description
98
137
  end
138
+ puts "\n"
139
+ else
140
+ CeedlingTasks.source_root here
141
+ CeedlingTasks.start
99
142
  end
100
143
 
101
- desc "example PROJ_NAME [DEST]", "new specified example project (in DEST, if specified)"
102
- def example(proj_name, dest=nil)
103
- if dest.nil? then dest = proj_name end
144
+ #===================================== We Have A Project Already ================================================
145
+ else
146
+
147
+ require 'pty'
148
+ require 'yaml'
149
+ require 'rbconfig'
150
+
151
+ #determine platform
152
+ platform = begin
153
+ case(RbConfig::CONFIG['host_os'])
154
+ when /mswin|mingw|cygwin/i
155
+ :mswin
156
+ when /darwin/
157
+ :osx
158
+ else
159
+ :linux
160
+ end
161
+ rescue
162
+ :linux
163
+ end
104
164
 
105
- invoke :new, [dest, true]
165
+ #create our default meta-runner option set
166
+ options = {
167
+ :pretend_we_are_gtest => false,
168
+ :args => "",
169
+ :pretest => nil,
170
+ :outfile => nil,
171
+ :add_path => [],
172
+ :path_connector => (platform == :mswin) ? ";" : ":",
173
+ }
174
+
175
+ #guess that we need a special script file first if it exists
176
+ if (platform == :mswin)
177
+ options[:pretest] = File.exists?("#{ platform.to_s }_setup.bat") ? "#{ platform.to_s }_setup.bat" : nil
178
+ else
179
+ options[:pretest] = File.exists?("#{ platform.to_s }_setup.sh") ? "source #{ platform.to_s }_setup.sh" : nil
180
+ end
106
181
 
107
- dest_src = File.join(dest,'src')
108
- dest_test = File.join(dest,'test')
109
- dest_rakefile = File.join(dest,'rakefile.rb')
110
- dest_project = File.join(dest,'project.yml')
182
+ #merge in project settings if they can be found here
183
+ yaml_options = YAML.load_file('project.yml')
184
+ options[:pretend_we_are_gtest] = (yaml_options[:plugins][:enabled].include? :stdout_gtestlike_tests_report)
185
+ options[:add_path] = yaml_options[:paths][:tools] || []
186
+
187
+ #sort through command line options
188
+ options[:args]
189
+ ARGV.each do |v|
190
+ case(v)
191
+ when /--gtest/
192
+ options[:pretend_we_are_gtest] = true
193
+ else
194
+ options[:args] += v + " "
195
+ end
196
+ end
111
197
 
112
- directory "examples/#{proj_name}/src", dest_src
113
- directory "examples/#{proj_name}/test", dest_test
114
- remove_file dest_rakefile
115
- remove_file dest_project
116
- copy_file "examples/#{proj_name}/rakefile.rb", dest_rakefile
117
- copy_file "examples/#{proj_name}/project.yml", dest_project
198
+ #add to the path
199
+ if (options[:add_path] && !options[:add_path].empty?)
200
+ path = ENV["PATH"]
201
+ options[:add_path].each do |p|
202
+ f = File.expand_path(File.dirname(__FILE__),p)
203
+ path = (f + options[:path_connector] + path) unless path.include? f
204
+ end
205
+ ENV["PATH"] = path
206
+ end
118
207
 
119
- puts "\n"
120
- puts "Example project '#{proj_name}' created!"
121
- puts " - Tool documentation is located in vendor/ceedling/docs"
122
- puts " - Execute 'rake -T' to view available test & build tasks"
123
- puts ''
208
+ #run rake and capture all the output
209
+ results = ""
210
+ okay_to_print = !(options[:pretend_we_are_gtest])
211
+ begin
212
+ options[:cmd] = if (options[:pretest].nil? || options[:pretest].empty?)
213
+ "rake #{options[:args]}"
214
+ else
215
+ "#{options[:pretest]} && rake #{options[:args]}"
216
+ end
217
+ PTY.spawn(options[:cmd]) do |stdout, stdin, pid|
218
+ begin
219
+ stdout.each do |line|
220
+ okay_to_print = true if ((options[:pretend_we_are_gtest]) && (line.match(/\[\=+\]/)))
221
+ line.gsub!(/(?<!\w)rake(?!\w)/,'ceedling') if (options[:args].strip == "-T")
222
+ puts(line) if okay_to_print
223
+ end
224
+ rescue Errno::EIO
225
+ end
226
+ end
227
+ rescue Exception => e
228
+ results += e.inspect #unless (e == PTY::ChildExited)
124
229
  end
125
- end
126
230
 
127
- CeedlingTasks.source_root here
128
- CeedlingTasks.start
231
+ #File.open("debug.txt",'w'){|f| f << ARGV.inspect << "\n\n" << options.inspect << "\n\n" << results }
232
+
233
+ #dump the results back out stdout unless otherwise specified
234
+ if (options[:outfile].nil?)
235
+ puts results
236
+ else
237
+ File.open(options[:outfile],'w') {|f| f << results }
238
+ end
239
+
240
+ #===================================================================================================================
241
+ end
Binary file
@@ -1,12 +1,12 @@
1
-
2
- # Setup our load path:
3
- [
4
- 'lib',
5
- 'test',
6
- 'vendor/behaviors/lib',
7
- 'vendor/hardmock/lib',
8
- 'vendor/constructor/lib',
9
- 'vendor/deep_merge/lib',
10
- ].each do |dir|
11
- $LOAD_PATH.unshift( File.join( File.expand_path(File.dirname(__FILE__) + "/../"), dir) )
12
- end
1
+
2
+ # Setup our load path:
3
+ [
4
+ 'lib',
5
+ 'test',
6
+ 'vendor/behaviors/lib',
7
+ 'vendor/hardmock/lib',
8
+ 'vendor/constructor/lib',
9
+ 'vendor/deep_merge/lib',
10
+ ].each do |dir|
11
+ $LOAD_PATH.unshift( File.join( File.expand_path(File.dirname(__FILE__) + "/../"), dir) )
12
+ end
@@ -1,79 +1,80 @@
1
- [All code is copyright © 2010-2012 Ceedling Project
1
+ [All code is copyright © 2010-2012 Ceedling Project
2
2
  by Mike Karlesky, Mark VanderVoord, and Greg Williams.
3
3
 
4
4
  This Documentation Is Released Under a
5
5
  Creative Commons 3.0 Attribution Share-Alike License]
6
6
 
7
- What the What?
8
-
9
- Assembling build environments for C projects - especially with
10
- automated unit tests - is a pain. Whether it's Make or Rake or Premake
11
- or what-have-you, set up with an all-purpose build environment
12
- tool is tedious and requires considerable glue code to pull together
13
- the necessary tools and libraries. Ceedling allows you to generate
14
- an entire test and build environment for a C project from a single
15
- YAML configuration file. Ceedling is written in Ruby and works
16
- with the Rake build tool plus other goodness like Unity and CMock
17
- - the unit testing and mocking frameworks for C. Ceedling and
18
- its complementary tools can support the tiniest of embedded
19
- processors, the beefiest 64 bit power houses available, and
20
- everything in between.
21
-
22
- For a build project including unit tests and using the default
23
- toolchain gcc, the configuration file could be as simple as this:
24
-
25
- :project:
26
- :build_root: project/build/
27
- :release_build: TRUE
28
-
29
- :paths:
30
- :test:
31
- - tests/**
32
- :source:
33
- - source/**
34
-
35
-
36
- From the command line, to build the release version of your project,
37
- you would simply run `rake release`. To run all your unit tests,
38
- you would run `rake test:all`. That's it!
39
-
40
- Of course, many more advanced options allow you to configure
41
- your project with a variety of features to meet a variety of needs.
42
- Ceedling can work with practically any command line toolchain
43
- and directory structure all by way of the configuration file.
44
- Further, because Ceedling piggy backs on Rake, you can add your
45
- own Rake tasks to accomplish project tasks outside of testing
46
- and release builds. A facility for plugins also allows you to
47
- extend Ceedling's capabilities for needs such as custom code
48
- metrics reporting and coverage testing.
49
-
50
- What's with this Name?
51
-
52
- Glad you asked. Ceedling is tailored for unit tested C projects
53
- and is built upon / around Rake (Rake is a Make replacement implemented
54
- in the Ruby scripting language). So, we've got C, our Rake, and
55
- the fertile soil of a build environment in which to grow and tend
56
- your project and its unit tests. Ta da - _Ceedling_.
57
-
58
- What Do You Mean "tailored for unit tested C projects"?
59
-
60
- Well, we like to write unit tests for our C code to make it lean and
7
+ What the What?
8
+
9
+ Assembling build environments for C projects - especially with
10
+ automated unit tests - is a pain. Whether it's Make or Rake or Premake
11
+ or what-have-you, set up with an all-purpose build environment
12
+ tool is tedious and requires considerable glue code to pull together
13
+ the necessary tools and libraries. Ceedling allows you to generate
14
+ an entire test and build environment for a C project from a single
15
+ YAML configuration file. Ceedling is written in Ruby and works
16
+ with the Rake build tool plus other goodness like Unity and CMock
17
+ - the unit testing and mocking frameworks for C. Ceedling and
18
+ its complementary tools can support the tiniest of embedded
19
+ processors, the beefiest 64 bit power houses available, and
20
+ everything in between.
21
+
22
+ For a build project including unit tests and using the default
23
+ toolchain gcc, the configuration file could be as simple as this:
24
+
25
+ ```yaml
26
+ :project:
27
+ :build_root: project/build/
28
+ :release_build: TRUE
29
+
30
+ :paths:
31
+ :test:
32
+ - tests/**
33
+ :source:
34
+ - source/**
35
+ ```
36
+
37
+ From the command line, to build the release version of your project,
38
+ you would simply run `ceedling release`. To run all your unit tests,
39
+ you would run `ceedling test:all`. That's it!
40
+
41
+ Of course, many more advanced options allow you to configure
42
+ your project with a variety of features to meet a variety of needs.
43
+ Ceedling can work with practically any command line toolchain
44
+ and directory structure all by way of the configuration file.
45
+ Further, because Ceedling piggy backs on Rake, you can add your
46
+ own Rake tasks to accomplish project tasks outside of testing
47
+ and release builds. A facility for plugins also allows you to
48
+ extend Ceedling's capabilities for needs such as custom code
49
+ metrics reporting and coverage testing.
50
+
51
+ What's with this Name?
52
+
53
+ Glad you asked. Ceedling is tailored for unit tested C projects
54
+ and is built upon / around Rake (Rake is a Make replacement implemented
55
+ in the Ruby scripting language). So, we've got C, our Rake, and
56
+ the fertile soil of a build environment in which to grow and tend
57
+ your project and its unit tests. Ta da - _Ceedling_.
58
+
59
+ What Do You Mean "tailored for unit tested C projects"?
60
+
61
+ Well, we like to write unit tests for our C code to make it lean and
61
62
  mean (that whole [Test-Driven Development][tdd]
62
- thing). Along the way, this style of writing C code spawned two
63
- tools to make the job easier: a unit test framework for C called
64
- _Unity_ and a mocking library called _CMock_. And, though it's
65
- not directly related to testing, a C framework for exception
66
- handling called _CException_ also came along.
63
+ thing). Along the way, this style of writing C code spawned two
64
+ tools to make the job easier: a unit test framework for C called
65
+ _Unity_ and a mocking library called _CMock_. And, though it's
66
+ not directly related to testing, a C framework for exception
67
+ handling called _CException_ also came along.
67
68
 
68
69
  [tdd]: http://en.wikipedia.org/wiki/Test-driven_development
69
70
 
70
- These tools and frameworks are great, but they require quite
71
- a bit of environment support to pull them all together in a convenient,
72
- usable fashion. We started off with Rakefiles to assemble everything.
73
- These ended up being quite complicated and had to be hand-edited
74
- or created anew for each new project. Ceedling replaces all that
75
- tedium and rework with a configuration file that ties everything
76
- together.
71
+ These tools and frameworks are great, but they require quite
72
+ a bit of environment support to pull them all together in a convenient,
73
+ usable fashion. We started off with Rakefiles to assemble everything.
74
+ These ended up being quite complicated and had to be hand-edited
75
+ or created anew for each new project. Ceedling replaces all that
76
+ tedium and rework with a configuration file that ties everything
77
+ together.
77
78
 
78
79
  Though Ceedling is tailored for unit testing, it can also go right ahead
79
80
  and build your final binary release artifact for you as well. Or,
@@ -83,26 +84,26 @@ environment than it is a general purpose release build environment;
83
84
  complicated projects including separate bootloaders or multiple library
84
85
  builds, etc. are not its strong suit.
85
86
 
86
- Hold on. Back up. Ruby? Rake? YAML? Unity? CMock? CException?
87
+ Hold on. Back up. Ruby? Rake? YAML? Unity? CMock? CException?
87
88
 
88
- Seem overwhelming? It's not bad at all, and for the benefits tests
89
- bring us, it's all worth it.
89
+ Seem overwhelming? It's not bad at all, and for the benefits tests
90
+ bring us, it's all worth it.
90
91
 
91
- [Ruby][] is a handy scripting
92
- language like Perl or Python. It's a modern, full featured language
93
- that happens to be quite handy for accomplishing tasks like code
94
- generation or automating one's workflow while developing in
95
- a compiled language such as C.
92
+ [Ruby][] is a handy scripting
93
+ language like Perl or Python. It's a modern, full featured language
94
+ that happens to be quite handy for accomplishing tasks like code
95
+ generation or automating one's workflow while developing in
96
+ a compiled language such as C.
96
97
 
97
98
  [Ruby]: http://www.ruby-lang.org/en/
98
99
 
99
- [Rake][] is a utility written in Ruby
100
- for accomplishing dependency tracking and task automation
101
- common to building software. It's a modern, more flexible replacement
102
- for [Make][]).
103
- Rakefiles are Ruby files, but they contain build targets similar
104
- in nature to that of Makefiles (but you can also run Ruby code in
105
- your Rakefile).
100
+ [Rake][] is a utility written in Ruby
101
+ for accomplishing dependency tracking and task automation
102
+ common to building software. It's a modern, more flexible replacement
103
+ for [Make][]).
104
+ Rakefiles are Ruby files, but they contain build targets similar
105
+ in nature to that of Makefiles (but you can also run Ruby code in
106
+ your Rakefile).
106
107
 
107
108
  [Rake]: http://rubyrake.org/
108
109
  [Make]: http://en.wikipedia.org/wiki/Make_(software)
@@ -148,130 +149,130 @@ up your return call trace.
148
149
  Notes
149
150
  -----
150
151
 
151
- * YAML support is included with Ruby - requires no special installation
152
- or configuration.
152
+ * YAML support is included with Ruby - requires no special installation
153
+ or configuration.
153
154
 
154
- * Unity, CMock, and CException are bundled with Ceedling, and
155
- Ceedling is designed to glue them all together for your project
156
- as seamlessly as possible.
155
+ * Unity, CMock, and CException are bundled with Ceedling, and
156
+ Ceedling is designed to glue them all together for your project
157
+ as seamlessly as possible.
157
158
 
158
159
 
159
- Installation & Setup: What Exactly Do I Need to Get Started?
160
+ Installation & Setup: What Exactly Do I Need to Get Started?
160
161
  ------------------------------------------------------------
161
162
 
162
- As a [Ruby gem](http://docs.rubygems.org/read/chapter/1):
163
+ As a [Ruby gem](http://docs.rubygems.org/read/chapter/1):
163
164
 
164
- 1. [Download and install Ruby](http://www.ruby-lang.org/en/downloads/)
165
+ 1. [Download and install Ruby](http://www.ruby-lang.org/en/downloads/)
165
166
 
166
- 2. Use Ruby's command line gem package manager to install Rake:
167
- `gem install rake`
167
+ 2. Use Ruby's command line gem package manager to install Rake:
168
+ `gem install rake`
168
169
 
169
- 3. Use Ruby's command line gem package manager to install Ceedling:
170
- `gem install ceedling` {text:line-break} (Unity, CMock,
171
- and CException come along with Ceedling for free)
170
+ 3. Use Ruby's command line gem package manager to install Ceedling:
171
+ `gem install ceedling` {text:line-break} (Unity, CMock,
172
+ and CException come along with Ceedling for free)
172
173
 
173
- 4. Execute Ceedling at command line to create example project
174
- or an empty Ceedling project in your filesystem (executing
175
- `ceedling help` first is, well, helpful).
174
+ 4. Execute Ceedling at command line to create example project
175
+ or an empty Ceedling project in your filesystem (executing
176
+ `ceedling help` first is, well, helpful).
176
177
 
177
- Gem install notes:
178
+ Gem install notes:
178
179
 
179
- 1. Steps 1-3 are a one time affair for your local environment.
180
- When steps 1-3 are completed once, only step 4 is needed for
181
- each new project.
180
+ 1. Steps 1-3 are a one time affair for your local environment.
181
+ When steps 1-3 are completed once, only step 4 is needed for
182
+ each new project.
182
183
 
183
184
 
184
185
 
185
- Alternatively, from scratch:
186
+ Alternatively, from scratch:
186
187
 
187
- 1. [Download and install Ruby](http://www.ruby-lang.org/en/downloads/)
188
+ 1. [Download and install Ruby](http://www.ruby-lang.org/en/downloads/)
188
189
 
189
- 2. Use Ruby's command line gem package manager to install Rake:
190
- `gem install rake`
190
+ 2. Use Ruby's command line gem package manager to install Rake:
191
+ `gem install rake`
191
192
 
192
- 3. Grab the Ceedling package (from sourceforge as download
193
- or from svn) and place in your filesystem {text:line-break}
194
- (it already contains Unity, CMock, and CException)
193
+ 3. Grab the Ceedling package (from sourceforge as download
194
+ or from svn) and place in your filesystem {text:line-break}
195
+ (it already contains Unity, CMock, and CException)
195
196
 
196
- 4. Create an empty build directory for your project {text:line-break}
197
- (Ceedling will fill out the directory structure below the
198
- build root when executed)
197
+ 4. Create an empty build directory for your project {text:line-break}
198
+ (Ceedling will fill out the directory structure below the
199
+ build root when executed)
199
200
 
200
- 5. Create a simple Rakefile (`rakefile.rb`) that contains
201
- a load call to Ceedling on your filesystem and a default task
202
- (tasks available to tie to `default` are listed in the next
201
+ 5. Create a simple Rakefile (`rakefile.rb`) that contains
202
+ a load call to Ceedling on your filesystem and a default task
203
+ (tasks available to tie to `default` are listed in the next
203
204
  section):
204
-
205
+
205
206
  ```ruby
206
- load '<path>/ceedling/lib/rakefile.rb'
207
+ load '<path>/ceedling/lib/rakefile.rb'
207
208
  # ex. run all tests & build release artifact
208
209
  task :default => ['test:all', :release]
209
- # namespaced tasks must be quoted
210
- # top-level tasks are Ruby symbols denoted by a leading ':'`
210
+ # namespaced tasks must be quoted
211
+ # top-level tasks are Ruby symbols denoted by a leading ':'`
211
212
  ```
212
213
 
213
- 6. Create your project YAML file (more on this later in this document).
214
- `project.yml` is the default file name Ceedling recognizes
215
- in the working directory from which Rake is run (Rake is the
216
- tool we actually use to take advantage of what Ceedling provides).
214
+ 6. Create your project YAML file (more on this later in this document).
215
+ `project.yml` is the default file name Ceedling recognizes
216
+ in the working directory from which Rake is run (Rake is the
217
+ tool we actually use to take advantage of what Ceedling provides).
217
218
 
218
219
 
219
- From scratch install notes:
220
+ From scratch install notes:
220
221
 
221
- 1. Steps 1-3 are a one time affair for your local environment.
222
- When steps 1-3 are completed once, only steps 4-6 are needed
223
- for each new project.
222
+ 1. Steps 1-3 are a one time affair for your local environment.
223
+ When steps 1-3 are completed once, only steps 4-6 are needed
224
+ for each new project.
224
225
 
225
- 2. See the sample starter project for a working setup. When steps
226
- 1-3 are complete and assuming you have gcc in your path (Ceedling's
227
- default toolchain), you will only need to edit the path within
228
- the sample Rakefile (see step 5 above) to yield a working,
229
- albeit simple, project. The default task need not be defined,
230
- but it's not a bad idea to do so.
226
+ 2. See the sample starter project for a working setup. When steps
227
+ 1-3 are complete and assuming you have gcc in your path (Ceedling's
228
+ default toolchain), you will only need to edit the path within
229
+ the sample Rakefile (see step 5 above) to yield a working,
230
+ albeit simple, project. The default task need not be defined,
231
+ but it's not a bad idea to do so.
231
232
 
232
233
 
233
234
 
234
- General notes:
235
+ General notes:
235
236
 
236
- 1. Certain advanced features of Ceedling rely on gcc and cpp
237
- as preprocessing tools. In most *nix systems, these tools
238
- are already available. For Windows environments, we recommend
239
- the [mingw project](http://www.mingw.org/) (Minimalist
240
- GNU for Windows). This represents an optional, additional
241
- setup / installation step to complement the list above. Upon
242
- installing mingw ensure your system path is updated or set
243
- [:environment][:path] in your `project.yml` file (see
244
- environment section later in this document).
237
+ 1. Certain advanced features of Ceedling rely on gcc and cpp
238
+ as preprocessing tools. In most *nix systems, these tools
239
+ are already available. For Windows environments, we recommend
240
+ the [mingw project](http://www.mingw.org/) (Minimalist
241
+ GNU for Windows). This represents an optional, additional
242
+ setup / installation step to complement the list above. Upon
243
+ installing mingw ensure your system path is updated or set
244
+ [:environment][:path] in your `project.yml` file (see
245
+ environment section later in this document).
245
246
 
246
- 2. To use a project file name other than the default `project.yml`
247
- or place the project file in a directory other than the one
248
- in which you'll run Rake, create an environment variable
249
- `CEEDLING_MAIN_PROJECT_FILE` with your desired project
250
- file path.
247
+ 2. To use a project file name other than the default `project.yml`
248
+ or place the project file in a directory other than the one
249
+ in which you'll run Rake, create an environment variable
250
+ `CEEDLING_MAIN_PROJECT_FILE` with your desired project
251
+ file path.
251
252
 
252
- 3. To better understand Rake conventions, Rake execution,
253
- and Rakefiles, consult the [Rake tutorial, examples, and
254
- user guide](http://rubyrake.org/).
253
+ 3. To better understand Rake conventions, Rake execution,
254
+ and Rakefiles, consult the [Rake tutorial, examples, and
255
+ user guide](http://rubyrake.org/).
255
256
 
256
257
 
257
258
 
258
- Now What? How Do I Make It GO?
259
+ Now What? How Do I Make It GO?
259
260
  ------------------------------
260
261
 
261
- We're getting a little ahead of ourselves here, but it's good
262
- context on how to drive this bus. Everything is done via the command
263
- line. We'll cover conventions and how to actually configure
264
- your project in later sections.
262
+ We're getting a little ahead of ourselves here, but it's good
263
+ context on how to drive this bus. Everything is done via the command
264
+ line. We'll cover conventions and how to actually configure
265
+ your project in later sections.
265
266
 
266
- To run tests, build your release artifact, etc., you will be interacting
267
- with Rake on the command line. Ceedling works with Rake to present
268
- you with named tasks that coordinate the file generation and
269
- build steps needed to accomplish something useful. You can also
270
- add your own independent Rake tasks or create plugins to extend
271
- Ceedling (more on this later).
267
+ To run tests, build your release artifact, etc., you will be interacting
268
+ with Rake on the command line. Ceedling works with Rake to present
269
+ you with named tasks that coordinate the file generation and
270
+ build steps needed to accomplish something useful. You can also
271
+ add your own independent Rake tasks or create plugins to extend
272
+ Ceedling (more on this later).
272
273
 
273
274
 
274
- * `rake [no arguments]`:
275
+ * `ceedling [no arguments]`:
275
276
 
276
277
  Run the default Rake task (conveniently recognized by the name default
277
278
  by Rake). Neither Rake nor Ceedling provide a default task. Rake will
@@ -279,45 +280,45 @@ Ceedling (more on this later).
279
280
  conveniently define a default task in the Rakefile discussed in the
280
281
  preceding setup & installation section of this document.
281
282
 
282
- * `rake -T`:
283
+ * `ceedling -T`:
283
284
 
284
285
  List all available Rake tasks with descriptions (Rake tasks without
285
286
  descriptions are not listed). -T is a command line switch for Rake and
286
287
  not the same as tasks that follow.
287
288
 
288
- * `rake <tasks...> --trace`:
289
+ * `ceedling <tasks...> --trace`:
289
290
 
290
291
  For advanced users troubleshooting a confusing build error, debug
291
292
  Ceedling or a plugin, --trace provides a stack trace of dependencies
292
293
  walked during task execution and any Ruby failures along the way. Note
293
294
  that --trace is a command line switch for Rake and is not the same as
294
295
  tasks that follow.
295
-
296
- * `rake environment`:
296
+
297
+ * `ceedling environment`:
297
298
 
298
299
  List all configured environment variable names and string values. This
299
300
  task is helpful in verifying the evaluatio of any Ruby expressions in
300
301
  the [:environment] section of your config file.`: Note: Ceedling may
301
302
  set some convenience environment variables by default.
302
303
 
303
- * `rake paths:*`:
304
+ * `ceedling paths:*`:
304
305
 
305
306
  List all paths collected from [:paths] entries in your YAML config
306
307
  file where * is the name of any section contained in [:paths]. This
307
308
  task is helpful in verifying the expansion of path wildcards / globs
308
309
  specified in the [:paths] section of your config file.
309
310
 
310
- * `rake files:assembly`
311
- * `rake files:header`
312
- * `rake files:source`
313
- * `rake files:test`
311
+ * `ceedling files:assembly`
312
+ * `ceedling files:header`
313
+ * `ceedling files:source`
314
+ * `ceedling files:test`
314
315
 
315
316
  List all files and file counts collected from the relevant search
316
317
  paths specified by the [:paths] entries of your YAML config file. The
317
318
  files:assembly task will only be available if assembly support is
318
319
  enabled in the [:release_build] section of your configuration file.
319
320
 
320
- * `rake options:*`:
321
+ * `ceedling options:*`:
321
322
 
322
323
  Load and merge configuration settings into the main project
323
324
  configuration. Each task is named after a *.yml file found in the
@@ -325,11 +326,11 @@ Ceedling (more on this later).
325
326
  setting [:project][:options_path] and for options files in advanced
326
327
  topics.
327
328
 
328
- * `rake test:all`:
329
+ * `ceedling test:all`:
329
330
 
330
331
  Run all unit tests (rebuilding anything that's changed along the way).
331
332
 
332
- * `rake test:delta`:
333
+ * `ceedling test:delta`:
333
334
 
334
335
  Run only those unit tests for which the source or test files have
335
336
  changed (i.e. incremental build). Note: with the
@@ -337,50 +338,50 @@ Ceedling (more on this later).
337
338
  runner files are always regenerated limiting the total efficiency this
338
339
  text execution option can afford.
339
340
 
340
- * `rake test:*`:
341
+ * `ceedling test:*`:
341
342
 
342
343
  Execute the named test file or the named source file that has an
343
- accompanying test. No path. Examples: rake test:foo.c or rake
344
+ accompanying test. No path. Examples: ceedling test:foo.c or ceed
344
345
  test:test_foo.c
345
346
 
346
- * `rake test:pattern[*]`:
347
+ * `ceedling test:pattern[*]`:
347
348
 
348
349
  Execute any tests whose name and/or path match the regular expression
349
- pattern (case sensitive). Example: rake "test:pattern[(I|i)nit]" will
350
+ pattern (case sensitive). Example: ceedling "test:pattern[(I|i)nit]" will
350
351
  execute all tests named for initialization testing. Note: quotes may
351
- be necessary around the rake parameter to distinguish regex characters
352
+ be necessary around the ceedling parameter to distinguish regex characters
352
353
  from command line operators.
353
354
 
354
- * `rake test:path[*]`:
355
+ * `ceedling test:path[*]`:
355
356
 
356
357
  Execute any tests whose path contains the given string (case
357
- sensitive). Example: rake test:path[foo/bar] will execute all tests
358
+ sensitive). Example: ceedling test:path[foo/bar] will execute all tests
358
359
  whose path contains foo/bar. Note: both directory separator characters
359
360
  / and \ are valid.
360
361
 
361
- * `rake release`:
362
+ * `ceedling release`:
362
363
 
363
364
  Build all source into a release artifact (if the release build option
364
365
  is configured).
365
366
 
366
- * `rake release:compile:*`:
367
+ * `ceedling release:compile:*`:
367
368
 
368
369
  Sometimes you just need to compile a single file dagnabit. Example:
369
- rake release:compile:foo.c
370
+ ceedling release:compile:foo.c
370
371
 
371
- * `rake release:assemble:*`:
372
+ * `ceedling release:assemble:*`:
372
373
 
373
374
  Sometimes you just need to assemble a single file doggonit. Example:
374
- rake release:assemble:foo.s
375
+ ceedling release:assemble:foo.s
375
376
 
376
- * `rake logging <tasks...>`:
377
+ * `ceedling logging <tasks...>`:
377
378
 
378
379
  Enable logging to <build path>/logs. Must come before test and release
379
380
  tasks to log their steps and output. Log names are a concatenation of
380
381
  project, user, and option files loaded. User and option files are
381
382
  documented in the advanced topics section of this document.
382
383
 
383
- * `rake verbosity[x] <tasks...>`:
384
+ * `ceedling verbosity[x] <tasks...>`:
384
385
 
385
386
  Change the default verbosity level. [x] ranges from 0 (quiet) to 4
386
387
  (obnoxious). Level [3] is the default. The verbosity task must precede
@@ -388,394 +389,393 @@ Ceedling (more on this later).
388
389
  seen. Verbosity settings are generally most meaningful in conjunction
389
390
  with test and release tasks.
390
391
 
391
- * `rake summary`:
392
+ * `ceedling summary`:
392
393
 
393
394
  If plugins are enabled, this task will execute the summary method of
394
395
  any plugins supporting it. This task is intended to provide a quick
395
396
  roundup of build artifact metrics without re-running any part of the
396
397
  build.
397
398
 
398
- * `rake clean`:
399
+ * `ceedling clean`:
399
400
 
400
401
  Deletes all toolchain binary artifacts (object files, executables),
401
402
  test results, and any temporary files. Clean produces no output at the
402
403
  command line unless verbosity has been set to an appreciable level.
403
404
 
404
- * `rake clobber`:
405
+ * `ceedling clobber`:
405
406
 
406
407
  Extends clean task's behavior to also remove generated files: test
407
408
  runners, mocks, preprocessor output. Clobber produces no output at the
408
409
  command line unless verbosity has been set to an appreciable level.
409
410
 
410
- To better understand Rake conventions, Rake execution, and
411
+ To better understand Rake conventions, Rake execution, and
411
412
  Rakefiles, consult the [Rake tutorial, examples, and user guide][guide].
412
413
 
413
414
  [guide]: http://rubyrake.org/
414
415
 
415
- At present, none of Ceedling's commands provide persistence.
416
- That is, they must each be specified at the command line each time
417
- they are needed. For instance, Ceedling's verbosity command
418
- only affects output at the time it's run.
419
-
420
- {text:soft-page-break} Individual test and release file tasks
421
- are not listed in `-T` output. Because so many files may be present
422
- it's unwieldy to list them all.
423
-
424
- Multiple rake tasks can be executed at the command line (order
425
- is executed as provided). For example, `rake
426
- clobber test:all release` will removed all generated files;
427
- build and run all tests; and then build all source - in that order.
428
- If any Rake task fails along the way, execution halts before the
429
- next task.
430
-
431
- The `clobber` task removes certain build directories in the
432
- course of deleting generated files. In general, it's best not
433
- to add to source control any Ceedling generated directories
434
- below the root of your top-level build directory. That is, leave
435
- anything Ceedling & its accompanying tools generate out of source
436
- control (but go ahead and add the top-level build directory that
437
- holds all that stuff). Also, since Ceedling is pretty smart about
438
- what it rebuilds and regenerates, you needn't clobber often.
439
-
440
- Important Conventions
416
+ At present, none of Ceedling's commands provide persistence.
417
+ That is, they must each be specified at the command line each time
418
+ they are needed. For instance, Ceedling's verbosity command
419
+ only affects output at the time it's run.
420
+
421
+ {text:soft-page-break} Individual test and release file tasks
422
+ are not listed in `-T` output. Because so many files may be present
423
+ it's unwieldy to list them all.
424
+
425
+ Multiple rake tasks can be executed at the command line (order
426
+ is executed as provided). For example, `ceed
427
+ clobber test:all release` will removed all generated files;
428
+ build and run all tests; and then build all source - in that order.
429
+ If any Rake task fails along the way, execution halts before the
430
+ next task.
431
+
432
+ The `clobber` task removes certain build directories in the
433
+ course of deleting generated files. In general, it's best not
434
+ to add to source control any Ceedling generated directories
435
+ below the root of your top-level build directory. That is, leave
436
+ anything Ceedling & its accompanying tools generate out of source
437
+ control (but go ahead and add the top-level build directory that
438
+ holds all that stuff). Also, since Ceedling is pretty smart about
439
+ what it rebuilds and regenerates, you needn't clobber often.
440
+
441
+ Important Conventions
441
442
  =====================
442
443
 
443
- Directory Structure, Filenames & Extensions
444
+ Directory Structure, Filenames & Extensions
444
445
  -------------------------------------------
445
446
 
446
- Much of Ceedling's functionality is driven by collecting files
447
- matching certain patterns inside the paths it's configured
448
- to search. See the documentation for the [:extensions] section
449
- of your configuration file (found later in this document) to
450
- configure the file extensions Ceedling uses to match and collect
451
- files. Test file naming is covered later in this section.
447
+ Much of Ceedling's functionality is driven by collecting files
448
+ matching certain patterns inside the paths it's configured
449
+ to search. See the documentation for the [:extensions] section
450
+ of your configuration file (found later in this document) to
451
+ configure the file extensions Ceedling uses to match and collect
452
+ files. Test file naming is covered later in this section.
452
453
 
453
- Test files and source files must be segregated by directories.
454
- Any directory structure will do. Tests can be held in subdirectories
455
- within source directories, or tests and source directories
456
- can be wholly separated at the top of your project's directory
457
- tree.
454
+ Test files and source files must be segregated by directories.
455
+ Any directory structure will do. Tests can be held in subdirectories
456
+ within source directories, or tests and source directories
457
+ can be wholly separated at the top of your project's directory
458
+ tree.
458
459
 
459
- Search Path Order
460
+ Search Path Order
460
461
  -----------------
461
462
 
462
- When Ceedling searches for files (e.g. looking for header files
463
- to mock) or when it provides search paths to any of the default
464
- gcc toolchain executables, it organizes / prioritizes its search
465
- paths. The order is always: test paths, support paths, source
466
- paths, and then include paths. This can be useful, for instance,
467
- in certain testing scenarios where we desire Ceedling or a compiler
468
- to find a stand-in header file in our support directory before
469
- the actual source header file of the same name.
470
-
471
- This convention only holds when Ceedling is using its default
472
- tool configurations and / or when tests are involved. If you define
473
- your own tools in the configuration file (see the [:tools] section
474
- documented later in this here document), you have complete control
475
- over what directories are searched and in what order. Further,
476
- test and support directories are only searched when appropriate.
477
- That is, when running a release build, test and support directories
478
- are not used at all.
479
-
480
- Source Files & Binary Release Artifacts
463
+ When Ceedling searches for files (e.g. looking for header files
464
+ to mock) or when it provides search paths to any of the default
465
+ gcc toolchain executables, it organizes / prioritizes its search
466
+ paths. The order is always: test paths, support paths, source
467
+ paths, and then include paths. This can be useful, for instance,
468
+ in certain testing scenarios where we desire Ceedling or a compiler
469
+ to find a stand-in header file in our support directory before
470
+ the actual source header file of the same name.
471
+
472
+ This convention only holds when Ceedling is using its default
473
+ tool configurations and / or when tests are involved. If you define
474
+ your own tools in the configuration file (see the [:tools] section
475
+ documented later in this here document), you have complete control
476
+ over what directories are searched and in what order. Further,
477
+ test and support directories are only searched when appropriate.
478
+ That is, when running a release build, test and support directories
479
+ are not used at all.
480
+
481
+ Source Files & Binary Release Artifacts
481
482
  ---------------------------------------
482
483
 
483
- Your binary release artifact results from the compilation and
484
- linking of all source files Ceedling finds in the specified source
485
- directories. At present only source files with a single (configurable)
486
- extension are recognized. That is, *.c and *.cc files will not
487
- both be recognized - only one or the other. See the configuration
488
- options and defaults in the documentation for the [:extensions]
489
- sections of your configuration file (found later in this document).
484
+ Your binary release artifact results from the compilation and
485
+ linking of all source files Ceedling finds in the specified source
486
+ directories. At present only source files with a single (configurable)
487
+ extension are recognized. That is, *.c and *.cc files will not
488
+ both be recognized - only one or the other. See the configuration
489
+ options and defaults in the documentation for the [:extensions]
490
+ sections of your configuration file (found later in this document).
490
491
 
491
- Test Files & Executable Test Fixtures
492
+ Test Files & Executable Test Fixtures
492
493
  -------------------------------------
493
494
 
494
- Ceedling builds each individual test file with its accompanying
495
- source file(s) into a single, monolithic test fixture executable.
496
- Test files are recognized by a naming convention: a (configurable)
497
- prefix such as "`test_`" in the file name with the same file extension
498
- as used by your C source files. See the configuration options
499
- and defaults in the documentation for the [:project] and [:extensions]
500
- sections of your configuration file (found later in this document).
501
- Depending on your configuration options, Ceedling can recognize
502
- a variety of test file naming patterns in your test search paths.
503
- For example: `test_some_super_functionality.c`, `TestYourSourceFile.cc`,
504
- or `testing_MyAwesomeCode.C` could each be valid test file
505
- names. Note, however, that Ceedling can recognize only one test
506
- file naming convention per project.
507
-
508
- Ceedling knows what files to compile and link into each individual
509
- test executable by way of the #include list contained in each
510
- test file. Any C source files in the configured search directories
511
- that correspond to the header files included in a test file will
512
- be compiled and linked into the resulting test fixture executable.
513
- From this same #include list, Ceedling knows which files to mock
514
- and compile and link into the test executable (if you use mocks
515
- in your tests). That was a lot of clauses and information in a very
516
- few sentences; the example that follows in a bit will make it clearer.
517
-
518
- By naming your test functions according to convention, Ceedling
519
- will extract and collect into a runner C file calls to all your
520
- test case functions. This runner file handles all the execution
521
- minutiae so that your test file can be quite simple and so that
522
- you never forget to wire up a test function to be executed. In this
523
- generated runner lives the `main()` entry point for the resulting
524
- test executable. There are no configuration options for the
525
- naming convention of your test case functions. A test case function
526
- signature must have these three elements: void return, void
527
- parameter list, and the function name prepended with lowercase
528
- "`test`". In other words, a test function signature should look
529
- like this: `void test``[any name you like]``(void)`.
530
-
531
- A commented sample test file follows on the next page. Also, see
532
- the sample project contained in the Ceedling documentation
533
- bundle.
534
-
535
- // test_foo.c -----------------------------------------------
536
- #include "unity.h" // compile/link in Unity test framework
537
- #include "types.h" // header file with no *.c file -- no compilation/linking
538
- #include "foo.h" // source file foo.c under test
539
- #include "mock_bar.h" // bar.h will be found and mocked as mock_bar.c + compiled/linked in;
540
- // foo.c includes bar.h and uses functions declared in it
541
- #include "mock_baz.h" // baz.h will be found and mocked as mock_baz.c + compiled/linked in
542
- // foo.c includes baz.h and uses functions declared in it
543
-
544
-
545
- void setUp(void) {} // every test file requires this function;
546
- // setUp() is called by the generated runner before each test case function
547
-
548
- void tearDown(void) {} // every test file requires this function;
549
- // tearDown() is called by the generated runner before each test case function
550
-
551
- // a test case function
552
- void test_Foo_Function1_should_Call_Bar_AndGrill(void)
553
- {
554
- Bar_AndGrill_Expect(); // setup function from mock_bar.c that instructs our
555
- // framework to expect Bar_AndGrill() to be called once
556
- TEST_ASSERT_EQUAL(0xFF, Foo_Function1()); // assertion provided by Unity
557
- // Foo_Function1() calls Bar_AndGrill() & returns a byte
558
- }
559
-
560
- // another test case function
561
- void test_Foo_Function2_should_Call_Baz_Tec(void)
562
- {
563
- Baz_Tec_ExpectAnd_Return(1); // setup function provided by mock_baz.c that instructs our
564
- // framework to expect Baz_Tec() to be called once and return 1
565
- TEST_ASSERT_TRUE(Foo_Function2()); // assertion provided by Unity
566
- }
567
-
568
- // end of test_foo.c ----------------------------------------
569
-
570
-
571
- From the test file specified above Ceedling will generate `test_foo_runner.c`;
572
- this runner file will contain `main()` and call both of the example
573
- test case functions.
574
-
575
- The final test executable will be `test_foo.exe` (for Windows
576
- machines or `test_foo.out` for *nix systems - depending on default
577
- or configured file extensions). Based on the #include list above,
578
- the test executable will be the output of the linker having processed
579
- `unity.o`, `foo.o`, `mock_bar.o`, `mock_baz.o`, `test_foo.o`,
580
- and `test_foo_runner.o`. Ceedling finds the files, generates
581
- mocks, generates a runner, compiles all the files, and links
582
- everything into the test executable. Ceedling will then run
583
- the test executable and collect test results from it to be reported
584
- to the developer at the command line.
585
-
586
- For more on the assertions and mocks shown, consult the documentation
587
- for Unity and CMock.
588
-
589
- The Magic of Dependency Tracking
495
+ Ceedling builds each individual test file with its accompanying
496
+ source file(s) into a single, monolithic test fixture executable.
497
+ Test files are recognized by a naming convention: a (configurable)
498
+ prefix such as "`test_`" in the file name with the same file extension
499
+ as used by your C source files. See the configuration options
500
+ and defaults in the documentation for the [:project] and [:extensions]
501
+ sections of your configuration file (found later in this document).
502
+ Depending on your configuration options, Ceedling can recognize
503
+ a variety of test file naming patterns in your test search paths.
504
+ For example: `test_some_super_functionality.c`, `TestYourSourceFile.cc`,
505
+ or `testing_MyAwesomeCode.C` could each be valid test file
506
+ names. Note, however, that Ceedling can recognize only one test
507
+ file naming convention per project.
508
+
509
+ Ceedling knows what files to compile and link into each individual
510
+ test executable by way of the #include list contained in each
511
+ test file. Any C source files in the configured search directories
512
+ that correspond to the header files included in a test file will
513
+ be compiled and linked into the resulting test fixture executable.
514
+ From this same #include list, Ceedling knows which files to mock
515
+ and compile and link into the test executable (if you use mocks
516
+ in your tests). That was a lot of clauses and information in a very
517
+ few sentences; the example that follows in a bit will make it clearer.
518
+
519
+ By naming your test functions according to convention, Ceedling
520
+ will extract and collect into a runner C file calls to all your
521
+ test case functions. This runner file handles all the execution
522
+ minutiae so that your test file can be quite simple and so that
523
+ you never forget to wire up a test function to be executed. In this
524
+ generated runner lives the `main()` entry point for the resulting
525
+ test executable. There are no configuration options for the
526
+ naming convention of your test case functions. A test case function
527
+ signature must have these three elements: void return, void
528
+ parameter list, and the function name prepended with lowercase
529
+ "`test`". In other words, a test function signature should look
530
+ like this: `void test``[any name you like]``(void)`.
531
+
532
+ A commented sample test file follows on the next page. Also, see
533
+ the sample project contained in the Ceedling documentation
534
+ bundle.
535
+
536
+ ```c
537
+ // test_foo.c -----------------------------------------------
538
+ #include "unity.h" // compile/link in Unity test framework
539
+ #include "types.h" // header file with no *.c file -- no compilation/linking
540
+ #include "foo.h" // source file foo.c under test
541
+ #include "mock_bar.h" // bar.h will be found and mocked as mock_bar.c + compiled/linked in;
542
+ // foo.c includes bar.h and uses functions declared in it
543
+ #include "mock_baz.h" // baz.h will be found and mocked as mock_baz.c + compiled/linked in
544
+ // foo.c includes baz.h and uses functions declared in it
545
+
546
+
547
+ void setUp(void) {} // every test file requires this function;
548
+ // setUp() is called by the generated runner before each test case function
549
+
550
+ void tearDown(void) {} // every test file requires this function;
551
+ // tearDown() is called by the generated runner before each test case function
552
+
553
+ // a test case function
554
+ void test_Foo_Function1_should_Call_Bar_AndGrill(void)
555
+ {
556
+ Bar_AndGrill_Expect(); // setup function from mock_bar.c that instructs our
557
+ // framework to expect Bar_AndGrill() to be called once
558
+ TEST_ASSERT_EQUAL(0xFF, Foo_Function1()); // assertion provided by Unity
559
+ // Foo_Function1() calls Bar_AndGrill() & returns a byte
560
+ }
561
+
562
+ // another test case function
563
+ void test_Foo_Function2_should_Call_Baz_Tec(void)
564
+ {
565
+ Baz_Tec_ExpectAnd_Return(1); // setup function provided by mock_baz.c that instructs our
566
+ // framework to expect Baz_Tec() to be called once and return 1
567
+ TEST_ASSERT_TRUE(Foo_Function2()); // assertion provided by Unity
568
+ }
569
+
570
+ // end of test_foo.c ----------------------------------------
571
+ ```
572
+
573
+ From the test file specified above Ceedling will generate `test_foo_runner.c`;
574
+ this runner file will contain `main()` and call both of the example
575
+ test case functions.
576
+
577
+ The final test executable will be `test_foo.exe` (for Windows
578
+ machines or `test_foo.out` for *nix systems - depending on default
579
+ or configured file extensions). Based on the #include list above,
580
+ the test executable will be the output of the linker having processed
581
+ `unity.o`, `foo.o`, `mock_bar.o`, `mock_baz.o`, `test_foo.o`,
582
+ and `test_foo_runner.o`. Ceedling finds the files, generates
583
+ mocks, generates a runner, compiles all the files, and links
584
+ everything into the test executable. Ceedling will then run
585
+ the test executable and collect test results from it to be reported
586
+ to the developer at the command line.
587
+
588
+ For more on the assertions and mocks shown, consult the documentation
589
+ for Unity and CMock.
590
+
591
+ The Magic of Dependency Tracking
590
592
  --------------------------------
591
593
 
592
- Ceedling is pretty smart in using Rake to build up your project's
593
- dependencies. This means that Ceedling automagically rebuilds
594
- all the appropriate files in your project when necessary: when
595
- your configuration changes, Ceedling or any of the other tools
596
- are updated, or your source or test files change. For instance,
597
- if you modify a header file that is mocked, Ceedling will ensure
598
- that the mock is regenerated and all tests that use that mock are
599
- rebuilt and re-run when you initiate a relevant testing task.
600
- When you see things rebuilding, it's for a good reason. Ceedling
601
- attempts to regenerate and rebuild only what's needed for a given
602
- execution of a task. In the case of large projects, assembling
603
- dependencies and acting upon them can cause some delay in executing
604
- tasks.
605
-
606
- With one exception, the trigger to rebuild or regenerate a file
607
- is always a disparity in timestamps between a target file and
608
- its source - if an input file is newer than its target dependency,
609
- the target is rebuilt or regenerated. For example, if the C source
610
- file from which an object file is compiled is newer than that object
611
- file on disk, recompilation will occur (of course, if no object
612
- file exists on disk, compilation will always occur). The one
613
- exception to this dependency behavior is specific to your input
614
- configuration. Only if your logical configuration changes
615
- will a system-wide rebuild occur. Reorganizing your input configuration
616
- or otherwise updating its file timestamp without modifying
617
- the values within the file will not trigger a rebuild. This behavior
618
- handles the various ways in which your input configuration can
619
- change (discussed later in this document) without having changed
620
- your actual project YAML file.
621
-
622
- Ceedling needs a bit of help to accomplish its magic with deep
623
- dependencies. Shallow dependencies are straightforward:
624
- a mock is dependent on the header file from which it's generated,
625
- a test file is dependent upon the source files it includes (see
626
- the preceding conventions section), etc. Ceedling handles
627
- these "out of the box." Deep dependencies are specifically a
628
- C-related phenomenon and occur as a consequence of include statements
629
- within C source files. Say a source file includes a header file
630
- and that header file in turn includes another header file which
631
- includes still another header file. A change to the deepest header
632
- file should trigger a recompilation of the source file, a relinking
633
- of all the object files comprising a test fixture, and a new execution
634
- of that test fixture.
635
-
636
- Ceedling can handle deep dependencies but only with the help
637
- of a C preprocessor. Ceedling is quite capable, but a full C preprocessor
638
- it ain't. Your project can be configured to use a C preprocessor
639
- or not. Simple projects or large projects constructed so as to
640
- be quite flat in their include structure generally don't need
641
- deep dependency preprocessing - and can enjoy the benefits of
642
- faster execution. Legacy code, on the other hand, will almost
643
- always want to be tested with deep preprocessing enabled. Set
644
- up of the C preprocessor is covered in the documentation for the
645
- [:project] and [:tools] section of the configuration file (later
646
- in this document). Ceedling contains all the configuration
647
- necessary to use the gcc preprocessor by default. That is, as
648
- long as gcc is in your system search path, deep preprocessing
649
- of deep dependencies is available to you by simply enabling it
650
- in your project configuration file.
651
-
652
- Ceedling's Build Output
594
+ Ceedling is pretty smart in using Rake to build up your project's
595
+ dependencies. This means that Ceedling automagically rebuilds
596
+ all the appropriate files in your project when necessary: when
597
+ your configuration changes, Ceedling or any of the other tools
598
+ are updated, or your source or test files change. For instance,
599
+ if you modify a header file that is mocked, Ceedling will ensure
600
+ that the mock is regenerated and all tests that use that mock are
601
+ rebuilt and re-run when you initiate a relevant testing task.
602
+ When you see things rebuilding, it's for a good reason. Ceedling
603
+ attempts to regenerate and rebuild only what's needed for a given
604
+ execution of a task. In the case of large projects, assembling
605
+ dependencies and acting upon them can cause some delay in executing
606
+ tasks.
607
+
608
+ With one exception, the trigger to rebuild or regenerate a file
609
+ is always a disparity in timestamps between a target file and
610
+ its source - if an input file is newer than its target dependency,
611
+ the target is rebuilt or regenerated. For example, if the C source
612
+ file from which an object file is compiled is newer than that object
613
+ file on disk, recompilation will occur (of course, if no object
614
+ file exists on disk, compilation will always occur). The one
615
+ exception to this dependency behavior is specific to your input
616
+ configuration. Only if your logical configuration changes
617
+ will a system-wide rebuild occur. Reorganizing your input configuration
618
+ or otherwise updating its file timestamp without modifying
619
+ the values within the file will not trigger a rebuild. This behavior
620
+ handles the various ways in which your input configuration can
621
+ change (discussed later in this document) without having changed
622
+ your actual project YAML file.
623
+
624
+ Ceedling needs a bit of help to accomplish its magic with deep
625
+ dependencies. Shallow dependencies are straightforward:
626
+ a mock is dependent on the header file from which it's generated,
627
+ a test file is dependent upon the source files it includes (see
628
+ the preceding conventions section), etc. Ceedling handles
629
+ these "out of the box." Deep dependencies are specifically a
630
+ C-related phenomenon and occur as a consequence of include statements
631
+ within C source files. Say a source file includes a header file
632
+ and that header file in turn includes another header file which
633
+ includes still another header file. A change to the deepest header
634
+ file should trigger a recompilation of the source file, a relinking
635
+ of all the object files comprising a test fixture, and a new execution
636
+ of that test fixture.
637
+
638
+ Ceedling can handle deep dependencies but only with the help
639
+ of a C preprocessor. Ceedling is quite capable, but a full C preprocessor
640
+ it ain't. Your project can be configured to use a C preprocessor
641
+ or not. Simple projects or large projects constructed so as to
642
+ be quite flat in their include structure generally don't need
643
+ deep dependency preprocessing - and can enjoy the benefits of
644
+ faster execution. Legacy code, on the other hand, will almost
645
+ always want to be tested with deep preprocessing enabled. Set
646
+ up of the C preprocessor is covered in the documentation for the
647
+ [:project] and [:tools] section of the configuration file (later
648
+ in this document). Ceedling contains all the configuration
649
+ necessary to use the gcc preprocessor by default. That is, as
650
+ long as gcc is in your system search path, deep preprocessing
651
+ of deep dependencies is available to you by simply enabling it
652
+ in your project configuration file.
653
+
654
+ Ceedling's Build Output
653
655
  -----------------------
654
656
 
655
- Ceedling requires a top-level build directory for all the stuff
656
- that it, the accompanying test tools, and your toolchain generate.
657
- That build directory's location is configured in the [:project]
658
- section of your configuration file (discussed later). There
659
- can be a ton of generated files. By and large, you can live a full
660
- and meaningful life knowing absolutely nothing at all about
661
- the files and directories generated below the root build directory.
662
-
663
- As noted already, it's good practice to add your top-level build
664
- directory to source control but nothing generated beneath it.
665
- You'll spare yourself headache if you let Ceedling delete and
666
- regenerate files and directories in a non-versioned corner
667
- of your project's filesystem beneath the top-level build directory.
668
-
669
- The `artifacts` directory is the one and only directory you may
670
- want to know about beneath the top-level build directory. The
671
- subdirectories beneath `artifacts` will hold your binary release
672
- target output (if your project is configured for release builds)
673
- and will serve as the conventional location for plugin output.
674
- This directory structure was chosen specifically because it
675
- tends to work nicely with Continuous Integration setups that
676
- recognize and list build artifacts for retrieval / download.
677
-
678
- The Almighty Project Configuration File (in Glorious YAML)
657
+ Ceedling requires a top-level build directory for all the stuff
658
+ that it, the accompanying test tools, and your toolchain generate.
659
+ That build directory's location is configured in the [:project]
660
+ section of your configuration file (discussed later). There
661
+ can be a ton of generated files. By and large, you can live a full
662
+ and meaningful life knowing absolutely nothing at all about
663
+ the files and directories generated below the root build directory.
664
+
665
+ As noted already, it's good practice to add your top-level build
666
+ directory to source control but nothing generated beneath it.
667
+ You'll spare yourself headache if you let Ceedling delete and
668
+ regenerate files and directories in a non-versioned corner
669
+ of your project's filesystem beneath the top-level build directory.
670
+
671
+ The `artifacts` directory is the one and only directory you may
672
+ want to know about beneath the top-level build directory. The
673
+ subdirectories beneath `artifacts` will hold your binary release
674
+ target output (if your project is configured for release builds)
675
+ and will serve as the conventional location for plugin output.
676
+ This directory structure was chosen specifically because it
677
+ tends to work nicely with Continuous Integration setups that
678
+ recognize and list build artifacts for retrieval / download.
679
+
680
+ The Almighty Project Configuration File (in Glorious YAML)
679
681
  ----------------------------------------------------------
680
682
 
681
- Please consult YAML documentation for the finer points of format
682
- and to understand details of our YAML-based configuration file.
683
- We recommend [Wikipedia's entry on YAML](http://en.wikipedia.org/wiki/Yaml)
684
- for this. A few highlights from that reference page:
683
+ Please consult YAML documentation for the finer points of format
684
+ and to understand details of our YAML-based configuration file.
685
+ We recommend [Wikipedia's entry on YAML](http://en.wikipedia.org/wiki/Yaml)
686
+ for this. A few highlights from that reference page:
685
687
 
686
- * YAML streams are encoded using the set of printable Unicode
687
- characters, either in UTF-8 or UTF-16
688
+ * YAML streams are encoded using the set of printable Unicode
689
+ characters, either in UTF-8 or UTF-16
688
690
 
689
- * Whitespace indentation is used to denote structure; however
690
- tab characters are never allowed as indentation
691
+ * Whitespace indentation is used to denote structure; however
692
+ tab characters are never allowed as indentation
691
693
 
692
- * Comments begin with the number sign ( # ), can start anywhere
693
- on a line, and continue until the end of the line unless enclosed
694
- by quotes
694
+ * Comments begin with the number sign ( # ), can start anywhere
695
+ on a line, and continue until the end of the line unless enclosed
696
+ by quotes
695
697
 
696
- * List members are denoted by a leading hyphen ( - ) with one member
697
- per line, or enclosed in square brackets ( [ ] ) and separated
698
- by comma space ( , )
698
+ * List members are denoted by a leading hyphen ( - ) with one member
699
+ per line, or enclosed in square brackets ( [ ] ) and separated
700
+ by comma space ( , )
699
701
 
700
- * Hashes are represented using the colon space ( : ) in the form
701
- key: value, either one per line or enclosed in curly braces
702
- ( { } ) and separated by comma space ( , )
702
+ * Hashes are represented using the colon space ( : ) in the form
703
+ key: value, either one per line or enclosed in curly braces
704
+ ( { } ) and separated by comma space ( , )
703
705
 
704
- * Strings (scalars) are ordinarily unquoted, but may be enclosed
705
- in double-quotes ( " ), or single-quotes ( ' )
706
+ * Strings (scalars) are ordinarily unquoted, but may be enclosed
707
+ in double-quotes ( " ), or single-quotes ( ' )
706
708
 
707
- * YAML requires that colons and commas used as list separators
708
- be followed by a space so that scalar values containing embedded
709
- punctuation can generally be represented without needing
710
- to be enclosed in quotes
709
+ * YAML requires that colons and commas used as list separators
710
+ be followed by a space so that scalar values containing embedded
711
+ punctuation can generally be represented without needing
712
+ to be enclosed in quotes
711
713
 
712
- * Repeated nodes are initially denoted by an ampersand ( & ) and
713
- thereafter referenced with an asterisk ( * )
714
+ * Repeated nodes are initially denoted by an ampersand ( & ) and
715
+ thereafter referenced with an asterisk ( * )
714
716
 
715
717
 
718
+ Notes on what follows:
716
719
 
717
- Notes on what follows:
720
+ * Each of the following sections represent top-level entries
721
+ in the YAML configuration file.
718
722
 
719
- * Each of the following sections represent top-level entries
720
- in the YAML configuration file.
723
+ * Unless explicitly specified in the configuration file, default
724
+ values are used by Ceedling.
721
725
 
722
- * Unless explicitly specified in the configuration file, default
723
- values are used by Ceedling.
724
-
725
- * These three settings, at minimum, must be specified:
726
- * [:project][:build_root]
726
+ * These three settings, at minimum, must be specified:
727
+ * [:project][:build_root]
727
728
  * [:paths][:source]
728
729
  * [:paths][:test]
729
730
 
730
- * As much as is possible, Ceedling validates your settings in
731
- properly formed YAML.
732
-
733
- * Improperly formed YAML will cause a Ruby error when the YAML
734
- is parsed. This is usually accompanied by a complaint with
735
- line and column number pointing into the project file.
731
+ * As much as is possible, Ceedling validates your settings in
732
+ properly formed YAML.
736
733
 
737
- * Certain advanced features rely on gcc and cpp as preprocessing
738
- tools. In most *nix systems, these tools are already available.
739
- For Windows environments, we recommend the [mingw project](http://www.mingw.org/)
740
- (Minimalist GNU for Windows).
734
+ * Improperly formed YAML will cause a Ruby error when the YAML
735
+ is parsed. This is usually accompanied by a complaint with
736
+ line and column number pointing into the project file.
741
737
 
742
- * Ceedling is primarily meant as a build tool to support automated
743
- unit testing. All the heavy lifting is involved there. Creating
744
- a simple binary release build artifact is quite trivial in
745
- comparison. Consequently, most default options and the construction
746
- of Ceedling itself is skewed towards supporting testing though
747
- Ceedling can, of course, build your binary release artifact
748
- as well. Note that complex binary release artifacts (e.g.
749
- application + bootloader or multiple libraries) are beyond
750
- Ceedling's release build ability.
738
+ * Certain advanced features rely on gcc and cpp as preprocessing
739
+ tools. In most *nix systems, these tools are already available.
740
+ For Windows environments, we recommend the [mingw project](http://www.mingw.org/)
741
+ (Minimalist GNU for Windows).
751
742
 
743
+ * Ceedling is primarily meant as a build tool to support automated
744
+ unit testing. All the heavy lifting is involved there. Creating
745
+ a simple binary release build artifact is quite trivial in
746
+ comparison. Consequently, most default options and the construction
747
+ of Ceedling itself is skewed towards supporting testing though
748
+ Ceedling can, of course, build your binary release artifact
749
+ as well. Note that complex binary release artifacts (e.g.
750
+ application + bootloader or multiple libraries) are beyond
751
+ Ceedling's release build ability.
752
752
 
753
- Conventions / features of Ceedling-specific YAML:
754
753
 
755
- * Any second tier setting keys anywhere in YAML whose names end
756
- in `_path` or `_paths` are automagically processed like all
757
- Ceedling-specific paths in the YAML to have consistent directory
758
- separators (i.e. "/") and to take advantage of inline Ruby
759
- string expansion (see [:environment] setting below for further
760
- explanation of string expansion).
754
+ Conventions / features of Ceedling-specific YAML:
761
755
 
756
+ * Any second tier setting keys anywhere in YAML whose names end
757
+ in `_path` or `_paths` are automagically processed like all
758
+ Ceedling-specific paths in the YAML to have consistent directory
759
+ separators (i.e. "/") and to take advantage of inline Ruby
760
+ string expansion (see [:environment] setting below for further
761
+ explanation of string expansion).
762
762
 
763
763
 
764
- **Let's Be Careful Out There:** Ceedling performs validation
765
- on the values you set in your configuration file (this assumes
766
- your YAML is correct and will not fail format parsing, of course).
767
- That said, validation is limited to only those settings Ceedling
768
- uses and those that can be reasonably validated. Ceedling does
769
- not limit what can exist within your configuration file. In this
770
- way, you can take full advantage of YAML as well as add sections
771
- and values for use in your own custom plugins (documented later).
772
- The consequence of this is simple but important. A misspelled
773
- configuration section name or value name is unlikely to cause
774
- Ceedling any trouble. Ceedling will happily process that section
775
- or value and simply use the properly spelled default maintained
776
- internally - thus leading to unexpected behavior without warning.
764
+ **Let's Be Careful Out There:** Ceedling performs validation
765
+ on the values you set in your configuration file (this assumes
766
+ your YAML is correct and will not fail format parsing, of course).
767
+ That said, validation is limited to only those settings Ceedling
768
+ uses and those that can be reasonably validated. Ceedling does
769
+ not limit what can exist within your configuration file. In this
770
+ way, you can take full advantage of YAML as well as add sections
771
+ and values for use in your own custom plugins (documented later).
772
+ The consequence of this is simple but important. A misspelled
773
+ configuration section name or value name is unlikely to cause
774
+ Ceedling any trouble. Ceedling will happily process that section
775
+ or value and simply use the properly spelled default maintained
776
+ internally - thus leading to unexpected behavior without warning.
777
777
 
778
- project: global project settings
778
+ project: global project settings
779
779
 
780
780
 
781
781
  * `build_root`:
@@ -809,14 +809,14 @@ project: global project settings
809
809
  conditional compilation statements (e.g. #ifdef) and header files you
810
810
  wish to mock that contain conditional preprocessor statements and/or
811
811
  macros.
812
-
812
+
813
813
  Ceedling and CMock are advanced tools with sophisticated parsers.
814
814
  However, they do not include entire C language preprocessors.
815
815
  Consequently, with this option enabled, Ceedling will use gcc's
816
816
  preprocessing mode and the cpp preprocessor tool to strip down /
817
817
  expand test files and headers to their applicable content which can
818
818
  then be processed by Ceedling and CMock.
819
-
819
+
820
820
  With this option enabled, the gcc & cpp tools must exist in an
821
821
  accessible system search path and test runner files are always
822
822
  regenerated.
@@ -833,7 +833,7 @@ project: global project settings
833
833
  changes in a header file three levels of #include statements deep,
834
834
  this option allows the appropriate incremental build actions to occur
835
835
  for both test execution and release builds.
836
-
836
+
837
837
  This is accomplished by using the dependencies discovery mode of gcc.
838
838
  With this option enabled, gcc must exist in an accessible system
839
839
  search path.
@@ -845,7 +845,7 @@ project: global project settings
845
845
  Ceedling collects test files by convention from within the test file
846
846
  search paths. The convention includes a unique name prefix and a file
847
847
  extension matching that of source files.
848
-
848
+
849
849
  Why not simply recognize all files in test directories as test files?
850
850
  By using the given convention, we have greater flexibility in what we
851
851
  do with C files in the test directories.
@@ -856,13 +856,13 @@ project: global project settings
856
856
 
857
857
  Just as you may have various build configurations for your source
858
858
  codebase, you may need variations of your project configuration.
859
-
859
+
860
860
  By specifying options paths, Ceedling will search for other project
861
- YAML files, make command line tasks available (rake options:variation
861
+ YAML files, make command line tasks available (ceedling options:variation
862
862
  for a variation.yml file), and merge the project configuration of
863
863
  these option files in with the main project file at runtime. See
864
864
  advanced topics.
865
-
865
+
866
866
  Note these Rake tasks at the command line - like verbosity or logging
867
867
  control - must come before the test or release task they are meant to
868
868
  modify.
@@ -874,30 +874,32 @@ project: global project settings
874
874
  When enabled, a release Rake task is exposed. This configuration
875
875
  option requires a corresponding release compiler and linker to be
876
876
  defined (gcc is used as the default).
877
-
877
+
878
878
  More release configuration options are available in the release_build
879
879
  section.
880
880
 
881
881
  **Default**: FALSE
882
882
 
883
883
 
884
- Example `[:project]` YAML blurb
884
+ Example `[:project]` YAML blurb
885
885
 
886
- :project:
887
- :build_root: project_awesome/build
888
- :use_exceptions: FALSE
889
- :use_test_preprocessor: TRUE
890
- :use_deep_dependencies: TRUE
891
- :options_paths:
892
- - project/options
893
- - external/shared/options
894
- :release_build: TRUE
886
+ ```yaml
887
+ :project:
888
+ :build_root: project_awesome/build
889
+ :use_exceptions: FALSE
890
+ :use_test_preprocessor: TRUE
891
+ :use_deep_dependencies: TRUE
892
+ :options_paths:
893
+ - project/options
894
+ - external/shared/options
895
+ :release_build: TRUE
896
+ ```
895
897
 
896
- Ceedling is primarily concerned with facilitating the somewhat
897
- complicated mechanics of automating unit tests. The same mechanisms
898
- are easily capable of building a final release binary artifact
899
- (i.e. non test code; the thing that is your final working software
900
- that you execute on target hardware).
898
+ Ceedling is primarily concerned with facilitating the somewhat
899
+ complicated mechanics of automating unit tests. The same mechanisms
900
+ are easily capable of building a final release binary artifact
901
+ (i.e. non test code; the thing that is your final working software
902
+ that you execute on target hardware).
901
903
 
902
904
 
903
905
  * `output`:
@@ -934,18 +936,18 @@ that you execute on target hardware).
934
936
 
935
937
  **Default**: [] (empty)
936
938
 
937
- Example `[:release_build]` YAML blurb
938
-
939
- :release_build:
940
- :output: top_secret.bin
941
- :use_assembly: TRUE
942
- :artifacts:
943
- - build/release/out/c/top_secret.s19
944
-
945
- **paths**: options controlling search paths for source and header
946
- (and assembly) files
939
+ Example `[:release_build]` YAML blurb
947
940
 
941
+ ```yaml
942
+ :release_build:
943
+ :output: top_secret.bin
944
+ :use_assembly: TRUE
945
+ :artifacts:
946
+ - build/release/out/c/top_secret.s19
947
+ ```
948
948
 
949
+ **paths**: options controlling search paths for source and header
950
+ (and assembly) files
949
951
 
950
952
  * `test`:
951
953
 
@@ -996,7 +998,7 @@ Example `[:release_build]` YAML blurb
996
998
  * `release_toolchain_include`:
997
999
 
998
1000
  Same as preceding albeit related to the release toolchain.
999
-
1001
+
1000
1002
  **Default**: [] (empty)
1001
1003
 
1002
1004
  * `<custom>`
@@ -1007,7 +1009,7 @@ Example `[:release_build]` YAML blurb
1007
1009
  build collections of files contained in those paths. A custom list is
1008
1010
  just that - a custom list of paths.
1009
1011
 
1010
- Notes on path grammar within the [:paths] section:
1012
+ Notes on path grammar within the [:paths] section:
1011
1013
 
1012
1014
  * Order of search paths listed in [:paths] is preserved when used by an
1013
1015
  entry in the [:tools] section
@@ -1021,44 +1023,44 @@ Notes on path grammar within the [:paths] section:
1021
1023
 
1022
1024
  * Paths:
1023
1025
 
1024
- 1. can be absolute or relative
1026
+ 1. can be absolute or relative
1025
1027
 
1026
- 2. can be singly explicit - a single fully specified path
1028
+ 2. can be singly explicit - a single fully specified path
1027
1029
 
1028
- 3. can include a glob operator (more on this below)
1030
+ 3. can include a glob operator (more on this below)
1029
1031
 
1030
- 4. can use inline Ruby string replacement (see [:environment]
1031
- section for more)
1032
+ 4. can use inline Ruby string replacement (see [:environment]
1033
+ section for more)
1032
1034
 
1033
- 5. default as an addition to a specific search list (more on this
1034
- in the examples)
1035
+ 5. default as an addition to a specific search list (more on this
1036
+ in the examples)
1035
1037
 
1036
- 6. can act to subtract from a glob included in the path list (more
1037
- on this in the examples)
1038
+ 6. can act to subtract from a glob included in the path list (more
1039
+ on this in the examples)
1038
1040
 
1039
1041
 
1040
- [Globs](http://ruby.about.com/od/beginningruby/a/dir2.htm)
1041
- as used by Ceedling are wildcards for specifying directories
1042
- without the need to list each and every required search path.
1043
- Ceedling globs operate just as Ruby globs except that they are
1044
- limited to matching directories and not files. Glob operators
1045
- include the following * ** ? [-] {,} (note: this list is space separated
1046
- and not comma separated as commas are used within the bracket
1047
- operators).
1042
+ [Globs](http://ruby.about.com/od/beginningruby/a/dir2.htm)
1043
+ as used by Ceedling are wildcards for specifying directories
1044
+ without the need to list each and every required search path.
1045
+ Ceedling globs operate just as Ruby globs except that they are
1046
+ limited to matching directories and not files. Glob operators
1047
+ include the following * ** ? [-] {,} (note: this list is space separated
1048
+ and not comma separated as commas are used within the bracket
1049
+ operators).
1048
1050
 
1049
- * ` *`:
1051
+ * `*`:
1050
1052
 
1051
1053
  All subdirectories of depth 1 below the parent path and including the
1052
1054
  parent path
1053
1055
 
1054
- * ` **`:
1056
+ * `**`:
1055
1057
 
1056
1058
  All subdirectories recursively discovered below the parent path and
1057
1059
  including the parent path
1058
1060
 
1059
- * ` ?`:
1061
+ * `?`:
1060
1062
 
1061
- Single alphanumeric character wildcard
1063
+ Single alphanumeric character wildcard
1062
1064
 
1063
1065
  * `[x-y]`:
1064
1066
 
@@ -1066,41 +1068,43 @@ operators).
1066
1068
 
1067
1069
  * `{x,y}`:
1068
1070
 
1069
- Single alphanumeric character from the specified list
1070
-
1071
- Example [:paths] YAML blurbs
1072
-
1073
- :paths:
1074
- :source: #together the following comprise all source search paths
1075
- - project/source/* #expansion yields all subdirectories of depth 1 plus parent directory
1076
- - project/lib #single path
1077
- :test: #all test search paths
1078
- - project/**/test? #expansion yields any subdirectory found anywhere in the project that
1079
- #begins with "test" and contains 5 characters
1080
-
1081
- :paths:
1082
- :source: #all source search paths
1083
- - +:project/source/** #all subdirectories recursively discovered plus parent directory
1084
- - -:project/source/os/generated #subtract os/generated directory from expansion of above glob
1085
- #note that '+:' notation is merely aesthetic; default is to add
1086
-
1087
- :test: #all test search paths
1088
- - project/test/bootloader #explicit, single search paths (searched in the order specified)
1089
- - project/test/application
1090
- - project/test/utilities
1091
-
1092
- :custom: #custom path list
1093
- - "#{PROJECT_ROOT}/other" #inline Ruby string expansion
1094
-
1095
- Globs and inline Ruby string expansion can require trial and
1096
- error to arrive at your intended results. Use the `rake paths:*`
1097
- command line options (documented in preceding section) to verify
1098
- your settings.
1099
-
1100
- Ceedling relies on file collections automagically assembled
1101
- from paths, globs, and file extensions. File collections greatly
1102
- simplify project set up. However, sometimes you need to remove
1103
- from or add individual files to those collections.
1071
+ Single alphanumeric character from the specified list
1072
+
1073
+ Example [:paths] YAML blurbs
1074
+
1075
+ ```yaml
1076
+ :paths:
1077
+ :source: #together the following comprise all source search paths
1078
+ - project/source/* #expansion yields all subdirectories of depth 1 plus parent directory
1079
+ - project/lib #single path
1080
+ :test: #all test search paths
1081
+ - project/**/test? #expansion yields any subdirectory found anywhere in the project that
1082
+ #begins with "test" and contains 5 characters
1083
+
1084
+ :paths:
1085
+ :source: #all source search paths
1086
+ - +:project/source/** #all subdirectories recursively discovered plus parent directory
1087
+ - -:project/source/os/generated #subtract os/generated directory from expansion of above glob
1088
+ #note that '+:' notation is merely aesthetic; default is to add
1089
+
1090
+ :test: #all test search paths
1091
+ - project/test/bootloader #explicit, single search paths (searched in the order specified)
1092
+ - project/test/application
1093
+ - project/test/utilities
1094
+
1095
+ :custom: #custom path list
1096
+ - "#{PROJECT_ROOT}/other" #inline Ruby string expansion
1097
+ ```
1098
+
1099
+ Globs and inline Ruby string expansion can require trial and
1100
+ error to arrive at your intended results. Use the `ceedling paths:*`
1101
+ command line options (documented in preceding section) to verify
1102
+ your settings.
1103
+
1104
+ Ceedling relies on file collections automagically assembled
1105
+ from paths, globs, and file extensions. File collections greatly
1106
+ simplify project set up. However, sometimes you need to remove
1107
+ from or add individual files to those collections.
1104
1108
 
1105
1109
 
1106
1110
  * `test`:
@@ -1134,67 +1138,69 @@ from or add individual files to those collections.
1134
1138
  **Default**: [] (empty)
1135
1139
 
1136
1140
 
1137
- Note: All path grammar documented in [:paths] section applies
1138
- to [:files] path entries - albeit at the file path level and not
1139
- the directory level.
1140
-
1141
- Example [:files] YAML blurb
1142
-
1143
- :files:
1144
- :source:
1145
- - callbacks/comm.c # entry defaults to file addition
1146
- - +:callbacks/comm*.c # add all comm files matching glob pattern
1147
- - -:source/board/atm134.c # not our board
1148
- :test:
1149
- - -:test/io/test_output_manager.c # remove unit tests from test build
1150
-
1151
-
1152
- **environment:** inserts environment variables into the shell
1153
- instance executing configured tools
1154
-
1155
- Ceedling creates environment variables from any key / value
1156
- pairs in the environment section. Keys become an environment
1157
- variable name in uppercase. The values are strings assigned
1158
- to those environment variables. These value strings are either
1159
- simple string values in YAML or the concatenation of a YAML array.
1160
-
1161
- Ceedling is able to execute inline Ruby string substitution
1162
- code to set environment variables. This evaluation occurs when
1163
- the project file is first processed for any environment pair's
1164
- value string including the Ruby string substitution pattern
1165
- `#{…}`. Note that environment value strings that _begin_ with
1166
- this pattern should always be enclosed in quotes. YAML defaults
1167
- to processing unquoted text as a string; quoting text is optional.
1168
- If an environment pair's value string begins with the Ruby string
1169
- substitution pattern, YAML will interpret the string as a Ruby
1170
- comment (because of the `#`). Enclosing each environment value
1171
- string in quotes is a safe practice.
1172
-
1173
- [:environment] entries are processed in the configured order
1174
- (later entries can reference earlier entries).
1175
-
1176
- Special case: PATH handling
1177
-
1178
- In the specific case of specifying an environment key named _path_,
1179
- an array of string values will be concatenated with the appropriate
1180
- platform-specific path separation character (e.g. ':' on *nix,
1181
- ';' on Windows). All other instances of environment keys assigned
1182
- YAML arrays use simple concatenation.
1183
-
1184
- Example [:environment] YAML blurb
1185
-
1186
- :environment:
1187
- - :license_server: gizmo.intranet #LICENSE_SERVER set with value "gizmo.intranet"
1188
- - :license: "#{`license.exe`}" #LICENSE set to string generated from shelling out to
1189
- #execute license.exe; note use of enclosing quotes
1190
-
1191
- - :path: #concatenated with path separator (see special case above)
1192
- - Tools/gizmo/bin #prepend existing PATH with gizmo path
1193
- - "#{ENV['PATH']}" #pattern #{…} triggers ruby evaluation string substitution
1194
- #note: value string must be quoted because of '#'
1195
-
1196
- - :logfile: system/logs/thingamabob.log #LOGFILE set with path for a log file
1197
-
1141
+ Note: All path grammar documented in [:paths] section applies
1142
+ to [:files] path entries - albeit at the file path level and not
1143
+ the directory level.
1144
+
1145
+ Example [:files] YAML blurb
1146
+
1147
+ ```yaml
1148
+ :files:
1149
+ :source:
1150
+ - callbacks/comm.c # entry defaults to file addition
1151
+ - +:callbacks/comm*.c # add all comm files matching glob pattern
1152
+ - -:source/board/atm134.c # not our board
1153
+ :test:
1154
+ - -:test/io/test_output_manager.c # remove unit tests from test build
1155
+ ```
1156
+
1157
+ **environment:** inserts environment variables into the shell
1158
+ instance executing configured tools
1159
+
1160
+ Ceedling creates environment variables from any key / value
1161
+ pairs in the environment section. Keys become an environment
1162
+ variable name in uppercase. The values are strings assigned
1163
+ to those environment variables. These value strings are either
1164
+ simple string values in YAML or the concatenation of a YAML array.
1165
+
1166
+ Ceedling is able to execute inline Ruby string substitution
1167
+ code to set environment variables. This evaluation occurs when
1168
+ the project file is first processed for any environment pair's
1169
+ value string including the Ruby string substitution pattern
1170
+ `#{…}`. Note that environment value strings that _begin_ with
1171
+ this pattern should always be enclosed in quotes. YAML defaults
1172
+ to processing unquoted text as a string; quoting text is optional.
1173
+ If an environment pair's value string begins with the Ruby string
1174
+ substitution pattern, YAML will interpret the string as a Ruby
1175
+ comment (because of the `#`). Enclosing each environment value
1176
+ string in quotes is a safe practice.
1177
+
1178
+ [:environment] entries are processed in the configured order
1179
+ (later entries can reference earlier entries).
1180
+
1181
+ Special case: PATH handling
1182
+
1183
+ In the specific case of specifying an environment key named _path_,
1184
+ an array of string values will be concatenated with the appropriate
1185
+ platform-specific path separation character (e.g. ':' on *nix,
1186
+ ';' on Windows). All other instances of environment keys assigned
1187
+ YAML arrays use simple concatenation.
1188
+
1189
+ Example [:environment] YAML blurb
1190
+
1191
+ ```yaml
1192
+ :environment:
1193
+ - :license_server: gizmo.intranet #LICENSE_SERVER set with value "gizmo.intranet"
1194
+ - :license: "#{`license.exe`}" #LICENSE set to string generated from shelling out to
1195
+ #execute license.exe; note use of enclosing quotes
1196
+
1197
+ - :path: #concatenated with path separator (see special case above)
1198
+ - Tools/gizmo/bin #prepend existing PATH with gizmo path
1199
+ - "#{ENV['PATH']}" #pattern #{…} triggers ruby evaluation string substitution
1200
+ #note: value string must be quoted because of '#'
1201
+
1202
+ - :logfile: system/logs/thingamabob.log #LOGFILE set with path for a log file
1203
+ ```
1198
1204
 
1199
1205
  **extension**: configure file name extensions used to collect lists of files searched in [:paths]
1200
1206
 
@@ -1227,7 +1233,7 @@ Example [:environment] YAML blurb
1227
1233
  Binary executable to be loaded and executed upon target hardware
1228
1234
 
1229
1235
  **Default**: .exe or .out (Win or *nix)
1230
-
1236
+
1231
1237
  * `testpass`:
1232
1238
 
1233
1239
  Test results file (not likely to ever need a new value)
@@ -1247,7 +1253,7 @@ Example [:environment] YAML blurb
1247
1253
  **Default**: .d
1248
1254
 
1249
1255
 
1250
- Example [:extension] YAML blurb
1256
+ Example [:extension] YAML blurb
1251
1257
 
1252
1258
  :extension:
1253
1259
  :source: .cc
@@ -1258,10 +1264,10 @@ Example [:extension] YAML blurb
1258
1264
  * `test`:
1259
1265
 
1260
1266
  Defines needed for testing. Useful for:
1261
-
1267
+
1262
1268
  1. test files containing conditional compilation statements (i.e.
1263
1269
  tests active in only certain contexts)
1264
-
1270
+
1265
1271
  2. testing legacy source wherein the isolation of source under test
1266
1272
  afforded by Ceedling and its complementary tools leaves certain
1267
1273
  symbols unset when source files are compiled in isolation
@@ -1281,7 +1287,7 @@ Example [:extension] YAML blurb
1281
1287
  * `release`:
1282
1288
 
1283
1289
  Defines needed for the release build binary artifact.
1284
-
1290
+
1285
1291
  **Default**: [] (empty)
1286
1292
 
1287
1293
  * `release_preprocess`:
@@ -1290,20 +1296,22 @@ Example [:extension] YAML blurb
1290
1296
  a certain way, the gcc preprocessor may need symbol definitions to
1291
1297
  properly preprocess files for incremental release builds due to deep
1292
1298
  dependencies.
1293
-
1299
+
1294
1300
  **Default**: [] (empty)
1295
1301
 
1296
1302
 
1297
- Example [:defines] YAML blurb
1303
+ Example [:defines] YAML blurb
1298
1304
 
1299
- :defines:
1300
- :test:
1301
- - UNIT_TESTING #for select cases in source to allow testing with a changed behavior or interface
1302
- - OFF=0
1303
- - ON=1
1304
- - FEATURE_X=ON
1305
- :source:
1306
- - FEATURE_X=ON
1305
+ ```yaml
1306
+ :defines:
1307
+ :test:
1308
+ - UNIT_TESTING #for select cases in source to allow testing with a changed behavior or interface
1309
+ - OFF=0
1310
+ - ON=1
1311
+ - FEATURE_X=ON
1312
+ :source:
1313
+ - FEATURE_X=ON
1314
+ ```
1307
1315
 
1308
1316
  **flags**: configure per-file compilation and linking flags
1309
1317
 
@@ -1322,47 +1330,49 @@ argument substitution to achieve this.
1322
1330
 
1323
1331
  [:compile] or [:link] flags for test build
1324
1332
 
1325
- Notes:
1333
+ Notes:
1326
1334
 
1327
- * Ceedling works with the [:release] and [:test] build contexts
1328
- as-is; plugins can add additional contexts
1335
+ * Ceedling works with the [:release] and [:test] build contexts
1336
+ as-is; plugins can add additional contexts
1329
1337
 
1330
- * Only [:compile] and [:link] are recognized operations beneath
1331
- a context
1338
+ * Only [:compile] and [:link] are recognized operations beneath
1339
+ a context
1332
1340
 
1333
- * File specifiers do not include a path or file extension
1341
+ * File specifiers do not include a path or file extension
1334
1342
 
1335
- * File specifiers are case sensitive (must match original file
1336
- name)
1343
+ * File specifiers are case sensitive (must match original file
1344
+ name)
1337
1345
 
1338
- * '*' is a special (optional) file specifier to provide flags
1339
- to all files not otherwise specified
1346
+ * '*' is a special (optional) file specifier to provide flags
1347
+ to all files not otherwise specified
1340
1348
 
1341
1349
 
1342
- Example [:flags] YAML blurb
1350
+ Example [:flags] YAML blurb
1343
1351
 
1344
- :flags:
1345
- :release:
1346
- :compile:
1347
- :main: # add '-Wall' to compilation of main.c
1348
- - -Wall
1349
- :fan: # add '--O2' to compilation of fan.c
1350
- - --O2
1351
- :*: # add '-foo' to compilation of all files not main.c or fan.c
1352
- - -foo
1353
- :test:
1354
- :compile:
1355
- :main: # add '--O1' to compilation of main.c as part of test builds including main.c
1356
- - --O1
1357
- :link:
1358
- :test_main: # add '--bar --baz' to linking of test_main.exe
1359
- - --bar
1360
- - --baz
1352
+ ```yaml
1353
+ :flags:
1354
+ :release:
1355
+ :compile:
1356
+ :main: # add '-Wall' to compilation of main.c
1357
+ - -Wall
1358
+ :fan: # add '--O2' to compilation of fan.c
1359
+ - --O2
1360
+ :*: # add '-foo' to compilation of all files not main.c or fan.c
1361
+ - -foo
1362
+ :test:
1363
+ :compile:
1364
+ :main: # add '--O1' to compilation of main.c as part of test builds including main.c
1365
+ - --O1
1366
+ :link:
1367
+ :test_main: # add '--bar --baz' to linking of test_main.exe
1368
+ - --bar
1369
+ - --baz
1370
+ ```
1361
1371
 
1362
- Ceedling sets values for a subset of CMock settings. All CMock
1363
- options are available to be set, but only those options set by
1364
- Ceedling in an automated fashion are documented below. See CMock
1365
- documentation.
1372
+ Ceedling sets values for a subset of CMock settings. All CMock
1373
+ options are available to be set, but only those options set by
1374
+ Ceedling in an automated fashion are documented below. See CMock
1375
+ documentation.
1366
1376
 
1367
1377
  **cmock**: configure CMock's code generation options and set symbols used to modify CMock's compiled features
1368
1378
  Ceedling sets values for a subset of CMock settings. All CMock options are available to be set, but only those options set by Ceedling in an automated fashion are documented below. See CMock documentation.
@@ -1414,15 +1424,15 @@ Ceedling sets values for a subset of CMock settings. All CMock options are avail
1414
1424
  mocks as #include statements.
1415
1425
 
1416
1426
 
1417
- The last four settings above are directly tied to other Ceedling
1418
- settings; hence, why they are listed and explained here. The
1419
- first setting above, [:enforce_strict_ordering], defaults
1420
- to FALSE within CMock. It is set to TRUE by default in Ceedling
1421
- as our way of encouraging you to use strict ordering. It's a teeny
1422
- bit more expensive in terms of code generated, test execution
1423
- time, and complication in deciphering test failures. However,
1424
- it's good practice. And, of course, you can always disable it
1425
- by overriding the value in the Ceedling YAML configuration file.
1427
+ The last four settings above are directly tied to other Ceedling
1428
+ settings; hence, why they are listed and explained here. The
1429
+ first setting above, [:enforce_strict_ordering], defaults
1430
+ to FALSE within CMock. It is set to TRUE by default in Ceedling
1431
+ as our way of encouraging you to use strict ordering. It's a teeny
1432
+ bit more expensive in terms of code generated, test execution
1433
+ time, and complication in deciphering test failures. However,
1434
+ it's good practice. And, of course, you can always disable it
1435
+ by overriding the value in the Ceedling YAML configuration file.
1426
1436
 
1427
1437
 
1428
1438
  **cexception**: configure symbols used to modify CException's compiled features
@@ -1449,7 +1459,7 @@ by overriding the value in the Ceedling YAML configuration file.
1449
1459
  **Default**: [] (empty)
1450
1460
 
1451
1461
 
1452
- Notes on Unity configuration:
1462
+ Notes on Unity configuration:
1453
1463
 
1454
1464
  * **Verification** - Ceedling does no verification of your configuration
1455
1465
  values. In a properly configured setup, your Unity configuration
@@ -1470,35 +1480,36 @@ Notes on Unity configuration:
1470
1480
  and shell documentation.
1471
1481
 
1472
1482
 
1473
- Example [:unity] YAML blurbs
1474
-
1475
- :unity: #itty bitty processor & toolchain with limited test execution options
1476
- :defines:
1477
- - UNITY_INT_WIDTH=16 #16 bit processor without support for 32 bit instructions
1478
- - UNITY_EXCLUDE_FLOAT #no floating point unit
1479
- #let's say environment & tools provide no way to run tests on desktop so we gotta go on target
1480
- #replace putchar() with write_usart() via command line specified macro (gcc style)
1481
- #note escaped quotes for our hypothetical shell that doesn't like parens in arguments
1482
- #transformed into -D"UNITY_OUTPUT_CHAR(a)=write_usart(a)" at command line by [:tools] entry
1483
- - "\"UNITY_OUTPUT_CHAR(a)=write_usart(a)\""
1484
-
1485
- :unity: #great big gorilla processor that grunts and scratches
1486
- :defines:
1487
- - UNITY_SUPPORT_64 #big memory, big counters, big registers
1488
- - UNITY_LINE_TYPE=\"unsigned int\" #apparently we're using really long test files,
1489
- - UNITY_COUNTER_TYPE=\"unsigned int\" #and we've got a ton of test cases in those test files
1490
- - UNITY_FLOAT_TYPE=\"double\" #you betcha
1491
-
1492
-
1493
- **tools**: a means for representing command line tools for use under
1494
- Ceedling's automation framework
1495
-
1496
- Ceedling requires a variety of tools to work its magic. By default,
1497
- the GNU toolchain (gcc, cpp, as) are configured and ready for
1498
- use with no additions to the project configuration YAML file.
1499
- However, as most work will require a project-specific toolchain,
1500
- Ceedling provides a generic means for specifying / overriding
1501
- tools.
1483
+ Example [:unity] YAML blurbs
1484
+
1485
+ ```yaml
1486
+ :unity: #itty bitty processor & toolchain with limited test execution options
1487
+ :defines:
1488
+ - UNITY_INT_WIDTH=16 #16 bit processor without support for 32 bit instructions
1489
+ - UNITY_EXCLUDE_FLOAT #no floating point unit
1490
+ #let's say environment & tools provide no way to run tests on desktop so we gotta go on target
1491
+ #replace putchar() with write_usart() via command line specified macro (gcc style)
1492
+ #note escaped quotes for our hypothetical shell that doesn't like parens in arguments
1493
+ #transformed into -D"UNITY_OUTPUT_CHAR(a)=write_usart(a)" at command line by [:tools] entry
1494
+ - "\"UNITY_OUTPUT_CHAR(a)=write_usart(a)\""
1495
+
1496
+ :unity: #great big gorilla processor that grunts and scratches
1497
+ :defines:
1498
+ - UNITY_SUPPORT_64 #big memory, big counters, big registers
1499
+ - UNITY_LINE_TYPE=\"unsigned int\" #apparently we're using really long test files,
1500
+ - UNITY_COUNTER_TYPE=\"unsigned int\" #and we've got a ton of test cases in those test files
1501
+ - UNITY_FLOAT_TYPE=\"double\" #you betcha
1502
+ ```
1503
+
1504
+ **tools**: a means for representing command line tools for use under
1505
+ Ceedling's automation framework
1506
+
1507
+ Ceedling requires a variety of tools to work its magic. By default,
1508
+ the GNU toolchain (gcc, cpp, as) are configured and ready for
1509
+ use with no additions to the project configuration YAML file.
1510
+ However, as most work will require a project-specific toolchain,
1511
+ Ceedling provides a generic means for specifying / overriding
1512
+ tools.
1502
1513
 
1503
1514
  * `test_compiler`:
1504
1515
 
@@ -1571,30 +1582,30 @@ tools.
1571
1582
  **Default**: gcc
1572
1583
 
1573
1584
 
1574
- A Ceedling tool has a handful of configurable elements:
1585
+ A Ceedling tool has a handful of configurable elements:
1575
1586
 
1576
- 1. [:executable] (required) - Command line executable having
1577
- the form of:
1587
+ 1. [:executable] (required) - Command line executable having
1588
+ the form of:
1578
1589
 
1579
- 2. [:arguments] (required) - List of command line arguments
1580
- and substitutions
1590
+ 2. [:arguments] (required) - List of command line arguments
1591
+ and substitutions
1581
1592
 
1582
- 3. [:name] - Simple name (e.g. "nickname") of tool beyond its
1583
- executable name (if not explicitly set then Ceedling will
1584
- form a name from the tool's YAML entry name)
1593
+ 3. [:name] - Simple name (e.g. "nickname") of tool beyond its
1594
+ executable name (if not explicitly set then Ceedling will
1595
+ form a name from the tool's YAML entry name)
1585
1596
 
1586
- 4. [:stderr_redirect] - Control of capturing $stderr messages
1587
- {:none, :auto, :win, :unix, :tcsh}. {text:line-break}
1588
- Defaults to :none if unspecified; create a custom entry by
1589
- specifying a simple string instead of any of the available
1590
- symbols.
1597
+ 4. [:stderr_redirect] - Control of capturing $stderr messages
1598
+ {:none, :auto, :win, :unix, :tcsh}. {text:line-break}
1599
+ Defaults to :none if unspecified; create a custom entry by
1600
+ specifying a simple string instead of any of the available
1601
+ symbols.
1591
1602
 
1592
- 5. [:background_exec] - Control execution as background process
1593
- {:none, :auto, :win, :unix}. {text:line-break} Defaults
1594
- to :none if unspecified.
1603
+ 5. [:background_exec] - Control execution as background process
1604
+ {:none, :auto, :win, :unix}. {text:line-break} Defaults
1605
+ to :none if unspecified.
1595
1606
 
1596
1607
 
1597
- Tool Element Runtime Substitution
1608
+ Tool Element Runtime Substitution
1598
1609
  ---------------------------------
1599
1610
 
1600
1611
  To accomplish useful work on multiple files, a configured tool will most
@@ -1605,7 +1616,7 @@ provides two kinds of inline Ruby execution and a notation for
1605
1616
  populating elements with dynamically gathered values within the build
1606
1617
  environment.
1607
1618
 
1608
- Tool Element Runtime Substitution: Inline Ruby Execution
1619
+ Tool Element Runtime Substitution: Inline Ruby Execution
1609
1620
  --------------------------------------------------------
1610
1621
 
1611
1622
  In-line Ruby execution works similarly to that demonstrated for the
@@ -1633,14 +1644,14 @@ executed and not at the time the configuration file is first scanned.
1633
1644
  Ceedling feature to insert Ruby code that iterates those paths and
1634
1645
  escapes those spaces in the array as used by the tool of this example.
1635
1646
 
1636
- Tool Element Runtime Substitution: Notational Substitution
1647
+ Tool Element Runtime Substitution: Notational Substitution
1637
1648
  ----------------------------------------------------------
1638
1649
 
1639
1650
  A Ceedling tool's other form of dynamic substitution relies on a '$'
1640
1651
  notation. These '$' operators can exist anywhere in a string and can be
1641
1652
  decorated in any way needed. To use a literal '$', escape it as '\\$'.
1642
1653
 
1643
- * ` $`:
1654
+ * `$`:
1644
1655
 
1645
1656
  Simple substitution for value(s) globally available within the runtime
1646
1657
  (most often a string or an array).
@@ -1661,40 +1672,41 @@ decorated in any way needed. To use a literal '$', escape it as '\\$'.
1661
1672
  binary input file given to a simulator in its arguments.
1662
1673
 
1663
1674
 
1664
-
1665
- Example [:tools] YAML blurbs
1666
-
1667
- :tools:
1668
- :test_compiler:
1669
- :executable: compiler #exists in system search path
1670
- :name: 'acme test compiler'
1671
- :arguments:
1672
- - -I"$”: COLLECTION_PATHS_TEST_TOOLCHAIN_INCLUDE #expands to -I search paths
1673
- - -I"$”: COLLECTION_PATHS_TEST_SUPPORT_SOURCE_INCLUDE_VENDOR #expands to -I search paths
1674
- - -D$: COLLECTION_TEST_DEFINES #expands to all -D defined symbols
1675
- - --network-license #simple command line argument
1676
- - -optimize-level 4 #simple command line argument
1677
- - "#{`args.exe -m acme.prj`}" #in-line ruby sub to shell out & build string of arguments
1678
- - -c ${1} #source code input file (Ruby method call param list sub)
1679
- - -o ${2} #object file output (Ruby method call param list sub)
1680
- :test_linker:
1681
- :executable: /programs/acme/bin/linker.exe #absolute file path
1682
- :name: 'acme test linker'
1683
- :arguments:
1684
- - ${1} #list of object files to link (Ruby method call param list sub)
1685
- - -l$-lib: #inline yaml array substitution to link in foo-lib and bar-lib
1686
- - foo
1687
- - bar
1688
- - -o ${2} #executable file output (Ruby method call param list sub)
1689
- :test_fixture:
1690
- :executable: tools/bin/acme_simulator.exe #relative file path to command line simulator
1691
- :name: 'acme test fixture'
1692
- :stderr_redirect: :win #inform Ceedling what model of $stderr capture to use
1693
- :arguments:
1694
- - -mem large #simple command line argument
1695
- - -f "${1}" #binary executable input file to simulator (Ruby method call param list sub)
1696
-
1697
- Resulting command line constructions from preceding example [:tools] YAML blurbs
1675
+ Example [:tools] YAML blurbs
1676
+
1677
+ ```yaml
1678
+ :tools:
1679
+ :test_compiler:
1680
+ :executable: compiler #exists in system search path
1681
+ :name: 'acme test compiler'
1682
+ :arguments:
1683
+ - -I"$”: COLLECTION_PATHS_TEST_TOOLCHAIN_INCLUDE #expands to -I search paths
1684
+ - -I"$”: COLLECTION_PATHS_TEST_SUPPORT_SOURCE_INCLUDE_VENDOR #expands to -I search paths
1685
+ - -D$: COLLECTION_TEST_DEFINES #expands to all -D defined symbols
1686
+ - --network-license #simple command line argument
1687
+ - -optimize-level 4 #simple command line argument
1688
+ - "#{`args.exe -m acme.prj`}" #in-line ruby sub to shell out & build string of arguments
1689
+ - -c ${1} #source code input file (Ruby method call param list sub)
1690
+ - -o ${2} #object file output (Ruby method call param list sub)
1691
+ :test_linker:
1692
+ :executable: /programs/acme/bin/linker.exe #absolute file path
1693
+ :name: 'acme test linker'
1694
+ :arguments:
1695
+ - ${1} #list of object files to link (Ruby method call param list sub)
1696
+ - -l$-lib: #inline yaml array substitution to link in foo-lib and bar-lib
1697
+ - foo
1698
+ - bar
1699
+ - -o ${2} #executable file output (Ruby method call param list sub)
1700
+ :test_fixture:
1701
+ :executable: tools/bin/acme_simulator.exe #relative file path to command line simulator
1702
+ :name: 'acme test fixture'
1703
+ :stderr_redirect: :win #inform Ceedling what model of $stderr capture to use
1704
+ :arguments:
1705
+ - -mem large #simple command line argument
1706
+ - -f "${1}" #binary executable input file to simulator (Ruby method call param list sub)
1707
+ ```
1708
+
1709
+ Resulting command line constructions from preceding example [:tools] YAML blurbs
1698
1710
 
1699
1711
  > compiler -I"/usr/include” -I”project/tests”
1700
1712
  -I"project/tests/support” -I”project/source” -I”project/include”
@@ -1702,18 +1714,18 @@ Resulting command line constructions from preceding example [:tools] YAML blurbs
1702
1714
  arg-bar arg-baz -c project/source/source.c -o
1703
1715
  build/tests/out/source.o
1704
1716
 
1705
- [notes: (1.) "arg-foo arg-bar arg-baz" is a fabricated example
1706
- string collected from $stdout as a result of shell execution
1707
- of args.exe {text:line-break} (2.) the -c and -o arguments are
1708
- fabricated examples simulating a single compilation step for
1709
- a test; ${1} & ${2} are single files]
1717
+ [notes: (1.) "arg-foo arg-bar arg-baz" is a fabricated example
1718
+ string collected from $stdout as a result of shell execution
1719
+ of args.exe {text:line-break} (2.) the -c and -o arguments are
1720
+ fabricated examples simulating a single compilation step for
1721
+ a test; ${1} & ${2} are single files]
1710
1722
 
1711
1723
  > \programs\acme\bin\linker.exe thing.o unity.o
1712
1724
  test_thing_runner.o test_thing.o mock_foo.o mock_bar.o -lfoo-lib
1713
1725
  -lbar-lib -o build\tests\out\test_thing.exe
1714
1726
 
1715
- [note: in this scenario ${1} is an array of all the object files
1716
- needed to link a test fixture executable]
1727
+ [note: in this scenario ${1} is an array of all the object files
1728
+ needed to link a test fixture executable]
1717
1729
 
1718
1730
  > tools\bin\acme_simulator.exe -mem large -f "build\tests\out\test_thing.bin 2>&1”
1719
1731
 
@@ -1723,26 +1735,26 @@ $stderr redirection to allow us to capture simulator error messages to
1723
1735
  $stdout for display at the run's conclusion]
1724
1736
 
1725
1737
 
1726
- Notes:
1738
+ Notes:
1727
1739
 
1728
- * The upper case names are Ruby global constants that Ceedling
1729
- builds
1740
+ * The upper case names are Ruby global constants that Ceedling
1741
+ builds
1730
1742
 
1731
- * "COLLECTION_" indicates that Ceedling did some work to assemble
1732
- the list. For instance, expanding path globs, {text:soft-page-break}
1733
- combining multiple path globs into a convenient summation,
1734
- etc.
1743
+ * "COLLECTION_" indicates that Ceedling did some work to assemble
1744
+ the list. For instance, expanding path globs, {text:soft-page-break}
1745
+ combining multiple path globs into a convenient summation,
1746
+ etc.
1735
1747
 
1736
- * At present, $stderr redirection is primarily used to capture
1737
- errors from test fixtures so that they can be displayed at the
1738
- conclusion of a test run. For instance, if a simulator detects
1739
- a memory access violation or a divide by zero error, this notice
1740
- might go unseen in all the output scrolling past in a terminal.
1748
+ * At present, $stderr redirection is primarily used to capture
1749
+ errors from test fixtures so that they can be displayed at the
1750
+ conclusion of a test run. For instance, if a simulator detects
1751
+ a memory access violation or a divide by zero error, this notice
1752
+ might go unseen in all the output scrolling past in a terminal.
1741
1753
 
1742
- * The preprocessing tools can each be overridden with non-gcc
1743
- equivalents. However, this is an advanced feature not yet
1744
- documented and requires that the replacement toolchain conform
1745
- to the same conventions used by gcc.
1754
+ * The preprocessing tools can each be overridden with non-gcc
1755
+ equivalents. However, this is an advanced feature not yet
1756
+ documented and requires that the replacement toolchain conform
1757
+ to the same conventions used by gcc.
1746
1758
 
1747
1759
  **Ceedling Collection Used in Compilation**:
1748
1760
 
@@ -1801,10 +1813,10 @@ Notes:
1801
1813
  [:cexception][:defines] if exceptions are ena bled
1802
1814
 
1803
1815
 
1804
- Notes:
1816
+ Notes:
1805
1817
 
1806
- * Other collections exist within Ceedling. However, they are
1807
- only useful for advanced features not yet documented.
1818
+ * Other collections exist within Ceedling. However, they are
1819
+ only useful for advanced features not yet documented.
1808
1820
 
1809
1821
  * Wherever multiple path lists are combined for use Ceedling prioritizes
1810
1822
  path groups as follows: {text:line-break} test paths, support paths,
@@ -1837,17 +1849,18 @@ used to format test results. However, if no reporting plugins are
1837
1849
  specified, Ceedling will print to `$stdout` the (quite readable) raw
1838
1850
  test results from all test fixtures executed.
1839
1851
 
1840
- Example [:plugins] YAML blurb
1852
+ Example [:plugins] YAML blurb
1841
1853
 
1842
- :plugins:
1843
- :load_paths:
1844
- - project/tools/ceedling/plugins #home to your collection of plugin directories
1845
- - project/support #maybe home to some ruby code your custom plugins share
1846
- :enabled:
1847
- - stdout_pretty_tests_report #nice test results at your command line
1848
- - our_custom_code_metrics_report #maybe you needed line count and complexity metrics, so you
1849
- #created a plugin to scan all your code and collect that info
1850
-
1854
+ ```yaml
1855
+ :plugins:
1856
+ :load_paths:
1857
+ - project/tools/ceedling/plugins #home to your collection of plugin directories
1858
+ - project/support #maybe home to some ruby code your custom plugins share
1859
+ :enabled:
1860
+ - stdout_pretty_tests_report #nice test results at your command line
1861
+ - our_custom_code_metrics_report #maybe you needed line count and complexity metrics, so you
1862
+ #created a plugin to scan all your code and collect that info
1863
+ ```
1851
1864
 
1852
1865
  * `stdout_pretty_tests_report`:
1853
1866
 
@@ -1900,37 +1913,37 @@ Example [:plugins] YAML blurb
1900
1913
  release build, or even `bullseye/` for bullseye runs).
1901
1914
 
1902
1915
 
1903
- Advanced Topics (Coming)
1916
+ Advanced Topics (Coming)
1904
1917
  ========================
1905
1918
 
1906
- Modifying Your Configuration without Modifying Your Project File: Option Files & User Files
1919
+ Modifying Your Configuration without Modifying Your Project File: Option Files & User Files
1907
1920
  -------------------------------------------------------------------------------------------
1908
1921
 
1909
- Modifying your project file without modifying your project file
1922
+ Modifying your project file without modifying your project file
1910
1923
 
1911
- Debugging and/or printf()
1924
+ Debugging and/or printf()
1912
1925
  -------------------------
1913
1926
 
1914
- When you gotta get your hands dirty...
1927
+ When you gotta get your hands dirty...
1915
1928
 
1916
- Ceedling Plays Nice with Others - Using Ceedling for Tests Alongside Another Release Build Setup
1929
+ Ceedling Plays Nice with Others - Using Ceedling for Tests Alongside Another Release Build Setup
1917
1930
  ------------------------------------------------------------------------------------------------
1918
1931
 
1919
- You've got options.
1932
+ You've got options.
1920
1933
 
1921
- Adding Handy Rake Tasks for Your Project (without Fancy Pants Custom Plugins)
1934
+ Adding Handy Rake Tasks for Your Project (without Fancy Pants Custom Plugins)
1922
1935
  -----------------------------------------------------------------------------
1923
1936
 
1924
- Simple as snot.
1937
+ Simple as snot.
1925
1938
 
1926
- Working with Non-Desktop Testing Environments
1939
+ Working with Non-Desktop Testing Environments
1927
1940
  ---------------------------------------------
1928
1941
 
1929
1942
  For those crazy platforms lacking command line simulators and for which
1930
1943
  cross-compiling on the desktop just ain't gonna get it done.
1931
1944
 
1932
- Creating Custom Plugins
1945
+ Creating Custom Plugins
1933
1946
  -----------------------
1934
1947
 
1935
- Oh boy. This is going to take some explaining.
1948
+ Oh boy. This is going to take some explaining.
1936
1949