ceedling 0.28.2 → 0.28.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (253) hide show
  1. checksums.yaml +4 -4
  2. data/assets/ceedling +3 -0
  3. data/assets/ceedling.cmd +1 -0
  4. data/assets/default_gitignore +5 -0
  5. data/assets/project_with_guts.yml +1 -0
  6. data/assets/project_with_guts_gcov.yml +3 -0
  7. data/assets/test_example_file_verbose.c +12 -0
  8. data/bin/ceedling +30 -6
  9. data/docs/CeedlingPacket.md +135 -23
  10. data/docs/CeedlingPacket.odt +0 -0
  11. data/examples/blinky/rakefile.rb +2 -1
  12. data/lib/ceedling/configurator.rb +7 -5
  13. data/lib/ceedling/configurator_builder.rb +10 -7
  14. data/lib/ceedling/configurator_plugins.rb +29 -24
  15. data/lib/ceedling/configurator_setup.rb +0 -1
  16. data/lib/ceedling/defaults.rb +7 -2
  17. data/lib/ceedling/dependinator.rb +10 -2
  18. data/lib/ceedling/file_finder.rb +57 -49
  19. data/lib/ceedling/file_path_utils.rb +12 -4
  20. data/lib/ceedling/file_wrapper.rb +4 -0
  21. data/lib/ceedling/generator.rb +4 -3
  22. data/lib/ceedling/generator_test_results.rb +15 -13
  23. data/lib/ceedling/plugin_manager.rb +18 -18
  24. data/lib/ceedling/plugin_reportinator.rb +3 -2
  25. data/lib/ceedling/plugin_reportinator_helper.rb +2 -3
  26. data/lib/ceedling/preprocessinator_extractor.rb +2 -2
  27. data/lib/ceedling/preprocessinator_includes_handler.rb +5 -0
  28. data/lib/ceedling/rakefile.rb +1 -0
  29. data/lib/ceedling/release_invoker_helper.rb +5 -2
  30. data/lib/ceedling/rules_release.rake +2 -1
  31. data/lib/ceedling/rules_tests.rake +18 -9
  32. data/lib/ceedling/rules_tests_deep_dependencies.rake +2 -2
  33. data/lib/ceedling/task_invoker.rb +15 -3
  34. data/lib/ceedling/tasks_vendor.rake +3 -3
  35. data/lib/ceedling/test_invoker.rb +39 -12
  36. data/lib/ceedling/test_invoker_helper.rb +5 -1
  37. data/lib/ceedling/tool_executor.rb +8 -4
  38. data/lib/ceedling/version.rb +1 -1
  39. data/out.fail +21 -0
  40. data/plugins/beep/README.md +22 -0
  41. data/plugins/beep/lib/beep.rb +40 -0
  42. data/plugins/bullseye/bullseye.rake +43 -36
  43. data/plugins/bullseye/config/defaults.yml +4 -0
  44. data/plugins/bullseye/lib/bullseye.rb +27 -5
  45. data/plugins/command_hooks/lib/command_hooks.rb +3 -0
  46. data/plugins/gcov/README.md +34 -1
  47. data/plugins/gcov/config/defaults.yml +3 -3
  48. data/plugins/gcov/gcov.rake +7 -5
  49. data/plugins/gcov/lib/gcov.rb +3 -1
  50. data/plugins/gcov/lib/gcov_constants.rb +2 -0
  51. data/plugins/junit_tests_report/lib/junit_tests_report.rb +12 -9
  52. data/plugins/module_generator/lib/module_generator.rb +14 -1
  53. data/plugins/module_generator/module_generator.rake +21 -4
  54. data/plugins/raw_output_report/lib/raw_output_report.rb +41 -0
  55. data/spec/gcov/gcov_deployment_spec.rb +1 -1
  56. data/spec/gcov/gcov_test_cases_spec.rb +2 -2
  57. data/spec/generator_test_results_spec.rb +5 -0
  58. data/spec/preprocessinator_includes_handler_spec.rb +1 -0
  59. data/spec/spec_system_helper.rb +178 -4
  60. data/spec/support/test_example.fail +1 -0
  61. data/spec/support/test_example.pass +1 -0
  62. data/spec/support/test_example_empty.pass +1 -0
  63. data/spec/support/test_example_ignore.pass +1 -0
  64. data/spec/support/test_example_mangled.pass +1 -0
  65. data/spec/support/test_example_with_time.pass +22 -0
  66. data/spec/system/deployment_spec.rb +33 -0
  67. data/vendor/cmock/README.md +4 -3
  68. data/vendor/cmock/docs/CMock_Summary.md +1 -1
  69. data/vendor/cmock/lib/cmock_config.rb +4 -0
  70. data/vendor/cmock/lib/cmock_generator.rb +5 -2
  71. data/vendor/cmock/lib/cmock_generator_plugin_array.rb +4 -4
  72. data/vendor/cmock/lib/cmock_generator_plugin_callback.rb +9 -11
  73. data/vendor/cmock/lib/cmock_generator_plugin_cexception.rb +0 -1
  74. data/vendor/cmock/lib/cmock_generator_plugin_ignore.rb +2 -3
  75. data/vendor/cmock/lib/cmock_generator_plugin_ignore_arg.rb +2 -4
  76. data/vendor/cmock/lib/cmock_generator_plugin_return_thru_ptr.rb +0 -2
  77. data/vendor/cmock/lib/cmock_generator_utils.rb +16 -3
  78. data/vendor/cmock/lib/cmock_header_parser.rb +59 -34
  79. data/vendor/cmock/release/build.info +1 -1
  80. data/vendor/cmock/release/version.info +1 -1
  81. data/vendor/cmock/scripts/create_makefile.rb +17 -2
  82. data/vendor/cmock/src/cmock.c +13 -7
  83. data/vendor/cmock/test/test_helper.rb +11 -10
  84. data/vendor/cmock/test/unit/cmock_config_test.rb +4 -2
  85. data/vendor/cmock/test/unit/cmock_generator_main_test.rb +10 -4
  86. data/vendor/cmock/test/unit/cmock_generator_plugin_array_test.rb +20 -12
  87. data/vendor/cmock/test/unit/cmock_generator_plugin_expect_a_test.rb +2 -2
  88. data/vendor/cmock/test/unit/cmock_generator_plugin_expect_b_test.rb +2 -2
  89. data/vendor/cmock/test/unit/cmock_generator_plugin_ignore_arg_test.rb +3 -3
  90. data/vendor/cmock/test/unit/cmock_generator_plugin_return_thru_ptr_test.rb +8 -6
  91. data/vendor/cmock/test/unit/cmock_generator_utils_test.rb +27 -10
  92. data/vendor/cmock/test/unit/cmock_header_parser_test.rb +108 -20
  93. data/vendor/cmock/vendor/c_exception/Gemfile +4 -0
  94. data/vendor/cmock/vendor/c_exception/Gemfile.lock +12 -0
  95. data/vendor/cmock/vendor/c_exception/LICENSE.txt +30 -0
  96. data/vendor/cmock/vendor/c_exception/README.md +162 -0
  97. data/vendor/cmock/vendor/c_exception/Rakefile +42 -0
  98. data/vendor/cmock/vendor/c_exception/docs/CException.md +292 -0
  99. data/vendor/cmock/vendor/c_exception/docs/ThrowTheSwitchCodingStandard.md +207 -0
  100. data/vendor/cmock/vendor/c_exception/lib/CException.c +46 -0
  101. data/vendor/cmock/vendor/c_exception/lib/CException.h +110 -0
  102. data/vendor/cmock/vendor/c_exception/makefile +24 -0
  103. data/vendor/cmock/vendor/c_exception/release/build.info +2 -0
  104. data/vendor/cmock/vendor/c_exception/release/version.info +2 -0
  105. data/vendor/cmock/vendor/c_exception/test/CExceptionConfig.h +46 -0
  106. data/vendor/cmock/vendor/c_exception/test/TestException.c +391 -0
  107. data/vendor/cmock/vendor/c_exception/test/TestException_Runner.c +67 -0
  108. data/vendor/cmock/vendor/unity/README.md +231 -0
  109. data/vendor/cmock/vendor/unity/auto/colour_prompt.rb +118 -0
  110. data/vendor/cmock/vendor/unity/auto/colour_reporter.rb +39 -0
  111. data/vendor/cmock/vendor/unity/auto/generate_config.yml +36 -0
  112. data/vendor/cmock/vendor/unity/auto/generate_module.rb +308 -0
  113. data/vendor/cmock/vendor/unity/auto/generate_test_runner.rb +457 -0
  114. data/vendor/cmock/vendor/unity/auto/parse_output.rb +323 -0
  115. data/vendor/cmock/vendor/unity/auto/stylize_as_junit.rb +252 -0
  116. data/vendor/cmock/vendor/unity/auto/test_file_filter.rb +25 -0
  117. data/vendor/cmock/vendor/unity/auto/type_sanitizer.rb +6 -0
  118. data/vendor/cmock/vendor/unity/auto/unity_test_summary.py +139 -0
  119. data/vendor/cmock/vendor/unity/auto/unity_test_summary.rb +136 -0
  120. data/vendor/cmock/vendor/unity/auto/unity_to_junit.py +146 -0
  121. data/vendor/cmock/vendor/unity/docs/ThrowTheSwitchCodingStandard.md +206 -0
  122. data/vendor/cmock/vendor/unity/docs/UnityAssertionsCheatSheetSuitableforPrintingandPossiblyFraming.pdf +0 -0
  123. data/vendor/cmock/vendor/unity/docs/UnityAssertionsReference.md +779 -0
  124. data/vendor/cmock/vendor/unity/docs/UnityConfigurationGuide.md +433 -0
  125. data/vendor/cmock/vendor/unity/docs/UnityGettingStartedGuide.md +192 -0
  126. data/vendor/cmock/vendor/unity/docs/UnityHelperScriptsGuide.md +260 -0
  127. data/vendor/cmock/vendor/unity/docs/license.txt +21 -0
  128. data/vendor/cmock/vendor/unity/examples/example_1/makefile +71 -0
  129. data/vendor/cmock/vendor/unity/examples/example_1/readme.txt +5 -0
  130. data/vendor/cmock/vendor/unity/examples/example_1/src/ProductionCode.c +24 -0
  131. data/vendor/cmock/vendor/unity/examples/example_1/src/ProductionCode.h +3 -0
  132. data/vendor/cmock/vendor/unity/examples/example_1/src/ProductionCode2.c +11 -0
  133. data/vendor/cmock/vendor/unity/examples/example_1/src/ProductionCode2.h +2 -0
  134. data/vendor/cmock/vendor/unity/examples/example_1/test/TestProductionCode.c +62 -0
  135. data/vendor/cmock/vendor/unity/examples/example_1/test/TestProductionCode2.c +31 -0
  136. data/vendor/cmock/vendor/unity/examples/example_1/test/test_runners/TestProductionCode2_Runner.c +53 -0
  137. data/vendor/cmock/vendor/unity/examples/example_1/test/test_runners/TestProductionCode_Runner.c +57 -0
  138. data/vendor/cmock/vendor/unity/examples/example_2/makefile +70 -0
  139. data/vendor/cmock/vendor/unity/examples/example_2/readme.txt +5 -0
  140. data/vendor/cmock/vendor/unity/examples/example_2/src/ProductionCode.c +24 -0
  141. data/vendor/cmock/vendor/unity/examples/example_2/src/ProductionCode.h +3 -0
  142. data/vendor/cmock/vendor/unity/examples/example_2/src/ProductionCode2.c +11 -0
  143. data/vendor/cmock/vendor/unity/examples/example_2/src/ProductionCode2.h +2 -0
  144. data/vendor/cmock/vendor/unity/examples/example_2/test/TestProductionCode.c +64 -0
  145. data/vendor/cmock/vendor/unity/examples/example_2/test/TestProductionCode2.c +33 -0
  146. data/vendor/cmock/vendor/unity/examples/example_2/test/test_runners/TestProductionCode2_Runner.c +9 -0
  147. data/vendor/cmock/vendor/unity/examples/example_2/test/test_runners/TestProductionCode_Runner.c +11 -0
  148. data/vendor/cmock/vendor/unity/examples/example_2/test/test_runners/all_tests.c +12 -0
  149. data/vendor/cmock/vendor/unity/examples/example_3/helper/UnityHelper.c +10 -0
  150. data/vendor/cmock/vendor/unity/examples/example_3/helper/UnityHelper.h +12 -0
  151. data/vendor/cmock/vendor/unity/examples/example_3/rakefile.rb +43 -0
  152. data/vendor/cmock/vendor/unity/examples/example_3/rakefile_helper.rb +249 -0
  153. data/vendor/cmock/vendor/unity/examples/example_3/readme.txt +13 -0
  154. data/vendor/cmock/vendor/unity/examples/example_3/src/ProductionCode.c +24 -0
  155. data/vendor/cmock/vendor/unity/examples/example_3/src/ProductionCode.h +3 -0
  156. data/vendor/cmock/vendor/unity/examples/example_3/src/ProductionCode2.c +11 -0
  157. data/vendor/cmock/vendor/unity/examples/example_3/src/ProductionCode2.h +2 -0
  158. data/vendor/cmock/vendor/unity/examples/example_3/target_gcc_32.yml +46 -0
  159. data/vendor/cmock/vendor/unity/examples/example_3/test/TestProductionCode.c +62 -0
  160. data/vendor/cmock/vendor/unity/examples/example_3/test/TestProductionCode2.c +31 -0
  161. data/vendor/cmock/vendor/unity/examples/unity_config.h +247 -0
  162. data/vendor/cmock/vendor/unity/extras/eclipse/error_parsers.txt +26 -0
  163. data/vendor/cmock/vendor/unity/extras/fixture/rakefile.rb +48 -0
  164. data/vendor/cmock/vendor/unity/extras/fixture/rakefile_helper.rb +178 -0
  165. data/vendor/cmock/vendor/unity/extras/fixture/readme.txt +9 -0
  166. data/vendor/cmock/vendor/unity/extras/fixture/src/unity_fixture.c +436 -0
  167. data/vendor/cmock/vendor/unity/extras/fixture/src/unity_fixture.h +83 -0
  168. data/vendor/cmock/vendor/unity/extras/fixture/src/unity_fixture_internals.h +51 -0
  169. data/vendor/cmock/vendor/unity/extras/fixture/src/unity_fixture_malloc_overrides.h +47 -0
  170. data/vendor/cmock/vendor/unity/extras/fixture/test/Makefile +75 -0
  171. data/vendor/cmock/vendor/unity/extras/fixture/test/main/AllTests.c +22 -0
  172. data/vendor/cmock/vendor/unity/extras/fixture/test/template_fixture_tests.c +39 -0
  173. data/vendor/cmock/vendor/unity/extras/fixture/test/unity_fixture_Test.c +543 -0
  174. data/vendor/cmock/vendor/unity/extras/fixture/test/unity_fixture_TestRunner.c +57 -0
  175. data/vendor/cmock/vendor/unity/extras/fixture/test/unity_output_Spy.c +57 -0
  176. data/vendor/cmock/vendor/unity/extras/fixture/test/unity_output_Spy.h +17 -0
  177. data/vendor/cmock/vendor/unity/release/build.info +2 -0
  178. data/vendor/cmock/vendor/unity/release/version.info +2 -0
  179. data/vendor/cmock/vendor/unity/src/unity.c +1572 -0
  180. data/vendor/cmock/vendor/unity/src/unity.h +503 -0
  181. data/vendor/cmock/vendor/unity/src/unity_internals.h +924 -0
  182. data/vendor/cmock/vendor/unity/test/Makefile +68 -0
  183. data/vendor/cmock/vendor/unity/test/expectdata/testsample_cmd.c +61 -0
  184. data/vendor/cmock/vendor/unity/test/expectdata/testsample_def.c +57 -0
  185. data/vendor/cmock/vendor/unity/test/expectdata/testsample_head1.c +55 -0
  186. data/vendor/cmock/vendor/unity/test/expectdata/testsample_head1.h +15 -0
  187. data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_cmd.c +80 -0
  188. data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_def.c +76 -0
  189. data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_head1.c +75 -0
  190. data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_head1.h +13 -0
  191. data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_new1.c +89 -0
  192. data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_new2.c +89 -0
  193. data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_param.c +77 -0
  194. data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_run1.c +89 -0
  195. data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_run2.c +89 -0
  196. data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_yaml.c +90 -0
  197. data/vendor/cmock/vendor/unity/test/expectdata/testsample_new1.c +67 -0
  198. data/vendor/cmock/vendor/unity/test/expectdata/testsample_new2.c +70 -0
  199. data/vendor/cmock/vendor/unity/test/expectdata/testsample_param.c +58 -0
  200. data/vendor/cmock/vendor/unity/test/expectdata/testsample_run1.c +67 -0
  201. data/vendor/cmock/vendor/unity/test/expectdata/testsample_run2.c +70 -0
  202. data/vendor/cmock/vendor/unity/test/expectdata/testsample_yaml.c +71 -0
  203. data/vendor/cmock/vendor/unity/test/rakefile +125 -0
  204. data/vendor/cmock/vendor/unity/test/rakefile_helper.rb +260 -0
  205. data/vendor/cmock/vendor/unity/test/spec/generate_module_existing_file_spec.rb +158 -0
  206. data/vendor/cmock/vendor/unity/test/targets/clang_file.yml +78 -0
  207. data/vendor/cmock/vendor/unity/test/targets/clang_strict.yml +78 -0
  208. data/vendor/cmock/vendor/unity/test/targets/gcc_32.yml +49 -0
  209. data/vendor/cmock/vendor/unity/test/targets/gcc_64.yml +50 -0
  210. data/vendor/cmock/vendor/unity/test/targets/gcc_auto_limits.yml +47 -0
  211. data/vendor/cmock/vendor/unity/test/targets/gcc_auto_stdint.yml +59 -0
  212. data/vendor/cmock/vendor/unity/test/targets/gcc_manual_math.yml +47 -0
  213. data/vendor/cmock/vendor/unity/test/targets/hitech_picc18.yml +101 -0
  214. data/vendor/cmock/vendor/unity/test/targets/iar_arm_v4.yml +90 -0
  215. data/vendor/cmock/vendor/unity/test/targets/iar_arm_v5.yml +80 -0
  216. data/vendor/cmock/vendor/unity/test/targets/iar_arm_v5_3.yml +80 -0
  217. data/vendor/cmock/vendor/unity/test/targets/iar_armcortex_LM3S9B92_v5_4.yml +94 -0
  218. data/vendor/cmock/vendor/unity/test/targets/iar_cortexm3_v5.yml +84 -0
  219. data/vendor/cmock/vendor/unity/test/targets/iar_msp430.yml +95 -0
  220. data/vendor/cmock/vendor/unity/test/targets/iar_sh2a_v6.yml +86 -0
  221. data/vendor/cmock/vendor/unity/test/testdata/CException.h +11 -0
  222. data/vendor/cmock/vendor/unity/test/testdata/Defs.h +8 -0
  223. data/vendor/cmock/vendor/unity/test/testdata/cmock.h +14 -0
  224. data/vendor/cmock/vendor/unity/test/testdata/mockMock.h +13 -0
  225. data/vendor/cmock/vendor/unity/test/testdata/testRunnerGenerator.c +186 -0
  226. data/vendor/cmock/vendor/unity/test/testdata/testRunnerGeneratorSmall.c +70 -0
  227. data/vendor/cmock/vendor/unity/test/testdata/testRunnerGeneratorWithMocks.c +195 -0
  228. data/vendor/cmock/vendor/unity/test/tests/test_generate_test_runner.rb +1252 -0
  229. data/vendor/cmock/vendor/unity/test/tests/testparameterized.c +113 -0
  230. data/vendor/cmock/vendor/unity/test/tests/testunity.c +5371 -0
  231. data/vendor/unity/auto/generate_test_runner.rb +30 -10
  232. data/vendor/unity/auto/parse_output.rb +212 -109
  233. data/vendor/unity/docs/ThrowTheSwitchCodingStandard.md +9 -10
  234. data/vendor/unity/docs/UnityAssertionsReference.md +11 -2
  235. data/vendor/unity/docs/UnityConfigurationGuide.md +90 -55
  236. data/vendor/unity/docs/UnityGettingStartedGuide.md +6 -5
  237. data/vendor/unity/docs/UnityHelperScriptsGuide.md +23 -5
  238. data/vendor/unity/examples/unity_config.h +8 -0
  239. data/vendor/unity/extras/fixture/src/unity_fixture.c +4 -0
  240. data/vendor/unity/extras/fixture/src/unity_fixture.h +1 -1
  241. data/vendor/unity/extras/fixture/src/unity_fixture_internals.h +2 -2
  242. data/vendor/unity/release/build.info +1 -1
  243. data/vendor/unity/release/version.info +1 -1
  244. data/vendor/unity/src/unity.c +64 -57
  245. data/vendor/unity/src/unity.h +111 -7
  246. data/vendor/unity/src/unity_internals.h +173 -73
  247. data/vendor/unity/test/Makefile +5 -1
  248. data/vendor/unity/test/testdata/testRunnerGenerator.c +4 -1
  249. data/vendor/unity/test/testdata/testRunnerGeneratorSmall.c +4 -1
  250. data/vendor/unity/test/testdata/testRunnerGeneratorWithMocks.c +4 -1
  251. data/vendor/unity/test/tests/testparameterized.c +5 -2
  252. data/vendor/unity/test/tests/testunity.c +34 -0
  253. metadata +150 -2
