ceedling 0.25.0 → 0.27.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (434) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/assets/project_as_gem.yml +13 -0
  4. data/assets/project_with_guts.yml +13 -0
  5. data/bin/ceedling +91 -67
  6. data/docs/CeedlingPacket.md +61 -23
  7. data/docs/CeedlingPacket.odt +0 -0
  8. data/docs/CeedlingPacket.pdf +0 -0
  9. data/docs/ThrowTheSwitchCodingStandard.md +207 -0
  10. data/examples/temp_sensor/test/TestTemperatureCalculator.c +4 -1
  11. data/lib/ceedling/configurator.rb +14 -1
  12. data/lib/ceedling/configurator_builder.rb +2 -1
  13. data/lib/ceedling/configurator_validator.rb +12 -3
  14. data/lib/ceedling/constants.rb +3 -1
  15. data/lib/ceedling/defaults.rb +12 -1
  16. data/lib/ceedling/file_finder.rb +3 -0
  17. data/lib/ceedling/file_path_utils.rb +1 -1
  18. data/lib/ceedling/file_wrapper.rb +4 -4
  19. data/lib/ceedling/generator.rb +12 -3
  20. data/lib/ceedling/preprocessinator_helper.rb +5 -5
  21. data/lib/ceedling/preprocessinator_includes_handler.rb +10 -1
  22. data/lib/ceedling/project_config_manager.rb +1 -2
  23. data/lib/ceedling/project_file_loader.rb +27 -9
  24. data/lib/ceedling/rakefile.rb +6 -6
  25. data/lib/ceedling/release_invoker.rb +21 -6
  26. data/lib/ceedling/rules_release.rake +9 -5
  27. data/lib/ceedling/rules_tests.rake +6 -1
  28. data/lib/ceedling/setupinator.rb +1 -0
  29. data/lib/ceedling/tasks_base.rake +3 -0
  30. data/lib/ceedling/tasks_filesystem.rake +10 -7
  31. data/lib/ceedling/tasks_release.rake +3 -1
  32. data/lib/ceedling/test_includes_extractor.rb +16 -12
  33. data/lib/ceedling/test_invoker.rb +40 -0
  34. data/lib/ceedling/version.rb +3 -3
  35. data/lib/ceedling/version.rb.erb +1 -1
  36. data/plugins/command_hooks/lib/command_hooks.rb +1 -1
  37. data/plugins/fake_function_framework/examples/fff_example/src/bar.h +1 -0
  38. data/plugins/fake_function_framework/examples/fff_example/src/event_processor.c +1 -0
  39. data/plugins/fake_function_framework/lib/fff_mock_generator.rb +4 -0
  40. data/plugins/fake_function_framework/spec/{fff_mock_generator_spec.rb → fff_mock_header_generator_spec.rb} +34 -194
  41. data/plugins/fake_function_framework/spec/fff_mock_source_generator_spec.rb +149 -0
  42. data/plugins/fake_function_framework/spec/header_generator.rb +51 -0
  43. data/plugins/junit_tests_report/lib/junit_tests_report.rb +115 -0
  44. data/plugins/subprojects/README.md +63 -0
  45. data/plugins/subprojects/config/defaults.yml +33 -0
  46. data/plugins/subprojects/lib/subprojects.rb +92 -0
  47. data/plugins/subprojects/subprojects.rake +78 -0
  48. data/spec/preprocessinator_includes_handler_spec.rb +15 -5
  49. data/spec/spec_helper.rb +2 -2
  50. data/spec/spec_system_helper.rb +49 -1
  51. data/spec/system/deployment_spec.rb +29 -0
  52. data/vendor/c_exception/README.md +8 -2
  53. data/vendor/c_exception/docs/{readme.txt → CException.md} +133 -102
  54. data/vendor/c_exception/docs/ThrowTheSwitchCodingStandard.md +207 -0
  55. data/vendor/c_exception/vendor/unity/README.md +19 -10
  56. data/vendor/c_exception/vendor/unity/auto/colour_prompt.rb +67 -64
  57. data/vendor/c_exception/vendor/unity/auto/colour_reporter.rb +20 -20
  58. data/vendor/c_exception/vendor/unity/auto/generate_module.rb +149 -142
  59. data/vendor/c_exception/vendor/unity/auto/generate_test_runner.rb +234 -232
  60. data/vendor/c_exception/vendor/unity/auto/parse_output.rb +220 -0
  61. data/vendor/c_exception/vendor/unity/auto/stylize_as_junit.rb +108 -120
  62. data/vendor/c_exception/vendor/unity/auto/test_file_filter.rb +11 -9
  63. data/vendor/c_exception/vendor/unity/auto/type_sanitizer.rb +1 -3
  64. data/vendor/c_exception/vendor/unity/auto/unity_test_summary.py +6 -2
  65. data/vendor/c_exception/vendor/unity/auto/unity_test_summary.rb +45 -57
  66. data/vendor/c_exception/vendor/unity/docs/ThrowTheSwitchCodingStandard.md +207 -0
  67. data/vendor/c_exception/vendor/unity/docs/UnityAssertionsCheatSheetSuitableforPrintingandPossiblyFraming.pdf +0 -0
  68. data/vendor/c_exception/vendor/unity/docs/UnityAssertionsReference.md +716 -0
  69. data/vendor/c_exception/vendor/unity/docs/UnityConfigurationGuide.md +398 -0
  70. data/vendor/c_exception/vendor/unity/docs/UnityGettingStartedGuide.md +191 -0
  71. data/vendor/c_exception/vendor/unity/docs/UnityHelperScriptsGuide.md +242 -0
  72. data/vendor/c_exception/vendor/unity/examples/example_1/makefile +22 -17
  73. data/vendor/c_exception/vendor/unity/examples/example_1/test/test_runners/TestProductionCode2_Runner.c +1 -1
  74. data/vendor/c_exception/vendor/unity/examples/example_1/test/test_runners/TestProductionCode_Runner.c +1 -1
  75. data/vendor/c_exception/vendor/unity/examples/example_2/makefile +16 -17
  76. data/vendor/c_exception/vendor/unity/examples/example_3/rakefile.rb +15 -15
  77. data/vendor/c_exception/vendor/unity/examples/example_3/rakefile_helper.rb +93 -100
  78. data/vendor/c_exception/vendor/unity/examples/example_3/readme.txt +4 -10
  79. data/vendor/c_exception/vendor/unity/examples/unity_config.h +14 -26
  80. data/vendor/c_exception/vendor/unity/extras/fixture/rakefile.rb +12 -12
  81. data/vendor/c_exception/vendor/unity/extras/fixture/rakefile_helper.rb +87 -88
  82. data/vendor/c_exception/vendor/unity/extras/fixture/src/unity_fixture.c +15 -8
  83. data/vendor/c_exception/vendor/unity/extras/fixture/src/unity_fixture.h +6 -1
  84. data/vendor/c_exception/vendor/unity/extras/fixture/src/unity_fixture_internals.h +3 -0
  85. data/vendor/c_exception/vendor/unity/extras/fixture/src/unity_fixture_malloc_overrides.h +1 -0
  86. data/vendor/c_exception/vendor/unity/extras/fixture/test/unity_fixture_Test.c +1 -1
  87. data/vendor/c_exception/vendor/unity/src/unity.c +396 -330
  88. data/vendor/c_exception/vendor/unity/src/unity.h +50 -4
  89. data/vendor/c_exception/vendor/unity/src/unity_internals.h +119 -84
  90. data/vendor/c_exception/vendor/unity/test/Makefile +17 -17
  91. data/vendor/c_exception/vendor/unity/test/rakefile +63 -3
  92. data/vendor/c_exception/vendor/unity/test/rakefile_helper.rb +108 -105
  93. data/vendor/c_exception/vendor/unity/test/spec/generate_module_existing_file_spec.rb +158 -0
  94. data/vendor/c_exception/vendor/unity/test/targets/clang_file.yml +0 -6
  95. data/vendor/c_exception/vendor/unity/test/targets/clang_strict.yml +1 -9
  96. data/vendor/c_exception/vendor/unity/test/testdata/testRunnerGeneratorSmall.c +2 -0
  97. data/vendor/c_exception/vendor/unity/test/testdata/testRunnerGeneratorWithMocks.c +2 -2
  98. data/vendor/c_exception/vendor/unity/test/tests/test_generate_test_runner.rb +5 -5
  99. data/vendor/c_exception/vendor/unity/test/tests/testunity.c +1338 -151
  100. data/vendor/cmock/README.md +10 -1
  101. data/vendor/cmock/config/test_environment.rb +7 -7
  102. data/vendor/cmock/docs/CMock_Summary.md +325 -128
  103. data/vendor/cmock/docs/ThrowTheSwitchCodingStandard.md +207 -0
  104. data/vendor/cmock/examples/make_example/Makefile +2 -2
  105. data/vendor/cmock/examples/temp_sensor/gcc.yml +5 -4
  106. data/vendor/cmock/examples/temp_sensor/iar_v4.yml +5 -4
  107. data/vendor/cmock/examples/temp_sensor/iar_v5.yml +5 -4
  108. data/vendor/cmock/examples/temp_sensor/rakefile.rb +11 -1
  109. data/vendor/cmock/examples/temp_sensor/rakefile_helper.rb +12 -10
  110. data/vendor/cmock/lib/cmock.rb +0 -3
  111. data/vendor/cmock/lib/cmock_generator_plugin_callback.rb +6 -2
  112. data/vendor/cmock/lib/cmock_generator_plugin_return_thru_ptr.rb +2 -1
  113. data/vendor/cmock/lib/cmock_header_parser.rb +5 -6
  114. data/vendor/cmock/release/version.info +1 -1
  115. data/vendor/cmock/scripts/create_makefile.rb +4 -2
  116. data/vendor/cmock/scripts/test_summary.rb +17 -9
  117. data/vendor/cmock/src/cmock.c +1 -0
  118. data/vendor/cmock/src/cmock.h +1 -1
  119. data/vendor/cmock/src/cmock_internals.h +14 -1
  120. data/vendor/cmock/test/c/TestCMockC.yml +4 -4
  121. data/vendor/cmock/test/c/TestCMockCDynamic.yml +4 -4
  122. data/vendor/cmock/{iar → test/iar}/iar_v4/Resource/SAM7_FLASH.mac +0 -0
  123. data/vendor/cmock/{iar → test/iar}/iar_v4/Resource/SAM7_RAM.mac +0 -0
  124. data/vendor/cmock/{iar → test/iar}/iar_v4/Resource/SAM7_SIM.mac +0 -0
  125. data/vendor/cmock/{iar → test/iar}/iar_v4/Resource/at91SAM7X256_FLASH.xcl +0 -0
  126. data/vendor/cmock/{iar → test/iar}/iar_v4/Resource/at91SAM7X256_RAM.xcl +0 -0
  127. data/vendor/cmock/{iar → test/iar}/iar_v4/Resource/ioat91sam7x256.ddf +0 -0
  128. data/vendor/cmock/{iar → test/iar}/iar_v4/cmock_demo.dep +0 -0
  129. data/vendor/cmock/{iar → test/iar}/iar_v4/cmock_demo.ewd +0 -0
  130. data/vendor/cmock/{iar → test/iar}/iar_v4/cmock_demo.ewp +0 -0
  131. data/vendor/cmock/{iar → test/iar}/iar_v4/cmock_demo.eww +0 -0
  132. data/vendor/cmock/{iar → test/iar}/iar_v4/incIAR/AT91SAM7X-EK.h +0 -0
  133. data/vendor/cmock/{iar → test/iar}/iar_v4/incIAR/AT91SAM7X256.inc +0 -0
  134. data/vendor/cmock/{iar → test/iar}/iar_v4/incIAR/AT91SAM7X256.rdf +0 -0
  135. data/vendor/cmock/{iar → test/iar}/iar_v4/incIAR/AT91SAM7X256.tcl +0 -0
  136. data/vendor/cmock/{iar → test/iar}/iar_v4/incIAR/AT91SAM7X256_inc.h +0 -0
  137. data/vendor/cmock/{iar → test/iar}/iar_v4/incIAR/ioat91sam7x256.h +0 -0
  138. data/vendor/cmock/{iar → test/iar}/iar_v4/incIAR/lib_AT91SAM7X256.h +0 -0
  139. data/vendor/cmock/{iar → test/iar}/iar_v4/settings/cmock_demo.cspy.bat +0 -0
  140. data/vendor/cmock/{iar → test/iar}/iar_v4/settings/cmock_demo.dbgdt +0 -0
  141. data/vendor/cmock/{iar → test/iar}/iar_v4/settings/cmock_demo.dni +0 -0
  142. data/vendor/cmock/{iar → test/iar}/iar_v4/settings/cmock_demo.wsdt +0 -0
  143. data/vendor/cmock/{iar → test/iar}/iar_v4/srcIAR/Cstartup.s79 +0 -0
  144. data/vendor/cmock/{iar → test/iar}/iar_v4/srcIAR/Cstartup_SAM7.c +0 -0
  145. data/vendor/cmock/{iar → test/iar}/iar_v5/Resource/SAM7_FLASH.mac +0 -0
  146. data/vendor/cmock/{iar → test/iar}/iar_v5/Resource/SAM7_RAM.mac +0 -0
  147. data/vendor/cmock/{iar → test/iar}/iar_v5/Resource/SAM7_SIM.mac +0 -0
  148. data/vendor/cmock/{iar → test/iar}/iar_v5/Resource/at91SAM7X256_FLASH.icf +0 -0
  149. data/vendor/cmock/{iar → test/iar}/iar_v5/Resource/at91SAM7X256_RAM.icf +0 -0
  150. data/vendor/cmock/{iar → test/iar}/iar_v5/cmock_demo.dep +0 -0
  151. data/vendor/cmock/{iar → test/iar}/iar_v5/cmock_demo.ewd +0 -0
  152. data/vendor/cmock/{iar → test/iar}/iar_v5/cmock_demo.ewp +0 -0
  153. data/vendor/cmock/{iar → test/iar}/iar_v5/cmock_demo.eww +0 -0
  154. data/vendor/cmock/{iar → test/iar}/iar_v5/incIAR/AT91SAM7X-EK.h +0 -0
  155. data/vendor/cmock/{iar → test/iar}/iar_v5/incIAR/AT91SAM7X256_inc.h +0 -0
  156. data/vendor/cmock/{iar → test/iar}/iar_v5/incIAR/lib_AT91SAM7X256.h +0 -0
  157. data/vendor/cmock/{iar → test/iar}/iar_v5/incIAR/project.h +0 -0
  158. data/vendor/cmock/{iar → test/iar}/iar_v5/settings/BasicInterrupt_SAM7X.cspy.bat +0 -0
  159. data/vendor/cmock/{iar → test/iar}/iar_v5/settings/BasicInterrupt_SAM7X.dbgdt +0 -0
  160. data/vendor/cmock/{iar → test/iar}/iar_v5/settings/BasicInterrupt_SAM7X.dni +0 -0
  161. data/vendor/cmock/{iar → test/iar}/iar_v5/settings/BasicInterrupt_SAM7X.wsdt +0 -0
  162. data/vendor/cmock/{iar → test/iar}/iar_v5/settings/BasicInterrupt_SAM7X_FLASH_Debug.jlink +0 -0
  163. data/vendor/cmock/{iar → test/iar}/iar_v5/settings/cmock_demo.cspy.bat +0 -0
  164. data/vendor/cmock/{iar → test/iar}/iar_v5/settings/cmock_demo.dbgdt +0 -0
  165. data/vendor/cmock/{iar → test/iar}/iar_v5/settings/cmock_demo.dni +0 -0
  166. data/vendor/cmock/{iar → test/iar}/iar_v5/settings/cmock_demo.wsdt +0 -0
  167. data/vendor/cmock/{iar → test/iar}/iar_v5/settings/cmock_demo_Binary.jlink +0 -0
  168. data/vendor/cmock/{iar → test/iar}/iar_v5/settings/cmock_demo_FLASH_Debug.jlink +0 -0
  169. data/vendor/cmock/{iar → test/iar}/iar_v5/settings/cmock_demo_RAM_Debug.jlink +0 -0
  170. data/vendor/cmock/{iar → test/iar}/iar_v5/srcIAR/Cstartup.s +0 -0
  171. data/vendor/cmock/{iar → test/iar}/iar_v5/srcIAR/Cstartup_SAM7.c +0 -0
  172. data/vendor/cmock/{Rakefile → test/rakefile} +9 -9
  173. data/vendor/cmock/{rakefile_helper.rb → test/rakefile_helper.rb} +13 -13
  174. data/vendor/cmock/test/system/test_compilation/config.yml +4 -4
  175. data/vendor/cmock/test/system/test_interactions/parsing_challenges.yml +2 -0
  176. data/vendor/cmock/{targets → test/targets}/clang_strict.yml +11 -11
  177. data/vendor/cmock/{targets → test/targets}/gcc.yml +9 -9
  178. data/vendor/cmock/{targets → test/targets}/gcc_64.yml +9 -9
  179. data/vendor/cmock/{targets → test/targets}/gcc_tiny.yml +9 -9
  180. data/vendor/cmock/{targets → test/targets}/iar_arm_v4.yml +9 -9
  181. data/vendor/cmock/{targets → test/targets}/iar_arm_v5.yml +10 -10
  182. data/vendor/cmock/test/test_helper.rb +4 -8
  183. data/vendor/cmock/test/unit/cmock_config_test.rb +1 -1
  184. data/vendor/cmock/test/unit/cmock_file_writer_test.rb +1 -1
  185. data/vendor/cmock/test/unit/cmock_generator_main_test.rb +1 -1
  186. data/vendor/cmock/test/unit/cmock_generator_plugin_array_test.rb +1 -1
  187. data/vendor/cmock/test/unit/cmock_generator_plugin_callback_test.rb +3 -1
  188. data/vendor/cmock/test/unit/cmock_generator_plugin_cexception_test.rb +1 -1
  189. data/vendor/cmock/test/unit/cmock_generator_plugin_expect_a_test.rb +1 -1
  190. data/vendor/cmock/test/unit/cmock_generator_plugin_expect_any_args_test.rb +1 -1
  191. data/vendor/cmock/test/unit/cmock_generator_plugin_expect_b_test.rb +1 -1
  192. data/vendor/cmock/test/unit/cmock_generator_plugin_ignore_arg_test.rb +1 -1
  193. data/vendor/cmock/test/unit/cmock_generator_plugin_ignore_test.rb +1 -1
  194. data/vendor/cmock/test/unit/cmock_generator_plugin_return_thru_ptr_test.rb +1 -1
  195. data/vendor/cmock/test/unit/cmock_generator_utils_test.rb +1 -1
  196. data/vendor/cmock/test/unit/cmock_header_parser_test.rb +15 -2
  197. data/vendor/cmock/test/unit/cmock_plugin_manager_test.rb +6 -10
  198. data/vendor/cmock/test/unit/cmock_unityhelper_parser_test.rb +1 -1
  199. data/vendor/cmock/vendor/c_exception/README.md +8 -2
  200. data/vendor/cmock/vendor/c_exception/docs/{readme.txt → CException.md} +133 -102
  201. data/vendor/cmock/vendor/c_exception/docs/ThrowTheSwitchCodingStandard.md +207 -0
  202. data/vendor/cmock/vendor/c_exception/vendor/unity/README.md +19 -10
  203. data/vendor/cmock/vendor/c_exception/vendor/unity/auto/colour_prompt.rb +67 -64
  204. data/vendor/cmock/vendor/c_exception/vendor/unity/auto/colour_reporter.rb +20 -20
  205. data/vendor/cmock/vendor/c_exception/vendor/unity/auto/generate_module.rb +149 -142
  206. data/vendor/cmock/vendor/c_exception/vendor/unity/auto/generate_test_runner.rb +234 -232
  207. data/vendor/cmock/vendor/c_exception/vendor/unity/auto/parse_output.rb +220 -0
  208. data/vendor/cmock/vendor/c_exception/vendor/unity/auto/stylize_as_junit.rb +108 -120
  209. data/vendor/cmock/vendor/c_exception/vendor/unity/auto/test_file_filter.rb +11 -9
  210. data/vendor/cmock/vendor/c_exception/vendor/unity/auto/type_sanitizer.rb +1 -3
  211. data/vendor/cmock/vendor/c_exception/vendor/unity/auto/unity_test_summary.py +6 -2
  212. data/vendor/cmock/vendor/c_exception/vendor/unity/auto/unity_test_summary.rb +45 -57
  213. data/vendor/cmock/vendor/c_exception/vendor/unity/docs/ThrowTheSwitchCodingStandard.md +207 -0
  214. data/vendor/cmock/vendor/c_exception/vendor/unity/docs/UnityAssertionsCheatSheetSuitableforPrintingandPossiblyFraming.pdf +0 -0
  215. data/vendor/cmock/vendor/c_exception/vendor/unity/docs/UnityAssertionsReference.md +716 -0
  216. data/vendor/cmock/vendor/c_exception/vendor/unity/docs/UnityConfigurationGuide.md +398 -0
  217. data/vendor/cmock/vendor/c_exception/vendor/unity/docs/UnityGettingStartedGuide.md +191 -0
  218. data/vendor/cmock/vendor/c_exception/vendor/unity/docs/UnityHelperScriptsGuide.md +242 -0
  219. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_1/makefile +22 -17
  220. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_1/test/test_runners/TestProductionCode2_Runner.c +1 -1
  221. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_1/test/test_runners/TestProductionCode_Runner.c +1 -1
  222. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_2/makefile +16 -17
  223. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_3/rakefile.rb +15 -15
  224. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_3/rakefile_helper.rb +93 -100
  225. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/example_3/readme.txt +4 -10
  226. data/vendor/cmock/vendor/c_exception/vendor/unity/examples/unity_config.h +14 -26
  227. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/rakefile.rb +12 -12
  228. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/rakefile_helper.rb +87 -88
  229. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/src/unity_fixture.c +15 -8
  230. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/src/unity_fixture.h +6 -1
  231. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/src/unity_fixture_internals.h +3 -0
  232. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/src/unity_fixture_malloc_overrides.h +1 -0
  233. data/vendor/cmock/vendor/c_exception/vendor/unity/extras/fixture/test/unity_fixture_Test.c +1 -1
  234. data/vendor/cmock/vendor/c_exception/vendor/unity/src/unity.c +396 -330
  235. data/vendor/cmock/vendor/c_exception/vendor/unity/src/unity.h +50 -4
  236. data/vendor/cmock/vendor/c_exception/vendor/unity/src/unity_internals.h +119 -84
  237. data/vendor/cmock/vendor/c_exception/vendor/unity/test/Makefile +17 -17
  238. data/vendor/cmock/vendor/c_exception/vendor/unity/test/rakefile +63 -3
  239. data/vendor/cmock/vendor/c_exception/vendor/unity/test/rakefile_helper.rb +108 -105
  240. data/vendor/cmock/vendor/c_exception/vendor/unity/test/spec/generate_module_existing_file_spec.rb +158 -0
  241. data/vendor/cmock/vendor/c_exception/vendor/unity/test/targets/clang_file.yml +0 -6
  242. data/vendor/cmock/vendor/c_exception/vendor/unity/test/targets/clang_strict.yml +1 -9
  243. data/vendor/cmock/vendor/c_exception/vendor/unity/test/testdata/testRunnerGeneratorSmall.c +2 -0
  244. data/vendor/cmock/vendor/c_exception/vendor/unity/test/testdata/testRunnerGeneratorWithMocks.c +2 -2
  245. data/vendor/cmock/vendor/c_exception/vendor/unity/test/tests/test_generate_test_runner.rb +5 -5
  246. data/vendor/cmock/vendor/c_exception/vendor/unity/test/tests/testunity.c +1338 -151
  247. data/vendor/cmock/vendor/unity/README.md +19 -10
  248. data/vendor/cmock/vendor/unity/auto/colour_prompt.rb +67 -64
  249. data/vendor/cmock/vendor/unity/auto/colour_reporter.rb +20 -20
  250. data/vendor/cmock/vendor/unity/auto/generate_module.rb +149 -142
  251. data/vendor/cmock/vendor/unity/auto/generate_test_runner.rb +234 -232
  252. data/vendor/cmock/vendor/unity/auto/parse_output.rb +220 -0
  253. data/vendor/cmock/vendor/unity/auto/stylize_as_junit.rb +108 -120
  254. data/vendor/cmock/vendor/unity/auto/test_file_filter.rb +11 -9
  255. data/vendor/cmock/vendor/unity/auto/type_sanitizer.rb +1 -3
  256. data/vendor/cmock/vendor/unity/auto/unity_test_summary.py +6 -2
  257. data/vendor/cmock/vendor/unity/auto/unity_test_summary.rb +45 -57
  258. data/vendor/cmock/vendor/unity/docs/ThrowTheSwitchCodingStandard.md +207 -0
  259. data/vendor/cmock/vendor/unity/docs/UnityAssertionsCheatSheetSuitableforPrintingandPossiblyFraming.pdf +0 -0
  260. data/vendor/cmock/vendor/unity/docs/UnityAssertionsReference.md +716 -0
  261. data/vendor/cmock/vendor/unity/docs/UnityConfigurationGuide.md +398 -0
  262. data/vendor/cmock/vendor/unity/docs/UnityGettingStartedGuide.md +191 -0
  263. data/vendor/cmock/vendor/unity/docs/UnityHelperScriptsGuide.md +242 -0
  264. data/vendor/cmock/vendor/unity/examples/example_1/makefile +22 -17
  265. data/vendor/cmock/vendor/unity/examples/example_1/test/test_runners/TestProductionCode2_Runner.c +1 -1
  266. data/vendor/cmock/vendor/unity/examples/example_1/test/test_runners/TestProductionCode_Runner.c +1 -1
  267. data/vendor/cmock/vendor/unity/examples/example_2/makefile +16 -17
  268. data/vendor/cmock/vendor/unity/examples/example_3/rakefile.rb +15 -15
  269. data/vendor/cmock/vendor/unity/examples/example_3/rakefile_helper.rb +93 -100
  270. data/vendor/cmock/vendor/unity/examples/example_3/readme.txt +4 -10
  271. data/vendor/cmock/vendor/unity/examples/unity_config.h +14 -26
  272. data/vendor/cmock/vendor/unity/extras/fixture/rakefile.rb +12 -12
  273. data/vendor/cmock/vendor/unity/extras/fixture/rakefile_helper.rb +87 -88
  274. data/vendor/cmock/vendor/unity/extras/fixture/src/unity_fixture.c +15 -8
  275. data/vendor/cmock/vendor/unity/extras/fixture/src/unity_fixture.h +6 -1
  276. data/vendor/cmock/vendor/unity/extras/fixture/src/unity_fixture_internals.h +3 -0
  277. data/vendor/cmock/vendor/unity/extras/fixture/src/unity_fixture_malloc_overrides.h +1 -0
  278. data/vendor/cmock/vendor/unity/extras/fixture/test/unity_fixture_Test.c +1 -1
  279. data/vendor/cmock/vendor/unity/release/version.info +1 -1
  280. data/vendor/cmock/vendor/unity/src/unity.c +396 -330
  281. data/vendor/cmock/vendor/unity/src/unity.h +50 -4
  282. data/vendor/cmock/vendor/unity/src/unity_internals.h +119 -84
  283. data/vendor/cmock/vendor/unity/test/Makefile +17 -17
  284. data/vendor/cmock/vendor/unity/test/rakefile +63 -3
  285. data/vendor/cmock/vendor/unity/test/rakefile_helper.rb +108 -105
  286. data/vendor/cmock/vendor/unity/test/spec/generate_module_existing_file_spec.rb +158 -0
  287. data/vendor/cmock/vendor/unity/test/targets/clang_file.yml +0 -6
  288. data/vendor/cmock/vendor/unity/test/targets/clang_strict.yml +1 -9
  289. data/vendor/cmock/vendor/unity/test/testdata/testRunnerGeneratorSmall.c +2 -0
  290. data/vendor/cmock/vendor/unity/test/testdata/testRunnerGeneratorWithMocks.c +2 -2
  291. data/vendor/cmock/vendor/unity/test/tests/test_generate_test_runner.rb +5 -5
  292. data/vendor/cmock/vendor/unity/test/tests/testunity.c +1338 -151
  293. data/vendor/deep_merge/Rakefile +1 -1
  294. data/vendor/unity/README.md +19 -10
  295. data/vendor/unity/auto/colour_prompt.rb +67 -64
  296. data/vendor/unity/auto/colour_reporter.rb +20 -20
  297. data/vendor/unity/auto/generate_module.rb +149 -142
  298. data/vendor/unity/auto/generate_test_runner.rb +234 -232
  299. data/vendor/unity/auto/parse_output.rb +220 -0
  300. data/vendor/unity/auto/stylize_as_junit.rb +108 -120
  301. data/vendor/unity/auto/test_file_filter.rb +11 -9
  302. data/vendor/unity/auto/type_sanitizer.rb +1 -3
  303. data/vendor/unity/auto/unity_test_summary.py +6 -2
  304. data/vendor/unity/auto/unity_test_summary.rb +45 -57
  305. data/vendor/unity/docs/ThrowTheSwitchCodingStandard.md +207 -0
  306. data/vendor/unity/docs/UnityAssertionsCheatSheetSuitableforPrintingandPossiblyFraming.pdf +0 -0
  307. data/vendor/unity/docs/UnityAssertionsReference.md +716 -0
  308. data/vendor/unity/docs/UnityConfigurationGuide.md +398 -0
  309. data/vendor/unity/docs/UnityGettingStartedGuide.md +191 -0
  310. data/vendor/unity/docs/UnityHelperScriptsGuide.md +242 -0
  311. data/vendor/unity/examples/example_1/makefile +22 -17
  312. data/vendor/unity/examples/example_1/test/test_runners/TestProductionCode2_Runner.c +1 -1
  313. data/vendor/unity/examples/example_1/test/test_runners/TestProductionCode_Runner.c +1 -1
  314. data/vendor/unity/examples/example_2/makefile +16 -17
  315. data/vendor/unity/examples/example_3/rakefile.rb +15 -15
  316. data/vendor/unity/examples/example_3/rakefile_helper.rb +93 -100
  317. data/vendor/unity/examples/example_3/readme.txt +4 -10
  318. data/vendor/unity/examples/unity_config.h +14 -26
  319. data/vendor/unity/extras/fixture/rakefile.rb +12 -12
  320. data/vendor/unity/extras/fixture/rakefile_helper.rb +87 -88
  321. data/vendor/unity/extras/fixture/src/unity_fixture.c +15 -8
  322. data/vendor/unity/extras/fixture/src/unity_fixture.h +6 -1
  323. data/vendor/unity/extras/fixture/src/unity_fixture_internals.h +3 -0
  324. data/vendor/unity/extras/fixture/src/unity_fixture_malloc_overrides.h +1 -0
  325. data/vendor/unity/extras/fixture/test/unity_fixture_Test.c +1 -1
  326. data/vendor/unity/release/version.info +1 -1
  327. data/vendor/unity/src/unity.c +396 -330
  328. data/vendor/unity/src/unity.h +50 -4
  329. data/vendor/unity/src/unity_internals.h +119 -84
  330. data/vendor/unity/test/Makefile +17 -17
  331. data/vendor/unity/test/rakefile +63 -3
  332. data/vendor/unity/test/rakefile_helper.rb +108 -105
  333. data/vendor/unity/test/spec/generate_module_existing_file_spec.rb +158 -0
  334. data/vendor/unity/test/targets/clang_file.yml +0 -6
  335. data/vendor/unity/test/targets/clang_strict.yml +1 -9
  336. data/vendor/unity/test/testdata/testRunnerGeneratorSmall.c +2 -0
  337. data/vendor/unity/test/testdata/testRunnerGeneratorWithMocks.c +2 -2
  338. data/vendor/unity/test/tests/test_generate_test_runner.rb +5 -5
  339. data/vendor/unity/test/tests/testunity.c +1338 -151
  340. metadata +102 -157
  341. data/test_graveyard/integration/paths.yml +0 -17
  342. data/test_graveyard/integration/paths_test.rb +0 -80
  343. data/test_graveyard/integration/rake_rules_aux_dependencies_test.rb +0 -75
  344. data/test_graveyard/integration/rake_rules_cmock_test.rb +0 -74
  345. data/test_graveyard/integration/rake_rules_preprocess_test.rb +0 -178
  346. data/test_graveyard/integration/rake_rules_test.rb +0 -268
  347. data/test_graveyard/integration/rake_tasks_test.rb +0 -103
  348. data/test_graveyard/integration_test_helper.rb +0 -34
  349. data/test_graveyard/rakefile_rules.rb +0 -10
  350. data/test_graveyard/rakefile_rules_aux_dependencies.rb +0 -10
  351. data/test_graveyard/rakefile_rules_cmock.rb +0 -10
  352. data/test_graveyard/rakefile_rules_preprocess.rb +0 -10
  353. data/test_graveyard/rakefile_tasks.rb +0 -10
  354. data/test_graveyard/system/file_system_dependencies.yml +0 -20
  355. data/test_graveyard/system/file_system_kitchen_sink.yml +0 -20
  356. data/test_graveyard/system/file_system_mocks.yml +0 -20
  357. data/test_graveyard/system/file_system_preprocess.yml +0 -20
  358. data/test_graveyard/system/file_system_simple.yml +0 -20
  359. data/test_graveyard/system/file_system_test.rb +0 -78
  360. data/test_graveyard/system/mocks/include/a_file.h +0 -2
  361. data/test_graveyard/system/mocks/include/other_stuff.h +0 -2
  362. data/test_graveyard/system/mocks/include/stuff.h +0 -3
  363. data/test_graveyard/system/mocks/source/a_file.c +0 -9
  364. data/test_graveyard/system/mocks/test/test_a_file.c +0 -41
  365. data/test_graveyard/system/mocks/test/test_no_file.c +0 -14
  366. data/test_graveyard/system/project_mocks.yml +0 -43
  367. data/test_graveyard/system/project_mocks_test.rb +0 -38
  368. data/test_graveyard/system/project_simple.yml +0 -36
  369. data/test_graveyard/system/project_simple_test.rb +0 -39
  370. data/test_graveyard/system/rule_mocks_test.rb +0 -44
  371. data/test_graveyard/system/rule_runners_test.rb +0 -44
  372. data/test_graveyard/system/simple/include/other_stuff.h +0 -2
  373. data/test_graveyard/system/simple/include/stuff.h +0 -3
  374. data/test_graveyard/system/simple/source/other_stuff.c +0 -6
  375. data/test_graveyard/system/simple/source/stuff.c +0 -7
  376. data/test_graveyard/system/simple/test/test_other_stuff.c +0 -30
  377. data/test_graveyard/system/simple/test/test_stuff.c +0 -51
  378. data/test_graveyard/system_test_helper.rb +0 -73
  379. data/test_graveyard/test_helper.rb +0 -93
  380. data/test_graveyard/unit/busted/configurator_builder_test.rb +0 -569
  381. data/test_graveyard/unit/busted/configurator_helper_test.rb +0 -234
  382. data/test_graveyard/unit/busted/configurator_test.rb +0 -232
  383. data/test_graveyard/unit/busted/configurator_validator_test.rb +0 -169
  384. data/test_graveyard/unit/busted/deep_merge_fix_test.rb +0 -55
  385. data/test_graveyard/unit/busted/dependinator_test.rb +0 -129
  386. data/test_graveyard/unit/busted/file_finder_helper_test.rb +0 -45
  387. data/test_graveyard/unit/busted/file_finder_test.rb +0 -114
  388. data/test_graveyard/unit/busted/file_path_utils_test.rb +0 -97
  389. data/test_graveyard/unit/busted/file_system_utils_test.rb +0 -21
  390. data/test_graveyard/unit/busted/generator_test.rb +0 -187
  391. data/test_graveyard/unit/busted/generator_test_results_test.rb +0 -129
  392. data/test_graveyard/unit/busted/generator_test_runner_test.rb +0 -475
  393. data/test_graveyard/unit/busted/preprocessinator_file_handler_test.rb +0 -39
  394. data/test_graveyard/unit/busted/preprocessinator_helper_test.rb +0 -156
  395. data/test_graveyard/unit/busted/preprocessinator_includes_handler_test.rb +0 -93
  396. data/test_graveyard/unit/busted/preprocessinator_test.rb +0 -57
  397. data/test_graveyard/unit/busted/project_file_loader_test.rb +0 -142
  398. data/test_graveyard/unit/busted/setupinator_test.rb +0 -45
  399. data/test_graveyard/unit/busted/streaminator_test.rb +0 -49
  400. data/test_graveyard/unit/busted/task_invoker_test.rb +0 -69
  401. data/test_graveyard/unit/busted/test_includes_extractor_test.rb +0 -111
  402. data/test_graveyard/unit/busted/test_invoker_helper_test.rb +0 -62
  403. data/test_graveyard/unit/busted/test_invoker_test.rb +0 -47
  404. data/test_graveyard/unit/busted/tool_executor_helper_test.rb +0 -100
  405. data/test_graveyard/unit/busted/tool_executor_test.rb +0 -351
  406. data/test_graveyard/unit/busted/verbosinator_test.rb +0 -65
  407. data/test_graveyard/unit/preprocessinator_extractor_test.rb +0 -731
  408. data/test_graveyard/unit_test_helper.rb +0 -16
  409. data/vendor/c_exception/docs/CExceptionSummary.odt +0 -0
  410. data/vendor/c_exception/docs/CExceptionSummary.pdf +0 -0
  411. data/vendor/c_exception/vendor/unity/auto/parseOutput.rb +0 -191
  412. data/vendor/c_exception/vendor/unity/docs/UnityAssertionsReference.pdf +0 -0
  413. data/vendor/c_exception/vendor/unity/docs/UnityConfigurationGuide.pdf +0 -0
  414. data/vendor/c_exception/vendor/unity/docs/UnityGettingStartedGuide.pdf +0 -0
  415. data/vendor/c_exception/vendor/unity/docs/UnityHelperScriptsGuide.pdf +0 -0
  416. data/vendor/cmock/docs/CMock Summary.odt +0 -0
  417. data/vendor/cmock/docs/CMock Summary.pdf +0 -0
  418. data/vendor/cmock/vendor/c_exception/docs/CExceptionSummary.odt +0 -0
  419. data/vendor/cmock/vendor/c_exception/docs/CExceptionSummary.pdf +0 -0
  420. data/vendor/cmock/vendor/c_exception/vendor/unity/auto/parseOutput.rb +0 -191
  421. data/vendor/cmock/vendor/c_exception/vendor/unity/docs/UnityAssertionsReference.pdf +0 -0
  422. data/vendor/cmock/vendor/c_exception/vendor/unity/docs/UnityConfigurationGuide.pdf +0 -0
  423. data/vendor/cmock/vendor/c_exception/vendor/unity/docs/UnityGettingStartedGuide.pdf +0 -0
  424. data/vendor/cmock/vendor/c_exception/vendor/unity/docs/UnityHelperScriptsGuide.pdf +0 -0
  425. data/vendor/cmock/vendor/unity/auto/parseOutput.rb +0 -191
  426. data/vendor/cmock/vendor/unity/docs/UnityAssertionsReference.pdf +0 -0
  427. data/vendor/cmock/vendor/unity/docs/UnityConfigurationGuide.pdf +0 -0
  428. data/vendor/cmock/vendor/unity/docs/UnityGettingStartedGuide.pdf +0 -0
  429. data/vendor/cmock/vendor/unity/docs/UnityHelperScriptsGuide.pdf +0 -0
  430. data/vendor/unity/auto/parseOutput.rb +0 -191
  431. data/vendor/unity/docs/UnityAssertionsReference.pdf +0 -0
  432. data/vendor/unity/docs/UnityConfigurationGuide.pdf +0 -0
  433. data/vendor/unity/docs/UnityGettingStartedGuide.pdf +0 -0
  434. data/vendor/unity/docs/UnityHelperScriptsGuide.pdf +0 -0
