ceedling 0.19.0 → 0.20.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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
@@ -1,46 +1,46 @@
1
- #include "CException.h"
2
-
3
- #pragma GCC diagnostic push
4
- #pragma GCC diagnostic ignored "-Wmissing-field-initializers"
5
- volatile CEXCEPTION_FRAME_T CExceptionFrames[CEXCEPTION_NUM_ID] = {{ 0 }};
6
- #pragma GCC diagnostic pop
7
-
8
- //------------------------------------------------------------------------------------------
9
- // Throw
10
- //------------------------------------------------------------------------------------------
11
- void Throw(CEXCEPTION_T ExceptionID)
12
- {
13
- unsigned int MY_ID = CEXCEPTION_GET_ID;
14
- CExceptionFrames[MY_ID].Exception = ExceptionID;
15
- if (CExceptionFrames[MY_ID].pFrame)
16
- {
17
- longjmp(*CExceptionFrames[MY_ID].pFrame, 1);
18
- }
19
- CEXCEPTION_NO_CATCH_HANDLER(ExceptionID);
20
- }
21
-
22
- //------------------------------------------------------------------------------------------
23
- // Explanation of what it's all for:
24
- //------------------------------------------------------------------------------------------
25
- /*
26
- #define Try
27
- { <- give us some local scope. most compilers are happy with this
28
- jmp_buf *PrevFrame, NewFrame; <- prev frame points to the last try block's frame. new frame gets created on stack for this Try block
29
- unsigned int MY_ID = CEXCEPTION_GET_ID; <- look up this task's id for use in frame array. always 0 if single-tasking
30
- PrevFrame = CExceptionFrames[CEXCEPTION_GET_ID].pFrame; <- set pointer to point at old frame (which array is currently pointing at)
31
- CExceptionFrames[MY_ID].pFrame = &NewFrame; <- set array to point at my new frame instead, now
32
- CExceptionFrames[MY_ID].Exception = CEXCEPTION_NONE; <- initialize my exception id to be NONE
33
- if (setjmp(NewFrame) == 0) { <- do setjmp. it returns 1 if longjump called, otherwise 0
34
- if (&PrevFrame) <- this is here to force proper scoping. it requires braces or a single line to be but after Try, otherwise won't compile. This is always true at this point.
35
-
36
- #define Catch(e)
37
- else { } <- this also forces proper scoping. Without this they could stick their own 'else' in and it would get ugly
38
- CExceptionFrames[MY_ID].Exception = CEXCEPTION_NONE; <- no errors happened, so just set the exception id to NONE (in case it was corrupted)
39
- }
40
- else <- an exception occurred
41
- { e = CExceptionFrames[MY_ID].Exception; e=e;} <- assign the caught exception id to the variable passed in.
42
- CExceptionFrames[MY_ID].pFrame = PrevFrame; <- make the pointer in the array point at the previous frame again, as if NewFrame never existed.
43
- } <- finish off that local scope we created to have our own variables
44
- if (CExceptionFrames[CEXCEPTION_GET_ID].Exception != CEXCEPTION_NONE) <- start the actual 'catch' processing if we have an exception id saved away
45
- */
46
-
1
+ #include "CException.h"
2
+
3
+ #pragma GCC diagnostic push
4
+ #pragma GCC diagnostic ignored "-Wmissing-field-initializers"
5
+ volatile CEXCEPTION_FRAME_T CExceptionFrames[CEXCEPTION_NUM_ID] = {{ 0 }};
6
+ #pragma GCC diagnostic pop
7
+
8
+ //------------------------------------------------------------------------------------------
9
+ // Throw
10
+ //------------------------------------------------------------------------------------------
11
+ void Throw(CEXCEPTION_T ExceptionID)
12
+ {
13
+ unsigned int MY_ID = CEXCEPTION_GET_ID;
14
+ CExceptionFrames[MY_ID].Exception = ExceptionID;
15
+ if (CExceptionFrames[MY_ID].pFrame)
16
+ {
17
+ longjmp(*CExceptionFrames[MY_ID].pFrame, 1);
18
+ }
19
+ CEXCEPTION_NO_CATCH_HANDLER(ExceptionID);
20
+ }
21
+
22
+ //------------------------------------------------------------------------------------------
23
+ // Explanation of what it's all for:
24
+ //------------------------------------------------------------------------------------------
25
+ /*
26
+ #define Try
27
+ { <- give us some local scope. most compilers are happy with this
28
+ jmp_buf *PrevFrame, NewFrame; <- prev frame points to the last try block's frame. new frame gets created on stack for this Try block
29
+ unsigned int MY_ID = CEXCEPTION_GET_ID; <- look up this task's id for use in frame array. always 0 if single-tasking
30
+ PrevFrame = CExceptionFrames[CEXCEPTION_GET_ID].pFrame; <- set pointer to point at old frame (which array is currently pointing at)
31
+ CExceptionFrames[MY_ID].pFrame = &NewFrame; <- set array to point at my new frame instead, now
32
+ CExceptionFrames[MY_ID].Exception = CEXCEPTION_NONE; <- initialize my exception id to be NONE
33
+ if (setjmp(NewFrame) == 0) { <- do setjmp. it returns 1 if longjump called, otherwise 0
34
+ if (&PrevFrame) <- this is here to force proper scoping. it requires braces or a single line to be but after Try, otherwise won't compile. This is always true at this point.
35
+
36
+ #define Catch(e)
37
+ else { } <- this also forces proper scoping. Without this they could stick their own 'else' in and it would get ugly
38
+ CExceptionFrames[MY_ID].Exception = CEXCEPTION_NONE; <- no errors happened, so just set the exception id to NONE (in case it was corrupted)
39
+ }
40
+ else <- an exception occurred
41
+ { e = CExceptionFrames[MY_ID].Exception; e=e;} <- assign the caught exception id to the variable passed in.
42
+ CExceptionFrames[MY_ID].pFrame = PrevFrame; <- make the pointer in the array point at the previous frame again, as if NewFrame never existed.
43
+ } <- finish off that local scope we created to have our own variables
44
+ if (CExceptionFrames[CEXCEPTION_GET_ID].Exception != CEXCEPTION_NONE) <- start the actual 'catch' processing if we have an exception id saved away
45
+ */
46
+
@@ -1,86 +1,110 @@
1
- #ifndef _CEXCEPTION_H
2
- #define _CEXCEPTION_H
3
-
4
- #include <setjmp.h>
5
-
6
- #ifdef __cplusplus
7
- extern "C"
8
- {
9
- #endif
10
-
11
-
12
- //To Use CException, you have a number of options:
13
- //1. Just include it and run with the defaults
14
- //2. Define any of the following symbols at the command line to override them
15
- //3. Include a header file before CException.h everywhere which defines any of these
16
- //4. Create an Exception.h in your path, and just define EXCEPTION_USE_CONFIG_FILE first
17
-
18
- #ifdef CEXCEPTION_USE_CONFIG_FILE
19
- #include "CExceptionConfig.h"
20
- #endif
21
-
22
- //This is the value to assign when there isn't an exception
23
- #ifndef CEXCEPTION_NONE
24
- #define CEXCEPTION_NONE (0x5A5A5A5A)
25
- #endif
26
-
27
- //This is number of exception stacks to keep track of (one per task)
28
- #ifndef CEXCEPTION_NUM_ID
29
- #define CEXCEPTION_NUM_ID (1) //there is only the one stack by default
30
- #endif
31
-
32
- //This is the method of getting the current exception stack index (0 if only one stack)
33
- #ifndef CEXCEPTION_GET_ID
34
- #define CEXCEPTION_GET_ID (0) //use the first index always because there is only one anyway
35
- #endif
36
-
37
- //The type to use to store the exception values.
38
- #ifndef CEXCEPTION_T
39
- #define CEXCEPTION_T unsigned int
40
- #endif
41
-
42
- //This is an optional special handler for when there is no global Catch
43
- #ifndef CEXCEPTION_NO_CATCH_HANDLER
44
- #define CEXCEPTION_NO_CATCH_HANDLER(id)
45
- #endif
46
-
47
- //exception frame structures
48
- typedef struct {
49
- jmp_buf* pFrame;
50
- CEXCEPTION_T volatile Exception;
51
- } CEXCEPTION_FRAME_T;
52
-
53
- //actual root frame storage (only one if single-tasking)
54
- extern volatile CEXCEPTION_FRAME_T CExceptionFrames[];
55
-
56
- //Try (see C file for explanation)
57
- #define Try \
58
- { \
59
- jmp_buf *PrevFrame, NewFrame; \
60
- unsigned int MY_ID = CEXCEPTION_GET_ID; \
61
- PrevFrame = CExceptionFrames[CEXCEPTION_GET_ID].pFrame; \
62
- CExceptionFrames[MY_ID].pFrame = (jmp_buf*)(&NewFrame); \
63
- CExceptionFrames[MY_ID].Exception = CEXCEPTION_NONE; \
64
- if (setjmp(NewFrame) == 0) { \
65
- if (1)
66
-
67
- //Catch (see C file for explanation)
68
- #define Catch(e) \
69
- else { } \
70
- CExceptionFrames[MY_ID].Exception = CEXCEPTION_NONE; \
71
- } \
72
- else \
73
- { e = CExceptionFrames[MY_ID].Exception; e=e; } \
74
- CExceptionFrames[MY_ID].pFrame = PrevFrame; \
75
- } \
76
- if (CExceptionFrames[CEXCEPTION_GET_ID].Exception != CEXCEPTION_NONE)
77
-
78
- //Throw an Error
79
- void Throw(CEXCEPTION_T ExceptionID);
80
-
81
- #ifdef __cplusplus
82
- } // extern "C"
83
- #endif
84
-
85
-
86
- #endif // _CEXCEPTION_H
1
+ #ifndef _CEXCEPTION_H
2
+ #define _CEXCEPTION_H
3
+
4
+ #include <setjmp.h>
5
+
6
+ #ifdef __cplusplus
7
+ extern "C"
8
+ {
9
+ #endif
10
+
11
+
12
+ //To Use CException, you have a number of options:
13
+ //1. Just include it and run with the defaults
14
+ //2. Define any of the following symbols at the command line to override them
15
+ //3. Include a header file before CException.h everywhere which defines any of these
16
+ //4. Create an Exception.h in your path, and just define EXCEPTION_USE_CONFIG_FILE first
17
+
18
+ #ifdef CEXCEPTION_USE_CONFIG_FILE
19
+ #include "CExceptionConfig.h"
20
+ #endif
21
+
22
+ //This is the value to assign when there isn't an exception
23
+ #ifndef CEXCEPTION_NONE
24
+ #define CEXCEPTION_NONE (0x5A5A5A5A)
25
+ #endif
26
+
27
+ //This is number of exception stacks to keep track of (one per task)
28
+ #ifndef CEXCEPTION_NUM_ID
29
+ #define CEXCEPTION_NUM_ID (1) //there is only the one stack by default
30
+ #endif
31
+
32
+ //This is the method of getting the current exception stack index (0 if only one stack)
33
+ #ifndef CEXCEPTION_GET_ID
34
+ #define CEXCEPTION_GET_ID (0) //use the first index always because there is only one anyway
35
+ #endif
36
+
37
+ //The type to use to store the exception values.
38
+ #ifndef CEXCEPTION_T
39
+ #define CEXCEPTION_T unsigned int
40
+ #endif
41
+
42
+ //This is an optional special handler for when there is no global Catch
43
+ #ifndef CEXCEPTION_NO_CATCH_HANDLER
44
+ #define CEXCEPTION_NO_CATCH_HANDLER(id)
45
+ #endif
46
+
47
+ //These hooks allow you to inject custom code into places, particularly useful for saving and restoring additional state
48
+ #ifndef CEXCEPTION_HOOK_START_TRY
49
+ #define CEXCEPTION_HOOK_START_TRY
50
+ #endif
51
+ #ifndef CEXCEPTION_HOOK_HAPPY_TRY
52
+ #define CEXCEPTION_HOOK_HAPPY_TRY
53
+ #endif
54
+ #ifndef CEXCEPTION_HOOK_AFTER_TRY
55
+ #define CEXCEPTION_HOOK_AFTER_TRY
56
+ #endif
57
+ #ifndef CEXCEPTION_HOOK_START_CATCH
58
+ #define CEXCEPTION_HOOK_START_CATCH
59
+ #endif
60
+
61
+ //exception frame structures
62
+ typedef struct {
63
+ jmp_buf* pFrame;
64
+ CEXCEPTION_T volatile Exception;
65
+ } CEXCEPTION_FRAME_T;
66
+
67
+ //actual root frame storage (only one if single-tasking)
68
+ extern volatile CEXCEPTION_FRAME_T CExceptionFrames[];
69
+
70
+ //Try (see C file for explanation)
71
+ #define Try \
72
+ { \
73
+ jmp_buf *PrevFrame, NewFrame; \
74
+ unsigned int MY_ID = CEXCEPTION_GET_ID; \
75
+ PrevFrame = CExceptionFrames[CEXCEPTION_GET_ID].pFrame; \
76
+ CExceptionFrames[MY_ID].pFrame = (jmp_buf*)(&NewFrame); \
77
+ CExceptionFrames[MY_ID].Exception = CEXCEPTION_NONE; \
78
+ CEXCEPTION_HOOK_START_TRY; \
79
+ if (setjmp(NewFrame) == 0) { \
80
+ if (1)
81
+
82
+ //Catch (see C file for explanation)
83
+ #define Catch(e) \
84
+ else { } \
85
+ CExceptionFrames[MY_ID].Exception = CEXCEPTION_NONE; \
86
+ CEXCEPTION_HOOK_HAPPY_TRY; \
87
+ } \
88
+ else \
89
+ { \
90
+ e = CExceptionFrames[MY_ID].Exception; \
91
+ (void)e; \
92
+ CEXCEPTION_HOOK_START_CATCH; \
93
+ } \
94
+ CExceptionFrames[MY_ID].pFrame = PrevFrame; \
95
+ CEXCEPTION_HOOK_AFTER_TRY; \
96
+ } \
97
+ if (CExceptionFrames[CEXCEPTION_GET_ID].Exception != CEXCEPTION_NONE)
98
+
99
+ //Throw an Error
100
+ void Throw(CEXCEPTION_T ExceptionID);
101
+
102
+ //Just exit the Try block and skip the Catch.
103
+ #define ExitTry() Throw(CEXCEPTION_NONE)
104
+
105
+ #ifdef __cplusplus
106
+ } // extern "C"
107
+ #endif
108
+
109
+
110
+ #endif // _CEXCEPTION_H
@@ -1,24 +1,24 @@
1
- #Tool and Lib Locations
2
- C_COMPILER=gcc
3
- C_LIBS=C:/MinGW/lib
4
- UNITY_DIR=vendor/unity/src
5
-
6
- #Test File To Be Created
7
- OUT_FILE=test_cexceptions
8
- ifeq ($(OS),Windows_NT)
9
- OUT_EXTENSION=.exe
10
- else
11
- OUT_EXTENSION=.out
12
- endif
13
-
14
- #Options
15
- SRC_FILES=lib/CException.c test/TestException.c test/TestException_Runner.c $(UNITY_DIR)/unity.c
16
- INC_DIRS=-Ilib -Itest -I$(UNITY_DIR)
17
- LIB_DIRS=-L$(C_LIBS)
18
- SYMBOLS=-DTEST -DCEXCEPTION_USE_CONFIG_FILE
19
-
20
- #Default Task: Compile And Run Tests
21
- default:
22
- $(C_COMPILER) $(INC_DIRS) $(LIB_DIRS) $(SYMBOLS) $(SRC_FILES) -o $(OUT_FILE)$(OUT_EXTENSION)
23
- $(OUT_FILE)$(OUT_EXTENSION)
1
+ #Tool and Lib Locations
2
+ C_COMPILER=gcc
3
+ C_LIBS=C:/MinGW/lib
4
+ UNITY_DIR=vendor/unity/src
5
+
6
+ #Test File To Be Created
7
+ OUT_FILE=test_cexceptions
8
+ ifeq ($(OS),Windows_NT)
9
+ OUT_EXTENSION=.exe
10
+ else
11
+ OUT_EXTENSION=.out
12
+ endif
13
+
14
+ #Options
15
+ SRC_FILES=lib/CException.c test/TestException.c test/TestException_Runner.c $(UNITY_DIR)/unity.c
16
+ INC_DIRS=-Ilib -Itest -I$(UNITY_DIR)
17
+ LIB_DIRS=-L$(C_LIBS)
18
+ SYMBOLS=-DTEST -DCEXCEPTION_USE_CONFIG_FILE
19
+
20
+ #Default Task: Compile And Run Tests
21
+ default:
22
+ $(C_COMPILER) $(INC_DIRS) $(LIB_DIRS) $(SYMBOLS) $(SRC_FILES) -o $(OUT_FILE)$(OUT_EXTENSION)
23
+ $(OUT_FILE)$(OUT_EXTENSION)
24
24
 
