ceedling 0.13.0 → 0.15.0

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 (308) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +1 -1
  3. data/Gemfile.lock +18 -14
  4. data/README.md +6 -4
  5. data/assets/project_as_gem.yml +1 -1
  6. data/assets/rakefile_as_gem.rb +2 -0
  7. data/assets/rakefile_with_guts.rb +3 -1
  8. data/ceedling.gemspec +1 -0
  9. data/examples/blinky/rakefile.rb +2 -2
  10. data/examples/temp_sensor/rakefile.rb +1 -1
  11. data/examples/temp_sensor/src/TemperatureFilter.c +1 -2
  12. data/examples/temp_sensor/test/TestTemperatureCalculator.c +1 -1
  13. data/examples/temp_sensor/test/TestTemperatureFilter.c +12 -2
  14. data/lib/ceedling.rb +94 -22
  15. data/lib/{build_invoker_utils.rb → ceedling/build_invoker_utils.rb} +27 -27
  16. data/lib/{cacheinator.rb → ceedling/cacheinator.rb} +42 -42
  17. data/lib/{cacheinator_helper.rb → ceedling/cacheinator_helper.rb} +12 -12
  18. data/lib/{cmock_builder.rb → ceedling/cmock_builder.rb} +15 -15
  19. data/lib/{configurator.rb → ceedling/configurator.rb} +333 -329
  20. data/lib/{configurator_builder.rb → ceedling/configurator_builder.rb} +437 -437
  21. data/lib/{configurator_plugins.rb → ceedling/configurator_plugins.rb} +124 -124
  22. data/lib/{configurator_setup.rb → ceedling/configurator_setup.rb} +124 -124
  23. data/lib/{configurator_validator.rb → ceedling/configurator_validator.rb} +184 -184
  24. data/lib/{constants.rb → ceedling/constants.rb} +20 -17
  25. data/lib/{defaults.rb → ceedling/defaults.rb} +19 -18
  26. data/lib/{dependinator.rb → ceedling/dependinator.rb} +92 -92
  27. data/lib/{erb_wrapper.rb → ceedling/erb_wrapper.rb} +8 -8
  28. data/lib/{file_finder.rb → ceedling/file_finder.rb} +132 -132
  29. data/lib/{file_finder_helper.rb → ceedling/file_finder_helper.rb} +54 -54
  30. data/lib/{file_path_utils.rb → ceedling/file_path_utils.rb} +189 -189
  31. data/lib/{file_system_utils.rb → ceedling/file_system_utils.rb} +69 -69
  32. data/lib/{file_system_wrapper.rb → ceedling/file_system_wrapper.rb} +9 -9
  33. data/lib/{file_wrapper.rb → ceedling/file_wrapper.rb} +79 -79
  34. data/lib/{flaginator.rb → ceedling/flaginator.rb} +54 -54
  35. data/lib/{generator.rb → ceedling/generator.rb} +164 -164
  36. data/lib/{generator_helper.rb → ceedling/generator_helper.rb} +40 -40
  37. data/lib/{generator_test_results.rb → ceedling/generator_test_results.rb} +86 -89
  38. data/lib/{generator_test_results_sanity_checker.rb → ceedling/generator_test_results_sanity_checker.rb} +64 -62
  39. data/lib/{generator_test_runner.rb → ceedling/generator_test_runner.rb} +63 -63
  40. data/lib/{loginator.rb → ceedling/loginator.rb} +31 -31
  41. data/lib/{makefile.rb → ceedling/makefile.rb} +0 -0
  42. data/lib/{objects.yml → ceedling/objects.yml} +0 -0
  43. data/lib/{par_map.rb → ceedling/par_map.rb} +0 -0
  44. data/lib/{plugin.rb → ceedling/plugin.rb} +80 -80
  45. data/lib/{plugin_builder.rb → ceedling/plugin_builder.rb} +52 -52
  46. data/lib/{plugin_manager.rb → ceedling/plugin_manager.rb} +107 -107
  47. data/lib/{plugin_manager_helper.rb → ceedling/plugin_manager_helper.rb} +19 -19
  48. data/lib/{plugin_reportinator.rb → ceedling/plugin_reportinator.rb} +2 -2
  49. data/lib/{plugin_reportinator_helper.rb → ceedling/plugin_reportinator_helper.rb} +1 -1
  50. data/lib/{preprocessinator.rb → ceedling/preprocessinator.rb} +43 -43
  51. data/lib/{preprocessinator_extractor.rb → ceedling/preprocessinator_extractor.rb} +30 -30
  52. data/lib/{preprocessinator_file_handler.rb → ceedling/preprocessinator_file_handler.rb} +21 -21
  53. data/lib/{preprocessinator_helper.rb → ceedling/preprocessinator_helper.rb} +46 -46
  54. data/lib/ceedling/preprocessinator_includes_handler.rb +82 -0
  55. data/lib/{project_config_manager.rb → ceedling/project_config_manager.rb} +38 -38
  56. data/lib/{project_file_loader.rb → ceedling/project_file_loader.rb} +64 -64
  57. data/lib/{rake_utils.rb → ceedling/rake_utils.rb} +17 -17
  58. data/lib/{rake_wrapper.rb → ceedling/rake_wrapper.rb} +33 -33
  59. data/lib/{rakefile.rb → ceedling/rakefile.rb} +78 -74
  60. data/lib/{release_invoker.rb → ceedling/release_invoker.rb} +58 -58
  61. data/lib/{release_invoker_helper.rb → ceedling/release_invoker_helper.rb} +16 -16
  62. data/lib/{reportinator.rb → ceedling/reportinator.rb} +9 -9
  63. data/lib/{rules_cmock.rake → ceedling/rules_cmock.rake} +9 -9
  64. data/lib/{rules_preprocess.rake → ceedling/rules_preprocess.rake} +26 -26
  65. data/lib/{rules_release.rake → ceedling/rules_release.rake} +79 -79
  66. data/lib/{rules_release_deep_dependencies.rake → ceedling/rules_release_deep_dependencies.rake} +15 -15
  67. data/lib/{rules_tests.rake → ceedling/rules_tests.rake} +59 -59
  68. data/lib/{rules_tests_deep_dependencies.rake → ceedling/rules_tests_deep_dependencies.rake} +15 -15
  69. data/lib/{setupinator.rb → ceedling/setupinator.rb} +51 -51
  70. data/lib/{stream_wrapper.rb → ceedling/stream_wrapper.rb} +20 -20
  71. data/lib/{streaminator.rb → ceedling/streaminator.rb} +40 -41
  72. data/lib/{streaminator_helper.rb → ceedling/streaminator_helper.rb} +15 -15
  73. data/lib/{system_utils.rb → ceedling/system_utils.rb} +0 -0
  74. data/lib/{system_wrapper.rb → ceedling/system_wrapper.rb} +76 -76
  75. data/lib/{target_loader.rb → ceedling/target_loader.rb} +0 -0
  76. data/lib/{task_invoker.rb → ceedling/task_invoker.rb} +89 -89
  77. data/lib/{tasks_base.rake → ceedling/tasks_base.rake} +104 -104
  78. data/lib/{tasks_filesystem.rake → ceedling/tasks_filesystem.rake} +91 -91
  79. data/lib/{tasks_release.rake → ceedling/tasks_release.rake} +28 -28
  80. data/lib/{tasks_release_deep_dependencies.rake → ceedling/tasks_release_deep_dependencies.rake} +9 -9
  81. data/lib/{tasks_tests.rake → ceedling/tasks_tests.rake} +52 -52
  82. data/lib/{tasks_tests_deep_dependencies.rake → ceedling/tasks_tests_deep_dependencies.rake} +9 -9
  83. data/lib/{tasks_vendor.rake → ceedling/tasks_vendor.rake} +36 -36
  84. data/lib/{test_includes_extractor.rb → ceedling/test_includes_extractor.rb} +81 -81
  85. data/lib/{test_invoker.rb → ceedling/test_invoker.rb} +97 -97
  86. data/lib/{test_invoker_helper.rb → ceedling/test_invoker_helper.rb} +28 -28
  87. data/lib/{tool_executor.rb → ceedling/tool_executor.rb} +215 -212
  88. data/lib/{tool_executor_helper.rb → ceedling/tool_executor_helper.rb} +115 -115
  89. data/lib/{verbosinator.rb → ceedling/verbosinator.rb} +10 -10
  90. data/lib/ceedling/version.rb +1 -1
  91. data/lib/{yaml_wrapper.rb → ceedling/yaml_wrapper.rb} +17 -16
  92. data/license.txt +31 -0
  93. data/plugins/bullseye/lib/bullseye.rb +2 -2
  94. data/plugins/gcov/gcov.rb +2 -2
  95. data/plugins/module_generator/lib/module_generator.rb +4 -3
  96. data/plugins/stdout_ide_tests_report/lib/stdout_ide_tests_report.rb +8 -8
  97. data/plugins/stdout_pretty_tests_report/lib/stdout_pretty_tests_report.rb +3 -3
  98. data/plugins/teamcity_tests_report/config/teamcity_tests_report.yml +4 -0
  99. data/plugins/teamcity_tests_report/lib/teamcity_tests_report.rb +57 -0
  100. data/plugins/xml_tests_report/xml_tests_report.rb +4 -4
  101. data/release/version.info +1 -1
  102. data/spec/ceedling_spec.rb +154 -0
  103. data/spec/par_map_spec.rb +1 -1
  104. data/spec/preprocessinator_extractor_spec.rb +26 -27
  105. data/spec/preprocessinator_includes_handler_spec.rb +175 -0
  106. data/spec/spec_helper.rb +8 -27
  107. data/test_graveyard/integration/paths_test.rb +2 -2
  108. data/test_graveyard/unit/busted/configurator_builder_test.rb +2 -2
  109. data/test_graveyard/unit/busted/configurator_test.rb +1 -1
  110. data/test_graveyard/unit/busted/configurator_validator_test.rb +1 -1
  111. data/test_graveyard/unit/busted/dependinator_test.rb +1 -1
  112. data/test_graveyard/unit/busted/file_finder_helper_test.rb +1 -1
  113. data/test_graveyard/unit/busted/file_finder_test.rb +1 -1
  114. data/test_graveyard/unit/busted/file_path_utils_test.rb +1 -1
  115. data/test_graveyard/unit/busted/file_system_utils_test.rb +1 -1
  116. data/test_graveyard/unit/busted/generator_test.rb +1 -1
  117. data/test_graveyard/unit/busted/generator_test_results_test.rb +1 -1
  118. data/test_graveyard/unit/busted/generator_test_runner_test.rb +1 -1
  119. data/test_graveyard/unit/busted/preprocessinator_file_handler_test.rb +1 -1
  120. data/test_graveyard/unit/busted/preprocessinator_helper_test.rb +1 -1
  121. data/test_graveyard/unit/busted/preprocessinator_includes_handler_test.rb +1 -1
  122. data/test_graveyard/unit/busted/preprocessinator_test.rb +1 -1
  123. data/test_graveyard/unit/busted/project_file_loader_test.rb +1 -1
  124. data/test_graveyard/unit/busted/setupinator_test.rb +1 -1
  125. data/test_graveyard/unit/busted/streaminator_test.rb +2 -2
  126. data/test_graveyard/unit/busted/task_invoker_test.rb +1 -1
  127. data/test_graveyard/unit/busted/test_includes_extractor_test.rb +1 -1
  128. data/test_graveyard/unit/busted/test_invoker_helper_test.rb +1 -1
  129. data/test_graveyard/unit/busted/test_invoker_test.rb +1 -1
  130. data/test_graveyard/unit/busted/tool_executor_helper_test.rb +1 -1
  131. data/test_graveyard/unit/busted/tool_executor_test.rb +1 -1
  132. data/test_graveyard/unit/busted/verbosinator_test.rb +1 -1
  133. data/test_graveyard/unit/preprocessinator_extractor_test.rb +1 -1
  134. data/vendor/c_exception/Gemfile +4 -0
  135. data/vendor/c_exception/lib/CException.h +1 -1
  136. data/vendor/c_exception/test/TestException.c +25 -14
  137. data/vendor/c_exception/test/TestException_Runner.c +74 -57
  138. data/vendor/cmock/Gemfile +11 -0
  139. data/vendor/cmock/lib/cmock_generator.rb +13 -12
  140. data/vendor/cmock/lib/cmock_generator_plugin_ignore_arg.rb +44 -0
  141. data/vendor/cmock/lib/cmock_generator_plugin_return_thru_ptr.rb +74 -0
  142. data/vendor/cmock/lib/cmock_generator_utils.rb +67 -42
  143. data/vendor/cmock/src/cmock.c +20 -30
  144. data/vendor/cmock/src/cmock.h +1 -0
  145. data/vendor/cmock/src/cmock_internals.h +43 -0
  146. data/vendor/cmock/test/c/TestCMockC.c +79 -36
  147. data/vendor/cmock/test/c/TestCMockC_Runner.c +2 -0
  148. data/vendor/cmock/test/spec/cmock_file_writer_spec.rb +21 -1
  149. data/vendor/cmock/test/spec/cmock_generator_plugin_array_spec.rb +52 -0
  150. data/vendor/cmock/test/system/test_interactions/all_plugins_coexist.yml +2 -0
  151. data/vendor/cmock/test/system/test_interactions/return_thru_ptr_ignore_arg.yml +235 -0
  152. data/vendor/cmock/test/test_helper.rb +10 -5
  153. data/vendor/cmock/test/unit/cmock_generator_main_test.rb +38 -0
  154. data/vendor/cmock/test/unit/cmock_generator_plugin_ignore_arg_test.rb +116 -0
  155. data/vendor/cmock/test/unit/cmock_generator_plugin_return_thru_ptr_test.rb +134 -0
  156. data/vendor/cmock/test/unit/cmock_generator_utils_test.rb +58 -33
  157. data/vendor/cmock/vendor/c_exception/docs/CExceptionSummary.odt +0 -0
  158. data/vendor/cmock/vendor/c_exception/docs/CExceptionSummary.pdf +0 -0
  159. data/vendor/cmock/vendor/c_exception/docs/license.txt +30 -0
  160. data/vendor/cmock/vendor/c_exception/docs/readme.txt +236 -0
  161. data/vendor/cmock/vendor/c_exception/lib/CException.c +39 -0
  162. data/vendor/cmock/vendor/c_exception/lib/CException.h +70 -0
  163. data/vendor/cmock/vendor/c_exception/makefile +24 -0
  164. data/vendor/cmock/vendor/c_exception/rakefile.rb +41 -0
  165. data/vendor/cmock/vendor/c_exception/release/build.info +2 -0
  166. data/vendor/cmock/vendor/c_exception/release/version.info +2 -0
  167. data/vendor/cmock/vendor/c_exception/test/CExceptionConfig.h +27 -0
  168. data/vendor/cmock/vendor/c_exception/test/TestException.c +291 -0
  169. data/vendor/cmock/vendor/c_exception/test/TestException_Runner.c +62 -0
  170. data/vendor/cmock/vendor/unity/auto/colour_prompt.rb +94 -0
  171. data/vendor/cmock/vendor/unity/auto/colour_reporter.rb +39 -0
  172. data/vendor/cmock/vendor/unity/auto/generate_config.yml +36 -0
  173. data/vendor/cmock/vendor/unity/auto/generate_module.rb +202 -0
  174. data/vendor/cmock/vendor/unity/auto/generate_test_runner.rb +313 -0
  175. data/vendor/cmock/vendor/unity/auto/test_file_filter.rb +23 -0
  176. data/vendor/cmock/vendor/unity/auto/unity_test_summary.rb +139 -0
  177. data/vendor/cmock/vendor/unity/docs/Unity Summary.odt +0 -0
  178. data/vendor/cmock/vendor/unity/docs/Unity Summary.pdf +0 -0
  179. data/vendor/cmock/vendor/unity/docs/Unity Summary.txt +217 -0
  180. data/vendor/cmock/vendor/unity/docs/license.txt +31 -0
  181. data/vendor/cmock/vendor/unity/examples/helper/UnityHelper.c +10 -0
  182. data/vendor/cmock/vendor/unity/examples/helper/UnityHelper.h +12 -0
  183. data/vendor/cmock/vendor/unity/examples/makefile +40 -0
  184. data/vendor/cmock/vendor/unity/examples/rakefile.rb +32 -0
  185. data/vendor/cmock/vendor/unity/examples/rakefile_helper.rb +256 -0
  186. data/vendor/cmock/vendor/unity/examples/readme.txt +18 -0
  187. data/vendor/cmock/vendor/unity/examples/src/ProductionCode.c +24 -0
  188. data/vendor/cmock/vendor/unity/examples/src/ProductionCode.h +3 -0
  189. data/vendor/cmock/vendor/unity/examples/src/ProductionCode2.c +9 -0
  190. data/vendor/cmock/vendor/unity/examples/src/ProductionCode2.h +2 -0
  191. data/vendor/cmock/vendor/unity/examples/test/TestProductionCode.c +62 -0
  192. data/vendor/cmock/vendor/unity/examples/test/TestProductionCode2.c +31 -0
  193. data/vendor/cmock/vendor/unity/examples/test/no_ruby/TestProductionCode2_Runner.c +46 -0
  194. data/vendor/cmock/vendor/unity/examples/test/no_ruby/TestProductionCode_Runner.c +50 -0
  195. data/vendor/{unity → cmock/vendor/unity}/extras/fixture/build/MakefileWorker.mk +0 -0
  196. data/vendor/{unity → cmock/vendor/unity}/extras/fixture/build/filterGcov.sh +0 -0
  197. data/vendor/cmock/vendor/unity/extras/fixture/rakefile.rb +37 -0
  198. data/vendor/cmock/vendor/unity/extras/fixture/rakefile_helper.rb +178 -0
  199. data/vendor/cmock/vendor/unity/extras/fixture/readme.txt +9 -0
  200. data/vendor/cmock/vendor/unity/extras/fixture/src/unity_fixture.c +381 -0
  201. data/vendor/cmock/vendor/unity/extras/fixture/src/unity_fixture.h +81 -0
  202. data/vendor/cmock/vendor/unity/extras/fixture/src/unity_fixture_internals.h +44 -0
  203. data/vendor/cmock/vendor/unity/extras/fixture/src/unity_fixture_malloc_overrides.h +16 -0
  204. data/vendor/cmock/vendor/unity/extras/fixture/test/main/AllTests.c +21 -0
  205. data/vendor/cmock/vendor/unity/extras/fixture/test/testunity_fixture.c +39 -0
  206. data/vendor/cmock/vendor/unity/extras/fixture/test/unity_fixture_Test.c +321 -0
  207. data/vendor/cmock/vendor/unity/extras/fixture/test/unity_fixture_TestRunner.c +40 -0
  208. data/vendor/cmock/vendor/unity/extras/fixture/test/unity_output_Spy.c +56 -0
  209. data/vendor/cmock/vendor/unity/extras/fixture/test/unity_output_Spy.h +17 -0
  210. data/vendor/cmock/vendor/unity/makefile +35 -0
  211. data/vendor/cmock/vendor/unity/rakefile.rb +48 -0
  212. data/vendor/cmock/vendor/unity/rakefile_helper.rb +240 -0
  213. data/vendor/cmock/vendor/unity/release/build.info +2 -0
  214. data/vendor/cmock/vendor/unity/release/version.info +2 -0
  215. data/vendor/cmock/vendor/unity/src/unity.c +979 -0
  216. data/vendor/cmock/vendor/unity/src/unity.h +232 -0
  217. data/vendor/cmock/vendor/unity/src/unity_internals.h +424 -0
  218. data/vendor/cmock/vendor/unity/targets/gcc.yml +43 -0
  219. data/vendor/cmock/vendor/unity/targets/gcc_64.yml +44 -0
  220. data/vendor/cmock/vendor/unity/targets/hitech_picc18.yml +101 -0
  221. data/vendor/cmock/vendor/unity/targets/iar_arm_v4.yml +89 -0
  222. data/vendor/cmock/vendor/unity/targets/iar_arm_v5.yml +79 -0
  223. data/vendor/cmock/vendor/unity/targets/iar_arm_v5_3.yml +79 -0
  224. data/vendor/cmock/vendor/unity/targets/iar_armcortex_LM3S9B92_v5_4.yml +93 -0
  225. data/vendor/cmock/vendor/unity/targets/iar_cortexm3_v5.yml +83 -0
  226. data/vendor/cmock/vendor/unity/targets/iar_msp430.yml +94 -0
  227. data/vendor/cmock/vendor/unity/targets/iar_sh2a_v6.yml +85 -0
  228. data/vendor/cmock/vendor/unity/test/expectdata/testsample_cmd.c +54 -0
  229. data/vendor/cmock/vendor/unity/test/expectdata/testsample_def.c +50 -0
  230. data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_cmd.c +76 -0
  231. data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_def.c +72 -0
  232. data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_new1.c +85 -0
  233. data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_new2.c +85 -0
  234. data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_param.c +73 -0
  235. data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_run1.c +85 -0
  236. data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_run2.c +85 -0
  237. data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_yaml.c +86 -0
  238. data/vendor/cmock/vendor/unity/test/expectdata/testsample_new1.c +60 -0
  239. data/vendor/cmock/vendor/unity/test/expectdata/testsample_new2.c +63 -0
  240. data/vendor/cmock/vendor/unity/test/expectdata/testsample_param.c +51 -0
  241. data/vendor/cmock/vendor/unity/test/expectdata/testsample_run1.c +60 -0
  242. data/vendor/cmock/vendor/unity/test/expectdata/testsample_run2.c +63 -0
  243. data/vendor/cmock/vendor/unity/test/expectdata/testsample_yaml.c +64 -0
  244. data/vendor/cmock/vendor/unity/test/test_generate_test_runner.rb +94 -0
  245. data/vendor/cmock/vendor/unity/test/testdata/mocksample.c +51 -0
  246. data/vendor/cmock/vendor/unity/test/testdata/sample.yml +9 -0
  247. data/vendor/cmock/vendor/unity/test/testdata/testsample.c +51 -0
  248. data/vendor/cmock/vendor/unity/test/testparameterized.c +101 -0
  249. data/vendor/cmock/vendor/unity/test/testunity.c +2024 -0
  250. data/vendor/unity/Gemfile +4 -0
  251. data/vendor/unity/auto/generate_test_runner.rb +6 -3
  252. data/vendor/unity/examples/makefile +2 -2
  253. data/vendor/unity/examples/rakefile.rb +13 -2
  254. data/vendor/unity/extras/fixture/rakefile.rb +1 -1
  255. data/vendor/unity/extras/fixture/rakefile_helper.rb +4 -3
  256. data/vendor/unity/extras/fixture/src/unity_fixture.c +15 -12
  257. data/vendor/unity/extras/fixture/src/unity_fixture.h +5 -5
  258. data/vendor/unity/extras/fixture/src/unity_fixture_internals.h +1 -1
  259. data/vendor/unity/extras/fixture/test/unity_fixture_Test.c +6 -3
  260. data/vendor/unity/makefile +2 -2
  261. data/vendor/unity/src/unity.c +183 -16
  262. data/vendor/unity/src/unity.h +18 -5
  263. data/vendor/unity/src/unity_internals.h +57 -23
  264. data/vendor/unity/targets/gcc_64.yml +45 -0
  265. data/vendor/unity/test/testunity.c +436 -28
  266. metadata +200 -137
  267. data/ceedling-0.13.0.rc4.gem +0 -0
  268. data/ceedling.sublime-project +0 -8
  269. data/ceedling.sublime-workspace +0 -365
  270. data/lib/preprocessinator_includes_handler.rb +0 -55
  271. data/tags +0 -977
  272. data/vendor/cmock/vendor/hardmock/CHANGES +0 -78
  273. data/vendor/cmock/vendor/hardmock/LICENSE +0 -7
  274. data/vendor/cmock/vendor/hardmock/README +0 -70
  275. data/vendor/cmock/vendor/hardmock/Rakefile +0 -8
  276. data/vendor/cmock/vendor/hardmock/config/environment.rb +0 -12
  277. data/vendor/cmock/vendor/hardmock/lib/assert_error.rb +0 -23
  278. data/vendor/cmock/vendor/hardmock/lib/extend_test_unit.rb +0 -14
  279. data/vendor/cmock/vendor/hardmock/lib/hardmock.rb +0 -86
  280. data/vendor/cmock/vendor/hardmock/lib/hardmock/errors.rb +0 -22
  281. data/vendor/cmock/vendor/hardmock/lib/hardmock/expectation.rb +0 -229
  282. data/vendor/cmock/vendor/hardmock/lib/hardmock/expectation_builder.rb +0 -9
  283. data/vendor/cmock/vendor/hardmock/lib/hardmock/expector.rb +0 -26
  284. data/vendor/cmock/vendor/hardmock/lib/hardmock/method_cleanout.rb +0 -33
  285. data/vendor/cmock/vendor/hardmock/lib/hardmock/mock.rb +0 -180
  286. data/vendor/cmock/vendor/hardmock/lib/hardmock/mock_control.rb +0 -53
  287. data/vendor/cmock/vendor/hardmock/lib/hardmock/stubbing.rb +0 -210
  288. data/vendor/cmock/vendor/hardmock/lib/hardmock/trapper.rb +0 -31
  289. data/vendor/cmock/vendor/hardmock/lib/hardmock/utils.rb +0 -9
  290. data/vendor/cmock/vendor/hardmock/lib/test_unit_before_after.rb +0 -169
  291. data/vendor/cmock/vendor/hardmock/rake_tasks/rdoc.rake +0 -19
  292. data/vendor/cmock/vendor/hardmock/rake_tasks/rdoc_options.rb +0 -4
  293. data/vendor/cmock/vendor/hardmock/rake_tasks/test.rake +0 -22
  294. data/vendor/cmock/vendor/hardmock/test/functional/assert_error_test.rb +0 -52
  295. data/vendor/cmock/vendor/hardmock/test/functional/auto_verify_test.rb +0 -178
  296. data/vendor/cmock/vendor/hardmock/test/functional/direct_mock_usage_test.rb +0 -396
  297. data/vendor/cmock/vendor/hardmock/test/functional/hardmock_test.rb +0 -434
  298. data/vendor/cmock/vendor/hardmock/test/functional/stubbing_test.rb +0 -479
  299. data/vendor/cmock/vendor/hardmock/test/test_helper.rb +0 -43
  300. data/vendor/cmock/vendor/hardmock/test/unit/expectation_builder_test.rb +0 -19
  301. data/vendor/cmock/vendor/hardmock/test/unit/expectation_test.rb +0 -372
  302. data/vendor/cmock/vendor/hardmock/test/unit/expector_test.rb +0 -57
  303. data/vendor/cmock/vendor/hardmock/test/unit/method_cleanout_test.rb +0 -36
  304. data/vendor/cmock/vendor/hardmock/test/unit/mock_control_test.rb +0 -175
  305. data/vendor/cmock/vendor/hardmock/test/unit/mock_test.rb +0 -279
  306. data/vendor/cmock/vendor/hardmock/test/unit/test_unit_before_after_test.rb +0 -452
  307. data/vendor/cmock/vendor/hardmock/test/unit/trapper_test.rb +0 -62
  308. data/vendor/cmock/vendor/hardmock/test/unit/verify_error_test.rb +0 -40