@@ -2,7 +2,7 @@
2
2
  # Unity Project - A Test Framework for C
3
3
  # Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
4
4
  # [Released under MIT License. Please refer to license.txt for details]
5
- # ==========================================
5
+ # ==========================================
6
6
 
7
7
  require'yaml'
8
8
 
@@ -10,14 +10,16 @@ module RakefileHelpers
10
10
  class TestFileFilter
11
11
  def initialize(all_files = false)
12
12
  @all_files = all_files
13
- if not @all_files == true
14
- if File.exist?('test_file_filter.yml')
15
- filters = YAML.load_file( 'test_file_filter.yml' )
16
- @all_files, @only_files, @exclude_files =
17
- filters[:all_files], filters[:only_files], filters[:exclude_files]
18
- end
19
- end
20
- end
13
+
14
+ return false unless @all_files
15
+ return false unless File.exist?('test_file_filter.yml')
16
+
17
+ filters = YAML.load_file('test_file_filter.yml')
18
+ @all_files = filters[:all_files]
19
+ @only_files = filters[:only_files]
20
+ @exclude_files = filters[:exclude_files]
21
+ end
22
+
21
23
  attr_accessor :all_files, :only_files, :exclude_files
22
24
  end
23
25
  end
@@ -1,8 +1,6 @@
1
1
  module TypeSanitizer
