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,125 @@
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
+ UNITY_ROOT = File.expand_path(File.dirname(__FILE__)) + '/'
8
+ $verbose = false
9
+
10
+ require 'rake'
11
+ require 'rake/clean'
12
+ require UNITY_ROOT + 'rakefile_helper'
13
+ require 'rspec/core/rake_task'
14
+
15
+ TEMP_DIRS = [
16
+ File.join(UNITY_ROOT, 'build'),
17
+ File.join(UNITY_ROOT, 'sandbox')
18
+ ]
19
+
20
+ TEMP_DIRS.each do |dir|
21
+ directory(dir)
22
+ CLOBBER.include(dir)
23
+ end
24
+
25
+ task :prepare_for_tests => TEMP_DIRS
26
+
27
+ include RakefileHelpers
28
+
29
+ # Load proper GCC as defult configuration
30
+ DEFAULT_CONFIG_FILE = 'gcc_auto_stdint.yml'
31
+ configure_toolchain(DEFAULT_CONFIG_FILE)
32
+
33
+ desc "Test unity with its own unit tests"
34
+ task :unit => [:prepare_for_tests] do
35
+ run_tests unit_test_files
36
+ end
37
+
38
+ desc "Test unity's helper scripts"
39
+ task :scripts => [:prepare_for_tests] do
40
+ Dir['tests/test_*.rb'].each do |scriptfile|
41
+ require "./"+scriptfile
42
+ end
43
+ end
44
+
45
+ desc "Run all rspecs"
46
+ RSpec::Core::RakeTask.new(:spec) do |t|
47
+ t.pattern = 'spec/**/*_spec.rb'
48
+ end
49
+
50
+ desc "Generate test summary"
51
+ task :summary do
52
+ report_summary
53
+ end
54
+
55
+ desc "Build and test Unity"
56
+ task :all => [:clean, :prepare_for_tests, :scripts, :unit, :style, :summary]
57
+ task :default => [:clobber, :all]
58
+ task :ci => [:no_color, :default]
59
+ task :cruise => [:no_color, :default]
60
+
61
+ desc "Load configuration"
62
+ task :config, :config_file do |t, args|
63
+ configure_toolchain(args[:config_file])
64
+ end
65
+
66
+ task :no_color do
67
+ $colour_output = false
68
+ end
69
+
70
+ task :verbose do
71
+ $verbose = true
72
+ end
73
+
74
+ namespace :style do
75
+ desc "Check style"
76
+ task :check do
77
+ report "\nVERIFYING RUBY STYLE"
78
+ report execute("rubocop ../auto ../examples ../extras --config .rubocop.yml", true)
79
+ report "Styling Ruby:PASS"
80
+ end
81
+
82
+ namespace :check do
83
+ Dir['../**/*.rb'].each do |f|
84
+ filename = File.basename(f, '.rb')
85
+ desc "Check Style of #{filename}"
86
+ task filename.to_sym => ['style:clean'] do
87
+ report execute("rubocop #{f} --color --config .rubocop.yml", true)
88
+ report "Style Checked for #{f}"
89
+ end
90
+ end
91
+ end
92
+
93
+ desc "Fix Style of all C Code"
94
+ task :c do
95
+ run_astyle("../src/*.* ../extras/fixture/src/*.*")
96
+ end
97
+
98
+ namespace :c do
99
+ Dir['../{src,extras/**}/*.{c,h}'].each do |f|
100
+ filename = File.basename(f)[0..-3]
101
+ desc "Check Style of #{filename}"
102
+ task filename.to_sym do
103
+ run_astyle f
104
+ end
105
+ end
106
+ end
107
+
108
+ desc "Attempt to Autocorrect style"
109
+ task :auto => ['style:clean'] do
110
+ execute("rubocop ../auto ../examples ../extras --auto-correct --config .rubocop.yml")
111
+ report "Autocorrected What We Could."
112
+ end
113
+
114
+ desc "Update style todo list"
115
+ task :todo => ['style:clean'] do
116
+ execute("rubocop ../auto ../examples ../extras --auto-gen-config --config .rubocop.yml")
117
+ report "Updated Style TODO List."
118
+ end
119
+
120
+ task :clean do
121
+ File.delete(".rubocop_todo.yml") if File.exists?(".rubocop_todo.yml")
122
+ end
123
+ end
124
+
125
+ task :style => ['style:check']
@@ -0,0 +1,260 @@
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
+ require 'yaml'
8
+ require 'fileutils'
9
+ require UNITY_ROOT + '../auto/unity_test_summary'
10
+ require UNITY_ROOT + '../auto/generate_test_runner'
11
+ require UNITY_ROOT + '../auto/colour_reporter'
12
+
13
+ module RakefileHelpers
14
+ C_EXTENSION = '.c'.freeze
15
+ def load_configuration(config_file)
16
+ return if $configured
17
+
18
+ $cfg_file = "targets/#{config_file}" unless config_file =~ /[\\|\/]/
19
+ $cfg = YAML.load(File.read($cfg_file))
20
+ $colour_output = false unless $cfg['colour']
21
+ $configured = true if config_file != DEFAULT_CONFIG_FILE
22
+ end
23
+
24
+ def configure_clean
25
+ CLEAN.include($cfg['compiler']['build_path'] + '*.*') unless $cfg['compiler']['build_path'].nil?
26
+ end
27
+
28
+ def configure_toolchain(config_file = DEFAULT_CONFIG_FILE)
29
+ config_file += '.yml' unless config_file =~ /\.yml$/
30
+ config_file = config_file unless config_file =~ /[\\|\/]/
31
+ load_configuration(config_file)
32
+ configure_clean
33
+ end
34
+
35
+ def unit_test_files
36
+ path = $cfg['compiler']['unit_tests_path'] + 'test*' + C_EXTENSION
37
+ path.tr!('\\', '/')
38
+ FileList.new(path)
39
+ end
40
+
41
+ def local_include_dirs
42
+ include_dirs = $cfg['compiler']['includes']['items'].dup
43
+ include_dirs.delete_if { |dir| dir.is_a?(Array) }
44
+ include_dirs
45
+ end
46
+
47
+ def extract_headers(filename)
48
+ includes = []
49
+ lines = File.readlines(filename)
50
+ lines.each do |line|
51
+ m = line.match(/^\s*#include\s+\"\s*(.+\.[hH])\s*\"/)
52
+ includes << m[1] unless m.nil?
53
+ end
54
+ includes
55
+ end
56
+
57
+ def find_source_file(header, paths)
58
+ paths.each do |dir|
59
+ src_file = dir + header.ext(C_EXTENSION)
60
+ return src_file if File.exist?(src_file)
61
+ end
62
+ nil
63
+ end
64
+
65
+ def tackit(strings)
66
+ result = if strings.is_a?(Array)
67
+ "\"#{strings.join}\""
68
+ else
69
+ strings
70
+ end
71
+ result
72
+ end
73
+
74
+ def squash(prefix, items)
75
+ result = ''
76
+ items.each { |item| result += " #{prefix}#{tackit(item)}" }
77
+ result
78
+ end
79
+
80
+ def should(behave, &block)
81
+ if block
82
+ puts 'Should ' + behave
83
+ yield block
84
+ else
85
+ puts "UNIMPLEMENTED CASE: Should #{behave}"
86
+ end
87
+ end
88
+
89
+ def build_compiler_fields(inject_defines)
90
+ command = tackit($cfg['compiler']['path'])
91
+ defines = if $cfg['compiler']['defines']['items'].nil?
92
+ ''
93
+ else
94
+ squash($cfg['compiler']['defines']['prefix'], $cfg['compiler']['defines']['items'] + ['UNITY_OUTPUT_CHAR=putcharSpy'] + ['UNITY_OUTPUT_CHAR_HEADER_DECLARATION=putcharSpy\(int\)'] + inject_defines)
95
+ end
96
+ options = squash('', $cfg['compiler']['options'])
97
+ includes = squash($cfg['compiler']['includes']['prefix'], $cfg['compiler']['includes']['items'])
98
+ includes = includes.gsub(/\\ /, ' ').gsub(/\\\"/, '"').gsub(/\\$/, '') # Remove trailing slashes (for IAR)
99
+
100
+ { :command => command, :defines => defines, :options => options, :includes => includes }
101
+ end
102
+
103
+ def compile(file, defines = [])
104
+ compiler = build_compiler_fields(defines)
105
+ cmd_str = "#{compiler[:command]}#{compiler[:defines]}#{compiler[:options]}#{compiler[:includes]} #{file} " \
106
+ "#{$cfg['compiler']['object_files']['prefix']}#{$cfg['compiler']['object_files']['destination']}"
107
+ obj_file = "#{File.basename(file, C_EXTENSION)}#{$cfg['compiler']['object_files']['extension']}"
108
+ execute(cmd_str + obj_file)
109
+
110
+ obj_file
111
+ end
112
+
113
+ def build_linker_fields
114
+ command = tackit($cfg['linker']['path'])
115
+ options = if $cfg['linker']['options'].nil?
116
+ ''
117
+ else
118
+ squash('', $cfg['linker']['options'])
119
+ end
120
+ includes = if $cfg['linker']['includes'].nil? || $cfg['linker']['includes']['items'].nil?
121
+ ''
122
+ else
123
+ squash($cfg['linker']['includes']['prefix'], $cfg['linker']['includes']['items'])
124
+ end.gsub(/\\ /, ' ').gsub(/\\\"/, '"').gsub(/\\$/, '') # Remove trailing slashes (for IAR)
125
+
126
+ { :command => command, :options => options, :includes => includes }
127
+ end
128
+
129
+ def link_it(exe_name, obj_list)
130
+ linker = build_linker_fields
131
+ cmd_str = "#{linker[:command]}#{linker[:options]}#{linker[:includes]} " +
132
+ (obj_list.map { |obj| "#{$cfg['linker']['object_files']['path']}#{obj} " }).join +
133
+ $cfg['linker']['bin_files']['prefix'] + ' ' +
134
+ $cfg['linker']['bin_files']['destination'] +
135
+ exe_name + $cfg['linker']['bin_files']['extension']
136
+ execute(cmd_str)
137
+ end
138
+
139
+ def build_simulator_fields
140
+ return nil if $cfg['simulator'].nil?
141
+ command = if $cfg['simulator']['path'].nil?
142
+ ''
143
+ else
144
+ (tackit($cfg['simulator']['path']) + ' ')
145
+ end
146
+ pre_support = if $cfg['simulator']['pre_support'].nil?
147
+ ''
148
+ else
149
+ squash('', $cfg['simulator']['pre_support'])
150
+ end
151
+ post_support = if $cfg['simulator']['post_support'].nil?
152
+ ''
153
+ else
154
+ squash('', $cfg['simulator']['post_support'])
155
+ end
156
+
157
+ { :command => command, :pre_support => pre_support, :post_support => post_support }
158
+ end
159
+
160
+ def run_astyle(style_what)
161
+ report "Styling C Code..."
162
+ command = "AStyle " \
163
+ "--style=allman --indent=spaces=4 --indent-switches --indent-preproc-define --indent-preproc-block " \
164
+ "--pad-oper --pad-comma --unpad-paren --pad-header " \
165
+ "--align-pointer=type --align-reference=name " \
166
+ "--add-brackets --mode=c --suffix=none " \
167
+ "#{style_what}"
168
+ execute(command, false)
169
+ report "Styling C:PASS"
170
+ end
171
+
172
+ def execute(command_string, ok_to_fail = false)
173
+ report command_string if $verbose
174
+ output = `#{command_string}`.chomp
175
+ report(output) if $verbose && !output.nil? && !output.empty?
176
+ raise "Command failed. (Returned #{$?.exitstatus})" if !$?.exitstatus.zero? && !ok_to_fail
177
+ output
178
+ end
179
+
180
+ def report_summary
181
+ summary = UnityTestSummary.new
182
+ summary.root = UNITY_ROOT
183
+ results_glob = "#{$cfg['compiler']['build_path']}*.test*"
184
+ results_glob.tr!('\\', '/')
185
+ results = Dir[results_glob]
186
+ summary.targets = results
187
+ report summary.run
188
+ end
189
+
190
+ def run_tests(test_files)
191
+ report 'Running Unity system tests...'
192
+
193
+ # Tack on TEST define for compiling unit tests
194
+ load_configuration($cfg_file)
195
+ test_defines = ['TEST']
196
+ $cfg['compiler']['defines']['items'] ||= []
197
+ $cfg['compiler']['defines']['items'] << 'TEST'
198
+
199
+ include_dirs = local_include_dirs
200
+
201
+ # Build and execute each unit test
202
+ test_files.each do |test|
203
+ obj_list = []
204
+
205
+ unless $cfg['compiler']['aux_sources'].nil?
206
+ $cfg['compiler']['aux_sources'].each do |aux|
207
+ obj_list << compile(aux, test_defines)
208
+ end
209
+ end
210
+
211
+ # Detect dependencies and build required modules
212
+ extract_headers(test).each do |header|
213
+ # Compile corresponding source file if it exists
214
+ src_file = find_source_file(header, include_dirs)
215
+
216
+ obj_list << compile(src_file, test_defines) unless src_file.nil?
217
+ end
218
+
219
+ # Build the test runner (generate if configured to do so)
220
+ test_base = File.basename(test, C_EXTENSION)
221
+
222
+ runner_name = test_base + '_Runner.c'
223
+
224
+ runner_path = if $cfg['compiler']['runner_path'].nil?
225
+ $cfg['compiler']['build_path'] + runner_name
226
+ else
227
+ $cfg['compiler']['runner_path'] + runner_name
228
+ end
229
+
230
+ options = $cfg[:unity]
231
+ options[:use_param_tests] = test =~ /parameterized/ ? true : false
232
+ UnityTestRunnerGenerator.new(options).run(test, runner_path)
233
+ obj_list << compile(runner_path, test_defines)
234
+
235
+ # Build the test module
236
+ obj_list << compile(test, test_defines)
237
+
238
+ # Link the test executable
239
+ link_it(test_base, obj_list)
240
+
241
+ # Execute unit test and generate results file
242
+ simulator = build_simulator_fields
243
+ executable = $cfg['linker']['bin_files']['destination'] + test_base + $cfg['linker']['bin_files']['extension']
244
+ cmd_str = if simulator.nil?
245
+ executable
246
+ else
247
+ "#{simulator[:command]} #{simulator[:pre_support]} #{executable} #{simulator[:post_support]}"
248
+ end
249
+ output = execute(cmd_str)
250
+ test_results = $cfg['compiler']['build_path'] + test_base
251
+ if output.match(/OK$/m).nil?
252
+ test_results += '.testfail'
253
+ else
254
+ report output unless $verbose # Verbose already prints this line, as does a failure
255
+ test_results += '.testpass'
256
+ end
257
+ File.open(test_results, 'w') { |f| f.print output }
258
+ end
259
+ end
260
+ end
@@ -0,0 +1,158 @@
1
+
2
+ require '../auto/generate_module.rb'
3
+ require 'fileutils'
4
+
5
+ def touch_src(file)
6
+ FileUtils.touch "sandbox/src/#{file}"
7
+ end
8
+
9
+ def touch_test(file)
10
+ FileUtils.touch "sandbox/test/#{file}"
11
+ end
12
+
13
+ def create_src_with_known_content(file)
14
+ File.open("sandbox/src/#{file}", "w") {|f| f.write("the original #{file}")}
15
+ end
16
+
17
+ def create_test_with_known_content(file)
18
+ File.open("sandbox/test/#{file}", "w") {|f| f.write("the original #{file}")}
19
+ end
20
+
21
+ def expect_src_content_didnt_change(file)
22
+ expect(File.read("sandbox/src/#{file}")).to eq("the original #{file}")
23
+ end
24
+
25
+ def expect_test_content_didnt_change(file)
26
+ expect(File.read("sandbox/test/#{file}")).to eq("the original #{file}")
27
+ end
28
+
29
+ def expect_src_file_to_exist(file)
30
+ expect(File.exist?("sandbox/src/#{file}")).to be true
31
+ end
32
+
33
+ def expect_test_file_to_exist(file)
34
+ expect(File.exist?("sandbox/test/#{file}")).to be true
35
+ end
36
+
37
+ describe "UnityModuleGenerator" do
38
+
39
+ before do
40
+ # clean sandbox and setup our "project" folders
41
+ FileUtils.rm_rf "sandbox"
42
+ FileUtils.mkdir_p "sandbox"
43
+ FileUtils.mkdir_p "sandbox/src"
44
+ FileUtils.mkdir_p "sandbox/test"
45
+
46
+ @options = {
47
+ :path_src => "sandbox/src",
48
+ :path_tst => "sandbox/test",
49
+ }
50
+ end
51
+
52
+ context "with src pattern" do
53
+ before do
54
+ @options[:pattern] = "src"
55
+ end
56
+
57
+ it "fails when all files already exist" do
58
+ # create an existing triad of files
59
+ touch_src "meh.c"
60
+ touch_src "meh.h"
61
+ touch_test "Testmeh.c"
62
+ expect {
63
+ UnityModuleGenerator.new(@options).generate("meh")
64
+ }.to raise_error("ERROR: File meh already exists. Exiting.")
65
+ end
66
+
67
+ it "creates the test file if the source and header files exist" do
68
+ # Create the existing files.
69
+ touch_src "meh.c"
70
+ touch_src "meh.h"
71
+
72
+ UnityModuleGenerator.new(@options).generate("meh")
73
+
74
+ expect_test_file_to_exist "Testmeh.c"
75
+ end
76
+
77
+ it "does not alter existing files" do
78
+ # Create some files with known content.
79
+ create_src_with_known_content "meh.c"
80
+ create_src_with_known_content "meh.h"
81
+
82
+ UnityModuleGenerator.new(@options).generate("meh")
83
+
84
+ expect_src_content_didnt_change "meh.c"
85
+ expect_src_content_didnt_change "meh.c"
86
+ end
87
+
88
+ it "does not alter existing test files" do
89
+ # Create some files with known content.
90
+ create_test_with_known_content "Testmeh.c"
91
+
92
+ UnityModuleGenerator.new(@options).generate("meh")
93
+
94
+ expect_test_content_didnt_change "Testmeh.c"
95
+ end
96
+
97
+ end
98
+
99
+ context "with mch pattern" do
100
+ before do
101
+ @options[:pattern] = "mch"
102
+ end
103
+
104
+ it "fails when all files exist" do
105
+ touch_src "meh_model.c"
106
+ touch_src "meh_conductor.c"
107
+ touch_src "meh_hardware.c"
108
+ touch_src "meh_model.h"
109
+ touch_src "meh_conductor.h"
110
+ touch_src "meh_hardware.h"
111
+ touch_test "Testmeh_model.c"
112
+ touch_test "Testmeh_conductor.c"
113
+ touch_test "Testmeh_hardware.c"
114
+ expect {
115
+ UnityModuleGenerator.new(@options).generate("meh")
116
+ }.to raise_error("ERROR: File meh_model already exists. Exiting.")
117
+ end
118
+
119
+ it "creates files that don't exist" do
120
+ touch_src "meh_model.c"
121
+ touch_src "meh_conductor.c"
122
+ touch_src "meh_hardware.c"
123
+ touch_src "meh_model.h"
124
+ touch_src "meh_conductor.h"
125
+
126
+ UnityModuleGenerator.new(@options).generate("meh")
127
+
128
+ expect_src_file_to_exist "meh_hardware.h"
129
+ expect_test_file_to_exist "Testmeh_model.c"
130
+ expect_test_file_to_exist "Testmeh_conductor.c"
131
+ expect_test_file_to_exist "Testmeh_hardware.c"
132
+ end
133
+
134
+ it "does not alter existing source files" do
135
+ create_src_with_known_content "meh_model.c"
136
+ create_src_with_known_content "meh_model.c"
137
+ create_src_with_known_content "meh_model.c"
138
+ create_src_with_known_content "meh_model.h"
139
+ create_src_with_known_content "meh_model.c"
140
+
141
+ UnityModuleGenerator.new(@options).generate("meh")
142
+
143
+ expect_src_content_didnt_change "meh_model.c"
144
+ expect_src_content_didnt_change "meh_model.c"
145
+ expect_src_content_didnt_change "meh_model.c"
146
+ expect_src_content_didnt_change "meh_model.c"
147
+ end
148
+
149
+ it "does not alter existing test files" do
150
+ create_test_with_known_content "Testmeh_model.c"
151
+
152
+ UnityModuleGenerator.new(@options).generate("meh")
153
+
154
+ expect_test_content_didnt_change "Testmeh_model.c"
155
+ end
156
+
157
+ end
158
+ end