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,9 @@
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
+ This Framework is an optional add-on to Unity. By including unity_framework.h in place of unity.h,
8
+ you may now work with Unity in a manner similar to CppUTest. This framework adds the concepts of
9
+ test groups and gives finer control of your tests over the command line.
@@ -0,0 +1,436 @@
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_internals.h"
10
+ #include <string.h>
11
+
12
+ struct UNITY_FIXTURE_T UnityFixture;
13
+
14
+ /* If you decide to use the function pointer approach.
15
+ * Build with -D UNITY_OUTPUT_CHAR=outputChar and include <stdio.h>
16
+ * int (*outputChar)(int) = putchar; */
17
+
18
+ #if !defined(UNITY_WEAK_ATTRIBUTE) && !defined(UNITY_WEAK_PRAGMA)
19
+ void setUp(void) { /*does nothing*/ }
20
+ void tearDown(void) { /*does nothing*/ }
21
+ #endif
22
+
23
+ static void announceTestRun(unsigned int runNumber)
24
+ {
25
+ UnityPrint("Unity test run ");
26
+ UnityPrintNumberUnsigned(runNumber+1);
27
+ UnityPrint(" of ");
28
+ UnityPrintNumberUnsigned(UnityFixture.RepeatCount);
29
+ UNITY_PRINT_EOL();
30
+ }
31
+
32
+ int UnityMain(int argc, const char* argv[], void (*runAllTests)(void))
33
+ {
34
+ int result = UnityGetCommandLineOptions(argc, argv);
35
+ unsigned int r;
36
+ if (result != 0)
37
+ return result;
38
+
39
+ for (r = 0; r < UnityFixture.RepeatCount; r++)
40
+ {
41
+ UnityBegin(argv[0]);
42
+ announceTestRun(r);
43
+ runAllTests();
44
+ if (!UnityFixture.Verbose) UNITY_PRINT_EOL();
45
+ UnityEnd();
46
+ }
47
+
48
+ return (int)Unity.TestFailures;
49
+ }
50
+
51
+ static int selected(const char* filter, const char* name)
52
+ {
53
+ if (filter == 0)
54
+ return 1;
55
+ return strstr(name, filter) ? 1 : 0;
56
+ }
57
+
58
+ static int testSelected(const char* test)
59
+ {
60
+ return selected(UnityFixture.NameFilter, test);
61
+ }
62
+
63
+ static int groupSelected(const char* group)
64
+ {
65
+ return selected(UnityFixture.GroupFilter, group);
66
+ }
67
+
68
+ void UnityTestRunner(unityfunction* setup,
69
+ unityfunction* testBody,
70
+ unityfunction* teardown,
71
+ const char* printableName,
72
+ const char* group,
73
+ const char* name,
74
+ const char* file,
75
+ unsigned int line)
76
+ {
77
+ if (testSelected(name) && groupSelected(group))
78
+ {
79
+ Unity.TestFile = file;
80
+ Unity.CurrentTestName = printableName;
81
+ Unity.CurrentTestLineNumber = line;
82
+ if (!UnityFixture.Verbose)
83
+ UNITY_OUTPUT_CHAR('.');
84
+ else
85
+ {
86
+ UnityPrint(printableName);
87
+ #ifndef UNITY_REPEAT_TEST_NAME
88
+ Unity.CurrentTestName = NULL;
89
+ #endif
90
+ }
91
+
92
+ Unity.NumberOfTests++;
93
+ UnityMalloc_StartTest();
94
+ UnityPointer_Init();
95
+
96
+ UNITY_EXEC_TIME_START();
97
+
98
+ if (TEST_PROTECT())
99
+ {
100
+ setup();
101
+ testBody();
102
+ }
103
+ if (TEST_PROTECT())
104
+ {
105
+ teardown();
106
+ }
107
+ if (TEST_PROTECT())
108
+ {
109
+ UnityPointer_UndoAllSets();
110
+ if (!Unity.CurrentTestFailed)
111
+ UnityMalloc_EndTest();
112
+ }
113
+ UnityConcludeFixtureTest();
114
+ }
115
+ }
116
+
117
+ void UnityIgnoreTest(const char* printableName, const char* group, const char* name)
118
+ {
119
+ if (testSelected(name) && groupSelected(group))
120
+ {
121
+ Unity.NumberOfTests++;
122
+ Unity.TestIgnores++;
123
+ if (!UnityFixture.Verbose)
124
+ UNITY_OUTPUT_CHAR('!');
125
+ else
126
+ {
127
+ UnityPrint(printableName);
128
+ UNITY_PRINT_EOL();
129
+ }
130
+ }
131
+ }
132
+
133
+
134
+ /*------------------------------------------------- */
135
+ /* Malloc and free stuff */
136
+ #define MALLOC_DONT_FAIL -1
137
+ static int malloc_count;
138
+ static int malloc_fail_countdown = MALLOC_DONT_FAIL;
139
+
140
+ void UnityMalloc_StartTest(void)
141
+ {
142
+ malloc_count = 0;
143
+ malloc_fail_countdown = MALLOC_DONT_FAIL;
144
+ }
145
+
146
+ void UnityMalloc_EndTest(void)
147
+ {
148
+ malloc_fail_countdown = MALLOC_DONT_FAIL;
149
+ if (malloc_count != 0)
150
+ {
151
+ UNITY_TEST_FAIL(Unity.CurrentTestLineNumber, "This test leaks!");
152
+ }
153
+ }
154
+
155
+ void UnityMalloc_MakeMallocFailAfterCount(int countdown)
156
+ {
157
+ malloc_fail_countdown = countdown;
158
+ }
159
+
160
+ /* These definitions are always included from unity_fixture_malloc_overrides.h */
161
+ /* We undef to use them or avoid conflict with <stdlib.h> per the C standard */
162
+ #undef malloc
163
+ #undef free
164
+ #undef calloc
165
+ #undef realloc
166
+
167
+ #ifdef UNITY_EXCLUDE_STDLIB_MALLOC
168
+ static unsigned char unity_heap[UNITY_INTERNAL_HEAP_SIZE_BYTES];
169
+ static size_t heap_index;
170
+ #else
171
+ #include <stdlib.h>
172
+ #endif
173
+
174
+ typedef struct GuardBytes
175
+ {
176
+ size_t size;
177
+ size_t guard_space;
178
+ } Guard;
179
+
180
+
181
+ static const char end[] = "END";
182
+
183
+ void* unity_malloc(size_t size)
184
+ {
185
+ char* mem;
186
+ Guard* guard;
187
+ size_t total_size = size + sizeof(Guard) + sizeof(end);
188
+
189
+ if (malloc_fail_countdown != MALLOC_DONT_FAIL)
190
+ {
191
+ if (malloc_fail_countdown == 0)
192
+ return NULL;
193
+ malloc_fail_countdown--;
194
+ }
195
+
196
+ if (size == 0) return NULL;
197
+ #ifdef UNITY_EXCLUDE_STDLIB_MALLOC
198
+ if (heap_index + total_size > UNITY_INTERNAL_HEAP_SIZE_BYTES)
199
+ {
200
+ guard = NULL;
201
+ }
202
+ else
203
+ {
204
+ guard = (Guard*)&unity_heap[heap_index];
205
+ heap_index += total_size;
206
+ }
207
+ #else
208
+ guard = (Guard*)UNITY_FIXTURE_MALLOC(total_size);
209
+ #endif
210
+ if (guard == NULL) return NULL;
211
+ malloc_count++;
212
+ guard->size = size;
213
+ guard->guard_space = 0;
214
+ mem = (char*)&(guard[1]);
215
+ memcpy(&mem[size], end, sizeof(end));
216
+
217
+ return (void*)mem;
218
+ }
219
+
220
+ static int isOverrun(void* mem)
221
+ {
222
+ Guard* guard = (Guard*)mem;
223
+ char* memAsChar = (char*)mem;
224
+ guard--;
225
+
226
+ return guard->guard_space != 0 || strcmp(&memAsChar[guard->size], end) != 0;
227
+ }
228
+
229
+ static void release_memory(void* mem)
230
+ {
231
+ Guard* guard = (Guard*)mem;
232
+ guard--;
233
+
234
+ malloc_count--;
235
+ #ifdef UNITY_EXCLUDE_STDLIB_MALLOC
236
+ if (mem == unity_heap + heap_index - guard->size - sizeof(end))
237
+ {
238
+ heap_index -= (guard->size + sizeof(Guard) + sizeof(end));
239
+ }
240
+ #else
241
+ UNITY_FIXTURE_FREE(guard);
242
+ #endif
243
+ }
244
+
245
+ void unity_free(void* mem)
246
+ {
247
+ int overrun;
248
+
249
+ if (mem == NULL)
250
+ {
251
+ return;
252
+ }
253
+
254
+ overrun = isOverrun(mem);
255
+ release_memory(mem);
256
+ if (overrun)
257
+ {
258
+ UNITY_TEST_FAIL(Unity.CurrentTestLineNumber, "Buffer overrun detected during free()");
259
+ }
260
+ }
261
+
262
+ void* unity_calloc(size_t num, size_t size)
263
+ {
264
+ void* mem = unity_malloc(num * size);
265
+ if (mem == NULL) return NULL;
266
+ memset(mem, 0, num * size);
267
+ return mem;
268
+ }
269
+
270
+ void* unity_realloc(void* oldMem, size_t size)
271
+ {
272
+ Guard* guard = (Guard*)oldMem;
273
+ void* newMem;
274
+
275
+ if (oldMem == NULL) return unity_malloc(size);
276
+
277
+ guard--;
278
+ if (isOverrun(oldMem))
279
+ {
280
+ release_memory(oldMem);
281
+ UNITY_TEST_FAIL(Unity.CurrentTestLineNumber, "Buffer overrun detected during realloc()");
282
+ }
283
+
284
+ if (size == 0)
285
+ {
286
+ release_memory(oldMem);
287
+ return NULL;
288
+ }
289
+
290
+ if (guard->size >= size) return oldMem;
291
+
292
+ #ifdef UNITY_EXCLUDE_STDLIB_MALLOC /* Optimization if memory is expandable */
293
+ if (oldMem == unity_heap + heap_index - guard->size - sizeof(end) &&
294
+ heap_index + size - guard->size <= UNITY_INTERNAL_HEAP_SIZE_BYTES)
295
+ {
296
+ release_memory(oldMem); /* Not thread-safe, like unity_heap generally */
297
+ return unity_malloc(size); /* No memcpy since data is in place */
298
+ }
299
+ #endif
300
+ newMem = unity_malloc(size);
301
+ if (newMem == NULL) return NULL; /* Do not release old memory */
302
+ memcpy(newMem, oldMem, guard->size);
303
+ release_memory(oldMem);
304
+ return newMem;
305
+ }
306
+
307
+
308
+ /*-------------------------------------------------------- */
309
+ /*Automatic pointer restoration functions */
310
+ struct PointerPair
311
+ {
312
+ void** pointer;
313
+ void* old_value;
314
+ };
315
+
316
+ static struct PointerPair pointer_store[UNITY_MAX_POINTERS];
317
+ static int pointer_index = 0;
318
+
319
+ void UnityPointer_Init(void)
320
+ {
321
+ pointer_index = 0;
322
+ }
323
+
324
+ void UnityPointer_Set(void** pointer, void* newValue, UNITY_LINE_TYPE line)
325
+ {
326
+ if (pointer_index >= UNITY_MAX_POINTERS)
327
+ {
328
+ UNITY_TEST_FAIL(line, "Too many pointers set");
329
+ }
330
+ else
331
+ {
332
+ pointer_store[pointer_index].pointer = pointer;
333
+ pointer_store[pointer_index].old_value = *pointer;
334
+ *pointer = newValue;
335
+ pointer_index++;
336
+ }
337
+ }
338
+
339
+ void UnityPointer_UndoAllSets(void)
340
+ {
341
+ while (pointer_index > 0)
342
+ {
343
+ pointer_index--;
344
+ *(pointer_store[pointer_index].pointer) =
345
+ pointer_store[pointer_index].old_value;
346
+ }
347
+ }
348
+
349
+ int UnityGetCommandLineOptions(int argc, const char* argv[])
350
+ {
351
+ int i;
352
+ UnityFixture.Verbose = 0;
353
+ UnityFixture.GroupFilter = 0;
354
+ UnityFixture.NameFilter = 0;
355
+ UnityFixture.RepeatCount = 1;
356
+
357
+ if (argc == 1)
358
+ return 0;
359
+
360
+ for (i = 1; i < argc; )
361
+ {
362
+ if (strcmp(argv[i], "-v") == 0)
363
+ {
364
+ UnityFixture.Verbose = 1;
365
+ i++;
366
+ }
367
+ else if (strcmp(argv[i], "-g") == 0)
368
+ {
369
+ i++;
370
+ if (i >= argc)
371
+ return 1;
372
+ UnityFixture.GroupFilter = argv[i];
373
+ i++;
374
+ }
375
+ else if (strcmp(argv[i], "-n") == 0)
376
+ {
377
+ i++;
378
+ if (i >= argc)
379
+ return 1;
380
+ UnityFixture.NameFilter = argv[i];
381
+ i++;
382
+ }
383
+ else if (strcmp(argv[i], "-r") == 0)
384
+ {
385
+ UnityFixture.RepeatCount = 2;
386
+ i++;
387
+ if (i < argc)
388
+ {
389
+ if (*(argv[i]) >= '0' && *(argv[i]) <= '9')
390
+ {
391
+ unsigned int digit = 0;
392
+ UnityFixture.RepeatCount = 0;
393
+ while (argv[i][digit] >= '0' && argv[i][digit] <= '9')
394
+ {
395
+ UnityFixture.RepeatCount *= 10;
396
+ UnityFixture.RepeatCount += (unsigned int)argv[i][digit++] - '0';
397
+ }
398
+ i++;
399
+ }
400
+ }
401
+ }
402
+ else
403
+ {
404
+ /* ignore unknown parameter */
405
+ i++;
406
+ }
407
+ }
408
+ return 0;
409
+ }
410
+
411
+ void UnityConcludeFixtureTest(void)
412
+ {
413
+ if (Unity.CurrentTestIgnored)
414
+ {
415
+ Unity.TestIgnores++;
416
+ UNITY_PRINT_EOL();
417
+ }
418
+ else if (!Unity.CurrentTestFailed)
419
+ {
420
+ if (UnityFixture.Verbose)
421
+ {
422
+ UnityPrint(" PASS");
423
+ UNITY_EXEC_TIME_STOP();
424
+ UNITY_PRINT_EXEC_TIME();
425
+ UNITY_PRINT_EOL();
426
+ }
427
+ }
428
+ else /* Unity.CurrentTestFailed */
429
+ {
430
+ Unity.TestFailures++;
431
+ UNITY_PRINT_EOL();
432
+ }
433
+
434
+ Unity.CurrentTestFailed = 0;
435
+ Unity.CurrentTestIgnored = 0;
436
+ }
@@ -0,0 +1,83 @@
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_H_
9
+ #define UNITY_FIXTURE_H_
10
+
11
+ #include "unity.h"
12
+ #include "unity_internals.h"
13
+ #include "unity_fixture_malloc_overrides.h"
14
+ #include "unity_fixture_internals.h"
15
+
16
+ int UnityMain(int argc, const char* argv[], void (*runAllTests)(void));
17
+
18
+
19
+ #define TEST_GROUP(group)\
20
+ static const char* TEST_GROUP_##group = #group
21
+
22
+ #define TEST_SETUP(group) void TEST_##group##_SETUP(void);\
23
+ void TEST_##group##_SETUP(void)
24
+
25
+ #define TEST_TEAR_DOWN(group) void TEST_##group##_TEAR_DOWN(void);\
26
+ void TEST_##group##_TEAR_DOWN(void)
27
+
28
+
29
+ #define TEST(group, name) \
30
+ void TEST_##group##_##name##_(void);\
31
+ void TEST_##group##_##name##_run(void);\
32
+ void TEST_##group##_##name##_run(void)\
33
+ {\
34
+ UnityTestRunner(TEST_##group##_SETUP,\
35
+ TEST_##group##_##name##_,\
36
+ TEST_##group##_TEAR_DOWN,\
37
+ "TEST(" #group ", " #name ")",\
38
+ TEST_GROUP_##group, #name,\
39
+ __FILE__, __LINE__);\
40
+ }\
41
+ void TEST_##group##_##name##_(void)
42
+
43
+ #define IGNORE_TEST(group, name) \
44
+ void TEST_##group##_##name##_(void);\
45
+ void TEST_##group##_##name##_run(void);\
46
+ void TEST_##group##_##name##_run(void)\
47
+ {\
48
+ UnityIgnoreTest("IGNORE_TEST(" #group ", " #name ")", TEST_GROUP_##group, #name);\
49
+ }\
50
+ void TEST_##group##_##name##_(void)
51
+
52
+ /* Call this for each test, insider the group runner */
53
+ #define RUN_TEST_CASE(group, name) \
54
+ { void TEST_##group##_##name##_run(void);\
55
+ TEST_##group##_##name##_run(); }
56
+
57
+ /* This goes at the bottom of each test file or in a separate c file */
58
+ #define TEST_GROUP_RUNNER(group)\
59
+ void TEST_##group##_GROUP_RUNNER(void);\
60
+ void TEST_##group##_GROUP_RUNNER(void)
61
+
62
+ /* Call this from main */
63
+ #define RUN_TEST_GROUP(group)\
64
+ { void TEST_##group##_GROUP_RUNNER(void);\
65
+ TEST_##group##_GROUP_RUNNER(); }
66
+
67
+ /* CppUTest Compatibility Macros */
68
+ #ifndef UNITY_EXCLUDE_CPPUTEST_ASSERTS
69
+ /* Sets a pointer and automatically restores it to its old value after teardown */
70
+ #define UT_PTR_SET(ptr, newPointerValue) UnityPointer_Set((void**)&(ptr), (void*)(newPointerValue), __LINE__)
71
+ #define TEST_ASSERT_POINTERS_EQUAL(expected, actual) TEST_ASSERT_EQUAL_PTR((expected), (actual))
72
+ #define TEST_ASSERT_BYTES_EQUAL(expected, actual) TEST_ASSERT_EQUAL_HEX8(0xff & (expected), 0xff & (actual))
73
+ #define FAIL(message) TEST_FAIL_MESSAGE((message))
74
+ #define CHECK(condition) TEST_ASSERT_TRUE((condition))
75
+ #define LONGS_EQUAL(expected, actual) TEST_ASSERT_EQUAL_INT((expected), (actual))
76
+ #define STRCMP_EQUAL(expected, actual) TEST_ASSERT_EQUAL_STRING((expected), (actual))
77
+ #define DOUBLES_EQUAL(expected, actual, delta) TEST_ASSERT_DOUBLE_WITHIN((delta), (expected), (actual))
78
+ #endif
79
+
80
+ /* You must compile with malloc replacement, as defined in unity_fixture_malloc_overrides.h */
81
+ void UnityMalloc_MakeMallocFailAfterCount(int countdown);
82
+
83
+ #endif /* UNITY_FIXTURE_H_ */