2
-
3
2
  def self.sanitize_c_identifier(unsanitized)
4
3
  # convert filename to valid C identifier by replacing invalid chars with '_'
5
- return unsanitized.gsub(/[-\/\\\.\,\s]/, "_")
4
+ unsanitized.gsub(/[-\/\\\.\,\s]/, '_')
6
5
  end
7
-
8
6
  end
@@ -86,9 +86,13 @@ class UnityTestSummary:
86
86
  results = { 'failures': [], 'ignores': [], 'successes': [] }
87
87
  for line in lines:
88
88
  parts = line.split(':')
89
- if len(parts) != 5:
89
+ if len(parts) == 5:
90
+ src_file,src_line,test_name,status,msg = parts
91
+ elif len(parts) == 4:
92
+ src_file,src_line,test_name,status = parts
93
+ msg = ''
94
+ else:
90
95
  continue
91
- src_file,src_line,test_name,status,msg = parts
92
96
  if len(self.root) > 0:
93
97
  line_out = "%s%s" % (self.root, line)
94
98
  else:
@@ -4,7 +4,7 @@
4
4
  # [Released under MIT License. Please refer to license.txt for details]
5
5
  # ==========================================
6
6
 
7
- #!/usr/bin/ruby
7
+ # !/usr/bin/ruby
8
8
  #