@@ -1,12 +1,12 @@
1
-
2
- class CacheinatorHelper
3
-
4
- constructor :file_wrapper, :yaml_wrapper
5
-
6
- def diff_cached_config?(cached_filepath, hash)
7
- return true if ( not @file_wrapper.exist?(cached_filepath) )
8
- return true if ( (@file_wrapper.exist?(cached_filepath)) and (!(@yaml_wrapper.load(cached_filepath) == hash)) )
9
- return false
10
- end
11
-
12
- end
1
+
2
+ class CacheinatorHelper
3
+
4
+ constructor :file_wrapper, :yaml_wrapper
5
+
6
+ def diff_cached_config?(cached_filepath, hash)
7
+ return true if ( not @file_wrapper.exist?(cached_filepath) )
8
+ return true if ( (@file_wrapper.exist?(cached_filepath)) and (!(@yaml_wrapper.load(cached_filepath) == hash)) )
9
+ return false
10
+ end
11
+
12
+ end
@@ -1,15 +1,15 @@
1
- require 'cmock'
2
-
3
- class CmockBuilder
4
-
5
- attr_accessor :cmock
6
-
7
- def setup
8
- @cmock = nil
9
- end
10
-
11
- def manufacture(cmock_config)
12
- @cmock = CMock.new(cmock_config)
13
- end
14
-
15
- end
1
+ require 'cmock'
2
+
3
+ class CmockBuilder
4
+
5
+ attr_accessor :cmock
6
+
7
+ def setup
8
+ @cmock = nil
9
+ end
10
+
11
+ def manufacture(cmock_config)
12
+ @cmock = CMock.new(cmock_config)
13
+ end
14
+
15
+ end
@@ -1,329 +1,333 @@
1
- require 'defaults'
2
- require 'constants'
3
- require 'file_path_utils'
4
- require 'deep_merge'
5
-
6
-
7
-
8
- class Configurator
9
-
10
- attr_reader :project_config_hash, :script_plugins, :rake_plugins
11
- attr_accessor :project_logging, :project_debug, :project_verbosity, :sanity_checks
12
-
13
- constructor(:configurator_setup, :configurator_builder, :configurator_plugins, :cmock_builder, :yaml_wrapper, :system_wrapper) do
14
- @project_logging = false
15
- @project_debug = false
16
- @project_verbosity = Verbosity::NORMAL
17
- @sanity_checks = TestResultsSanityChecks::NORMAL
18
- end
19
-
20
- def setup
21
- # special copy of cmock config to provide to cmock for construction
22
- @cmock_config_hash = {}
23
-
24
- # note: project_config_hash is an instance variable so constants and accessors created
25
- # in eval() statements in build() have something of proper scope and persistence to reference
26
- @project_config_hash = {}
27
- @project_config_hash_backup = {}
28
-
29
- @script_plugins = []
30
- @rake_plugins = []
31
- end
32
-
33
-
34
- def replace_flattened_config(config)
35
- @project_config_hash.merge!(config)
36
- @configurator_setup.build_constants_and_accessors(@project_config_hash, binding())
37
- end
38
-
39
-
40
- def store_config
41
- @project_config_hash_backup = @project_config_hash.clone
42
- end
43
-
44
-
45
- def restore_config
46
- @project_config_hash = @project_config_hash_backup
47
- @configurator_setup.build_constants_and_accessors(@project_config_hash, binding())
48
- end
49
-
50
-
51
- def reset_defaults(config)
52
- [:test_compiler,
53
- :test_linker,
54
- :test_fixture,
55
- :test_includes_preprocessor,
56
- :test_file_preprocessor,
57
- :test_dependencies_generator,
58
- :release_compiler,
59
- :release_assembler,
60
- :release_linker,
61
- :release_dependencies_generator].each do |tool|
62
- config[:tools].delete(tool) if (not (config[:tools][tool].nil?))
63
- end
64
- end
65
-
66
-
67
- def populate_defaults(config)
68
- new_config = DEFAULT_CEEDLING_CONFIG.deep_clone
69
- new_config.deep_merge!(config)
70
- config.replace(new_config)
71
-
72
- @configurator_builder.populate_defaults( config, DEFAULT_TOOLS_TEST )
73
- @configurator_builder.populate_defaults( config, DEFAULT_TOOLS_TEST_PREPROCESSORS ) if (config[:project][:use_test_preprocessor])
74
- @configurator_builder.populate_defaults( config, DEFAULT_TOOLS_TEST_DEPENDENCIES ) if (config[:project][:use_deep_dependencies])
75
-
76
- @configurator_builder.populate_defaults( config, DEFAULT_TOOLS_RELEASE ) if (config[:project][:release_build])
77
- @configurator_builder.populate_defaults( config, DEFAULT_TOOLS_RELEASE_ASSEMBLER ) if (config[:project][:release_build] and config[:release_build][:use_assembly])
78
- @configurator_builder.populate_defaults( config, DEFAULT_TOOLS_RELEASE_DEPENDENCIES ) if (config[:project][:release_build] and config[:project][:use_deep_dependencies])
79
- end
80
-
81
-
82
- def populate_cmock_defaults(config)
83
- # cmock has its own internal defaults handling, but we need to set these specific values
84
- # so they're present for the build environment to access;
85
- # note: these need to end up in the hash given to initialize cmock for this to be successful
86
- cmock = config[:cmock] || {}
87
-
88
- # yes, we're duplicating the default mock_prefix in cmock, but it's because we need CMOCK_MOCK_PREFIX always available in Ceedling's environment
89
- cmock[:mock_prefix] = 'Mock' if (cmock[:mock_prefix].nil?)
90
-
91
- # just because strict ordering is the way to go
92
- cmock[:enforce_strict_ordering] = true if (cmock[:enforce_strict_ordering].nil?)
93
-
94
- cmock[:mock_path] = File.join(config[:project][:build_root], TESTS_BASE_PATH, 'mocks') if (cmock[:mock_path].nil?)
95
- cmock[:verbosity] = @project_verbosity if (cmock[:verbosity].nil?)
96
-
97
- cmock[:plugins] = [] if (cmock[:plugins].nil?)
98
- cmock[:plugins].map! { |plugin| plugin.to_sym }
99
- cmock[:plugins] << (:cexception) if (!cmock[:plugins].include?(:cexception) and (config[:project][:use_exceptions]))
100
- cmock[:plugins].uniq!
101
-
102
- cmock[:unity_helper] = false if (cmock[:unity_helper].nil?)
103
-
104
- if (cmock[:unity_helper])
105
- cmock[:includes] << File.basename(cmock[:unity_helper])
106
- cmock[:includes].uniq!
107
- end
108
-
109
- @runner_config = cmock.merge(config[:test_runner] || {})
110
- @cmock_builder.manufacture(cmock)
111
- end
112
-
113
-
114
- def get_runner_config
115
- @runner_config
116
- end
117
-
118
-
119
- # grab tool names from yaml and insert into tool structures so available for error messages
120
- # set up default values
121
- def tools_setup(config)
122
- config[:tools].each_key do |name|
123
- tool = config[:tools][name]
124
-
125
- # populate name if not given
126
- tool[:name] = name.to_s if (tool[:name].nil?)
127
-
128
- # populate stderr redirect option
129
- tool[:stderr_redirect] = StdErrRedirect::NONE if (tool[:stderr_redirect].nil?)
130
-
131
- # populate background execution option
132
- tool[:background_exec] = BackgroundExec::NONE if (tool[:background_exec].nil?)
133
-
134
- # populate optional option to control verification of executable in search paths
135
- tool[:optional] = false if (tool[:optional].nil?)
136
- end
137
- end
138
-
139
-
140
- def tools_supplement_arguments(config)
141
- tools_name_prefix = 'tools_'
142
- config[:tools].each_key do |name|
143
- tool = @project_config_hash[(tools_name_prefix + name.to_s).to_sym]
144
-
145
- # smoosh in extra arguments if specified at top-level of config (useful for plugins & default gcc tools)
146
- # arguments are squirted in at beginning of list
147
- top_level_tool = (tools_name_prefix + name.to_s).to_sym
148
- if (not config[top_level_tool].nil?)
149
- # adding and flattening is not a good idea: might over-flatten if there's array nesting in tool args
150
- # use _with_index to preserve order
151
- config[top_level_tool][:arguments].each_with_index { |arg, index| tool[:arguments].insert( index, arg ) }
152
- end
153
- end
154
- end
155
-
156
-
157
- def find_and_merge_plugins(config)
158
- # plugins must be loaded before generic path evaluation & magic that happen later;
159
- # perform path magic here as discrete step
160
- config[:plugins][:load_paths].each do |path|
161
- path.replace(@system_wrapper.module_eval(path)) if (path =~ RUBY_STRING_REPLACEMENT_PATTERN)
162
- FilePathUtils::standardize(path)
163
- end
164
-
165
- paths_hash = @configurator_plugins.add_load_paths(config)
166
-
167
- @rake_plugins = @configurator_plugins.find_rake_plugins(config)
168
- @script_plugins = @configurator_plugins.find_script_plugins(config)
169
- config_plugins = @configurator_plugins.find_config_plugins(config)
170
- plugin_defaults = @configurator_plugins.find_plugin_defaults(config)
171
-
172
- config_plugins.each do |plugin|
173
- config.deep_merge( @yaml_wrapper.load(plugin) )
174
- end
175
-
176
- plugin_defaults.each do |defaults|
177
- @configurator_builder.populate_defaults( config, @yaml_wrapper.load(defaults) )
178
- end
179
-
180
- # special plugin setting for results printing
181
- config[:plugins][:display_raw_test_results] = true if (config[:plugins][:display_raw_test_results].nil?)
182
-
183
- paths_hash.each_pair { |name, path| config[:plugins][name] = path }
184
- end
185
-
186
-
187
- def eval_environment_variables(config)
188
- config[:environment].each do |hash|
189
- key = hash.keys[0]
190
- value = hash[key]
191
- items = []
192
-
193
- interstitial = ((key == :path) ? File::PATH_SEPARATOR : '')
194
- items = ((value.class == Array) ? hash[key] : [value])
195
-
196
- items.each { |item| item.replace( @system_wrapper.module_eval( item ) ) if (item =~ RUBY_STRING_REPLACEMENT_PATTERN) }
197
- hash[key] = items.join( interstitial )
198
-
199
- @system_wrapper.env_set( key.to_s.upcase, hash[key] )
200
- end
201
- end
202
-
203
-
204
- def eval_paths(config)
205
- # [:plugins]:[load_paths] already handled
206
-
207
- paths = [ # individual paths that don't follow convention processed below
208
- config[:project][:build_root],
209
- config[:release_build][:artifacts]]
210
-
211
- eval_path_list( paths )
212
-
213
- config[:paths].each_pair { |collection, paths| eval_path_list( paths ) }
214
-
215
- config[:files].each_pair { |collection, files| eval_path_list( paths ) }
216
-
217
- # all other paths at secondary hash key level processed by convention:
218
- # ex. [:toplevel][:foo_path] & [:toplevel][:bar_paths] are evaluated
219
- config.each_pair { |parent, child| eval_path_list( collect_path_list( child ) ) }
220
- end
221
-
222
-
223
- def standardize_paths(config)
224
- # [:plugins]:[load_paths] already handled
225
-
226
- paths = [ # individual paths that don't follow convention processed below
227
- config[:project][:build_root],
228
- config[:release_build][:artifacts]] # cmock path in case it was explicitly set in config
229
-
230
- paths.flatten.each { |path| FilePathUtils::standardize( path ) }
231
-
232
- config[:paths].each_pair do |collection, paths|
233
- paths.each{|path| FilePathUtils::standardize( path )}
234
- # ensure that list is an array (i.e. handle case of list being a single string)
235
- config[:paths][collection] = [paths].flatten
236
- end
237
-
238
- config[:files].each_pair { |collection, files| files.each{ |path| FilePathUtils::standardize( path ) } }
239
-
240
- config[:tools].each_pair { |tool, config| FilePathUtils::standardize( config[:executable] ) }
241
-
242
- # all other paths at secondary hash key level processed by convention:
243
- # ex. [:toplevel][:foo_path] & [:toplevel][:bar_paths] are standardized
244
- config.each_pair do |parent, child|
245
- collect_path_list( child ).each { |path| FilePathUtils::standardize( path ) }
246
- end
247
- end
248
-
249
-
250
- def validate(config)
251
- # collect felonies and go straight to jail
252
- raise if (not @configurator_setup.validate_required_sections( config ))
253
-
254
- # collect all misdemeanors, everybody on probation
255
- blotter = []
256
- blotter << @configurator_setup.validate_required_section_values( config )
257
- blotter << @configurator_setup.validate_paths( config )
258
- blotter << @configurator_setup.validate_tools( config )
259
- blotter << @configurator_setup.validate_plugins( config )
260
-
261
- raise if (blotter.include?( false ))
262
- end
263
-
264
-
265
- # create constants and accessors (attached to this object) from given hash
266
- def build(config, *keys)
267
- # create flattened & expanded configuration hash
268
- built_config = @configurator_setup.build_project_config( config, @configurator_builder.flattenify( config ) )
269
-
270
- @project_config_hash = built_config.clone
271
- store_config()
272
-
273
- @configurator_setup.build_constants_and_accessors(built_config, binding())
274
-
275
- # top-level keys disappear when we flatten, so create global constants & accessors to any specified keys
276
- keys.each do |key|
277
- hash = { key => config[key] }
278
- @configurator_setup.build_constants_and_accessors(hash, binding())
279
- end
280
- end
281
-
282
-
283
- # add to constants and accessors as post build step
284
- def build_supplement(config_base, config_more)
285
- # merge in our post-build additions to base configuration hash
286
- config_base.deep_merge!( config_more )
287
-
288
- # flatten our addition hash
289
- config_more_flattened = @configurator_builder.flattenify( config_more )
290
-
291
- # merge our flattened hash with built hash from previous build
292
- @project_config_hash.deep_merge!( config_more_flattened )
293
- store_config()
294
-
295
- # create more constants and accessors
296
- @configurator_setup.build_constants_and_accessors(config_more_flattened, binding())
297
-
298
- # recreate constants & update accessors with new merged, base values
299
- config_more.keys.each do |key|
300
- hash = { key => config_base[key] }
301
- @configurator_setup.build_constants_and_accessors(hash, binding())
302
- end
303
- end
304
-
305
-
306
- def insert_rake_plugins(plugins)
307
- plugins.each do |plugin|
308
- @project_config_hash[:project_rakefile_component_files] << plugin
309
- end
310
- end
311
-
312
- ### private ###
313
-
314
- private
315
-
316
- def collect_path_list( container )
317
- paths = []
318
- container.each_key { |key| paths << container[key] if (key.to_s =~ /_path(s)?$/) } if (container.class == Hash)
319
- return paths.flatten
320
- end
321
-
322
- def eval_path_list( paths )
323
- paths.flatten.each do |path|
324
- path.replace( @system_wrapper.module_eval( path ) ) if (path =~ RUBY_STRING_REPLACEMENT_PATTERN)
325
- end
326
- end
327
-
328
-
329
- end
1
+ require 'ceedling/defaults'
2
+ require 'ceedling/constants'
3
+ require 'ceedling/file_path_utils'
4
+ require 'deep_merge'
5
+
6
+
7
+
8
+ class Configurator
9
+
10
+ attr_reader :project_config_hash, :script_plugins, :rake_plugins
11
+ attr_accessor :project_logging, :project_debug, :project_verbosity, :sanity_checks
12
+
13
+ constructor(:configurator_setup, :configurator_builder, :configurator_plugins, :cmock_builder, :yaml_wrapper, :system_wrapper) do
14
+ @project_logging = false
15
+ @project_debug = false
16
+ @project_verbosity = Verbosity::NORMAL
17
+ @sanity_checks = TestResultsSanityChecks::NORMAL
18
+ end
19
+
20
+ def setup
21
+ # special copy of cmock config to provide to cmock for construction
22
+ @cmock_config_hash = {}
23
+
24
+ # note: project_config_hash is an instance variable so constants and accessors created
25
+ # in eval() statements in build() have something of proper scope and persistence to reference
26
+ @project_config_hash = {}
27
+ @project_config_hash_backup = {}
28
+
29
+ @script_plugins = []
30
+ @rake_plugins = []
31
+ end
32
+
33
+
34
+ def replace_flattened_config(config)
35
+ @project_config_hash.merge!(config)
36
+ @configurator_setup.build_constants_and_accessors(@project_config_hash, binding())
37
+ end
38
+
39
+
40
+ def store_config
41
+ @project_config_hash_backup = @project_config_hash.clone
42
+ end
43
+
44
+
45
+ def restore_config
46
+ @project_config_hash = @project_config_hash_backup
47
+ @configurator_setup.build_constants_and_accessors(@project_config_hash, binding())
48
+ end
49
+
50
+
51
+ def reset_defaults(config)
52
+ [:test_compiler,
53
+ :test_linker,
54
+ :test_fixture,
55
+ :test_includes_preprocessor,
56
+ :test_file_preprocessor,
57
+ :test_dependencies_generator,
58
+ :release_compiler,
59
+ :release_assembler,
60
+ :release_linker,
61
+ :release_dependencies_generator].each do |tool|
62
+ config[:tools].delete(tool) if (not (config[:tools][tool].nil?))
63
+ end
64
+ end
65
+
66
+
67
+ def populate_defaults(config)
68
+ new_config = DEFAULT_CEEDLING_CONFIG.deep_clone
69
+ new_config.deep_merge!(config)
70
+ config.replace(new_config)
71
+
72
+ @configurator_builder.populate_defaults( config, DEFAULT_TOOLS_TEST )
73
+ @configurator_builder.populate_defaults( config, DEFAULT_TOOLS_TEST_PREPROCESSORS ) if (config[:project][:use_test_preprocessor])
74
+ @configurator_builder.populate_defaults( config, DEFAULT_TOOLS_TEST_DEPENDENCIES ) if (config[:project][:use_deep_dependencies])
75
+
76
+ @configurator_builder.populate_defaults( config, DEFAULT_TOOLS_RELEASE ) if (config[:project][:release_build])
77
+ @configurator_builder.populate_defaults( config, DEFAULT_TOOLS_RELEASE_ASSEMBLER ) if (config[:project][:release_build] and config[:release_build][:use_assembly])
78
+ @configurator_builder.populate_defaults( config, DEFAULT_TOOLS_RELEASE_DEPENDENCIES ) if (config[:project][:release_build] and config[:project][:use_deep_dependencies])
79
+ end
80
+
81
+
82
+ def populate_cmock_defaults(config)
83
+ # cmock has its own internal defaults handling, but we need to set these specific values
84
+ # so they're present for the build environment to access;
85
+ # note: these need to end up in the hash given to initialize cmock for this to be successful
86
+ cmock = config[:cmock] || {}
87
+
88
+ # yes, we're duplicating the default mock_prefix in cmock, but it's because we need CMOCK_MOCK_PREFIX always available in Ceedling's environment
89
+ cmock[:mock_prefix] = 'Mock' if (cmock[:mock_prefix].nil?)
90
+
91
+ # just because strict ordering is the way to go
92
+ cmock[:enforce_strict_ordering] = true if (cmock[:enforce_strict_ordering].nil?)
93
+
94
+ cmock[:mock_path] = File.join(config[:project][:build_root], TESTS_BASE_PATH, 'mocks') if (cmock[:mock_path].nil?)
95
+ cmock[:verbosity] = @project_verbosity if (cmock[:verbosity].nil?)
96
+
97
+ cmock[:plugins] = [] if (cmock[:plugins].nil?)
98
+ cmock[:plugins].map! { |plugin| plugin.to_sym }
99
+ cmock[:plugins] << (:cexception) if (!cmock[:plugins].include?(:cexception) and (config[:project][:use_exceptions]))
100
+ cmock[:plugins].uniq!
101
+
102
+ cmock[:unity_helper] = false if (cmock[:unity_helper].nil?)
103
+
104
+ if (cmock[:unity_helper])
105
+ cmock[:includes] << File.basename(cmock[:unity_helper])
106
+ cmock[:includes].uniq!
107
+ end
108
+
109
+ @runner_config = cmock.merge(config[:test_runner] || {})
110
+ @cmock_builder.manufacture(cmock)
111
+ end
112
+
113
+
114
+ def get_runner_config
115
+ @runner_config
116
+ end
117
+
118
+
119
+ # grab tool names from yaml and insert into tool structures so available for error messages
120
+ # set up default values
121
+ def tools_setup(config)
122
+ config[:tools].each_key do |name|
123
+ tool = config[:tools][name]
124
+
125
+ # populate name if not given
126
+ tool[:name] = name.to_s if (tool[:name].nil?)
127
+
128
+ # handle inline ruby string substitution in executable
129
+ if (tool[:executable] =~ RUBY_STRING_REPLACEMENT_PATTERN)
130
+ tool[:executable].replace(@system_wrapper.module_eval(tool[:executable]))
131
+ end
132
+
133
+ # populate stderr redirect option
134
+ tool[:stderr_redirect] = StdErrRedirect::NONE if (tool[:stderr_redirect].nil?)
135
+
136
+ # populate background execution option
137
+ tool[:background_exec] = BackgroundExec::NONE if (tool[:background_exec].nil?)
138
+
139
+ # populate optional option to control verification of executable in search paths
140
+ tool[:optional] = false if (tool[:optional].nil?)
141
+ end
142
+ end
143
+
144
+
145
+ def tools_supplement_arguments(config)
146
+ tools_name_prefix = 'tools_'
147
+ config[:tools].each_key do |name|
148
+ tool = @project_config_hash[(tools_name_prefix + name.to_s).to_sym]
149
+
150
+ # smoosh in extra arguments if specified at top-level of config (useful for plugins & default gcc tools)
151
+ # arguments are squirted in at _end_ of list
152
+ top_level_tool = (tools_name_prefix + name.to_s).to_sym
153
+ if (not config[top_level_tool].nil?)
154
+ # adding and flattening is not a good idea: might over-flatten if there's array nesting in tool args
155
+ tool[:arguments].concat config[top_level_tool][:arguments]
156
+ end
157
+ end
158
+ end
159
+
160
+
161
+ def find_and_merge_plugins(config)
162
+ # plugins must be loaded before generic path evaluation & magic that happen later;
163
+ # perform path magic here as discrete step
164
+ config[:plugins][:load_paths].each do |path|
165
+ path.replace(@system_wrapper.module_eval(path)) if (path =~ RUBY_STRING_REPLACEMENT_PATTERN)
166
+ FilePathUtils::standardize(path)
167
+ end
168
+
169
+ paths_hash = @configurator_plugins.add_load_paths(config)
170
+
171
+ @rake_plugins = @configurator_plugins.find_rake_plugins(config)
172
+ @script_plugins = @configurator_plugins.find_script_plugins(config)
173
+ config_plugins = @configurator_plugins.find_config_plugins(config)
174
+ plugin_defaults = @configurator_plugins.find_plugin_defaults(config)
175
+
176
+ config_plugins.each do |plugin|
177
+ config.deep_merge( @yaml_wrapper.load(plugin) )
178
+ end
179
+
180
+ plugin_defaults.each do |defaults|
181
+ @configurator_builder.populate_defaults( config, @yaml_wrapper.load(defaults) )
182
+ end
183
+
184
+ # special plugin setting for results printing
185
+ config[:plugins][:display_raw_test_results] = true if (config[:plugins][:display_raw_test_results].nil?)
186
+
187
+ paths_hash.each_pair { |name, path| config[:plugins][name] = path }
188
+ end
189
+
190
+
191
+ def eval_environment_variables(config)
192
+ config[:environment].each do |hash|
193
+ key = hash.keys[0]
194
+ value = hash[key]
195
+ items = []
196
+
197
+ interstitial = ((key == :path) ? File::PATH_SEPARATOR : '')
198
+ items = ((value.class == Array) ? hash[key] : [value])
199
+
200
+ items.each { |item| item.replace( @system_wrapper.module_eval( item ) ) if (item =~ RUBY_STRING_REPLACEMENT_PATTERN) }
201
+ hash[key] = items.join( interstitial )
202
+
203
+ @system_wrapper.env_set( key.to_s.upcase, hash[key] )
204
+ end
205
+ end
206
+
207
+
208
+ def eval_paths(config)
209
+ # [:plugins]:[load_paths] already handled
210
+
211
+ paths = [ # individual paths that don't follow convention processed below
212
+ config[:project][:build_root],
213
+ config[:release_build][:artifacts]]
214
+
215
+ eval_path_list( paths )
216
+
217
+ config[:paths].each_pair { |collection, paths| eval_path_list( paths ) }
218
+
219
+ config[:files].each_pair { |collection, files| eval_path_list( files ) }
220
+
221
+ # all other paths at secondary hash key level processed by convention:
222
+ # ex. [:toplevel][:foo_path] & [:toplevel][:bar_paths] are evaluated
223
+ config.each_pair { |parent, child| eval_path_list( collect_path_list( child ) ) }
224
+ end
225
+
226
+
227
+ def standardize_paths(config)
228
+ # [:plugins]:[load_paths] already handled
229
+
230
+ paths = [ # individual paths that don't follow convention processed below
231
+ config[:project][:build_root],
232
+ config[:release_build][:artifacts]] # cmock path in case it was explicitly set in config
233
+
234
+ paths.flatten.each { |path| FilePathUtils::standardize( path ) }
235
+
236
+ config[:paths].each_pair do |collection, paths|
237
+ # ensure that list is an array (i.e. handle case of list being a single string,
238
+ # or a multidimensional array)
239
+ config[:paths][collection] = [paths].flatten.map{|path| FilePathUtils::standardize( path )}
240
+ end
241
+
242
+ config[:files].each_pair { |collection, files| files.each{ |path| FilePathUtils::standardize( path ) } }
243
+
244
+ config[:tools].each_pair { |tool, config| FilePathUtils::standardize( config[:executable] ) }
245
+
246
+ # all other paths at secondary hash key level processed by convention:
247
+ # ex. [:toplevel][:foo_path] & [:toplevel][:bar_paths] are standardized
248
+ config.each_pair do |parent, child|
249
+ collect_path_list( child ).each { |path| FilePathUtils::standardize( path ) }
250
+ end
251
+ end
252
+
253
+
254
+ def validate(config)
255
+ # collect felonies and go straight to jail
256
+ raise if (not @configurator_setup.validate_required_sections( config ))
257
+
258
+ # collect all misdemeanors, everybody on probation
259
+ blotter = []
260
+ blotter << @configurator_setup.validate_required_section_values( config )
261
+ blotter << @configurator_setup.validate_paths( config )
262
+ blotter << @configurator_setup.validate_tools( config )
263
+ blotter << @configurator_setup.validate_plugins( config )
264
+
265
+ raise if (blotter.include?( false ))
266
+ end
267
+
268
+
269
+ # create constants and accessors (attached to this object) from given hash
270
+ def build(config, *keys)
271
+ # create flattened & expanded configuration hash
272
+ built_config = @configurator_setup.build_project_config( config, @configurator_builder.flattenify( config ) )
273
+
274
+ @project_config_hash = built_config.clone
275
+ store_config()
276
+
277
+ @configurator_setup.build_constants_and_accessors(built_config, binding())
278
+
279
+ # top-level keys disappear when we flatten, so create global constants & accessors to any specified keys
280
+ keys.each do |key|
281
+ hash = { key => config[key] }
282
+ @configurator_setup.build_constants_and_accessors(hash, binding())
283
+ end
284
+ end
285
+
286
+
287
+ # add to constants and accessors as post build step
288
+ def build_supplement(config_base, config_more)
289
+ # merge in our post-build additions to base configuration hash
290
+ config_base.deep_merge!( config_more )
291
+
292
+ # flatten our addition hash
293
+ config_more_flattened = @configurator_builder.flattenify( config_more )
294
+
295
+ # merge our flattened hash with built hash from previous build
296
+ @project_config_hash.deep_merge!( config_more_flattened )
297
+ store_config()
298
+
299
+ # create more constants and accessors
300
+ @configurator_setup.build_constants_and_accessors(config_more_flattened, binding())
301
+
302
+ # recreate constants & update accessors with new merged, base values
303
+ config_more.keys.each do |key|
304
+ hash = { key => config_base[key] }
305
+ @configurator_setup.build_constants_and_accessors(hash, binding())
306
+ end
307
+ end
308
+
309
+
310
+ def insert_rake_plugins(plugins)
311
+ plugins.each do |plugin|
312
+ @project_config_hash[:project_rakefile_component_files] << plugin
313
+ end
314
+ end
315
+
316
+ ### private ###
317
+
318
+ private
319
+
320
+ def collect_path_list( container )
321
+ paths = []
322
+ container.each_key { |key| paths << container[key] if (key.to_s =~ /_path(s)?$/) } if (container.class == Hash)
323
+ return paths.flatten
324
+ end
325
+
326
+ def eval_path_list( paths )
327
+ paths.flatten.each do |path|
328
+ path.replace( @system_wrapper.module_eval( path ) ) if (path =~ RUBY_STRING_REPLACEMENT_PATTERN)
329
+ end
330
+ end
331
+
332
+
333
+ end