@@ -1,46 +1,46 @@
1
- #ifndef _EXCEPTION_H
2
- #define _EXCEPTION_H
3
-
4
- #include "unity.h"
5
-
6
- extern volatile int TestingTheFallback;
7
- extern volatile int TestingTheFallbackId;
8
-
9
- //Optionally define the exception type (something like an int which can be directly assigned)
10
- #define CEXCEPTION_T int
11
-
12
- // Optionally define the reserved value representing NO EXCEPTION
13
- #define CEXCEPTION_NONE (1234)
14
-
15
- // Optionally define a special handler for unhandled exceptions
16
- #define CEXCEPTION_NO_CATCH_HANDLER(id) \
17
- { \
18
- if (!TestingTheFallback) \
19
- { \
20
- TEST_FAIL_MESSAGE("Unexpected Exception!"); \
21
- } \
22
- else \
23
- { \
24
- TestingTheFallbackId = id; \
25
- TestingTheFallback--; \
26
- } \
27
- }
28
-
29
- // Multi-Tasking environments will need a couple of macros defined to make this library
30
- // properly handle multiple exception stacks. You will need to include and required
31
- // definitions, then define the following macros:
32
- // EXCEPTION_GET_ID - returns the id of the current task indexed 0 to (numtasks - 1)
33
- // EXCEPTION_NUM_ID - returns the number of tasks that might be returned
34
- //
35
- // For example, Quadros might include the following implementation:
36
- #ifndef TEST
37
- #include "OSAPI.h"
38
- #define CEXCEPTION_GET_ID (KS_GetTaskID())
39
- #define CEXCEPTION_NUM_ID (NTASKS + 1)
40
- #endif
41
-
42
- //This could be a good place to define/include some error ID's:
43
- #define ERROR_ID_EVERYTHING_IS_BROKEN (0x88)
44
- #define ERROR_ID_ONLY_THIS_IS_BROKEN (0x77)
45
-
46
- #endif // _EXCEPTION_H
1
+ #ifndef _EXCEPTION_H
2
+ #define _EXCEPTION_H
3
+
4
+ #include "unity.h"
5
+
6
+ extern volatile int TestingTheFallback;
7
+ extern volatile int TestingTheFallbackId;
8
+
9
+ //Optionally define the exception type (something like an int which can be directly assigned)
10
+ #define CEXCEPTION_T int
11
+
12
+ // Optionally define the reserved value representing NO EXCEPTION
13
+ #define CEXCEPTION_NONE (1234)
14
+
15
+ // Optionally define a special handler for unhandled exceptions
16
+ #define CEXCEPTION_NO_CATCH_HANDLER(id) \
17
+ { \
18
+ if (!TestingTheFallback) \
19
+ { \
20
+ TEST_FAIL_MESSAGE("Unexpected Exception!"); \
21
+ } \
22
+ else \
23
+ { \
24
+ TestingTheFallbackId = id; \
25
+ TestingTheFallback--; \
26
+ } \
27
+ }
28
+
29
+ // Multi-Tasking environments will need a couple of macros defined to make this library
30
+ // properly handle multiple exception stacks. You will need to include and required
31
+ // definitions, then define the following macros:
32
+ // EXCEPTION_GET_ID - returns the id of the current task indexed 0 to (numtasks - 1)
33
+ // EXCEPTION_NUM_ID - returns the number of tasks that might be returned
34
+ //
35
+ // For example, Quadros might include the following implementation:
36
+ #ifndef TEST
37
+ #include "OSAPI.h"
38
+ #define CEXCEPTION_GET_ID (KS_GetTaskID())
39
+ #define CEXCEPTION_NUM_ID (NTASKS + 1)
40
+ #endif
41
+
42
+ //This could be a good place to define/include some error ID's:
43
+ #define ERROR_ID_EVERYTHING_IS_BROKEN (0x88)
44
+ #define ERROR_ID_ONLY_THIS_IS_BROKEN (0x77)
45
+
46
+ #endif // _EXCEPTION_H
@@ -1,342 +1,391 @@
1
- #include "unity.h"
2
- #include "CException.h"
3
-
4
- volatile int TestingTheFallback;
5
- volatile int TestingTheFallbackId;
6
-
7
- void setUp(void)
8
- {
9
- CExceptionFrames[0].pFrame = NULL;
10
- TestingTheFallback = 0;
11
- }
12
-
13
- void tearDown(void)
14
- {
15
- }
16
-
17
- void test_BasicTryDoesNothingIfNoThrow(void)
18
- {
19
- int i = 0;
20
- CEXCEPTION_T e = 0x5a;
21
-
22
- Try
23
- {
24
- i += 1;
25
- }
26
- Catch(e)
27
- {
28
- TEST_FAIL_MESSAGE("Should Not Enter Catch If Not Thrown");
29
- }
30
-
31
- //verify that e was untouched
32
- TEST_ASSERT_EQUAL(0x5a, e);
33
-
34
- // verify that i was incremented once
35
- TEST_ASSERT_EQUAL(1, i);
36
- }
37
-
38
- void test_BasicThrowAndCatch(void)
39
- {
40
- CEXCEPTION_T e;
41
-
42
- Try
43
- {
44
- Throw(0xBE);
45
- TEST_FAIL_MESSAGE("Should Have Thrown An Error")
46
- }
47
- Catch(e)
48
- {
49
- //verify that e has the right data
50
- TEST_ASSERT_EQUAL(0xBE, e);
51
- }
52
-
53
- //verify that e STILL has the right data
54
- TEST_ASSERT_EQUAL(0xBE, e);
55
- }
56
-
57
- void test_BasicThrowAndCatch_WithMiniSyntax(void)
58
- {
59
- CEXCEPTION_T e;
60
-
61
- //Mini Throw and Catch
62
- Try
63
- Throw(0xEF);
64
- Catch(e)
65
- TEST_ASSERT_EQUAL(0xEF, e);
66
- TEST_ASSERT_EQUAL(0xEF, e);
67
-
68
- //Mini Passthrough
69
- Try
70
- e = 0;
71
- Catch(e)
72
- TEST_FAIL_MESSAGE("I shouldn't be caught because there was no throw");
73
-
74
- TEST_ASSERT_EQUAL(0, e);
75
- }
76
-
77
- void test_VerifyVolatilesSurviveThrowAndCatch(void)
78
- {
79
- volatile unsigned int VolVal = 0;
80
- CEXCEPTION_T e;
81
-
82
- Try
83
- {
84
- VolVal = 2;
85
- Throw(0xBF);
86
- TEST_FAIL_MESSAGE("Should Have Thrown An Error")
87
- }
88
- Catch(e)
89
- {
90
- VolVal += 2;
91
- TEST_ASSERT_EQUAL(0xBF, e);
92
- }
93
-
94
- TEST_ASSERT_EQUAL(4, VolVal);
95
- TEST_ASSERT_EQUAL(0xBF, e);
96
- }
97
-
98
- void HappyExceptionThrower(unsigned int ID)
99
- {
100
- if (ID != 0)
101
- {
102
- Throw(ID);
103
- }
104
- }
105
-
106
- void test_ThrowFromASubFunctionAndCatchInRootFunc(void)
107
- {
108
- volatile unsigned int ID = 0;
109
- CEXCEPTION_T e;
110
-
111
- Try
112
- {
113
-
114
- HappyExceptionThrower(0xBA);
115
- TEST_FAIL_MESSAGE("Should Have Thrown An Exception");
116
- }
117
- Catch(e)
118
- {
119
- ID = e;
120
- }
121
-
122
- //verify that I can pass that value to something else
123
- TEST_ASSERT_EQUAL(0xBA, e);
124
- //verify that ID and e have the same value
125
- TEST_ASSERT_EQUAL(ID, e);
126
- }
127
-
128
- void HappyExceptionRethrower(unsigned int ID)
129
- {
130
- CEXCEPTION_T e;
131
-
132
- Try
133
- {
134
- Throw(ID);
135
- }
136
- Catch(e)
137
- {
138
- switch (e)
139
- {
140
- case 0xBD:
141
- Throw(0xBF);
142
- break;
143
- default:
144
- break;
145
- }
146
- }
147
- }
148
-
149
- void test_ThrowAndCatchFromASubFunctionAndRethrowToCatchInRootFunc(void)
150
- {
151
- volatile unsigned int ID = 0;
152
- CEXCEPTION_T e;
153
-
154
- Try
155
- {
156
- HappyExceptionRethrower(0xBD);
157
- TEST_FAIL_MESSAGE("Should Have Rethrown Exception");
158
- }
159
- Catch(e)
160
- {
161
- ID = 1;
162
- }
163
-
164
- TEST_ASSERT_EQUAL(0xBF, e);
165
- TEST_ASSERT_EQUAL(1, ID);
166
- }
167
-
168
- void test_ThrowAndCatchFromASubFunctionAndNoRethrowToCatchInRootFunc(void)
169
- {
170
- CEXCEPTION_T e = 3;
171
-
172
- Try
173
- {
174
- HappyExceptionRethrower(0xBF);
175
- }
176
- Catch(e)
177
- {
178
- TEST_FAIL_MESSAGE("Should Not Have Re-thrown Error (it should have already been caught)");
179
- }
180
-
181
- //verify that THIS e is still untouched, even though subfunction was touched
182
- TEST_ASSERT_EQUAL(3, e);
183
- }
184
-
185
- void test_ThrowAnErrorThenEnterATryBlockFromWithinCatch_VerifyThisDoesntCorruptExceptionId(void)
186
- {
187
- CEXCEPTION_T e;
188
-
189
- Try
190
- {
191
- HappyExceptionThrower(0xBF);
192
- TEST_FAIL_MESSAGE("Should Have Thrown Exception");
193
- }
194
- Catch(e)
195
- {
196
- TEST_ASSERT_EQUAL(0xBF, e);
197
- HappyExceptionRethrower(0x12);
198
- TEST_ASSERT_EQUAL(0xBF, e);
199
- }
200
- TEST_ASSERT_EQUAL(0xBF, e);
201
- }
202
-
203
- void test_ThrowAnErrorThenEnterATryBlockFromWithinCatch_VerifyThatEachExceptionIdIndependent(void)
204
- {
205
- CEXCEPTION_T e1, e2;
206
-
207
- Try
208
- {
209
- HappyExceptionThrower(0xBF);
210
- TEST_FAIL_MESSAGE("Should Have Thrown Exception");
211
- }
212
- Catch(e1)
213
- {
214
- TEST_ASSERT_EQUAL(0xBF, e1);
215
- Try
216
- {
217
- HappyExceptionThrower(0x12);
218
- }
219
- Catch(e2)
220
- {
221
- TEST_ASSERT_EQUAL(0x12, e2);
222
- }
223
- TEST_ASSERT_EQUAL(0x12, e2);
224
- TEST_ASSERT_EQUAL(0xBF, e1);
225
- }
226
- TEST_ASSERT_EQUAL(0x12, e2);
227
- TEST_ASSERT_EQUAL(0xBF, e1);
228
- }
229
-
230
- void test_CanHaveMultipleTryBlocksInASingleFunction(void)
231
- {
232
- CEXCEPTION_T e;
233
-
234
- Try
235
- {
236
- HappyExceptionThrower(0x01);
237
- TEST_FAIL_MESSAGE("Should Have Thrown Exception");
238
- }
239
- Catch(e)
240
- {
241
- TEST_ASSERT_EQUAL(0x01, e);
242
- }
243
-
244
- Try
245
- {
246
- HappyExceptionThrower(0xF0);
247
- TEST_FAIL_MESSAGE("Should Have Thrown Exception");
248
- }
249
- Catch(e)
250
- {
251
- TEST_ASSERT_EQUAL(0xF0, e);
252
- }
253
- }
254
-
255
- void test_CanHaveNestedTryBlocksInASingleFunction_ThrowInside(void)
256
- {
257
- int i = 0;
258
- CEXCEPTION_T e;
259
-
260
- Try
261
- {
262
- Try
263
- {
264
- HappyExceptionThrower(0x01);
265
- i = 1;
266
- TEST_FAIL_MESSAGE("Should Have Rethrown Exception");
267
- }
268
- Catch(e)
269
- {
270
- TEST_ASSERT_EQUAL(0x01, e);
271
- }
272
- }
273
- Catch(e)
274
- {
275
- TEST_FAIL_MESSAGE("Should Have Been Caught By Inside Catch");
276
- }
277
-
278
- // verify that i is still zero
279
- TEST_ASSERT_EQUAL(0, i);
280
- }
281
-
282
- void test_CanHaveNestedTryBlocksInASingleFunction_ThrowOutside(void)
283
- {
284
- int i = 0;
285
- CEXCEPTION_T e;
286
-
287
- Try
288
- {
289
- Try
290
- {
291
- i = 2;
292
- }
293
- Catch(e)
294
- {
295
- TEST_FAIL_MESSAGE("Should NotBe Caught Here");
296
- }
297
- HappyExceptionThrower(0x01);
298
- TEST_FAIL_MESSAGE("Should Have Rethrown Exception");
299
- }
300
- Catch(e)
301
- {
302
- TEST_ASSERT_EQUAL(0x01, e);
303
- }
304
-
305
- // verify that i is 2
306
- TEST_ASSERT_EQUAL(2, i);
307
- }
308
-
309
- void test_AThrowWithoutATryCatchWillUseDefaultHandlerIfSpecified(void)
310
- {
311
- //Let the fallback handler know we're expecting it to get called this time, so don't fail
312
- TestingTheFallback = 1;
313
-
314
- Throw(0xBE);
315
-
316
- //We know the fallback was run because it decrements the counter above
317
- TEST_ASSERT_FALSE(TestingTheFallback);
318
- TEST_ASSERT_EQUAL(0xBE, TestingTheFallbackId);
319
- }
320
-
321
- void test_AThrowWithoutOutsideATryCatchWillUseDefaultHandlerEvenAfterTryCatch(void)
322
- {
323
- CEXCEPTION_T e;
324
-
325
- Try
326
- {
327
- //It's not really important that we do anything here.
328
- }
329
- Catch(e)
330
- {
331
- //The entire purpose here is just to make sure things get set back to using the default handler when done
332
- }
333
-
334
- //Let the fallback handler know we're expecting it to get called this time, so don't fail
335
- TestingTheFallback = 1;
336
-
337
- Throw(0xBE);
338
-
339
- //We know the fallback was run because it decrements the counter above
340
- TEST_ASSERT_FALSE(TestingTheFallback);
341
- TEST_ASSERT_EQUAL(0xBE, TestingTheFallbackId);
342
- }
1
+ #include "unity.h"
2
+ #include "CException.h"
3
+
4
+ volatile int TestingTheFallback;
5
+ volatile int TestingTheFallbackId;
6
+
7
+ void setUp(void)
8
+ {
9
+ CExceptionFrames[0].pFrame = NULL;
10
+ TestingTheFallback = 0;
11
+ }
12
+
13
+ void tearDown(void)
14
+ {
15
+ }
16
+
17
+ void test_BasicTryDoesNothingIfNoThrow(void)
18
+ {
19
+ int i = 0;
20
+ CEXCEPTION_T e = 0x5a;
21
+
22
+ Try
23
+ {
24
+ i += 1;
25
+ }
26
+ Catch(e)
27
+ {
28
+ TEST_FAIL_MESSAGE("Should Not Enter Catch If Not Thrown");
29
+ }
30
+
31
+ //verify that e was untouched
32
+ TEST_ASSERT_EQUAL(0x5a, e);
33
+
34
+ // verify that i was incremented once
35
+ TEST_ASSERT_EQUAL(1, i);
36
+ }
37
+
38
+ void test_BasicThrowAndCatch(void)
39
+ {
40
+ CEXCEPTION_T e;
41
+
42
+ Try
43
+ {
44
+ Throw(0xBE);
45
+ TEST_FAIL_MESSAGE("Should Have Thrown An Error");
46
+ }
47
+ Catch(e)
48
+ {
49
+ //verify that e has the right data
50
+ TEST_ASSERT_EQUAL(0xBE, e);
51
+ }
52
+
53
+ //verify that e STILL has the right data
54
+ TEST_ASSERT_EQUAL(0xBE, e);
55
+ }
56
+
57
+ void test_BasicThrowAndCatch_WithMiniSyntax(void)
58
+ {
59
+ CEXCEPTION_T e;
60
+
61
+ //Mini Throw and Catch
62
+ Try
63
+ Throw(0xEF);
64
+ Catch(e)
65
+ TEST_ASSERT_EQUAL(0xEF, e);
66
+ TEST_ASSERT_EQUAL(0xEF, e);
67
+
68
+ //Mini Passthrough
69
+ Try
70
+ e = 0;
71
+ Catch(e)
72
+ TEST_FAIL_MESSAGE("I shouldn't be caught because there was no throw");
73
+
74
+ TEST_ASSERT_EQUAL(0, e);
75
+ }
76
+
77
+ void test_VerifyVolatilesSurviveThrowAndCatch(void)
78
+ {
79
+ volatile unsigned int VolVal = 0;
80
+ CEXCEPTION_T e;
81
+
82
+ Try
83
+ {
84
+ VolVal = 2;
85
+ Throw(0xBF);
86
+ TEST_FAIL_MESSAGE("Should Have Thrown An Error");
87
+ }
88
+ Catch(e)
89
+ {
90
+ VolVal += 2;
91
+ TEST_ASSERT_EQUAL(0xBF, e);
92
+ }
93
+
94
+ TEST_ASSERT_EQUAL(4, VolVal);
95
+ TEST_ASSERT_EQUAL(0xBF, e);
96
+ }
97
+
98
+ void HappyExceptionThrower(unsigned int ID)
99
+ {
100
+ if (ID != 0)
101
+ {
102
+ Throw(ID);
103
+ }
104
+ }
105
+
106
+ void test_ThrowFromASubFunctionAndCatchInRootFunc(void)
107
+ {
108
+ volatile unsigned int ID = 0;
109
+ CEXCEPTION_T e;
110
+
111
+ Try
112
+ {
113
+
114
+ HappyExceptionThrower(0xBA);
115
+ TEST_FAIL_MESSAGE("Should Have Thrown An Exception");
116
+ }
117
+ Catch(e)
118
+ {
119
+ ID = e;
120
+ }
121
+
122
+ //verify that I can pass that value to something else
123
+ TEST_ASSERT_EQUAL(0xBA, e);
124
+ //verify that ID and e have the same value
125
+ TEST_ASSERT_EQUAL(ID, e);
126
+ }
127
+
128
+ void HappyExceptionRethrower(unsigned int ID)
129
+ {
130
+ CEXCEPTION_T e;
131
+
132
+ Try
133
+ {
134
+ Throw(ID);
135
+ }
136
+ Catch(e)
137
+ {
138
+ switch (e)
139
+ {
140
+ case 0xBD:
141
+ Throw(0xBF);
142
+ break;
143
+ default:
144
+ break;
145
+ }
146
+ }
147
+ }
148
+
149
+ void test_ThrowAndCatchFromASubFunctionAndRethrowToCatchInRootFunc(void)
150
+ {
151
+ volatile unsigned int ID = 0;
152
+ CEXCEPTION_T e;
153
+
154
+ Try
155
+ {
156
+ HappyExceptionRethrower(0xBD);
157
+ TEST_FAIL_MESSAGE("Should Have Rethrown Exception");
158
+ }
159
+ Catch(e)
160
+ {
161
+ ID = 1;
162
+ }
163
+
164
+ TEST_ASSERT_EQUAL(0xBF, e);
165
+ TEST_ASSERT_EQUAL(1, ID);
166
+ }
167
+
168
+ void test_ThrowAndCatchFromASubFunctionAndNoRethrowToCatchInRootFunc(void)
169
+ {
170
+ CEXCEPTION_T e = 3;
171
+
172
+ Try
173
+ {
174
+ HappyExceptionRethrower(0xBF);
175
+ }
176
+ Catch(e)
177
+ {
178
+ TEST_FAIL_MESSAGE("Should Not Have Re-thrown Error (it should have already been caught)");
179
+ }
180
+
181
+ //verify that THIS e is still untouched, even though subfunction was touched
182
+ TEST_ASSERT_EQUAL(3, e);
183
+ }
184
+
185
+ void test_ThrowAnErrorThenEnterATryBlockFromWithinCatch_VerifyThisDoesntCorruptExceptionId(void)
186
+ {
187
+ CEXCEPTION_T e;
188
+
189
+ Try
190
+ {
191
+ HappyExceptionThrower(0xBF);
192
+ TEST_FAIL_MESSAGE("Should Have Thrown Exception");
193
+ }
194
+ Catch(e)
195
+ {
196
+ TEST_ASSERT_EQUAL(0xBF, e);
197
+ HappyExceptionRethrower(0x12);
198
+ TEST_ASSERT_EQUAL(0xBF, e);
199
+ }
200
+ TEST_ASSERT_EQUAL(0xBF, e);
201
+ }
202
+
203
+ void test_ThrowAnErrorThenEnterATryBlockFromWithinCatch_VerifyThatEachExceptionIdIndependent(void)
204
+ {
205
+ CEXCEPTION_T e1, e2;
206
+
207
+ Try
208
+ {
209
+ HappyExceptionThrower(0xBF);
210
+ TEST_FAIL_MESSAGE("Should Have Thrown Exception");
211
+ }
212
+ Catch(e1)
213
+ {
214
+ TEST_ASSERT_EQUAL(0xBF, e1);
215
+ Try
216
+ {
217
+ HappyExceptionThrower(0x12);
218
+ }
219
+ Catch(e2)
220
+ {
221
+ TEST_ASSERT_EQUAL(0x12, e2);
222
+ }
223
+ TEST_ASSERT_EQUAL(0x12, e2);
224
+ TEST_ASSERT_EQUAL(0xBF, e1);
225
+ }
226
+ TEST_ASSERT_EQUAL(0x12, e2);
227
+ TEST_ASSERT_EQUAL(0xBF, e1);
228
+ }
229
+
230
+ void test_CanHaveMultipleTryBlocksInASingleFunction(void)
231
+ {
232
+ CEXCEPTION_T e;
233
+
234
+ Try
235
+ {
236
+ HappyExceptionThrower(0x01);
237
+ TEST_FAIL_MESSAGE("Should Have Thrown Exception");
238
+ }
239
+ Catch(e)
240
+ {
241
+ TEST_ASSERT_EQUAL(0x01, e);
242
+ }
243
+
244
+ Try
245
+ {
246
+ HappyExceptionThrower(0xF0);
247
+ TEST_FAIL_MESSAGE("Should Have Thrown Exception");
248
+ }
249
+ Catch(e)
250
+ {
251
+ TEST_ASSERT_EQUAL(0xF0, e);
252
+ }
253
+ }
254
+
255
+ void test_CanHaveNestedTryBlocksInASingleFunction_ThrowInside(void)
256
+ {
257
+ int i = 0;
258
+ CEXCEPTION_T e;
259
+
260
+ Try
261
+ {
262
+ Try
263
+ {
264
+ HappyExceptionThrower(0x01);
265
+ i = 1;
266
+ TEST_FAIL_MESSAGE("Should Have Rethrown Exception");
267
+ }
268
+ Catch(e)
269
+ {
270
+ TEST_ASSERT_EQUAL(0x01, e);
271
+ }
272
+ }
273
+ Catch(e)
274
+ {
275
+ TEST_FAIL_MESSAGE("Should Have Been Caught By Inside Catch");
276
+ }
277
+
278
+ // verify that i is still zero
279
+ TEST_ASSERT_EQUAL(0, i);
280
+ }
281
+
282
+ void test_CanHaveNestedTryBlocksInASingleFunction_ThrowOutside(void)
283
+ {
284
+ int i = 0;
285
+ CEXCEPTION_T e;
286
+
287
+ Try
288
+ {
289
+ Try
290
+ {
291
+ i = 2;
292
+ }
293
+ Catch(e)
294
+ {
295
+ TEST_FAIL_MESSAGE("Should Not Be Caught Here");
296
+ }
297
+ HappyExceptionThrower(0x01);
298
+ TEST_FAIL_MESSAGE("Should Have Rethrown Exception");
299
+ }
300
+ Catch(e)
301
+ {
302
+ TEST_ASSERT_EQUAL(0x01, e);
303
+ }
304
+
305
+ // verify that i is 2
306
+ TEST_ASSERT_EQUAL(2, i);
307
+ }
308
+
309
+ void test_AThrowWithoutATryCatchWillUseDefaultHandlerIfSpecified(void)
310
+ {
311
+ //Let the fallback handler know we're expecting it to get called this time, so don't fail
312
+ TestingTheFallback = 1;
313
+
314
+ Throw(0xBE);
315
+
316
+ //We know the fallback was run because it decrements the counter above
317
+ TEST_ASSERT_FALSE(TestingTheFallback);
318
+ TEST_ASSERT_EQUAL(0xBE, TestingTheFallbackId);
319
+ }
320
+
321
+ void test_AThrowWithoutOutsideATryCatchWillUseDefaultHandlerEvenAfterTryCatch(void)
322
+ {
323
+ CEXCEPTION_T e;
324
+
325
+ Try
326
+ {
327
+ //It's not really important that we do anything here.
328
+ }
329
+ Catch(e)
330
+ {
331
+ //The entire purpose here is just to make sure things get set back to using the default handler when done
332
+ }
333
+
334
+ //Let the fallback handler know we're expecting it to get called this time, so don't fail
335
+ TestingTheFallback = 1;
336
+
337
+ Throw(0xBE);
338
+
339
+ //We know the fallback was run because it decrements the counter above
340
+ TEST_ASSERT_FALSE(TestingTheFallback);
341
+ TEST_ASSERT_EQUAL(0xBE, TestingTheFallbackId);
342
+ }
343
+
344
+ void test_AbilityToExitTryWithoutThrowingAnError(void)
345
+ {
346
+ int i=0;
347
+ CEXCEPTION_T e;
348
+
349
+ Try
350
+ {
351
+ ExitTry();
352
+ i = 1;
353
+ TEST_FAIL_MESSAGE("Should Have Exited Try Before This");
354
+ }
355
+ Catch(e)
356
+ {
357
+ i = 2;
358
+ TEST_FAIL_MESSAGE("Should Not Have Been Caught");
359
+ }
360
+
361
+ // verify that i is still zero
362
+ TEST_ASSERT_EQUAL(0, i);
363
+ }
364
+
365
+ void test_AbilityToExitTryWillOnlyExitOneLevel(void)
366
+ {
367
+ int i=0;
368
+ CEXCEPTION_T e;
369
+ CEXCEPTION_T e2;
370
+
371
+ Try
372
+ {
373
+ Try
374
+ {
375
+ ExitTry();
376
+ TEST_FAIL_MESSAGE("Should Have Exited Try Before This");
377
+ }
378
+ Catch(e)
379
+ {
380
+ TEST_FAIL_MESSAGE("Should Not Have Been Caught By Inside");
381
+ }
382
+ i = 1;
383
+ }
384
+ Catch(e2)
385
+ {
386
+ TEST_FAIL_MESSAGE("Should Not Have Been Caught By Outside");
387
+ }
388
+
389
+ // verify that we picked up and ran after first Try
390
+ TEST_ASSERT_EQUAL(1, i);
391
+ }