9
9
  # unity_test_summary.rb
10
10
  #
@@ -15,37 +15,35 @@ class UnityTestSummary
15
15
  include FileUtils::Verbose
16
16
 
17
17
  attr_reader :report, :total_tests, :failures, :ignored
18
+ attr_writer :targets, :root
18
19
 
19
- def initialize(opts = {})
20
+ def initialize(_opts = {})
20
21
  @report = ''
21
22
  @total_tests = 0
22
23
  @failures = 0
23
24
  @ignored = 0
24
-
25
-
26
25
  end
27
26
 
28
27
  def run
29
28
  # Clean up result file names
30
- results = @targets.map {|target| target.gsub(/\\/,'/')}
29
+ results = @targets.map { |target| target.tr('\\', '/') }
31
30
 
32
31
  # Dig through each result file, looking for details on pass/fail:
33
32
  failure_output = []
34
33
  ignore_output = []
35
34
 
36
35
  results.each do |result_file|
37
- lines = File.readlines(result_file).map { |line| line.chomp }
38
- if lines.length == 0
39
- raise "Empty test result file: #{result_file}"
40
- else
41
- output = get_details(result_file, lines)
42
- failure_output << output[:failures] unless output[:failures].empty?
43
- ignore_output << output[:ignores] unless output[:ignores].empty?
44
- tests,failures,ignored = parse_test_summary(lines)
45
- @total_tests += tests
46
- @failures += failures
47
- @ignored += ignored
48
- end
36
+ lines = File.readlines(result_file).map(&:chomp)
37
+
38
+ raise "Empty test result file: #{result_file}" if lines.empty?
39
+
40
+ output = get_details(result_file, lines)
41
+ failure_output << output[:failures] unless output[:failures].empty?
42
+ ignore_output << output[:ignores] unless output[:ignores].empty?
43
+ tests, failures, ignored = parse_test_summary(lines)
44
+ @total_tests += tests
45
+ @failures += failures
46
+ @ignored += ignored
49
47
  end
50
48
 
51
49
  if @ignored > 0
@@ -72,77 +70,67 @@ class UnityTestSummary
72
70
  @report += "\n"
73
71
  end
74
72
 
75
- def set_targets(target_array)
76
- @targets = target_array
77
- end
78
-
79
- def set_root_path(path)
80
- @root = path
81
- end
82
-
83
- def usage(err_msg=nil)
73
+ def usage(err_msg = nil)
84
74
  puts "\nERROR: "
85
75
  puts err_msg if err_msg
86
76
  puts "\nUsage: unity_test_summary.rb result_file_directory/ root_path/"
87
- puts " result_file_directory - The location of your results files."
88
- puts " Defaults to current directory if not specified."
89
- puts " Should end in / if specified."
90
- puts " root_path - Helpful for producing more verbose output if using relative paths."
77
+ puts ' result_file_directory - The location of your results files.'
78
+ puts ' Defaults to current directory if not specified.'
79
+ puts ' Should end in / if specified.'
80
+ puts ' root_path - Helpful for producing more verbose output if using relative paths.'
91
81
  exit 1
