ceedling 0.28.2 → 0.28.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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,260 @@
1
+ # Unity Helper Scripts
2
+
3
+ ## With a Little Help From Our Friends
4
+
5
+ Sometimes what it takes to be a really efficient C programmer is a little non-C.
6
+ The Unity project includes a couple of Ruby scripts for making your life just a tad
7
+ easier. They are completely optional. If you choose to use them, you'll need a
8
+ copy of Ruby, of course. Just install whatever the latest version is, and it is
9
+ likely to work. You can find Ruby at [ruby-lang.org](https://ruby-labg.org/).
10
+
11
+
12
+ ### `generate_test_runner.rb`
13
+
14
+ Are you tired of creating your own `main` function in your test file? Do you
15
+ keep forgetting to add a `RUN_TEST` call when you add a new test case to your
16
+ suite? Do you want to use CMock or other fancy add-ons but don't want to figure
17
+ out how to create your own `RUN_TEST` macro?
18
+
19
+ Well then we have the perfect script for you!
20
+
21
+ The `generate_test_runner` script processes a given test file and automatically
22
+ creates a separate test runner file that includes ?main?to execute the test
23
+ cases within the scanned test file. All you do then is add the generated runner
24
+ to your list of files to be compiled and linked, and presto you're done!
25
+
26
+ This script searches your test file for void function signatures having a
27
+ function name beginning with "test" or "spec". It treats each of these
28
+ functions as a test case and builds up a test suite of them. For example, the
29
+ following includes three test cases:
30
+
31
+ ```C
32
+ void testVerifyThatUnityIsAwesomeAndWillMakeYourLifeEasier(void)
33
+ {
34
+ ASSERT_TRUE(1);
35
+ }
36
+ void test_FunctionName_should_WorkProperlyAndReturn8(void) {
37
+ ASSERT_EQUAL_INT(8, FunctionName());
38
+ }
39
+ void spec_Function_should_DoWhatItIsSupposedToDo(void) {
40
+ ASSERT_NOT_NULL(Function(5));
41
+ }
42
+ ```
43
+
44
+ You can run this script a couple of ways. The first is from the command line:
45
+
46
+ ```Shell
47
+ ruby generate_test_runner.rb TestFile.c NameOfRunner.c
48
+ ```
49
+
50
+ Alternatively, if you include only the test file parameter, the script will copy
51
+ the name of the test file and automatically append "_Runner" to the name of the
52
+ generated file. The example immediately below will create TestFile_Runner.c.
53
+
54
+ ```Shell
55
+ ruby generate_test_runner.rb TestFile.c
56
+ ```
57
+
58
+ You can also add a [YAML](http://www.yaml.org/) file to configure extra options.
59
+ Conveniently, this YAML file is of the same format as that used by Unity and
60
+ CMock. So if you are using YAML files already, you can simply pass the very same
61
+ file into the generator script.
62
+
63
+ ```Shell
64
+ ruby generate_test_runner.rb TestFile.c my_config.yml
65
+ ```
66
+
67
+ The contents of the YAML file `my_config.yml` could look something like the
68
+ example below. If you're wondering what some of these options do, you're going
69
+ to love the next section of this document.
70
+
71
+ ```YAML
72
+ :unity:
73
+ :includes:
74
+ - stdio.h
75
+ - microdefs.h
76
+ :cexception: 1
77
+ :suit_setup: "blah = malloc(1024);"
78
+ :suite_teardown: "free(blah);"
79
+ ```
80
+
81
+ If you would like to force your generated test runner to include one or more
82
+ header files, you can just include those at the command line too. Just make sure
83
+ these are _after_ the YAML file, if you are using one:
84
+
85
+ ```Shell
86
+ ruby generate_test_runner.rb TestFile.c my_config.yml extras.h
87
+ ```
88
+
89
+ Another option, particularly if you are already using Ruby to orchestrate your
90
+ builds - or more likely the Ruby-based build tool Rake - is requiring this
91
+ script directly. Anything that you would have specified in a YAML file can be
92
+ passed to the script as part of a hash. Let's push the exact same requirement
93
+ set as we did above but this time through Ruby code directly:
94
+
95
+ ```Ruby
96
+ require "generate_test_runner.rb"
97
+ options = {
98
+ :includes => ["stdio.h", "microdefs.h"],
99
+ :cexception => 1,
100
+ :suite_setup => "blah = malloc(1024);",
101
+ :suite_teardown => "free(blah);"
102
+ }
103
+ UnityTestRunnerGenerator.new.run(testfile, runner_name, options)
104
+ ```
105
+
106
+ If you have multiple files to generate in a build script (such as a Rakefile),
107
+ you might want to instantiate a generator object with your options and call it
108
+ to generate each runner afterwards. Like thus:
109
+
110
+ ```Ruby
111
+ gen = UnityTestRunnerGenerator.new(options)
112
+ test_files.each do |f|
113
+ gen.run(f, File.basename(f,'.c')+"Runner.c"
114
+ end
115
+ ```
116
+
117
+ #### Options accepted by generate_test_runner.rb:
118
+
119
+ The following options are available when executing `generate_test_runner`. You
120
+ may pass these as a Ruby hash directly or specify them in a YAML file, both of
121
+ which are described above. In the `examples` directory, Example 3's Rakefile
122
+ demonstrates using a Ruby hash.
123
+
124
+
125
+ ##### `:includes`
126
+
127
+ This option specifies an array of file names to be `#include`'d at the top of
128
+ your runner C file. You might use it to reference custom types or anything else
129
+ universally needed in your generated runners.
130
+
131
+
132
+ ##### `:suite_setup`
133
+
134
+ Define this option with C code to be executed _before any_ test cases are run.
135
+
136
+ Alternatively, if your C compiler supports weak symbols, you can leave this
137
+ option unset and instead provide a `void suiteSetUp(void)` function in your test
138
+ suite. The linker will look for this symbol and fall back to a Unity-provided
139
+ stub if it is not found.
140
+
141
+
142
+ ##### `:suite_teardown`
143
+
144
+ Define this option with C code to be executed _after all_ test cases have
145
+ finished. An integer variable `num_failures` is available for diagnostics.
146
+ The code should end with a `return` statement; the value returned will become
147
+ the exit code of `main`. You can normally just return `num_failures`.
148
+
149
+ Alternatively, if your C compiler supports weak symbols, you can leave this
150
+ option unset and instead provide a `int suiteTearDown(int num_failures)`
151
+ function in your test suite. The linker will look for this symbol and fall
152
+ back to a Unity-provided stub if it is not found.
153
+
154
+
155
+ ##### `:enforce_strict_ordering`
156
+
157
+ This option should be defined if you have the strict order feature enabled in
158
+ CMock (see CMock documentation). This generates extra variables required for
159
+ everything to run smoothly. If you provide the same YAML to the generator as
160
+ used in CMock's configuration, you've already configured the generator properly.
161
+
162
+ ##### `:mock_prefix` and `:mock_suffix`
163
+
164
+ Unity automatically generates calls to Init, Verify and Destroy for every file
165
+ included in the main test file that starts with the given mock prefix and ends
166
+ with the given mock suffix, file extension not included. By default, Unity
167
+ assumes a `Mock` prefix and no suffix.
168
+
169
+ ##### `:plugins`
170
+
171
+ This option specifies an array of plugins to be used (of course, the array can
172
+ contain only a single plugin). This is your opportunity to enable support for
173
+ CException support, which will add a check for unhandled exceptions in each
174
+ test, reporting a failure if one is detected. To enable this feature using Ruby:
175
+
176
+ ```Ruby
177
+ :plugins => [ :cexception ]
178
+ ```
179
+
180
+ Or as a yaml file:
181
+
182
+ ```YAML
183
+ :plugins:
184
+ -:cexception
185
+ ```
186
+
187
+ If you are using CMock, it is very likely that you are already passing an array
188
+ of plugins to CMock. You can just use the same array here. This script will just
189
+ ignore the plugins that don't require additional support.
190
+
191
+
192
+ ### `unity_test_summary.rb`
193
+
194
+ A Unity test file contains one or more test case functions. Each test case can
195
+ pass, fail, or be ignored. Each test file is run individually producing results
196
+ for its collection of test cases. A given project will almost certainly be
197
+ composed of multiple test files. Therefore, the suite of tests is comprised of
198
+ one or more test cases spread across one or more test files. This script
199
+ aggregates individual test file results to generate a summary of all executed
200
+ test cases. The output includes how many tests were run, how many were ignored,
201
+ and how many failed. In addition, the output includes a listing of which
202
+ specific tests were ignored and failed. A good example of the breadth and
203
+ details of these results can be found in the `examples` directory. Intentionally
204
+ ignored and failing tests in this project generate corresponding entries in the
205
+ summary report.
206
+
207
+ If you're interested in other (prettier?) output formats, check into the
208
+ Ceedling build tool project (ceedling.sourceforge.net) that works with Unity and
209
+ CMock and supports xunit-style xml as well as other goodies.
210
+
211
+ This script assumes the existence of files ending with the extensions
212
+ `.testpass` and `.testfail`.The contents of these files includes the test
213
+ results summary corresponding to each test file executed with the extension set
214
+ according to the presence or absence of failures for that test file. The script
215
+ searches a specified path for these files, opens each one it finds, parses the
216
+ results, and aggregates and prints a summary. Calling it from the command line
217
+ looks like this:
218
+
219
+ ```Shell
220
+ ruby unity_test_summary.rb build/test/
221
+ ```
222
+
223
+ You can optionally specify a root path as well. This is really helpful when you
224
+ are using relative paths in your tools' setup, but you want to pull the summary
225
+ into an IDE like Eclipse for clickable shortcuts.
226
+
227
+ ```Shell
228
+ ruby unity_test_summary.rb build/test/ ~/projects/myproject/
229
+ ```
230
+
231
+ Or, if you're more of a Windows sort of person:
232
+
233
+ ```Shell
234
+ ruby unity_test_summary.rb build\teat\ C:\projects\myproject\
235
+ ```
236
+
237
+ When configured correctly, you'll see a final summary, like so:
238
+
239
+ ```Shell
240
+ --------------------------
241
+ UNITY IGNORED TEST SUMMARY
242
+ --------------------------
243
+ blah.c:22:test_sandwiches_should_HaveBreadOnTwoSides:IGNORE
244
+
245
+ -------------------------
246
+ UNITY FAILED TEST SUMMARY
247
+ -------------------------
248
+ blah.c:87:test_sandwiches_should_HaveCondiments:FAIL:Expected 1 was 0
249
+ meh.c:38:test_soda_should_BeCalledPop:FAIL:Expected "pop" was "coke"
250
+
251
+ --------------------------
252
+ OVERALL UNITY TEST SUMMARY
253
+ --------------------------
254
+ 45 TOTAL TESTS 2 TOTAL FAILURES 1 IGNORED
255
+ ```
256
+
257
+ How convenient is that?
258
+
259
+
260
+ *Find The Latest of This And More at [ThrowTheSwitch.org](https://throwtheswitch.org)*
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) <year> 2007-14 Mike Karlesky, Mark VanderVoord, Greg Williams
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,71 @@
1
+ # ==========================================
2
+ # Unity Project - A Test Framework for C
3
+ # Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
4
+ # [Released under MIT License. Please refer to license.txt for details]
5
+ # ==========================================
6
+
7
+ #We try to detect the OS we are running on, and adjust commands as needed
8
+ ifeq ($(OS),Windows_NT)
9
+ ifeq ($(shell uname -s),) # not in a bash-like shell
10
+ CLEANUP = del /F /Q
11
+ MKDIR = mkdir
12
+ else # in a bash-like shell, like msys
13
+ CLEANUP = rm -f
14
+ MKDIR = mkdir -p
15
+ endif
16
+ TARGET_EXTENSION=.exe
17
+ else
18
+ CLEANUP = rm -f
19
+ MKDIR = mkdir -p
20
+ TARGET_EXTENSION=.out
21
+ endif
22
+
23
+ C_COMPILER=gcc
24
+ ifeq ($(shell uname -s), Darwin)
25
+ C_COMPILER=clang
26
+ endif
27
+
28
+ UNITY_ROOT=../..
29
+
30
+ CFLAGS=-std=c89
31
+ CFLAGS += -Wall
32
+ CFLAGS += -Wextra
33
+ CFLAGS += -Wpointer-arith
34
+ CFLAGS += -Wcast-align
35
+ CFLAGS += -Wwrite-strings
36
+ CFLAGS += -Wswitch-default
37
+ CFLAGS += -Wunreachable-code
38
+ CFLAGS += -Winit-self
39
+ CFLAGS += -Wmissing-field-initializers
40
+ CFLAGS += -Wno-unknown-pragmas
41
+ CFLAGS += -Wstrict-prototypes
42
+ CFLAGS += -Wundef
43
+ CFLAGS += -Wold-style-definition
44
+
45
+ TARGET_BASE1=test1
46
+ TARGET_BASE2=test2
47
+ TARGET1 = $(TARGET_BASE1)$(TARGET_EXTENSION)
48
+ TARGET2 = $(TARGET_BASE2)$(TARGET_EXTENSION)
49
+ SRC_FILES1=$(UNITY_ROOT)/src/unity.c src/ProductionCode.c test/TestProductionCode.c test/test_runners/TestProductionCode_Runner.c
50
+ SRC_FILES2=$(UNITY_ROOT)/src/unity.c src/ProductionCode2.c test/TestProductionCode2.c test/test_runners/TestProductionCode2_Runner.c
51
+ INC_DIRS=-Isrc -I$(UNITY_ROOT)/src
52
+ SYMBOLS=
53
+
54
+ all: clean default
55
+
56
+ default: $(SRC_FILES1) $(SRC_FILES2)
57
+ $(C_COMPILER) $(CFLAGS) $(INC_DIRS) $(SYMBOLS) $(SRC_FILES1) -o $(TARGET1)
58
+ $(C_COMPILER) $(CFLAGS) $(INC_DIRS) $(SYMBOLS) $(SRC_FILES2) -o $(TARGET2)
59
+ - ./$(TARGET1)
60
+ ./$(TARGET2)
61
+
62
+ test/test_runners/TestProductionCode_Runner.c: test/TestProductionCode.c
63
+ ruby $(UNITY_ROOT)/auto/generate_test_runner.rb test/TestProductionCode.c test/test_runners/TestProductionCode_Runner.c
64
+ test/test_runners/TestProductionCode2_Runner.c: test/TestProductionCode2.c
65
+ ruby $(UNITY_ROOT)/auto/generate_test_runner.rb test/TestProductionCode2.c test/test_runners/TestProductionCode2_Runner.c
66
+
67
+ clean:
68
+ $(CLEANUP) $(TARGET1) $(TARGET2)
69
+
70
+ ci: CFLAGS += -Werror
71
+ ci: default
@@ -0,0 +1,5 @@
1
+ Example 1
2
+ =========
3
+
4
+ Close to the simplest possible example of Unity, using only basic features.
5
+ Run make to build & run the example tests.
@@ -0,0 +1,24 @@
1
+
2
+ #include "ProductionCode.h"
3
+
4
+ int Counter = 0;
5
+ int NumbersToFind[9] = { 0, 34, 55, 66, 32, 11, 1, 77, 888 }; /* some obnoxious array to search that is 1-based indexing instead of 0. */
6
+
7
+ /* This function is supposed to search through NumbersToFind and find a particular number.
8
+ * If it finds it, the index is returned. Otherwise 0 is returned which sorta makes sense since
9
+ * NumbersToFind is indexed from 1. Unfortunately it's broken
10
+ * (and should therefore be caught by our tests) */
11
+ int FindFunction_WhichIsBroken(int NumberToFind)
12
+ {
13
+ int i = 0;
14
+ while (i <= 8) /* Notice I should have been in braces */
15
+ i++;
16
+ if (NumbersToFind[i] == NumberToFind) /* Yikes! I'm getting run after the loop finishes instead of during it! */
17
+ return i;
18
+ return 0;
19
+ }
20
+
21
+ int FunctionWhichReturnsLocalVariable(void)
22
+ {
23
+ return Counter;
24
+ }
@@ -0,0 +1,3 @@
1
+
2
+ int FindFunction_WhichIsBroken(int NumberToFind);
3
+ int FunctionWhichReturnsLocalVariable(void);
@@ -0,0 +1,11 @@
1
+
2
+ #include "ProductionCode2.h"
3
+
4
+ char* ThisFunctionHasNotBeenTested(int Poor, char* LittleFunction)
5
+ {
6
+ (void)Poor;
7
+ (void)LittleFunction;
8
+ /* Since There Are No Tests Yet, This Function Could Be Empty For All We Know.
9
+ * Which isn't terribly useful... but at least we put in a TEST_IGNORE so we won't forget */
10
+ return (char*)0;
11
+ }
@@ -0,0 +1,2 @@
1
+
2
+ char* ThisFunctionHasNotBeenTested(int Poor, char* LittleFunction);
@@ -0,0 +1,62 @@
1
+
2
+ #include "ProductionCode.h"
3
+ #include "unity.h"
4
+
5
+ /* sometimes you may want to get at local data in a module.
6
+ * for example: If you plan to pass by reference, this could be useful
7
+ * however, it should often be avoided */
8
+ extern int Counter;
9
+
10
+ void setUp(void)
11
+ {
12
+ /* This is run before EACH TEST */
13
+ Counter = 0x5a5a;
14
+ }
15
+
16
+ void tearDown(void)
17
+ {
18
+ }
19
+
20
+ void test_FindFunction_WhichIsBroken_ShouldReturnZeroIfItemIsNotInList_WhichWorksEvenInOurBrokenCode(void)
21
+ {
22
+ /* All of these should pass */
23
+ TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(78));
24
+ TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(1));
25
+ TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(33));
26
+ TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(999));
27
+ TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(-1));
28
+ }
29
+
30
+ void test_FindFunction_WhichIsBroken_ShouldReturnTheIndexForItemsInList_WhichWillFailBecauseOurFunctionUnderTestIsBroken(void)
31
+ {
32
+ /* You should see this line fail in your test summary */
33
+ TEST_ASSERT_EQUAL(1, FindFunction_WhichIsBroken(34));
34
+
35
+ /* Notice the rest of these didn't get a chance to run because the line above failed.
36
+ * Unit tests abort each test function on the first sign of trouble.
37
+ * Then NEXT test function runs as normal. */
38
+ TEST_ASSERT_EQUAL(8, FindFunction_WhichIsBroken(8888));
39
+ }
40
+
41
+ void test_FunctionWhichReturnsLocalVariable_ShouldReturnTheCurrentCounterValue(void)
42
+ {
43
+ /* This should be true because setUp set this up for us before this test */
44
+ TEST_ASSERT_EQUAL_HEX(0x5a5a, FunctionWhichReturnsLocalVariable());
45
+
46
+ /* This should be true because we can still change our answer */
47
+ Counter = 0x1234;
48
+ TEST_ASSERT_EQUAL_HEX(0x1234, FunctionWhichReturnsLocalVariable());
49
+ }
50
+
51
+ void test_FunctionWhichReturnsLocalVariable_ShouldReturnTheCurrentCounterValueAgain(void)
52
+ {
53
+ /* This should be true again because setup was rerun before this test (and after we changed it to 0x1234) */
54
+ TEST_ASSERT_EQUAL_HEX(0x5a5a, FunctionWhichReturnsLocalVariable());
55
+ }
56
+
57
+ void test_FunctionWhichReturnsLocalVariable_ShouldReturnCurrentCounter_ButFailsBecauseThisTestIsActuallyFlawed(void)
58
+ {
59
+ /* Sometimes you get the test wrong. When that happens, you get a failure too... and a quick look should tell
60
+ * you what actually happened...which in this case was a failure to setup the initial condition. */
61
+ TEST_ASSERT_EQUAL_HEX(0x1234, FunctionWhichReturnsLocalVariable());
62
+ }