@@ -0,0 +1,51 @@
1
+ /* Copyright (c) 2010 James Grenning and Contributed to Unity Project
2
+ * ==========================================
3
+ * Unity Project - A Test Framework for C
4
+ * Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
5
+ * [Released under MIT License. Please refer to license.txt for details]
6
+ * ========================================== */
7
+
8
+ #ifndef UNITY_FIXTURE_INTERNALS_H_
9
+ #define UNITY_FIXTURE_INTERNALS_H_
10
+
11
+ #ifdef __cplusplus
12
+ extern "C"
13
+ {
14
+ #endif
15
+
16
+ struct UNITY_FIXTURE_T
17
+ {
18
+ int Verbose;
19
+ unsigned int RepeatCount;
20
+ const char* NameFilter;
21
+ const char* GroupFilter;
22
+ };
23
+ extern struct UNITY_FIXTURE_T UnityFixture;
24
+
25
+ typedef void unityfunction(void);
26
+ void UnityTestRunner(unityfunction* setup,
27
+ unityfunction* testBody,
28
+ unityfunction* teardown,
29
+ const char* printableName,
30
+ const char* group,
31
+ const char* name,
32
+ const char* file, unsigned int line);
33
+
34
+ void UnityIgnoreTest(const char* printableName, const char* group, const char* name);
35
+ void UnityMalloc_StartTest(void);
36
+ void UnityMalloc_EndTest(void);
37
+ int UnityGetCommandLineOptions(int argc, const char* argv[]);
38
+ void UnityConcludeFixtureTest(void);
39
+
40
+ void UnityPointer_Set(void** pointer, void* newValue, UNITY_LINE_TYPE line);
41
+ void UnityPointer_UndoAllSets(void);
42
+ void UnityPointer_Init(void);
43
+ #ifndef UNITY_MAX_POINTERS
44
+ #define UNITY_MAX_POINTERS 5
45
+ #endif
46
+
47
+ #ifdef __cplusplus
48
+ }
49
+ #endif
50
+
51
+ #endif /* UNITY_FIXTURE_INTERNALS_H_ */
@@ -0,0 +1,47 @@
1
+ /* Copyright (c) 2010 James Grenning and Contributed to Unity Project
2
+ * ==========================================
3
+ * Unity Project - A Test Framework for C
4
+ * Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
5
+ * [Released under MIT License. Please refer to license.txt for details]
6
+ * ========================================== */
7
+
8
+ #ifndef UNITY_FIXTURE_MALLOC_OVERRIDES_H_
9
+ #define UNITY_FIXTURE_MALLOC_OVERRIDES_H_
10
+
11
+ #include <stddef.h>
12
+
13
+ #ifdef UNITY_EXCLUDE_STDLIB_MALLOC
14
+ /* Define this macro to remove the use of stdlib.h, malloc, and free.
15
+ * Many embedded systems do not have a heap or malloc/free by default.
16
+ * This internal unity_malloc() provides allocated memory deterministically from
17
+ * the end of an array only, unity_free() only releases from end-of-array,
18
+ * blocks are not coalesced, and memory not freed in LIFO order is stranded. */
19
+ #ifndef UNITY_INTERNAL_HEAP_SIZE_BYTES
20
+ #define UNITY_INTERNAL_HEAP_SIZE_BYTES 256
21
+ #endif
22
+ #endif
23
+
24
+ /* These functions are used by the Unity Fixture to allocate and release memory
25
+ * on the heap and can be overridden with platform-specific implementations.
26
+ * For example, when using FreeRTOS UNITY_FIXTURE_MALLOC becomes pvPortMalloc()
27
+ * and UNITY_FIXTURE_FREE becomes vPortFree(). */
28
+ #if !defined(UNITY_FIXTURE_MALLOC) || !defined(UNITY_FIXTURE_FREE)
29
+ #include <stdlib.h>
30
+ #define UNITY_FIXTURE_MALLOC(size) malloc(size)
31
+ #define UNITY_FIXTURE_FREE(ptr) free(ptr)
32
+ #else
33
+ extern void* UNITY_FIXTURE_MALLOC(size_t size);
34
+ extern void UNITY_FIXTURE_FREE(void* ptr);
35
+ #endif
36
+
37
+ #define malloc unity_malloc
38
+ #define calloc unity_calloc
39
+ #define realloc unity_realloc
40
+ #define free unity_free
41
+
42
+ void* unity_malloc(size_t size);
43
+ void* unity_calloc(size_t num, size_t size);
44
+ void* unity_realloc(void * oldMem, size_t size);
45
+ void unity_free(void * mem);
46
+
47
+ #endif /* UNITY_FIXTURE_MALLOC_OVERRIDES_H_ */
@@ -0,0 +1,75 @@
1
+ CC = gcc
2
+ ifeq ($(shell uname -s), Darwin)
3
+ CC = clang
4
+ endif
5
+ #DEBUG = -O0 -g
6
+ CFLAGS += -std=c99 -pedantic -Wall -Wextra -Werror
7
+ CFLAGS += $(DEBUG)
8
+ DEFINES = -D UNITY_OUTPUT_CHAR=UnityOutputCharSpy_OutputChar
9
+ DEFINES += -D UNITY_OUTPUT_CHAR_HEADER_DECLARATION=UnityOutputCharSpy_OutputChar\(int\)
10
+ SRC = ../src/unity_fixture.c \
11
+ ../../../src/unity.c \
12
+ unity_fixture_Test.c \
13
+ unity_fixture_TestRunner.c \
14
+ unity_output_Spy.c \
15
+ main/AllTests.c
16
+
17
+ INC_DIR = -I../src -I../../../src/
18
+ BUILD_DIR = ../build
19
+ TARGET = ../build/fixture_tests.exe
20
+
21
+ all: default noStdlibMalloc 32bits
22
+
23
+ default: $(BUILD_DIR)
24
+ $(CC) $(CFLAGS) $(DEFINES) $(SRC) $(INC_DIR) -o $(TARGET) -D UNITY_SUPPORT_64
25
+ @ echo "default build"
26
+ ./$(TARGET)
27
+
28
+ 32bits: $(BUILD_DIR)
29
+ $(CC) $(CFLAGS) $(DEFINES) $(SRC) $(INC_DIR) -o $(TARGET) -m32
30
+ @ echo "32bits build"
31
+ ./$(TARGET)
32
+
33
+ noStdlibMalloc: $(BUILD_DIR)
34
+ $(CC) $(CFLAGS) $(DEFINES) $(SRC) $(INC_DIR) -o $(TARGET) -D UNITY_EXCLUDE_STDLIB_MALLOC
35
+ @ echo "build with noStdlibMalloc"
36
+ ./$(TARGET)
37
+
38
+ C89: CFLAGS += -D UNITY_EXCLUDE_STDINT_H # C89 did not have type 'long long', <stdint.h>
39
+ C89: $(BUILD_DIR)
40
+ $(CC) $(CFLAGS) $(DEFINES) $(SRC) $(INC_DIR) -o $(TARGET) -std=c89 && ./$(TARGET)
41
+ $(CC) $(CFLAGS) $(DEFINES) $(SRC) $(INC_DIR) -o $(TARGET) -D UNITY_EXCLUDE_STDLIB_MALLOC -std=c89
42
+ ./$(TARGET)
43
+
44
+ $(BUILD_DIR):
45
+ mkdir -p $(BUILD_DIR)
46
+
47
+ clean:
48
+ rm -f $(TARGET) $(BUILD_DIR)/*.gc*
49
+
50
+ cov: $(BUILD_DIR)
51
+ cd $(BUILD_DIR) && \
52
+ $(CC) $(DEFINES) $(foreach i, $(SRC), ../test/$(i)) $(INC_DIR) -o $(TARGET) -fprofile-arcs -ftest-coverage
53
+ rm -f $(BUILD_DIR)/*.gcda
54
+ ./$(TARGET) > /dev/null ; ./$(TARGET) -v > /dev/null
55
+ cd $(BUILD_DIR) && \
56
+ gcov unity_fixture.c | head -3
57
+ grep '###' $(BUILD_DIR)/unity_fixture.c.gcov -C2 || true # Show uncovered lines
58
+
59
+ # These extended flags DO get included before any target build runs
60
+ CFLAGS += -Wbad-function-cast
61
+ CFLAGS += -Wcast-qual
62
+ CFLAGS += -Wconversion
63
+ CFLAGS += -Wformat=2
64
+ CFLAGS += -Wmissing-prototypes
65
+ CFLAGS += -Wold-style-definition
66
+ CFLAGS += -Wpointer-arith
67
+ CFLAGS += -Wshadow
68
+ CFLAGS += -Wstrict-overflow=5
69
+ CFLAGS += -Wstrict-prototypes
70
+ CFLAGS += -Wswitch-default
71
+ CFLAGS += -Wundef
72
+ CFLAGS += -Wno-error=undef # Warning only, this should not stop the build
73
+ CFLAGS += -Wunreachable-code
74
+ CFLAGS += -Wunused
75
+ CFLAGS += -fstrict-aliasing
@@ -0,0 +1,22 @@
1
+ /* Copyright (c) 2010 James Grenning and Contributed to Unity Project
2
+ * ==========================================
3
+ * Unity Project - A Test Framework for C
4
+ * Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
5
+ * [Released under MIT License. Please refer to license.txt for details]
6
+ * ========================================== */
7
+
8
+ #include "unity_fixture.h"
9
+
10
+ static void runAllTests(void)
11
+ {
12
+ RUN_TEST_GROUP(UnityFixture);
13
+ RUN_TEST_GROUP(UnityCommandOptions);
14
+ RUN_TEST_GROUP(LeakDetection);
15
+ RUN_TEST_GROUP(InternalMalloc);
16
+ }
17
+
18
+ int main(int argc, const char* argv[])
19
+ {
20
+ return UnityMain(argc, argv, runAllTests);
21
+ }
22
+
@@ -0,0 +1,39 @@
1
+ /* Copyright (c) 2010 James Grenning and Contributed to Unity Project
2
+ * ==========================================
3
+ * Unity Project - A Test Framework for C
4
+ * Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
5
+ * [Released under MIT License. Please refer to license.txt for details]
6
+ * ========================================== */
7
+
8
+ #include "unity_fixture.h"
9
+
10
+ static int data = -1;
11
+
12
+ TEST_GROUP(mygroup);
13
+
14
+ TEST_SETUP(mygroup)
15
+ {
16
+ data = 0;
17
+ }
18
+
19
+ TEST_TEAR_DOWN(mygroup)
20
+ {
21
+ data = -1;
22
+ }
23
+
24
+ TEST(mygroup, test1)
25
+ {
26
+ TEST_ASSERT_EQUAL_INT(0, data);
27
+ }
28
+
29
+ TEST(mygroup, test2)
30
+ {
31
+ TEST_ASSERT_EQUAL_INT(0, data);
32
+ data = 5;
33
+ }
34
+
35
+ TEST(mygroup, test3)
36
+ {
37
+ data = 7;
38
+ TEST_ASSERT_EQUAL_INT(7, data);
39
+ }
@@ -0,0 +1,543 @@
1
+ /* Copyright (c) 2010 James Grenning and Contributed to Unity Project
2
+ * ==========================================
3
+ * Unity Project - A Test Framework for C
4
+ * Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
5
+ * [Released under MIT License. Please refer to license.txt for details]
6
+ * ========================================== */
7
+
8
+ #include "unity_fixture.h"
9
+ #include "unity_output_Spy.h"
10
+ #include <stdlib.h>
11
+ #include <string.h>
12
+
13
+ TEST_GROUP(UnityFixture);
14
+
15
+ TEST_SETUP(UnityFixture)
16
+ {
17
+ }
18
+
19
+ TEST_TEAR_DOWN(UnityFixture)
20
+ {
21
+ }
22
+
23
+ static int* pointer1 = 0;
24
+ static int* pointer2 = (int*)2;
25
+ static int* pointer3 = (int*)3;
26
+ static int int1;
27
+ static int int2;
28
+ static int int3;
29
+ static int int4;
30
+
31
+ TEST(UnityFixture, PointerSetting)
32
+ {
33
+ TEST_ASSERT_POINTERS_EQUAL(pointer1, 0);
34
+ UT_PTR_SET(pointer1, &int1);
35
+ UT_PTR_SET(pointer2, &int2);
36
+ UT_PTR_SET(pointer3, &int3);
37
+ TEST_ASSERT_POINTERS_EQUAL(pointer1, &int1);
38
+ TEST_ASSERT_POINTERS_EQUAL(pointer2, &int2);
39
+ TEST_ASSERT_POINTERS_EQUAL(pointer3, &int3);
40
+ UT_PTR_SET(pointer1, &int4);
41
+ UnityPointer_UndoAllSets();
42
+ TEST_ASSERT_POINTERS_EQUAL(pointer1, 0);
43
+ TEST_ASSERT_POINTERS_EQUAL(pointer2, (int*)2);
44
+ TEST_ASSERT_POINTERS_EQUAL(pointer3, (int*)3);
45
+ }
46
+
47
+ TEST(UnityFixture, ForceMallocFail)
48
+ {
49
+ void* m;
50
+ void* mfails;
51
+ UnityMalloc_MakeMallocFailAfterCount(1);
52
+ m = malloc(10);
53
+ CHECK(m);
54
+ mfails = malloc(10);
55
+ TEST_ASSERT_POINTERS_EQUAL(0, mfails);
56
+ free(m);
57
+ }
58
+
59
+ TEST(UnityFixture, ReallocSmallerIsUnchanged)
60
+ {
61
+ void* m1 = malloc(10);
62
+ void* m2 = realloc(m1, 5);
63
+ TEST_ASSERT_POINTERS_EQUAL(m1, m2);
64
+ free(m2);
65
+ }
66
+
67
+ TEST(UnityFixture, ReallocSameIsUnchanged)
68
+ {
69
+ void* m1 = malloc(10);
70
+ void* m2 = realloc(m1, 10);
71
+ TEST_ASSERT_POINTERS_EQUAL(m1, m2);
72
+ free(m2);
73
+ }
74
+
75
+ TEST(UnityFixture, ReallocLargerNeeded)
76
+ {
77
+ void* m1 = malloc(10);
78
+ void* m2;
79
+ CHECK(m1);
80
+ strcpy((char*)m1, "123456789");
81
+ m2 = realloc(m1, 15);
82
+ /* CHECK(m1 != m2); //Depends on implementation */
83
+ STRCMP_EQUAL("123456789", m2);
84
+ free(m2);
85
+ }
86
+
87
+ TEST(UnityFixture, ReallocNullPointerIsLikeMalloc)
88
+ {
89
+ void* m = realloc(0, 15);
90
+ CHECK(m != 0);
91
+ free(m);
92
+ }
93
+
94
+ TEST(UnityFixture, ReallocSizeZeroFreesMemAndReturnsNullPointer)
95
+ {
96
+ void* m1 = malloc(10);
97
+ void* m2 = realloc(m1, 0);
98
+ TEST_ASSERT_POINTERS_EQUAL(0, m2);
99
+ }
100
+
101
+ TEST(UnityFixture, CallocFillsWithZero)
102
+ {
103
+ void* m = calloc(3, sizeof(char));
104
+ char* s = (char*)m;
105
+ CHECK(m);
106
+ TEST_ASSERT_BYTES_EQUAL(0, s[0]);
107
+ TEST_ASSERT_BYTES_EQUAL(0, s[1]);
108
+ TEST_ASSERT_BYTES_EQUAL(0, s[2]);
109
+ free(m);
110
+ }
111
+
112
+ static char *p1;
113
+ static char *p2;
114
+
115
+ TEST(UnityFixture, PointerSet)
116
+ {
117
+ char c1;
118
+ char c2;
119
+ char newC1;
120
+ char newC2;
121
+ p1 = &c1;
122
+ p2 = &c2;
123
+
124
+ UnityPointer_Init();
125
+ UT_PTR_SET(p1, &newC1);
126
+ UT_PTR_SET(p2, &newC2);
127
+ TEST_ASSERT_POINTERS_EQUAL(&newC1, p1);
128
+ TEST_ASSERT_POINTERS_EQUAL(&newC2, p2);
129
+ UnityPointer_UndoAllSets();
130
+ TEST_ASSERT_POINTERS_EQUAL(&c1, p1);
131
+ TEST_ASSERT_POINTERS_EQUAL(&c2, p2);
132
+ }
133
+
134
+ TEST(UnityFixture, FreeNULLSafety)
135
+ {
136
+ free(NULL);
137
+ }
138
+
139
+ TEST(UnityFixture, ConcludeTestIncrementsFailCount)
140
+ {
141
+ UNITY_UINT savedFails = Unity.TestFailures;
142
+ UNITY_UINT savedIgnores = Unity.TestIgnores;
143
+ UnityOutputCharSpy_Enable(1);
144
+ Unity.CurrentTestFailed = 1;
145
+ UnityConcludeFixtureTest(); /* Resets TestFailed for this test to pass */
146
+ Unity.CurrentTestIgnored = 1;
147
+ UnityConcludeFixtureTest(); /* Resets TestIgnored */
148
+ UnityOutputCharSpy_Enable(0);
149
+ TEST_ASSERT_EQUAL(savedFails + 1, Unity.TestFailures);
150
+ TEST_ASSERT_EQUAL(savedIgnores + 1, Unity.TestIgnores);
151
+ Unity.TestFailures = savedFails;
152
+ Unity.TestIgnores = savedIgnores;
153
+ }
154
+
155
+ /*------------------------------------------------------------ */
156
+
157
+ TEST_GROUP(UnityCommandOptions);
158
+
159
+ static int savedVerbose;
160
+ static unsigned int savedRepeat;
161
+ static const char* savedName;
162
+ static const char* savedGroup;
163
+
164
+ TEST_SETUP(UnityCommandOptions)
165
+ {
166
+ savedVerbose = UnityFixture.Verbose;
167
+ savedRepeat = UnityFixture.RepeatCount;
168
+ savedName = UnityFixture.NameFilter;
169
+ savedGroup = UnityFixture.GroupFilter;
170
+ }
171
+
172
+ TEST_TEAR_DOWN(UnityCommandOptions)
173
+ {
174
+ UnityFixture.Verbose = savedVerbose;
175
+ UnityFixture.RepeatCount= savedRepeat;
176
+ UnityFixture.NameFilter = savedName;
177
+ UnityFixture.GroupFilter = savedGroup;
178
+ }
179
+
180
+
181
+ static const char* noOptions[] = {
182
+ "testrunner.exe"
183
+ };
184
+
185
+ TEST(UnityCommandOptions, DefaultOptions)
186
+ {
187
+ UnityGetCommandLineOptions(1, noOptions);
188
+ TEST_ASSERT_EQUAL(0, UnityFixture.Verbose);
189
+ TEST_ASSERT_POINTERS_EQUAL(0, UnityFixture.GroupFilter);
190
+ TEST_ASSERT_POINTERS_EQUAL(0, UnityFixture.NameFilter);
191
+ TEST_ASSERT_EQUAL(1, UnityFixture.RepeatCount);
192
+ }
193
+
194
+ static const char* verbose[] = {
195
+ "testrunner.exe",
196
+ "-v"
197
+ };
198
+
199
+ TEST(UnityCommandOptions, OptionVerbose)
200
+ {
201
+ TEST_ASSERT_EQUAL(0, UnityGetCommandLineOptions(2, verbose));
202
+ TEST_ASSERT_EQUAL(1, UnityFixture.Verbose);
203
+ }
204
+
205
+ static const char* group[] = {
206
+ "testrunner.exe",
207
+ "-g", "groupname"
208
+ };
209
+
210
+ TEST(UnityCommandOptions, OptionSelectTestByGroup)
211
+ {
212
+ TEST_ASSERT_EQUAL(0, UnityGetCommandLineOptions(3, group));
213
+ STRCMP_EQUAL("groupname", UnityFixture.GroupFilter);
214
+ }
215
+
216
+ static const char* name[] = {
217
+ "testrunner.exe",
218
+ "-n", "testname"
219
+ };
220
+
221
+ TEST(UnityCommandOptions, OptionSelectTestByName)
222
+ {
223
+ TEST_ASSERT_EQUAL(0, UnityGetCommandLineOptions(3, name));
224
+ STRCMP_EQUAL("testname", UnityFixture.NameFilter);
225
+ }
226
+
227
+ static const char* repeat[] = {
228
+ "testrunner.exe",
229
+ "-r", "99"
230
+ };
231
+
232
+ TEST(UnityCommandOptions, OptionSelectRepeatTestsDefaultCount)
233
+ {
234
+ TEST_ASSERT_EQUAL(0, UnityGetCommandLineOptions(2, repeat));
235
+ TEST_ASSERT_EQUAL(2, UnityFixture.RepeatCount);
236
+ }
237
+
238
+ TEST(UnityCommandOptions, OptionSelectRepeatTestsSpecificCount)
239
+ {
240
+ TEST_ASSERT_EQUAL(0, UnityGetCommandLineOptions(3, repeat));
241
+ TEST_ASSERT_EQUAL(99, UnityFixture.RepeatCount);
242
+ }
243
+
244
+ static const char* multiple[] = {
245
+ "testrunner.exe",
246
+ "-v",
247
+ "-g", "groupname",
248
+ "-n", "testname",
249
+ "-r", "98"
250
+ };
251
+
252
+ TEST(UnityCommandOptions, MultipleOptions)
253
+ {
254
+ TEST_ASSERT_EQUAL(0, UnityGetCommandLineOptions(8, multiple));
255
+ TEST_ASSERT_EQUAL(1, UnityFixture.Verbose);
256
+ STRCMP_EQUAL("groupname", UnityFixture.GroupFilter);
257
+ STRCMP_EQUAL("testname", UnityFixture.NameFilter);
258
+ TEST_ASSERT_EQUAL(98, UnityFixture.RepeatCount);
259
+ }
260
+
261
+ static const char* dashRNotLast[] = {
262
+ "testrunner.exe",
263
+ "-v",
264
+ "-g", "gggg",
265
+ "-r",
266
+ "-n", "tttt",
267
+ };
268
+
269
+ TEST(UnityCommandOptions, MultipleOptionsDashRNotLastAndNoValueSpecified)
270
+ {
271
+ TEST_ASSERT_EQUAL(0, UnityGetCommandLineOptions(7, dashRNotLast));
272
+ TEST_ASSERT_EQUAL(1, UnityFixture.Verbose);
273
+ STRCMP_EQUAL("gggg", UnityFixture.GroupFilter);
274
+ STRCMP_EQUAL("tttt", UnityFixture.NameFilter);
275
+ TEST_ASSERT_EQUAL(2, UnityFixture.RepeatCount);
276
+ }
277
+
278
+ static const char* unknownCommand[] = {
279
+ "testrunner.exe",
280
+ "-v",
281
+ "-g", "groupname",
282
+ "-n", "testname",
283
+ "-r", "98",
284
+ "-z"
285
+ };
286
+ TEST(UnityCommandOptions, UnknownCommandIsIgnored)
287
+ {
288
+ TEST_ASSERT_EQUAL(0, UnityGetCommandLineOptions(9, unknownCommand));
289
+ TEST_ASSERT_EQUAL(1, UnityFixture.Verbose);
290
+ STRCMP_EQUAL("groupname", UnityFixture.GroupFilter);
291
+ STRCMP_EQUAL("testname", UnityFixture.NameFilter);
292
+ TEST_ASSERT_EQUAL(98, UnityFixture.RepeatCount);
293
+ }
294
+
295
+ TEST(UnityCommandOptions, GroupOrNameFilterWithoutStringFails)
296
+ {
297
+ TEST_ASSERT_EQUAL(1, UnityGetCommandLineOptions(3, unknownCommand));
298
+ TEST_ASSERT_EQUAL(1, UnityGetCommandLineOptions(5, unknownCommand));
299
+ TEST_ASSERT_EQUAL(1, UnityMain(3, unknownCommand, NULL));
300
+ }
301
+
302
+ TEST(UnityCommandOptions, GroupFilterReallyFilters)
303
+ {
304
+ UNITY_UINT saved = Unity.NumberOfTests;
305
+ TEST_ASSERT_EQUAL(0, UnityGetCommandLineOptions(4, unknownCommand));
306
+ UnityIgnoreTest(NULL, "non-matching", NULL);
307
+ TEST_ASSERT_EQUAL(saved, Unity.NumberOfTests);
308
+ }
309
+
310
+ IGNORE_TEST(UnityCommandOptions, TestShouldBeIgnored)
311
+ {
312
+ TEST_FAIL_MESSAGE("This test should not run!");
313
+ }
314
+
315
+ /*------------------------------------------------------------ */
316
+
317
+ TEST_GROUP(LeakDetection);
318
+
319
+ TEST_SETUP(LeakDetection)
320
+ {
321
+ #ifdef UNITY_EXCLUDE_STDLIB_MALLOC
322
+ UnityOutputCharSpy_Create(200);
323
+ #else
324
+ UnityOutputCharSpy_Create(1000);
325
+ #endif
326
+ }
327
+
328
+ TEST_TEAR_DOWN(LeakDetection)
329
+ {
330
+ UnityOutputCharSpy_Destroy();
331
+ }
332
+
333
+ #define EXPECT_ABORT_BEGIN \
334
+ { \
335
+ jmp_buf TestAbortFrame; \
336
+ memcpy(TestAbortFrame, Unity.AbortFrame, sizeof(jmp_buf)); \
337
+ if (TEST_PROTECT()) \
338
+ {
339
+
340
+ #define EXPECT_ABORT_END \
341
+ } \
342
+ memcpy(Unity.AbortFrame, TestAbortFrame, sizeof(jmp_buf)); \
343
+ }
344
+
345
+ /* This tricky set of defines lets us see if we are using the Spy, returns 1 if true */
346
+ #ifdef __STDC_VERSION__
347
+
348
+ #if __STDC_VERSION__ >= 199901L
349
+ #define USING_SPY_AS(a) EXPAND_AND_USE_2ND(ASSIGN_VALUE(a), 0)
350
+ #define ASSIGN_VALUE(a) VAL_##a
351
+ #define VAL_UnityOutputCharSpy_OutputChar 0, 1
352
+ #define EXPAND_AND_USE_2ND(a, b) SECOND_PARAM(a, b, throwaway)
353
+ #define SECOND_PARAM(a, b, ...) b
354
+ #if USING_SPY_AS(UNITY_OUTPUT_CHAR)
355
+ #define USING_OUTPUT_SPY /* UNITY_OUTPUT_CHAR = UnityOutputCharSpy_OutputChar */
356
+ #endif
357
+ #endif /* >= 199901 */
358
+
359
+ #else /* __STDC_VERSION__ else */
360
+ #define UnityOutputCharSpy_OutputChar 42
361
+ #if UNITY_OUTPUT_CHAR == UnityOutputCharSpy_OutputChar /* Works if no -Wundef -Werror */
362
+ #define USING_OUTPUT_SPY
363
+ #endif
364
+ #undef UnityOutputCharSpy_OutputChar
365
+ #endif /* __STDC_VERSION__ */
366
+
367
+ TEST(LeakDetection, DetectsLeak)
368
+ {
369
+ #ifndef USING_OUTPUT_SPY
370
+ TEST_IGNORE_MESSAGE("Build with '-D UNITY_OUTPUT_CHAR=UnityOutputCharSpy_OutputChar' to enable tests");
371
+ #else
372
+ void* m = malloc(10);
373
+ TEST_ASSERT_NOT_NULL(m);
374
+ UnityOutputCharSpy_Enable(1);
375
+ EXPECT_ABORT_BEGIN
376
+ UnityMalloc_EndTest();
377
+ EXPECT_ABORT_END
378
+ UnityOutputCharSpy_Enable(0);
379
+ Unity.CurrentTestFailed = 0;
380
+ CHECK(strstr(UnityOutputCharSpy_Get(), "This test leaks!"));
381
+ free(m);
382
+ #endif
383
+ }
384
+
385
+ TEST(LeakDetection, BufferOverrunFoundDuringFree)
386
+ {
387
+ #ifndef USING_OUTPUT_SPY
388
+ TEST_IGNORE();
389
+ #else
390
+ void* m = malloc(10);
391
+ char* s = (char*)m;
392
+ TEST_ASSERT_NOT_NULL(m);
393
+ s[10] = (char)0xFF;
394
+ UnityOutputCharSpy_Enable(1);
395
+ EXPECT_ABORT_BEGIN
396
+ free(m);
397
+ EXPECT_ABORT_END
398
+ UnityOutputCharSpy_Enable(0);
399
+ Unity.CurrentTestFailed = 0;
400
+ CHECK(strstr(UnityOutputCharSpy_Get(), "Buffer overrun detected during free()"));
401
+ #endif
402
+ }
403
+
404
+ TEST(LeakDetection, BufferOverrunFoundDuringRealloc)
405
+ {
406
+ #ifndef USING_OUTPUT_SPY
407
+ TEST_IGNORE();
408
+ #else
409
+ void* m = malloc(10);
410
+ char* s = (char*)m;
411
+ TEST_ASSERT_NOT_NULL(m);
412
+ s[10] = (char)0xFF;
413
+ UnityOutputCharSpy_Enable(1);
414
+ EXPECT_ABORT_BEGIN
415
+ m = realloc(m, 100);
416
+ EXPECT_ABORT_END
417
+ UnityOutputCharSpy_Enable(0);
418
+ Unity.CurrentTestFailed = 0;
419
+ CHECK(strstr(UnityOutputCharSpy_Get(), "Buffer overrun detected during realloc()"));
420
+ #endif
421
+ }
422
+
423
+ TEST(LeakDetection, BufferGuardWriteFoundDuringFree)
424
+ {
425
+ #ifndef USING_OUTPUT_SPY
426
+ TEST_IGNORE();
427
+ #else
428
+ void* m = malloc(10);
429
+ char* s = (char*)m;
430
+ TEST_ASSERT_NOT_NULL(m);
431
+ s[-1] = (char)0x00; /* Will not detect 0 */
432
+ s[-2] = (char)0x01;
433
+ UnityOutputCharSpy_Enable(1);
434
+ EXPECT_ABORT_BEGIN
435
+ free(m);
436
+ EXPECT_ABORT_END
437
+ UnityOutputCharSpy_Enable(0);
438
+ Unity.CurrentTestFailed = 0;
439
+ CHECK(strstr(UnityOutputCharSpy_Get(), "Buffer overrun detected during free()"));
440
+ #endif
441
+ }
442
+
443
+ TEST(LeakDetection, BufferGuardWriteFoundDuringRealloc)
444
+ {
445
+ #ifndef USING_OUTPUT_SPY
446
+ TEST_IGNORE();
447
+ #else
448
+ void* m = malloc(10);
449
+ char* s = (char*)m;
450
+ TEST_ASSERT_NOT_NULL(m);
451
+ s[-1] = (char)0x0A;
452
+ UnityOutputCharSpy_Enable(1);
453
+ EXPECT_ABORT_BEGIN
454
+ m = realloc(m, 100);
455
+ EXPECT_ABORT_END
456
+ UnityOutputCharSpy_Enable(0);
457
+ Unity.CurrentTestFailed = 0;
458
+ CHECK(strstr(UnityOutputCharSpy_Get(), "Buffer overrun detected during realloc()"));
459
+ #endif
460
+ }
461
+
462
+ TEST(LeakDetection, PointerSettingMax)
463
+ {
464
+ #ifndef USING_OUTPUT_SPY
465
+ TEST_IGNORE();
466
+ #else
467
+ int i;
468
+ for (i = 0; i < UNITY_MAX_POINTERS; i++) UT_PTR_SET(pointer1, &int1);
469
+ UnityOutputCharSpy_Enable(1);
470
+ EXPECT_ABORT_BEGIN
471
+ UT_PTR_SET(pointer1, &int1);
472
+ EXPECT_ABORT_END
473
+ UnityOutputCharSpy_Enable(0);
474
+ Unity.CurrentTestFailed = 0;
475
+ CHECK(strstr(UnityOutputCharSpy_Get(), "Too many pointers set"));
476
+ #endif
477
+ }
478
+
479
+ /*------------------------------------------------------------ */
480
+
481
+ TEST_GROUP(InternalMalloc);
482
+ #define TEST_ASSERT_MEMORY_ALL_FREE_LIFO_ORDER(first_mem_ptr, ptr) \
483
+ ptr = malloc(10); free(ptr); \
484
+ TEST_ASSERT_EQUAL_PTR_MESSAGE(first_mem_ptr, ptr, "Memory was stranded, free in LIFO order");
485
+
486
+
487
+ TEST_SETUP(InternalMalloc) { }
488
+ TEST_TEAR_DOWN(InternalMalloc) { }
489
+
490
+ TEST(InternalMalloc, MallocPastBufferFails)
491
+ {
492
+ #ifdef UNITY_EXCLUDE_STDLIB_MALLOC
493
+ void* m = malloc(UNITY_INTERNAL_HEAP_SIZE_BYTES/2 + 1);
494
+ void* n = malloc(UNITY_INTERNAL_HEAP_SIZE_BYTES/2);
495
+ free(m);
496
+ TEST_ASSERT_NOT_NULL(m);
497
+ TEST_ASSERT_NULL(n);
498
+ TEST_ASSERT_MEMORY_ALL_FREE_LIFO_ORDER(m, n);
499
+ #endif
500
+ }
501
+
502
+ TEST(InternalMalloc, CallocPastBufferFails)
503
+ {
504
+ #ifdef UNITY_EXCLUDE_STDLIB_MALLOC
505
+ void* m = calloc(1, UNITY_INTERNAL_HEAP_SIZE_BYTES/2 + 1);
506
+ void* n = calloc(1, UNITY_INTERNAL_HEAP_SIZE_BYTES/2);
507
+ free(m);
508
+ TEST_ASSERT_NOT_NULL(m);
509
+ TEST_ASSERT_NULL(n);
510
+ TEST_ASSERT_MEMORY_ALL_FREE_LIFO_ORDER(m, n);
511
+ #endif
512
+ }
513
+
514
+ TEST(InternalMalloc, MallocThenReallocGrowsMemoryInPlace)
515
+ {
516
+ #ifdef UNITY_EXCLUDE_STDLIB_MALLOC
517
+ void* m = malloc(UNITY_INTERNAL_HEAP_SIZE_BYTES/2 + 1);
518
+ void* n = realloc(m, UNITY_INTERNAL_HEAP_SIZE_BYTES/2 + 9);
519
+ free(n);
520
+ TEST_ASSERT_NOT_NULL(m);
521
+ TEST_ASSERT_EQUAL(m, n);
522
+ TEST_ASSERT_MEMORY_ALL_FREE_LIFO_ORDER(m, n);
523
+ #endif
524
+ }
525
+
526
+ TEST(InternalMalloc, ReallocFailDoesNotFreeMem)
527
+ {
528
+ #ifdef UNITY_EXCLUDE_STDLIB_MALLOC
529
+ void* m = malloc(UNITY_INTERNAL_HEAP_SIZE_BYTES/2);
530
+ void* n1 = malloc(10);
531
+ void* out_of_mem = realloc(n1, UNITY_INTERNAL_HEAP_SIZE_BYTES/2 + 1);
532
+ void* n2 = malloc(10);
533
+
534
+ free(n2);
535
+ if (out_of_mem == NULL) free(n1);
536
+ free(m);
537
+
538
+ TEST_ASSERT_NOT_NULL(m); /* Got a real memory location */
539
+ TEST_ASSERT_NULL(out_of_mem); /* The realloc should have failed */
540
+ TEST_ASSERT_NOT_EQUAL(n2, n1); /* If n1 != n2 then realloc did not free n1 */
541
+ TEST_ASSERT_MEMORY_ALL_FREE_LIFO_ORDER(m, n2);
542
+ #endif
543
+ }