92
82
  end
93
83
 
94
84
  protected
95
85
 
96
- def get_details(result_file, lines)
97
- results = { :failures => [], :ignores => [], :successes => [] }
86
+ def get_details(_result_file, lines)
87
+ results = { failures: [], ignores: [], successes: [] }
98
88
  lines.each do |line|
99
- src_file,src_line,test_name,status,msg = line.split(/:/)
100
- line_out = ((@root && (@root != 0)) ? "#{@root}#{line}" : line ).gsub(/\//, "\\")
101
- case(status)
102
- when 'IGNORE' then results[:ignores] << line_out
103
- when 'FAIL' then results[:failures] << line_out
104
- when 'PASS' then results[:successes] << line_out
89
+ _src_file, _src_line, _test_name, status, _msg = line.split(/:/)
90
+ line_out = (@root && (@root != 0) ? "#{@root}#{line}" : line).gsub(/\//, '\\')
91
+ case status
92
+ when 'IGNORE' then results[:ignores] << line_out
93
+ when 'FAIL' then results[:failures] << line_out
94
+ when 'PASS' then results[:successes] << line_out
105
95
  end
106
96
  end
107
- return results
97
+ results
108
98
  end
109
99
 
110
100
  def parse_test_summary(summary)
111
- if summary.find { |v| v =~ /(\d+) Tests (\d+) Failures (\d+) Ignored/ }
112
- [$1.to_i,$2.to_i,$3.to_i]
113
- else
114
- raise "Couldn't parse test results: #{summary}"
115
- end
101
+ raise "Couldn't parse test results: #{summary}" unless summary.find { |v| v =~ /(\d+) Tests (\d+) Failures (\d+) Ignored/ }
102
+ [Regexp.last_match(1).to_i, Regexp.last_match(2).to_i, Regexp.last_match(3).to_i]
116
103
  end
117
104
 
118
- def here; File.expand_path(File.dirname(__FILE__)); end
119
-
105
+ def here
106
+ File.expand_path(File.dirname(__FILE__))
107
+ end
120
108
  end
121
109
 
122
110
  if $0 == __FILE__
123
111
 
124
- #parse out the command options
125
- opts, args = ARGV.partition {|v| v =~ /^--\w+/}
126
- opts.map! {|v| v[2..-1].to_sym }
112
+ # parse out the command options
113
+ opts, args = ARGV.partition { |v| v =~ /^--\w+/ }
114
+ opts.map! { |v| v[2..-1].to_sym }
127
115
 
128
- #create an instance to work with
116
+ # create an instance to work with
129
117
  uts = UnityTestSummary.new(opts)
130
118
 
131
119
  begin
132
- #look in the specified or current directory for result files
120
+ # look in the specified or current directory for result files
133
121
  args[0] ||= './'
134
- targets = "#{ARGV[0].gsub(/\\/, '/')}**/*.test*"
122
+ targets = "#{ARGV[0].tr('\\', '/')}**/*.test*"
135
123
  results = Dir[targets]
136
124
  raise "No *.testpass, *.testfail, or *.testresults files found in '#{targets}'" if results.empty?
137
- uts.set_targets(results)
125
+ uts.targets = results
138
126
 
139
- #set the root path
127
+ # set the root path
140
128
  args[1] ||= Dir.pwd + '/'
141
- uts.set_root_path(ARGV[1])
129
+ uts.root = ARGV[1]
142
130
 
143
- #run the summarizer
131
+ # run the summarizer
144
132
  puts uts.run
145
- rescue Exception => e
133
+ rescue StandardError => e
146
134
  uts.usage e.message
147
135
  end
148
136
  end
@@ -0,0 +1,207 @@
1
+ # ThrowTheSwitch.org Coding Standard
2
+
3
+ Hi. Welcome to the coding standard for ThrowTheSwitch.org. For the most part,
4
+ we try to follow these standards to unify our contributors' code into a cohesive
5
+ unit (puns intended). You might find places where these standards aren't
6
+ followed. We're not perfect. Please be polite where you notice these discrepancies
7
+ and we'll try to be polite when we notice yours.
8
+
9
+ ;)
10
+
11
+
12
+ ## Why Have A Coding Standard?
13
+
14
+ Being consistent makes code easier to understand. We've made an attempt to keep
15
+ our standard simple because we also believe that we can only expect someone to
16
+ follow something that is understandable. Please do your best.
17
+
18
+
19
+ ## Our Philosophy
20
+
21
+ Before we get into details on syntax, let's take a moment to talk about our
22
+ vision for these tools. We're C developers and embedded software developers.
23
+ These tools are great to test any C code, but catering to embedded software has
24
+ made us more tolerant of compiler quirks. There are a LOT of quirky compilers
25
+ out there. By quirky I mean "doesn't follow standards because they feel like
26
+ they have a license to do as they wish."
27
+
28
+ Our philosophy is "support every compiler we can". Most often, this means that
29
+ we aim for writing C code that is standards compliant (often C89... that seems
30
+ to be a sweet spot that is almost always compatible). But it also means these
31
+ tools are tolerant of things that aren't common. Some that aren't even
32
+ compliant. There are configuration options to override the size of standard
33
+ types. There are configuration options to force Unity to not use certain
34
+ standard library functions. A lot of Unity is configurable and we have worked
35
+ hard to make it not TOO ugly in the process.
36
+
37
+ Similarly, our tools that parse C do their best. They aren't full C parsers
38
+ (yet) and, even if they were, they would still have to accept non-standard
39
+ additions like gcc extensions or specifying `@0x1000` to force a variable to
40
+ compile to a particular location. It's just what we do, because we like
41
+ everything to Just Work™.
42
+
43
+ Speaking of having things Just Work™, that's our second philosophy. By that, we
44
+ mean that we do our best to have EVERY configuration option have a logical
45
+ default. We believe that if you're working with a simple compiler and target,
46
+ you shouldn't need to configure very much... we try to make the tools guess as
47
+ much as they can, but give the user the power to override it when it's wrong.
48
+
49
+
50
+ ## Naming Things
51
+
52
+ Let's talk about naming things. Programming is all about naming things. We name
53
+ files, functions, variables, and so much more. While we're not always going to
54
+ find the best name for something, we actually put quite a bit of effort into
55
+ finding *What Something WANTS to be Called*™.
56
+
57
+ When naming things, we more or less follow this hierarchy, the first being the
58
+ most important to us (but we do all four whenever possible):
59
+ 1. Readable
60
+ 2. Descriptive
61
+ 3. Consistent
62
+ 4. Memorable
63
+
64
+
65
+ #### Readable
66
+
67
+ We want to read our code. This means we like names and flow that are more
68
+ naturally read. We try to avoid double negatives. We try to avoid cryptic
69
+ abbreviations (sticking to ones we feel are common).
70
+
71
+
72
+ #### Descriptive
73
+
74
+ We like descriptive names for things, especially functions and variables.
75
+ Finding the right name for something is an important endeavor. You might notice
76
+ from poking around our code that this often results in names that are a little
77
+ longer than the average. Guilty. We're okay with a tiny bit more typing if it
78
+ means our code is easier to understand.
79
+
80
+ There are two exceptions to this rule that we also stick to as religiously as
81
+ possible:
82
+
83
+ First, while we realize hungarian notation (and similar systems for encoding
84
+ type information into variable names) is providing a more descriptive name, we
85
+ feel that (for the average developer) it takes away from readability and
86
+ therefore is to be avoided.
87
+
88
+ Second, loop counters and other local throw-away variables often have a purpose
89
+ which is obvious. There's no need, therefore, to get carried away with complex
90
+ naming. We find i, j, and k are better loop counters than loopCounterVar or
91
+ whatnot. We only break this rule when we see that more description could improve
92
+ understanding of an algorithm.
93
+
94
+
95
+ #### Consistent
96
+
97
+ We like consistency, but we're not really obsessed with it. We try to name our
98
+ configuration macros in a consistent fashion... you'll notice a repeated use of
99
+ UNITY_EXCLUDE_BLAH or UNITY_USES_BLAH macros. This helps users avoid having to
100
+ remember each macro's details.
101
+
102
+
103
+ #### Memorable
104
+
105
+ Where ever it doesn't violate the above principles, we try to apply memorable
106
+ names. Sometimes this means using something that is simply descriptive, but
107
+ often we strive for descriptive AND unique... we like quirky names that stand
108
+ out in our memory and are easier to search for. Take a look through the file
109
+ names in Ceedling and you'll get a good idea of what we are talking about here.
110
+ Why use preprocess when you can use preprocessinator? Or what better describes a
111
+ module in charge of invoking tasks during releases than release_invoker? Don't
112
+ get carried away. The names are still descriptive and fulfill the above
113
+ requirements, but they don't feel stale.
114
+
115
+
116
+ ## C and C++ Details
117
+
118
+ We don't really want to add to the style battles out there. Tabs or spaces?
119
+ How many spaces? Where do the braces go? These are age-old questions that will
120
+ never be answered... or at least not answered in a way that will make everyone
121
+ happy.
122
+
123
+ We've decided on our own style preferences. If you'd like to contribute to these
124
+ projects (and we hope that you do), then we ask if you do your best to follow
125
+ the same. It will only hurt a little. We promise.
126
+
127
+
128
+ #### Whitespace
129
+
130
+ Our C-style is to use spaces and to use 4 of them per indent level. It's a nice
131
+ power-of-2 number that looks decent on a wide screen. We have no more reason
132
+ than that. We break that rule when we have lines that wrap (macros or function
133
+ arguments or whatnot). When that happens, we like to indent further to line
134
+ things up in nice tidy columns.
135
+
136
+ ```C
137
+ if (stuff_happened)
138
+ {
139
+ do_something();
140
+ }
141
+ ```
142
+
143
+
144
+ #### Case
145
+
146
+ - Files - all lower case with underscores.
147
+ - Variables - all lower case with underscores
148
+ - Macros - all caps with underscores.
149
+ - Typedefs - all caps with underscores. (also ends with _T).
150
+ - Functions - camel cased. Usually named ModuleName_FuncName
151
+ - Constants and Globals - camel cased.
152
+
153
+
154
+ #### Braces
155
+
156
+ The left brace is on the next line after the declaration. The right brace is
157
+ directly below that. Everything in between in indented one level. If you're
158
+ catching an error and you have a one-line, go ahead and to it on the same line.
159
+
160
+ ```C
161
+ while (blah)
162
+ {
163
+ //Like so. Even if only one line, we use braces.
164
+ }
165
+ ```
166
+
167
+
168
+ #### Comments
169
+
170
+ Do you know what we hate? Old-school C block comments. BUT, we're using them
171
+ anyway. As we mentioned, our goal is to support every compiler we can,
172
+ especially embedded compilers. There are STILL C compilers out there that only
173
+ support old-school block comments. So that is what we're using. We apologize. We
174
+ think they are ugly too.
175
+
176
+
177
+ ## Ruby Details
178
+
179
+ Is there really such thing as a Ruby coding standard? Ruby is such a free form
180
+ language, it seems almost sacrilegious to suggest that people should comply to
181
+ one method! We'll keep it really brief!
182
+
183
+
184
+ #### Whitespace
185
+
186
+ Our Ruby style is to use spaces and to use 2 of them per indent level. It's a
187
+ nice power-of-2 number that really grooves with Ruby's compact style. We have no
188
+ more reason than that. We break that rule when we have lines that wrap. When
189
+ that happens, we like to indent further to line things up in nice tidy columns.
190
+
191
+
192
+ #### Case
193
+
194
+ - Files - all lower case with underscores.
195
+ - Variables - all lower case with underscores
196
+ - Classes, Modules, etc - Camel cased.
197
+ - Functions - all lower case with underscores
198
+ - Constants - all upper case with underscores
199
+
200
+
201
+ ## Documentation
202
+
203
+ Egad. Really? We use markdown and we like pdf files because they can be made to
204
+ look nice while still being portable. Good enough?
205
+
206
+
207
+ *Find The Latest of This And More at [ThrowTheSwitch.org](https://throwtheswitch.org)*
@@ -0,0 +1,716 @@
1
+ # Unity Assertions Reference
2
+
3
+ ## Background and Overview
4
+
5
+ ### Super Condensed Version
6
+
7
+ - An assertion establishes truth (i.e. boolean True) for a single condition.
8
+ Upon boolean False, an assertion stops execution and reports the failure.
9
+ - Unity is mainly a rich collection of assertions and the support to gather up
10
+ and easily execute those assertions.
11
+ - The structure of Unity allows you to easily separate test assertions from
12
+ source code in, well, test code.
13
+ - Unity's assertions:
14
+ - Come in many, many flavors to handle different C types and assertion cases.
15
+ - Use context to provide detailed and helpful failure messages.
16
+ - Document types, expected values, and basic behavior in your source code for
17
+ free.
18
+
19
+
20
+ ### Unity Is Several Things But Mainly It's Assertions
21
+
22
+ One way to think of Unity is simply as a rich collection of assertions you can
23
+ use to establish whether your source code behaves the way you think it does.
24
+ Unity provides a framework to easily organize and execute those assertions in
25
+ test code separate from your source code.
26
+
27
+
28
+ ### What's an Assertion?
29
+
30
+ At their core, assertions are an establishment of truth - boolean truth. Was this
31
+ thing equal to that thing? Does that code doohickey have such-and-such property
32
+ or not? You get the idea. Assertions are executable code (to appreciate the big
33
+ picture on this read up on the difference between
34
+ [link:Dynamic Verification and Static Analysis]). A failing assertion stops
35
+ execution and reports an error through some appropriate I/O channel (e.g.
36
+ stdout, GUI, file, blinky light).
37
+
38
+ Fundamentally, for dynamic verification all you need is a single assertion
39
+ mechanism. In fact, that's what the [assert() macro in C's standard library](http://en.wikipedia.org/en/wiki/Assert.h)
40
+ is for. So why not just use it? Well, we can do far better in the reporting
41
+ department. C's `assert()` is pretty dumb as-is and is particularly poor for
42
+ handling common data types like arrays, structs, etc. And, without some other
43
+ support, it's far too tempting to litter source code with C's `assert()`'s. It's
44
+ generally much cleaner, manageable, and more useful to separate test and source
45
+ code in the way Unity facilitates.
46
+
47
+
48
+ ### Unity's Assertions: Helpful Messages _and_ Free Source Code Documentation
49
+
50
+ Asserting a simple truth condition is valuable, but using the context of the
51
+ assertion is even more valuable. For instance, if you know you're comparing bit
52
+ flags and not just integers, then why not use that context to give explicit,
53
+ readable, bit-level feedback when an assertion fails?
54
+
55
+ That's what Unity's collection of assertions do - capture context to give you
56
+ helpful, meaningful assertion failure messages. In fact, the assertions
57
+ themselves also serve as executable documentation about types and values in your
58
+ source code. So long as your tests remain current with your source and all those
59
+ tests pass, you have a detailed, up-to-date view of the intent and mechanisms in
60
+ your source code. And due to a wondrous mystery, well-tested code usually tends
61
+ to be well designed code.
62
+
63
+
64
+ ## Assertion Conventions and Configurations
65
+
66
+ ### Naming and Parameter Conventions
67
+
68
+ The convention of assertion parameters generally follows this order:
69
+
70
+ TEST_ASSERT_X( {modifiers}, {expected}, actual, {size/count} )
71
+
72
+ The very simplest assertion possible uses only a single "actual" parameter (e.g.
73
+ a simple null check).
74
+
75
+ "Actual" is the value being tested and unlike the other parameters in an
76
+ assertion construction is the only parameter present in all assertion variants.
77
+ "Modifiers" are masks, ranges, bit flag specifiers, floating point deltas.
78
+ "Expected" is your expected value (duh) to compare to an "actual" value; it's
79
+ marked as an optional parameter because some assertions only need a single
80
+ "actual" parameter (e.g. null check).
81
+ "Size/count" refers to string lengths, number of array elements, etc.
82
+
83
+ Many of Unity's assertions are apparent duplications in that the same data type
84
+ is handled by several assertions. The differences among these are in how failure
85
+ messages are presented. For instance, a `_HEX` variant of an assertion prints
86
+ the expected and actual values of that assertion formatted as hexadecimal.
87
+
88
+
89
+ #### TEST_ASSERT_X_MESSAGE Variants
90
+
91
+ _All_ assertions are complemented with a variant that includes a simple string
92
+ message as a final parameter. The string you specify is appended to an assertion
93
+ failure message in Unity output.
94
+
95
+ For brevity, the assertion variants with a message parameter are not listed
96
+ below. Just tack on `_MESSAGE` as the final component to any assertion name in
97
+ the reference list below and add a string as the final parameter.
98
+
99
+ _Example:_
100
+
101
+ TEST_ASSERT_X( {modifiers}, {expected}, actual, {size/count} )
102
+
103
+ becomes messageified like thus...
104
+
105
+ TEST_ASSERT_X_MESSAGE( {modifiers}, {expected}, actual, {size/count}, message )
106
+
107
+
108
+ #### TEST_ASSERT_X_ARRAY Variants
109
+
110
+ Unity provides a collection of assertions for arrays containing a variety of
111
+ types. These are documented in the Array section below. These are almost on par
112
+ with the `_MESSAGE`variants of Unity's Asserts in that for pretty much any Unity
113
+ type assertion you can tack on `_ARRAY` and run assertions on an entire block of
114
+ memory.
115
+
116
+ TEST_ASSERT_EQUAL_TYPEX_ARRAY( expected, actual, {size/count} )
117
+
118
+ "Expected" is an array itself.
119
+ "Size/count" is one or two parameters necessary to establish the number of array
120
+ elements and perhaps the length of elements within the array.
121
+
122
+ Notes:
123
+ - The `_MESSAGE` variant convention still applies here to array assertions. The
124
+ `_MESSAGE` variants of the `_ARRAY` assertions have names ending with
125
+ `_ARRAY_MESSAGE`.
126
+ - Assertions for handling arrays of floating point values are grouped with float
127
+ and double assertions (see immediately following section).
128
+
129
+
130
+ ### TEST_ASSERT_EACH_EQUAL_X Variants
131
+
132
+ Unity provides a collection of assertions for arrays containing a variety of
133
+ types which can be compared to a single value as well. These are documented in
134
+ the Each Equal section below. these are almost on par with the `_MESSAGE`
135
+ variants of Unity's Asserts in that for pretty much any Unity type assertion you
136
+ can inject _EACH_EQUAL and run assertions on an entire block of memory.
137
+
138
+ TEST_ASSERT_EACH_EQUAL_TYPEX( expected, actual, {size/count} )
139
+
140
+ "Expected" is a single value to compare to.
141
+ "Actual" is an array where each element will be compared to the expected value.
142
+ "Size/count" is one of two parameters necessary to establish the number of array
143
+ elements and perhaps the length of elements within the array.
144
+
145
+ Notes:
146
+ - The `_MESSAGE` variant convention still applies here to Each Equal assertions.
147
+ - Assertions for handling Each Equal of floating point values are grouped with
148
+ float and double assertions (see immediately following section).
149
+
150
+
151
+ ### Configuration
152
+
153
+ #### Floating Point Support Is Optional
154
+
155
+ Support for floating point types is configurable. That is, by defining the
156
+ appropriate preprocessor symbols, floats and doubles can be individually enabled
157
+ or disabled in Unity code. This is useful for embedded targets with no floating
158
+ point math support (i.e. Unity compiles free of errors for fixed point only
159
+ platforms). See Unity documentation for specifics.
160
+
161
+
162
+ #### Maximum Data Type Width Is Configurable
163
+
164
+ Not all targets support 64 bit wide types or even 32 bit wide types. Define the
165
+ appropriate preprocessor symbols and Unity will omit all operations from
166
+ compilation that exceed the maximum width of your target. See Unity
167
+ documentation for specifics.
168
+
169
+
170
+ ## The Assertions in All Their Blessed Glory
171
+
172
+ ### Basic Fail and Ignore
173
+
174
+ ##### `TEST_FAIL()`
175
+
176
+ This fella is most often used in special conditions where your test code is
177
+ performing logic beyond a simple assertion. That is, in practice, `TEST_FAIL()`
178
+ will always be found inside a conditional code block.
179
+
180
+ _Examples:_
181
+ - Executing a state machine multiple times that increments a counter your test
182
+ code then verifies as a final step.
183
+ - Triggering an exception and verifying it (as in Try / Catch / Throw - see the
184
+ [CException](https://github.com/ThrowTheSwitch/CException) project).
185
+
186
+ ##### `TEST_IGNORE()`
187
+
188
+ Marks a test case (i.e. function meant to contain test assertions) as ignored.
189
+ Usually this is employed as a breadcrumb to come back and implement a test case.
190
+ An ignored test case has effects if other assertions are in the enclosing test
191
+ case (see Unity documentation for more).
192
+
193
+ ### Boolean
194
+
195
+ ##### `TEST_ASSERT (condition)`
196
+
197
+ ##### `TEST_ASSERT_TRUE (condition)`
198
+
199
+ ##### `TEST_ASSERT_FALSE (condition)`
200
+
201
+ ##### `TEST_ASSERT_UNLESS (condition)`
202
+
203
+ A simple wording variation on `TEST_ASSERT_FALSE`.The semantics of
204
+ `TEST_ASSERT_UNLESS` aid readability in certain test constructions or
205
+ conditional statements.
206
+
207
+ ##### `TEST_ASSERT_NULL (pointer)`
208
+
209
+ ##### `TEST_ASSERT_NOT_NULL (pointer)`
210
+
211
+
212
+ ### Signed and Unsigned Integers (of all sizes)
213
+
214
+ Large integer sizes can be disabled for build targets that do not support them.
215
+ For example, if your target only supports up to 16 bit types, by defining the
216
+ appropriate symbols Unity can be configured to omit 32 and 64 bit operations
217
+ that would break compilation (see Unity documentation for more). Refer to
218
+ Advanced Asserting later in this document for advice on dealing with other word
219
+ sizes.
220
+
221
+ ##### `TEST_ASSERT_EQUAL_INT (expected, actual)`
222
+
223
+ ##### `TEST_ASSERT_EQUAL_INT8 (expected, actual)`
224
+
225
+ ##### `TEST_ASSERT_EQUAL_INT16 (expected, actual)`
226
+
227
+ ##### `TEST_ASSERT_EQUAL_INT32 (expected, actual)`
228
+
229
+ ##### `TEST_ASSERT_EQUAL_INT64 (expected, actual)`
230
+
231
+ ##### `TEST_ASSERT_EQUAL (expected, actual)`
232
+
233
+ ##### `TEST_ASSERT_NOT_EQUAL (expected, actual)`
234
+
235
+ ##### `TEST_ASSERT_EQUAL_UINT (expected, actual)`
236
+
237
+ ##### `TEST_ASSERT_EQUAL_UINT8 (expected, actual)`
238
+
239
+ ##### `TEST_ASSERT_EQUAL_UINT16 (expected, actual)`
240
+
241
+ ##### `TEST_ASSERT_EQUAL_UINT32 (expected, actual)`
242
+
243
+ ##### `TEST_ASSERT_EQUAL_UINT64 (expected, actual)`
244
+
245
+
246
+ ### Unsigned Integers (of all sizes) in Hexadecimal
247
+
248
+ All `_HEX` assertions are identical in function to unsigned integer assertions
249
+ but produce failure messages with the `expected` and `actual` values formatted
250
+ in hexadecimal. Unity output is big endian.
251
+
252
+ ##### `TEST_ASSERT_EQUAL_HEX (expected, actual)`
253
+
254
+ ##### `TEST_ASSERT_EQUAL_HEX8 (expected, actual)`
255
+
256
+ ##### `TEST_ASSERT_EQUAL_HEX16 (expected, actual)`
257
+
258
+ ##### `TEST_ASSERT_EQUAL_HEX32 (expected, actual)`
259
+
260
+ ##### `TEST_ASSERT_EQUAL_HEX64 (expected, actual)`
261
+
262
+
263
+ ### Masked and Bit-level Assertions
264
+
265
+ Masked and bit-level assertions produce output formatted in hexadecimal. Unity
266
+ output is big endian.
267
+
268
+
269
+ ##### `TEST_ASSERT_BITS (mask, expected, actual)`
270
+
271
+ Only compares the masked (i.e. high) bits of `expected` and `actual` parameters.
272
+
273
+
274
+ ##### `TEST_ASSERT_BITS_HIGH (mask, actual)`
275
+
276
+ Asserts the masked bits of the `actual` parameter are high.
277
+
278
+
279
+ ##### `TEST_ASSERT_BITS_LOW (mask, actual)`
280
+
281
+ Asserts the masked bits of the `actual` parameter are low.
282
+
283
+
284
+ ##### `TEST_ASSERT_BIT_HIGH (bit, actual)`
285
+
286
+ Asserts the specified bit of the `actual` parameter is high.
287
+
288
+
289
+ ##### `TEST_ASSERT_BIT_LOW (bit, actual)`
290
+
291
+ Asserts the specified bit of the `actual` parameter is low.
292
+
293
+
294
+ ### Integer Ranges (of all sizes)
295
+
296
+ These assertions verify that the `expected` parameter is within +/- `delta`
297
+ (inclusive) of the `actual` parameter. For example, if the expected value is 10
298
+ and the delta is 3 then the assertion will fail for any value outside the range
299
+ of 7 - 13.
300
+
301
+ ##### `TEST_ASSERT_INT_WITHIN (delta, expected, actual)`
302
+
303
+ ##### `TEST_ASSERT_INT8_WITHIN (delta, expected, actual)`
304
+
305
+ ##### `TEST_ASSERT_INT16_WITHIN (delta, expected, actual)`
306
+
307
+ ##### `TEST_ASSERT_INT32_WITHIN (delta, expected, actual)`
308
+
309
+ ##### `TEST_ASSERT_INT64_WITHIN (delta, expected, actual)`
310
+
311
+ ##### `TEST_ASSERT_UINT_WITHIN (delta, expected, actual)`
312
+
313
+ ##### `TEST_ASSERT_UINT8_WITHIN (delta, expected, actual)`
314
+
315
+ ##### `TEST_ASSERT_UINT16_WITHIN (delta, expected, actual)`
316
+
317
+ ##### `TEST_ASSERT_UINT32_WITHIN (delta, expected, actual)`
318
+
319
+ ##### `TEST_ASSERT_UINT64_WITHIN (delta, expected, actual)`
320
+
321
+ ##### `TEST_ASSERT_HEX_WITHIN (delta, expected, actual)`
322
+
323
+ ##### `TEST_ASSERT_HEX8_WITHIN (delta, expected, actual)`
324
+
325
+ ##### `TEST_ASSERT_HEX16_WITHIN (delta, expected, actual)`
326
+
327
+ ##### `TEST_ASSERT_HEX32_WITHIN (delta, expected, actual)`
328
+
329
+ ##### `TEST_ASSERT_HEX64_WITHIN (delta, expected, actual)`
330
+
331
+
332
+ ### Structs and Strings
333
+
334
+ ##### `TEST_ASSERT_EQUAL_PTR (expected, actual)`
335
+
336
+ Asserts that the pointers point to the same memory location.
337
+
338
+
339
+ ##### `TEST_ASSERT_EQUAL_STRING (expected, actual)`
340
+
341
+ Asserts that the null terminated (`'\0'`)strings are identical. If strings are
342
+ of different lengths or any portion of the strings before their terminators
343
+ differ, the assertion fails. Two NULL strings (i.e. zero length) are considered
344
+ equivalent.
345
+
346
+
347
+ ##### `TEST_ASSERT_EQUAL_MEMORY (expected, actual, len)`
348
+
349
+ Asserts that the contents of the memory specified by the `expected` and `actual`
350
+ pointers is identical. The size of the memory blocks in bytes is specified by
351
+ the `len` parameter.
352
+
353
+
354
+ ### Arrays
355
+
356
+ `expected` and `actual` parameters are both arrays. `num_elements` specifies the
357
+ number of elements in the arrays to compare.
358
+
359
+ `_HEX` assertions produce failure messages with expected and actual array
360
+ contents formatted in hexadecimal.
361
+
362
+ For array of strings comparison behavior, see comments for
363
+ `TEST_ASSERT_EQUAL_STRING` in the preceding section.
364
+
365
+ Assertions fail upon the first element in the compared arrays found not to
366
+ match. Failure messages specify the array index of the failed comparison.
367
+
368
+ ##### `TEST_ASSERT_EQUAL_INT_ARRAY (expected, actual, num_elements)`
369
+
370
+ ##### `TEST_ASSERT_EQUAL_INT8_ARRAY (expected, actual, num_elements)`
371
+
372
+ ##### `TEST_ASSERT_EQUAL_INT16_ARRAY (expected, actual, num_elements)`
373
+
374
+ ##### `TEST_ASSERT_EQUAL_INT32_ARRAY (expected, actual, num_elements)`
375
+
376
+ ##### `TEST_ASSERT_EQUAL_INT64_ARRAY (expected, actual, num_elements)`
377
+
378
+ ##### `TEST_ASSERT_EQUAL_UINT_ARRAY (expected, actual, num_elements)`
379
+
380
+ ##### `TEST_ASSERT_EQUAL_UINT8_ARRAY (expected, actual, num_elements)`
381
+
382
+ ##### `TEST_ASSERT_EQUAL_UINT16_ARRAY (expected, actual, num_elements)`
383
+
384
+ ##### `TEST_ASSERT_EQUAL_UINT32_ARRAY (expected, actual, num_elements)`
385
+
386
+ ##### `TEST_ASSERT_EQUAL_UINT64_ARRAY (expected, actual, num_elements)`
387
+
388
+ ##### `TEST_ASSERT_EQUAL_HEX_ARRAY (expected, actual, num_elements)`
389
+
390
+ ##### `TEST_ASSERT_EQUAL_HEX8_ARRAY (expected, actual, num_elements)`
391
+
392
+ ##### `TEST_ASSERT_EQUAL_HEX16_ARRAY (expected, actual, num_elements)`
393
+
394
+ ##### `TEST_ASSERT_EQUAL_HEX32_ARRAY (expected, actual, num_elements)`
395
+
396
+ ##### `TEST_ASSERT_EQUAL_HEX64_ARRAY (expected, actual, num_elements)`
397
+
398
+ ##### `TEST_ASSERT_EQUAL_PTR_ARRAY (expected, actual, num_elements)`
399
+
400
+ ##### `TEST_ASSERT_EQUAL_STRING_ARRAY (expected, actual, num_elements)`
401
+
402
+ ##### `TEST_ASSERT_EQUAL_MEMORY_ARRAY (expected, actual, len, num_elements)`
403
+
404
+ `len` is the memory in bytes to be compared at each array element.
405
+
406
+
407
+ ### Each Equal (Arrays to Single Value)
408
+
409
+ `expected` are single values and `actual` are arrays. `num_elements` specifies
410
+ the number of elements in the arrays to compare.
411
+
412
+ `_HEX` assertions produce failure messages with expected and actual array
413
+ contents formatted in hexadecimal.
414
+
415
+ Assertions fail upon the first element in the compared arrays found not to
416
+ match. Failure messages specify the array index of the failed comparison.
417
+
418
+ #### `TEST_ASSERT_EACH_EQUAL_INT (expected, actual, num_elements)`
419
+
420
+ #### `TEST_ASSERT_EACH_EQUAL_INT8 (expected, actual, num_elements)`
421
+
422
+ #### `TEST_ASSERT_EACH_EQUAL_INT16 (expected, actual, num_elements)`
423
+
424
+ #### `TEST_ASSERT_EACH_EQUAL_INT32 (expected, actual, num_elements)`
425
+
426
+ #### `TEST_ASSERT_EACH_EQUAL_INT64 (expected, actual, num_elements)`
427
+
428
+ #### `TEST_ASSERT_EACH_EQUAL_UINT (expected, actual, num_elements)`
429
+
430
+ #### `TEST_ASSERT_EACH_EQUAL_UINT8 (expected, actual, num_elements)`
431
+
432
+ #### `TEST_ASSERT_EACH_EQUAL_UINT16 (expected, actual, num_elements)`
433
+
434
+ #### `TEST_ASSERT_EACH_EQUAL_UINT32 (expected, actual, num_elements)`
435
+
436
+ #### `TEST_ASSERT_EACH_EQUAL_UINT64 (expected, actual, num_elements)`
437
+
438
+ #### `TEST_ASSERT_EACH_EQUAL_HEX (expected, actual, num_elements)`
439
+
440
+ #### `TEST_ASSERT_EACH_EQUAL_HEX8 (expected, actual, num_elements)`
441
+
442
+ #### `TEST_ASSERT_EACH_EQUAL_HEX16 (expected, actual, num_elements)`
443
+
444
+ #### `TEST_ASSERT_EACH_EQUAL_HEX32 (expected, actual, num_elements)`
445
+
446
+ #### `TEST_ASSERT_EACH_EQUAL_HEX64 (expected, actual, num_elements)`
447
+
448
+ #### `TEST_ASSERT_EACH_EQUAL_PTR (expected, actual, num_elements)`
449
+
450
+ #### `TEST_ASSERT_EACH_EQUAL_STRING (expected, actual, num_elements)`
451
+
452
+ #### `TEST_ASSERT_EACH_EQUAL_MEMORY (expected, actual, len, num_elements)`
453
+
454
+ `len` is the memory in bytes to be compared at each array element.
455
+
456
+
457
+ ### Floating Point (If enabled)
458
+
459
+ ##### `TEST_ASSERT_FLOAT_WITHIN (delta, expected, actual)`
460
+
461
+ Asserts that the `actual` value is within +/- `delta` of the `expected` value.
462
+ The nature of floating point representation is such that exact evaluations of
463
+ equality are not guaranteed.
464
+
465
+
466
+ ##### `TEST_ASSERT_EQUAL_FLOAT (expected, actual)`
467
+
468
+ Asserts that the ?actual?value is "close enough to be considered equal" to the
469
+ `expected` value. If you are curious about the details, refer to the Advanced
470
+ Asserting section for more details on this. Omitting a user-specified delta in a
471
+ floating point assertion is both a shorthand convenience and a requirement of
472
+ code generation conventions for CMock.
473
+
474
+
475
+ ##### `TEST_ASSERT_EQUAL_FLOAT_ARRAY (expected, actual, num_elements)`
476
+
477
+ See Array assertion section for details. Note that individual array element
478
+ float comparisons are executed using T?EST_ASSERT_EQUAL_FLOAT?.That is, user
479
+ specified delta comparison values requires a custom-implemented floating point
480
+ array assertion.
481
+
482
+
483
+ ##### `TEST_ASSERT_FLOAT_IS_INF (actual)`
484
+
485
+ Asserts that `actual` parameter is equivalent to positive infinity floating
486
+ point representation.
487
+
488
+
489
+ ##### `TEST_ASSERT_FLOAT_IS_NEG_INF (actual)`
490
+
491
+ Asserts that `actual` parameter is equivalent to negative infinity floating
492
+ point representation.
493
+
494
+
495
+ ##### `TEST_ASSERT_FLOAT_IS_NAN (actual)`
496
+
497
+ Asserts that `actual` parameter is a Not A Number floating point representation.
498
+
499
+
500
+ ##### `TEST_ASSERT_FLOAT_IS_DETERMINATE (actual)`
501
+
502
+ Asserts that ?actual?parameter is a floating point representation usable for
503
+ mathematical operations. That is, the `actual` parameter is neither positive
504
+ infinity nor negative infinity nor Not A Number floating point representations.
505
+
506
+
507
+ ##### `TEST_ASSERT_FLOAT_IS_NOT_INF (actual)`
508
+
509
+ Asserts that `actual` parameter is a value other than positive infinity floating
510
+ point representation.
511
+
512
+
513
+ ##### `TEST_ASSERT_FLOAT_IS_NOT_NEG_INF (actual)`
514
+
515
+ Asserts that `actual` parameter is a value other than negative infinity floating
516
+ point representation.
517
+
518
+
519
+ ##### `TEST_ASSERT_FLOAT_IS_NOT_NAN (actual)`
520
+
521
+ Asserts that `actual` parameter is a value other than Not A Number floating
522
+ point representation.
523
+
524
+
525
+ ##### `TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE (actual)`
526
+
527
+ Asserts that `actual` parameter is not usable for mathematical operations. That
528
+ is, the `actual` parameter is either positive infinity or negative infinity or
529
+ Not A Number floating point representations.
530
+
531
+
532
+ ### Double (If enabled)
533
+
534
+ ##### `TEST_ASSERT_DOUBLE_WITHIN (delta, expected, actual)`
535
+
536
+ Asserts that the `actual` value is within +/- `delta` of the `expected` value.
537
+ The nature of floating point representation is such that exact evaluations of
538
+ equality are not guaranteed.
539
+
540
+
541
+ ##### `TEST_ASSERT_EQUAL_DOUBLE (expected, actual)`
542
+
543
+ Asserts that the `actual` value is "close enough to be considered equal" to the
544
+ `expected` value. If you are curious about the details, refer to the Advanced
545
+ Asserting section for more details. Omitting a user-specified delta in a
546
+ floating point assertion is both a shorthand convenience and a requirement of
547
+ code generation conventions for CMock.
548
+
549
+
550
+ ##### `TEST_ASSERT_EQUAL_DOUBLE_ARRAY (expected, actual, num_elements)`
551
+
552
+ See Array assertion section for details. Note that individual array element
553
+ double comparisons are executed using `TEST_ASSERT_EQUAL_DOUBLE`.That is, user
554
+ specified delta comparison values requires a custom implemented double array
555
+ assertion.
556
+
557
+
558
+ ##### `TEST_ASSERT_DOUBLE_IS_INF (actual)`
559
+
560
+ Asserts that `actual` parameter is equivalent to positive infinity floating
561
+ point representation.
562
+
563
+
564
+ ##### `TEST_ASSERT_DOUBLE_IS_NEG_INF (actual)`
565
+
566
+ Asserts that `actual` parameter is equivalent to negative infinity floating point
567
+ representation.
568
+
569
+
570
+ ##### `TEST_ASSERT_DOUBLE_IS_NAN (actual)`
571
+
572
+ Asserts that `actual` parameter is a Not A Number floating point representation.
573
+
574
+
575
+ ##### `TEST_ASSERT_DOUBLE_IS_DETERMINATE (actual)`
576
+
577
+ Asserts that `actual` parameter is a floating point representation usable for
578
+ mathematical operations. That is, the ?actual?parameter is neither positive
579
+ infinity nor negative infinity nor Not A Number floating point representations.
580
+
581
+
582
+ ##### `TEST_ASSERT_DOUBLE_IS_NOT_INF (actual)`
583
+
584
+ Asserts that `actual` parameter is a value other than positive infinity floating
585
+ point representation.
586
+
587
+
588
+ ##### `TEST_ASSERT_DOUBLE_IS_NOT_NEG_INF (actual)`
589
+
590
+ Asserts that `actual` parameter is a value other than negative infinity floating
591
+ point representation.
592
+
593
+
594
+ ##### `TEST_ASSERT_DOUBLE_IS_NOT_NAN (actual)`
595
+
596
+ Asserts that `actual` parameter is a value other than Not A Number floating
597
+ point representation.
598
+
599
+
600
+ ##### `TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE (actual)`
601
+
602
+ Asserts that `actual` parameter is not usable for mathematical operations. That
603
+ is, the `actual` parameter is either positive infinity or negative infinity or
604
+ Not A Number floating point representations.
605
+
606
+
607
+ ## Advanced Asserting: Details On Tricky Assertions
608
+
609
+ This section helps you understand how to deal with some of the trickier
610
+ assertion situations you may run into. It will give you a glimpse into some of
611
+ the under-the-hood details of Unity's assertion mechanisms. If you're one of
612
+ those people who likes to know what is going on in the background, read on. If
613
+ not, feel free to ignore the rest of this document until you need it.
614
+
615
+
616
+ ### How do the EQUAL assertions work for FLOAT and DOUBLE?
617
+
618
+ As you may know, directly checking for equality between a pair of floats or a
619
+ pair of doubles is sloppy at best and an outright no-no at worst. Floating point
620
+ values can often be represented in multiple ways, particularly after a series of
621
+ operations on a value. Initializing a variable to the value of 2.0 is likely to
622
+ result in a floating point representation of 2 x 20,but a series of
623
+ mathematical operations might result in a representation of 8 x 2-2
624
+ that also evaluates to a value of 2. At some point repeated operations cause
625
+ equality checks to fail.
626
+
627
+ So Unity doesn't do direct floating point comparisons for equality. Instead, it
628
+ checks if two floating point values are "really close." If you leave Unity
629
+ running with defaults, "really close" means "within a significant bit or two."
630
+ Under the hood, `TEST_ASSERT_EQUAL_FLOAT` is really `TEST_ASSERT_FLOAT_WITHIN`
631
+ with the `delta` parameter calculated on the fly. For single precision, delta is
632
+ the expected value multiplied by 0.00001, producing a very small proportional
633
+ range around the expected value.
634
+
635
+ If you are expecting a value of 20,000.0 the delta is calculated to be 0.2. So
636
+ any value between 19,999.8 and 20,000.2 will satisfy the equality check. This
637
+ works out to be roughly a single bit of range for a single-precision number, and
638
+ that's just about as tight a tolerance as you can reasonably get from a floating
639
+ point value.
640
+
641
+ So what happens when it's zero? Zero - even more than other floating point
642
+ values - can be represented many different ways. It doesn't matter if you have
643
+ 0 x 20or 0 x 263.It's still zero, right? Luckily, if you
644
+ subtract these values from each other, they will always produce a difference of
645
+ zero, which will still fall between 0 plus or minus a delta of 0. So it still
646
+ works!
647
+
648
+ Double precision floating point numbers use a much smaller multiplier, again
649
+ approximating a single bit of error.
650
+
651
+ If you don't like these ranges and you want to make your floating point equality
652
+ assertions less strict, you can change these multipliers to whatever you like by
653
+ defining UNITY_FLOAT_PRECISION and UNITY_DOUBLE_PRECISION. See Unity
654
+ documentation for more.
655
+
656
+
657
+ ### How do we deal with targets with non-standard int sizes?
658
+
659
+ It's "fun" that C is a standard where something as fundamental as an integer
660
+ varies by target. According to the C standard, an `int` is to be the target's
661
+ natural register size, and it should be at least 16-bits and a multiple of a
662
+ byte. It also guarantees an order of sizes:
663
+
664
+ ```C
665
+ char <= short <= int <= long <= long long
666
+ ```
667
+
668
+ Most often, `int` is 32-bits. In many cases in the embedded world, `int` is
669
+ 16-bits. There are rare microcontrollers out there that have 24-bit integers,
670
+ and this remains perfectly standard C.
671
+
672
+ To make things even more interesting, there are compilers and targets out there
673
+ that have a hard choice to make. What if their natural register size is 10-bits
674
+ or 12-bits? Clearly they can't fulfill _both_ the requirement to be at least
675
+ 16-bits AND the requirement to match the natural register size. In these
676
+ situations, they often choose the natural register size, leaving us with
677
+ something like this:
678
+
679
+ ```C
680
+ char (8 bit) <= short (12 bit) <= int (12 bit) <= long (16 bit)
681
+ ```
682
+
683
+ Um... yikes. It's obviously breaking a rule or two... but they had to break SOME
684
+ rules, so they made a choice.
685
+
686
+ When the C99 standard rolled around, it introduced alternate standard-size types.
687
+ It also introduced macros for pulling in MIN/MAX values for your integer types.
688
+ It's glorious! Unfortunately, many embedded compilers can't be relied upon to
689
+ use the C99 types (Sometimes because they have weird register sizes as described
690
+ above. Sometimes because they don't feel like it?).
691
+
692
+ A goal of Unity from the beginning was to support every combination of
693
+ microcontroller or microprocessor and C compiler. Over time, we've gotten really
694
+ close to this. There are a few tricks that you should be aware of, though, if
695
+ you're going to do this effectively on some of these more idiosyncratic targets.
696
+
697
+ First, when setting up Unity for a new target, you're going to want to pay
698
+ special attention to the macros for automatically detecting types
699
+ (where available) or manually configuring them yourself. You can get information
700
+ on both of these in Unity's documentation.
701
+
702
+ What about the times where you suddenly need to deal with something odd, like a
703
+ 24-bit `int`? The simplest solution is to use the next size up. If you have a
704
+ 24-bit `int`, configure Unity to use 32-bit integers. If you have a 12-bit
705
+ `int`, configure Unity to use 16 bits. There are two ways this is going to
706
+ affect you:
707
+
708
+ 1. When Unity displays errors for you, it's going to pad the upper unused bits
709
+ with zeros.
710
+ 2. You're going to have to be careful of assertions that perform signed
711
+ operations, particularly `TEST_ASSERT_INT_WITHIN`.Such assertions might wrap
712
+ your `int` in the wrong place, and you could experience false failures. You can
713
+ always back down to a simple `TEST_ASSERT` and do the operations yourself.
714
+
715
+
716
+ *Find The Latest of This And More at [ThrowTheSwitch.org](https://throwtheswitch.org)*