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
@@ -1,2 +1,2 @@
1
- 215
1
+ 217
2
2
 
@@ -1,2 +1,2 @@
1
- 2.4.4
1
+ 2.4.6
2
2
 
@@ -18,8 +18,9 @@ RUNNERS_DIR = File.join(TEST_BUILD_DIR, 'runners')
18
18
  MOCKS_DIR = File.join(TEST_BUILD_DIR, 'mocks')
19
19
  TEST_BIN_DIR = TEST_BUILD_DIR
20
20
  MOCK_PREFIX = ENV.fetch('TEST_MOCK_PREFIX', 'mock_')
21
+ MOCK_SUFFIX = ENV.fetch('TEST_MOCK_SUFFIX', '')
21
22
  TEST_MAKEFILE = ENV.fetch('TEST_MAKEFILE', File.join(TEST_BUILD_DIR, 'MakefileTestSupport'))
22
- MOCK_MATCHER = /#{MOCK_PREFIX}[A-Za-z_][A-Za-z0-9_\-\.]+/
23
+ MOCK_MATCHER = /#{MOCK_PREFIX}[A-Za-z_][A-Za-z0-9_\-\.]+#{MOCK_SUFFIX}/
23
24
 
24
25
  [TEST_BUILD_DIR, OBJ_DIR, RUNNERS_DIR, MOCKS_DIR, TEST_BIN_DIR].each do |dir|
25
26
  FileUtils.mkdir_p dir
@@ -58,7 +59,21 @@ File.open(TEST_MAKEFILE, "w") do |mkfile|
58
59
  test_sources = Dir["#{TEST_DIR}/**/test_*.c"]
59
60
  test_targets = []
60
61
  generator = UnityTestRunnerGenerator.new
61
- all_headers = Dir["#{SRC_DIR}/**/{[!mock_]}*.h"] #headers that begin with mock_ are not included
62
+
63
+ # headers that begin with prefix or end with suffix are not included
64
+ all_headers = Dir["#{SRC_DIR}/**/*.h"]
65
+
66
+ def reject_mock_files(file)
67
+ extn = File.extname file
68
+ filename = File.basename file, extn
69
+ if MOCK_SUFFIX.empty?
70
+ return filename.start_with? MOCK_PREFIX
71
+ end
72
+ return (filename.start_with? MOCK_PREFIX or filename.end_with? MOCK_SUFFIX)
73
+ end
74
+
75
+ all_headers = all_headers.reject { |f| reject_mock_files(f) }
76
+
62
77
  makefile_targets = []
63
78
 
64
79
  test_sources.each do |test|
@@ -26,7 +26,8 @@ static unsigned char* CMock_Guts_Buffer = NULL;
26
26
  static CMOCK_MEM_INDEX_TYPE CMock_Guts_BufferSize = CMOCK_MEM_ALIGN_SIZE;
27
27
  static CMOCK_MEM_INDEX_TYPE CMock_Guts_FreePtr;
28
28
  #else
29
- static unsigned char CMock_Guts_Buffer[CMOCK_MEM_SIZE + CMOCK_MEM_ALIGN_SIZE];
29
+ static CMOCK_MEM_INDEX_TYPE CMock_Guts_BufferArray[(CMOCK_MEM_SIZE + CMOCK_MEM_INDEX_SIZE - 1) / CMOCK_MEM_INDEX_SIZE];
30
+ #define CMock_Guts_Buffer ((unsigned char*)CMock_Guts_BufferArray)
30
31
  static CMOCK_MEM_INDEX_TYPE CMock_Guts_BufferSize = CMOCK_MEM_SIZE + CMOCK_MEM_ALIGN_SIZE;
31
32
  static CMOCK_MEM_INDEX_TYPE CMock_Guts_FreePtr;
32
33
  #endif
@@ -48,12 +49,17 @@ CMOCK_MEM_INDEX_TYPE CMock_Guts_MemNew(CMOCK_MEM_INDEX_TYPE size)
48
49
  size = (size + CMOCK_MEM_ALIGN_MASK) & ~CMOCK_MEM_ALIGN_MASK;
49
50
  if ((CMock_Guts_BufferSize - CMock_Guts_FreePtr) < size)
50
51
  {
51
- #ifdef CMOCK_MEM_DYNAMIC
52
- CMock_Guts_BufferSize += CMOCK_MEM_SIZE + size;
53
- CMock_Guts_Buffer = realloc(CMock_Guts_Buffer, (size_t)CMock_Guts_BufferSize);
54
- if (CMock_Guts_Buffer == NULL)
55
- #endif //yes that if will continue to the return below if TRUE
56
- return CMOCK_GUTS_NONE;
52
+ #ifndef CMOCK_MEM_DYNAMIC
53
+ return CMOCK_GUTS_NONE; // nothing we can do; our static buffer is out of memory
54
+ #else
55
+ // our dynamic buffer does not have enough room; request more via realloc()
56
+ CMOCK_MEM_INDEX_TYPE new_buffersize = CMock_Guts_BufferSize + CMOCK_MEM_SIZE + size;
57
+ unsigned char* new_buffer = realloc(CMock_Guts_Buffer, (size_t)new_buffersize);
58
+ if (new_buffer == NULL)
59
+ return CMOCK_GUTS_NONE; // realloc() failed; out of memory
60
+ CMock_Guts_Buffer = new_buffer;
61
+ CMock_Guts_BufferSize = new_buffersize;
62
+ #endif
57
63
  }
58
64
 
59
65
  //determine where we're putting this new block, and init its pointer to be the end of the line
@@ -24,20 +24,21 @@ end
24
24
 
25
25
  def test_return
26
26
  {
27
- :int => {:type => "int", :name => 'cmock_to_return', :ptr? => false, :const? => false, :void? => false, :str => 'int cmock_to_return'},
28
- :int_ptr => {:type => "int*", :name => 'cmock_to_return', :ptr? => true, :const? => false, :void? => false, :str => 'int* cmock_to_return'},
29
- :void => {:type => "void", :name => 'cmock_to_return', :ptr? => false, :const? => false, :void? => true, :str => 'void cmock_to_return'},
30
- :string => {:type => "char*", :name => 'cmock_to_return', :ptr? => false, :const? => true, :void? => false, :str => 'const char* cmock_to_return'},
27
+ :int => {:type => "int", :name => 'cmock_to_return', :ptr? => false, :const? => false, :void? => false, :str => 'int cmock_to_return'},
28
+ :int_ptr => {:type => "int*", :name => 'cmock_to_return', :ptr? => true, :const? => false, :void? => false, :str => 'int* cmock_to_return'},
29
+ :void => {:type => "void", :name => 'cmock_to_return', :ptr? => false, :const? => false, :void? => true, :str => 'void cmock_to_return'},
30
+ :string => {:type => "const char*", :name => 'cmock_to_return', :ptr? => false, :const? => true, :void? => false, :str => 'const char* cmock_to_return'},
31
31
  }
32
32
  end
33
33
 
34
34
  def test_arg
35
35
  {
36
- :int => {:type => "int", :name => 'MyInt', :ptr? => false, :const? => false},
37
- :int_ptr => {:type => "int*", :name => 'MyIntPtr', :ptr? => true, :const? => false},
38
- :mytype => {:type => "MY_TYPE", :name => 'MyMyType', :ptr? => false, :const? => true},
39
- :mytype_ptr => {:type => "MY_TYPE*", :name => 'MyMyTypePtr', :ptr? => true, :const? => false},
40
- :string => {:type => "char*", :name => 'MyStr', :ptr? => false, :const? => true},
36
+ :int => {:type => "int", :name => 'MyInt', :ptr? => false, :const? => false, :const_ptr? => false},
37
+ :int_ptr => {:type => "int*", :name => 'MyIntPtr', :ptr? => true, :const? => false, :const_ptr? => false},
38
+ :const_ptr => {:type => "int*", :name => 'MyConstPtr', :ptr? => true, :const? => false, :const_ptr? => true},
39
+ :double_ptr => {:type => "int const**", :name => 'MyDoublePtr', :ptr? => true, :const? => true, :const_ptr? => false},
40
+ :mytype => {:type => "MY_TYPE", :name => 'MyMyType', :ptr? => false, :const? => true, :const_ptr? => false},
41
+ :mytype_ptr => {:type => "MY_TYPE*", :name => 'MyMyTypePtr', :ptr? => true, :const? => false, :const_ptr? => false},
42
+ :string => {:type => "const char*", :name => 'MyStr', :ptr? => false, :const? => true, :const_ptr? => false},
41
43
  }
42
44
  end
43
-
@@ -14,7 +14,8 @@ describe CMockConfig, "Verify CMockConfig Module" do
14
14
  it "use default settings when no parameters are specified" do
15
15
  config = CMockConfig.new
16
16
  assert_equal(CMockConfig::CMockDefaultOptions[:mock_path], config.mock_path)
17
- assert_equal(CMockConfig::CMockDefaultOptions[:includes], config.includes)
17
+ assert_nil(CMockConfig::CMockDefaultOptions[:includes])
18
+ assert_nil(config.includes)
18
19
  assert_equal(CMockConfig::CMockDefaultOptions[:attributes], config.attributes)
19
20
  assert_equal(CMockConfig::CMockDefaultOptions[:plugins], config.plugins)
20
21
  assert_equal(CMockConfig::CMockDefaultOptions[:treat_externs], config.treat_externs)
@@ -35,7 +36,8 @@ describe CMockConfig, "Verify CMockConfig Module" do
35
36
  test_plugins = [:soda, :pizza]
36
37
  config = CMockConfig.new("#{File.expand_path(File.dirname(__FILE__))}/cmock_config_test.yml")
37
38
  assert_equal(CMockConfig::CMockDefaultOptions[:mock_path], config.mock_path)
38
- assert_equal(CMockConfig::CMockDefaultOptions[:includes], config.includes)
39
+ assert_nil(CMockConfig::CMockDefaultOptions[:includes])
40
+ assert_nil(config.includes)
39
41
  assert_equal(test_plugins, config.plugins)
40
42
  assert_equal(:include, config.treat_externs)
41
43
  end
@@ -87,7 +87,6 @@ describe CMockGenerator, "Verify CMockGenerator Module" do
87
87
  @config.expect :weak, ""
88
88
  orig_filename = "PoutPoutFish.h"
89
89
  define_name = "MOCKPOUTPOUTFISH_H"
90
- mock_name = "MockPoutPoutFish"
91
90
  output = []
92
91
  expected = [
93
92
  "/* AUTOGENERATED FILE. DO NOT EDIT. */\n",
@@ -100,7 +99,9 @@ describe CMockGenerator, "Verify CMockGenerator Module" do
100
99
  "\n",
101
100
  "/* Ignore the following warnings, since we are copying code */\n",
102
101
  "#if defined(__GNUC__) && !defined(__ICC) && !defined(__TMS470__)\n",
102
+ "#if __GNUC__ > 4 || (__GNUC__ == 4 && (__GNUC_MINOR__ > 6 || (__GNUC_MINOR__ == 6 && __GNUC_PATCHLEVEL__ > 0)))\n",
103
103
  "#pragma GCC diagnostic push\n",
104
+ "#endif\n",
104
105
  "#if !defined(__clang__)\n",
105
106
  "#pragma GCC diagnostic ignored \"-Wpragmas\"\n",
106
107
  "#endif\n",
@@ -141,7 +142,6 @@ describe CMockGenerator, "Verify CMockGenerator Module" do
141
142
  @config.expect :weak, ""
142
143
  orig_filename = "Pout-Pout Fish.h"
143
144
  define_name = "MOCKPOUT_POUT_FISH_H"
144
- mock_name = "MockPout_Pout_Fish"
145
145
  output = []
146
146
  expected = [
147
147
  "/* AUTOGENERATED FILE. DO NOT EDIT. */\n",
@@ -154,7 +154,9 @@ describe CMockGenerator, "Verify CMockGenerator Module" do
154
154
  "\n",
155
155
  "/* Ignore the following warnings, since we are copying code */\n",
156
156
  "#if defined(__GNUC__) && !defined(__ICC) && !defined(__TMS470__)\n",
157
+ "#if __GNUC__ > 4 || (__GNUC__ == 4 && (__GNUC_MINOR__ > 6 || (__GNUC_MINOR__ == 6 && __GNUC_PATCHLEVEL__ > 0)))\n",
157
158
  "#pragma GCC diagnostic push\n",
159
+ "#endif\n",
158
160
  "#if !defined(__clang__)\n",
159
161
  "#pragma GCC diagnostic ignored \"-Wpragmas\"\n",
160
162
  "#endif\n",
@@ -178,7 +180,6 @@ describe CMockGenerator, "Verify CMockGenerator Module" do
178
180
  @config.expect :weak, ""
179
181
  orig_filename = "PoutPoutFish.h"
180
182
  define_name = "MOCKPOUTPOUTFISH_H"
181
- mock_name = "MockPoutPoutFish"
182
183
  output = []
183
184
  expected = [
184
185
  "/* AUTOGENERATED FILE. DO NOT EDIT. */\n",
@@ -190,7 +191,9 @@ describe CMockGenerator, "Verify CMockGenerator Module" do
190
191
  "\n",
191
192
  "/* Ignore the following warnings, since we are copying code */\n",
192
193
  "#if defined(__GNUC__) && !defined(__ICC) && !defined(__TMS470__)\n",
194
+ "#if __GNUC__ > 4 || (__GNUC__ == 4 && (__GNUC_MINOR__ > 6 || (__GNUC_MINOR__ == 6 && __GNUC_PATCHLEVEL__ > 0)))\n",
193
195
  "#pragma GCC diagnostic push\n",
196
+ "#endif\n",
194
197
  "#if !defined(__clang__)\n",
195
198
  "#pragma GCC diagnostic ignored \"-Wpragmas\"\n",
196
199
  "#endif\n",
@@ -214,7 +217,6 @@ describe CMockGenerator, "Verify CMockGenerator Module" do
214
217
  @config.expect :weak, ""
215
218
  orig_filename = "PoutPoutFish.h"
216
219
  define_name = "MOCKPOUTPOUTFISH_H"
217
- mock_name = "MockPoutPoutFish"
218
220
  output = []
219
221
  expected = [
220
222
  "/* AUTOGENERATED FILE. DO NOT EDIT. */\n",
@@ -227,7 +229,9 @@ describe CMockGenerator, "Verify CMockGenerator Module" do
227
229
  "\n",
228
230
  "/* Ignore the following warnings, since we are copying code */\n",
229
231
  "#if defined(__GNUC__) && !defined(__ICC) && !defined(__TMS470__)\n",
232
+ "#if __GNUC__ > 4 || (__GNUC__ == 4 && (__GNUC_MINOR__ > 6 || (__GNUC_MINOR__ == 6 && __GNUC_PATCHLEVEL__ > 0)))\n",
230
233
  "#pragma GCC diagnostic push\n",
234
+ "#endif\n",
231
235
  "#if !defined(__clang__)\n",
232
236
  "#pragma GCC diagnostic ignored \"-Wpragmas\"\n",
233
237
  "#endif\n",
@@ -281,8 +285,10 @@ describe CMockGenerator, "Verify CMockGenerator Module" do
281
285
  output = []
282
286
  expected = ["\n",
283
287
  "#if defined(__GNUC__) && !defined(__ICC) && !defined(__TMS470__)\n",
288
+ "#if __GNUC__ > 4 || (__GNUC__ == 4 && (__GNUC_MINOR__ > 6 || (__GNUC_MINOR__ == 6 && __GNUC_PATCHLEVEL__ > 0)))\n",
284
289
  "#pragma GCC diagnostic pop\n",
285
290
  "#endif\n",
291
+ "#endif\n",
286
292
  "\n",
287
293
  "#endif\n"
288
294
  ]
@@ -6,21 +6,29 @@
6
6
 
7
7
  require File.expand_path(File.dirname(__FILE__)) + "/../test_helper"
8
8
  require File.expand_path(File.dirname(__FILE__)) + '/../../lib/cmock_generator_plugin_array'
9
+ require File.expand_path(File.dirname(__FILE__)) + '/../../lib/cmock_generator_utils'
10
+
11
+ class UtilsStub
12
+ def helpers
13
+ {}
14
+ end
15
+ def arg_type_with_const(arg)
16
+ CMockGeneratorUtils.arg_type_with_const(arg)
17
+ end
18
+ def code_add_base_expectation(func)
19
+ "mock_retval_0"
20
+ end
21
+ end
9
22
 
10
23
  describe CMockGeneratorPluginArray, "Verify CMockPGeneratorluginArray Module" do
11
24
  before do
12
- create_mocks :utils
13
-
14
25
  #no strict ordering
15
26
  @config = create_stub(
16
27
  :when_ptr => :compare_data,
17
28
  :enforce_strict_ordering => false,
18
29
  :respond_to? => true )
19
30
 
20
- @utils = create_stub(
21
- :helpers => {},
22
- :code_add_base_expectation => "mock_retval_0"
23
- )
31
+ @utils = UtilsStub.new
24
32
 
25
33
  @cmock_generator_plugin_array = CMockGeneratorPluginArray.new(@config, @utils)
26
34
  end
@@ -29,8 +37,8 @@ describe CMockGeneratorPluginArray, "Verify CMockPGeneratorluginArray Module" do
29
37
  end
30
38
 
31
39
  it "have set up internal priority" do
32
- assert_equal(nil, @cmock_generator_plugin_array.unity_helper)
33
- assert_equal(8, @cmock_generator_plugin_array.priority)
40
+ assert_nil(@cmock_generator_plugin_array.unity_helper)
41
+ assert_equal(8, @cmock_generator_plugin_array.priority)
34
42
  end
35
43
 
36
44
  it "not include any additional include files" do
@@ -88,10 +96,10 @@ describe CMockGeneratorPluginArray, "Verify CMockPGeneratorluginArray Module" do
88
96
 
89
97
  it "add another mock function declaration for functions of style 'const char* func(const int* tofu)'" do
90
98
  function = {:name => "Pine",
91
- :args => [{ :type => "int*",
92
- :name => "tofu",
93
- :ptr? => true,
94
- :const? => true,
99
+ :args => [{ :type => "const int*",
100
+ :name => "tofu",
101
+ :ptr? => true,
102
+ :const? => true,
95
103
  }],
96
104
  :return => test_return[:string],
97
105
  :contains_ptr? => true }
@@ -26,8 +26,8 @@ describe CMockGeneratorPluginExpect, "Verify CMockGeneratorPluginExpect Module W
26
26
  end
27
27
 
28
28
  it "have set up internal priority on init" do
29
- assert_equal(nil, @cmock_generator_plugin_expect.unity_helper)
30
- assert_equal(5, @cmock_generator_plugin_expect.priority)
29
+ assert_nil(@cmock_generator_plugin_expect.unity_helper)
30
+ assert_equal(5, @cmock_generator_plugin_expect.priority)
31
31
  end
32
32
 
33
33
  it "not include any additional include files" do
@@ -26,8 +26,8 @@ describe CMockGeneratorPluginExpect, "Verify CMockGeneratorPluginExpect Module w
26
26
  end
27
27
 
28
28
  it "have set up internal priority on init" do
29
- assert_equal(nil, @cmock_generator_plugin_expect.unity_helper)
30
- assert_equal(5, @cmock_generator_plugin_expect.priority)
29
+ assert_nil(@cmock_generator_plugin_expect.unity_helper)
30
+ assert_equal(5, @cmock_generator_plugin_expect.priority)
31
31
  end
32
32
 
33
33
  it "not include any additional include files" do
@@ -21,9 +21,9 @@ describe CMockGeneratorPluginIgnoreArg, "Verify CMockGeneratorPluginIgnoreArg Mo
21
21
  :name => "chicken",
22
22
  :ptr? => false,
23
23
  },
24
- { :type => "int*",
25
- :name => "beef",
26
- :ptr? => true,
24
+ { :type => "const int*",
25
+ :name => "beef",
26
+ :ptr? => true,
27
27
  :const? => true,
28
28
  },
29
29
  { :type => "int*",
@@ -27,9 +27,9 @@ describe CMockGeneratorPluginReturnThruPtr, "Verify CMockGeneratorPluginReturnTh
27
27
  :name => "chicken",
28
28
  :ptr? => false,
29
29
  },
30
- { :type => "int*",
31
- :name => "beef",
32
- :ptr? => true,
30
+ { :type => "const int*",
31
+ :name => "beef",
32
+ :ptr? => true,
33
33
  :const? => true,
34
34
  },
35
35
  { :type => "int*",
@@ -52,7 +52,7 @@ describe CMockGeneratorPluginReturnThruPtr, "Verify CMockGeneratorPluginReturnTh
52
52
 
53
53
  def complex_func_expect
54
54
  @utils.expect :ptr_or_str?, false, ['int']
55
- @utils.expect :ptr_or_str?, true, ['int*']
55
+ @utils.expect :ptr_or_str?, true, ['const int*']
56
56
  @utils.expect :ptr_or_str?, true, ['int*']
57
57
  end
58
58
 
@@ -124,11 +124,13 @@ describe CMockGeneratorPluginReturnThruPtr, "Verify CMockGeneratorPluginReturnTh
124
124
  expected =
125
125
  " if (cmock_call_instance->ReturnThruPtr_tofu_Used)\n" +
126
126
  " {\n" +
127
- " memcpy(tofu, cmock_call_instance->ReturnThruPtr_tofu_Val,\n" +
127
+ " UNITY_TEST_ASSERT_NOT_NULL(tofu, cmock_line, CMockStringPtrIsNULL);\n" +
128
+ " memcpy((void*)tofu, (void*)cmock_call_instance->ReturnThruPtr_tofu_Val,\n" +
128
129
  " cmock_call_instance->ReturnThruPtr_tofu_Size);\n" +
129
- " }\n" +
130
+ " }\n"
130
131
 
131
132
  returned = @cmock_generator_plugin_return_thru_ptr.mock_implementation(@complex_func).join("")
133
+ assert_equal(expected, returned)
132
134
  end
133
135
 
134
136
  end
@@ -20,7 +20,7 @@ describe CMockGeneratorUtils, "Verify CMockGeneratorUtils Module" do
20
20
  @config.expect :plugins, []
21
21
  @config.expect :plugins, []
22
22
  @config.expect :plugins, []
23
- @config.expect :treat_as, {'int' => 'INT','short' => 'INT16','long' => 'INT','char' => 'INT8','char*' => 'STRING'}
23
+ @config.expect :treat_as, {'int' => 'INT','short' => 'INT16','long' => 'INT','char' => 'INT8','const char*' => 'STRING'}
24
24
  @cmock_generator_utils_simple = CMockGeneratorUtils.new(@config, {:unity_helper => @unity_helper})
25
25
 
26
26
  @config.expect :when_ptr, :smart
@@ -31,7 +31,7 @@ describe CMockGeneratorUtils, "Verify CMockGeneratorUtils Module" do
31
31
  @config.expect :plugins, [:array, :cexception, :return_thru_ptr, :ignore_arg, :ignore]
32
32
  @config.expect :plugins, [:array, :cexception, :return_thru_ptr, :ignore_arg, :ignore]
33
33
  @config.expect :plugins, [:array, :cexception, :return_thru_ptr, :ignore_arg, :ignore]
34
- @config.expect :treat_as, {'int' => 'INT','short' => 'INT16','long' => 'INT','char' => 'INT8','uint32_t' => 'HEX32','char*' => 'STRING'}
34
+ @config.expect :treat_as, {'int' => 'INT','short' => 'INT16','long' => 'INT','char' => 'INT8','uint32_t' => 'HEX32','const char*' => 'STRING'}
35
35
  @cmock_generator_utils_complex = CMockGeneratorUtils.new(@config, {:unity_helper => @unity_helper, :A=>1, :B=>2})
36
36
  end
37
37
 
@@ -99,8 +99,8 @@ describe CMockGeneratorUtils, "Verify CMockGeneratorUtils Module" do
99
99
  arg1 = { :name => "Orange", :const? => false, :type => 'int', :ptr? => false }
100
100
  expected1 = " cmock_call_instance->Expected_Orange = Orange;\n"
101
101
 
102
- arg2 = { :name => "Lemon", :const? => true, :type => 'const char*', :ptr? => true }
103
- expected2 = " cmock_call_instance->Expected_Lemon = (const char*)Lemon;\n"
102
+ arg2 = { :name => "Lemon", :const? => true, :type => 'const char*', :ptr? => false }
103
+ expected2 = " cmock_call_instance->Expected_Lemon = Lemon;\n"
104
104
 
105
105
  arg3 = { :name => "Kiwi", :const? => false, :type => 'KIWI_T*', :ptr? => true }
106
106
  expected3 = " cmock_call_instance->Expected_Kiwi = Kiwi;\n"
@@ -119,8 +119,8 @@ describe CMockGeneratorUtils, "Verify CMockGeneratorUtils Module" do
119
119
  expected1 = " cmock_call_instance->Expected_Orange = Orange;\n" +
120
120
  " cmock_call_instance->IgnoreArg_Orange = 0;\n"
121
121
 
122
- arg2 = { :name => "Lemon", :const? => true, :type => 'const char*', :ptr? => true }
123
- expected2 = " cmock_call_instance->Expected_Lemon = (const char*)Lemon;\n" +
122
+ arg2 = { :name => "Lemon", :const? => true, :type => 'const char*', :ptr? => false }
123
+ expected2 = " cmock_call_instance->Expected_Lemon = Lemon;\n" +
124
124
  " cmock_call_instance->Expected_Lemon_Depth = Lemon_Depth;\n" +
125
125
  " cmock_call_instance->IgnoreArg_Lemon = 0;\n"
126
126
 
@@ -154,7 +154,7 @@ describe CMockGeneratorUtils, "Verify CMockGeneratorUtils Module" do
154
154
  expected = "void CMockExpectParameters_Melon(CMOCK_Melon_CALL_INSTANCE* cmock_call_instance, stuff)\n{\n" +
155
155
  " cmock_call_instance->Expected_MyIntPtr = MyIntPtr;\n" +
156
156
  " memcpy(&cmock_call_instance->Expected_MyMyType, &MyMyType, sizeof(MY_TYPE));\n" +
157
- " cmock_call_instance->Expected_MyStr = (char*)MyStr;\n" +
157
+ " cmock_call_instance->Expected_MyStr = MyStr;\n" +
158
158
  "}\n\n"
159
159
  assert_equal(expected, @cmock_generator_utils_simple.code_add_argument_loader(function))
160
160
  end
@@ -171,12 +171,29 @@ describe CMockGeneratorUtils, "Verify CMockGeneratorUtils Module" do
171
171
  " cmock_call_instance->ReturnThruPtr_MyIntPtr_Used = 0;\n" +
172
172
  " memcpy(&cmock_call_instance->Expected_MyMyType, &MyMyType, sizeof(MY_TYPE));\n" +
173
173
  " cmock_call_instance->IgnoreArg_MyMyType = 0;\n" +
174
- " cmock_call_instance->Expected_MyStr = (char*)MyStr;\n" +
174
+ " cmock_call_instance->Expected_MyStr = MyStr;\n" +
175
175
  " cmock_call_instance->IgnoreArg_MyStr = 0;\n" +
176
176
  "}\n\n"
177
177
  assert_equal(expected, @cmock_generator_utils_complex.code_add_argument_loader(function))
178
178
  end
179
179
 
180
+ it 'create an argument loader when the function has pointer arguments supporting arrays' do
181
+ function = { :name => "Melon",
182
+ :args_string => "stuff",
183
+ :args => [test_arg[:const_ptr], test_arg[:double_ptr]]
184
+ }
185
+ expected = "void CMockExpectParameters_Melon(CMOCK_Melon_CALL_INSTANCE* cmock_call_instance, int* const MyConstPtr, int MyConstPtr_Depth, int const** MyDoublePtr, int MyDoublePtr_Depth)\n{\n" +
186
+ " cmock_call_instance->Expected_MyConstPtr = MyConstPtr;\n" +
187
+ " cmock_call_instance->Expected_MyConstPtr_Depth = MyConstPtr_Depth;\n" +
188
+ " cmock_call_instance->IgnoreArg_MyConstPtr = 0;\n" +
189
+ " cmock_call_instance->ReturnThruPtr_MyConstPtr_Used = 0;\n" +
190
+ " cmock_call_instance->Expected_MyDoublePtr = MyDoublePtr;\n" +
191
+ " cmock_call_instance->Expected_MyDoublePtr_Depth = MyDoublePtr_Depth;\n" +
192
+ " cmock_call_instance->IgnoreArg_MyDoublePtr = 0;\n" +
193
+ "}\n\n"
194
+ assert_equal(expected, @cmock_generator_utils_complex.code_add_argument_loader(function))
195
+ end
196
+
180
197
  it "not call argument loader if there are no arguments to actually use for this function" do
181
198
  function = { :name => "Pineapple", :args_string => "void" }
182
199
 
@@ -231,7 +248,7 @@ describe CMockGeneratorUtils, "Verify CMockGeneratorUtils Module" do
231
248
  " UNITY_TEST_ASSERT_EQUAL_STRING(cmock_call_instance->Expected_MyStr, MyStr, cmock_line, CMockStringMismatch);\n" +
232
249
  " }\n"
233
250
  @unity_helper.expect :nil?, false
234
- @unity_helper.expect :get_helper, ['UNITY_TEST_ASSERT_EQUAL_STRING',''], ['char*']
251
+ @unity_helper.expect :get_helper, ['UNITY_TEST_ASSERT_EQUAL_STRING',''], ['const char*']
235
252
  assert_equal(expected, @cmock_generator_utils_simple.code_verify_an_arg_expectation(function, arg))
236
253
  end
237
254
 
@@ -311,7 +328,7 @@ describe CMockGeneratorUtils, "Verify CMockGeneratorUtils Module" do
311
328
  " UNITY_TEST_ASSERT_EQUAL_STRING(cmock_call_instance->Expected_MyStr, MyStr, cmock_line, CMockStringMismatch);\n" +
312
329
  " }\n"
313
330
  @unity_helper.expect :nil?, false
314
- @unity_helper.expect :get_helper, ['UNITY_TEST_ASSERT_EQUAL_STRING',''], ['char*']
331
+ @unity_helper.expect :get_helper, ['UNITY_TEST_ASSERT_EQUAL_STRING',''], ['const char*']
315
332
  assert_equal(expected, @cmock_generator_utils_complex.code_verify_an_arg_expectation(function, arg))
316
333
  end
317
334
 
@@ -805,32 +805,57 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
805
805
  assert_equal(expected, @parser.parse("module", source)[:functions])
806
806
  end
807
807
 
808
- it "should properly handle const before or after return type" do
809
-
808
+ it "should properly handle const before return type" do
810
809
  sources = [
811
810
  "const int * PorkRoast(void);\n",
812
- "int const * PorkRoast(void);\n",
813
811
  "const int* PorkRoast(void);\n",
812
+ "const int *PorkRoast(void);\n"
813
+ ]
814
+
815
+ expected = [{ :var_arg => nil,
816
+ :name => "PorkRoast",
817
+ :return => { :type => "const int*",
818
+ :name => 'cmock_to_return',
819
+ :ptr? => true,
820
+ :const? => true,
821
+ :const_ptr? => false,
822
+ :str => "const int* cmock_to_return",
823
+ :void? => false
824
+ },
825
+ :modifier => "",
826
+ :contains_ptr? => false,
827
+ :args => [],
828
+ :args_string => "void",
829
+ :args_call => ""
830
+ }]
831
+
832
+ sources.each do |source|
833
+ assert_equal(expected, @parser.parse("module", source)[:functions])
834
+ end
835
+ end
836
+
837
+ it "should properly handle const before return type" do
838
+ sources = [
839
+ "int const * PorkRoast(void);\n",
814
840
  "int const* PorkRoast(void);\n",
815
- "const int *PorkRoast(void);\n",
816
841
  "int const *PorkRoast(void);\n"
817
842
  ]
818
843
 
819
- expected = [{ :var_arg=>nil,
820
- :name=>"PorkRoast",
821
- :return=> { :type => "int*",
822
- :name => 'cmock_to_return',
823
- :ptr? => true,
824
- :const? => true,
825
- :const_ptr? => false,
826
- :str => "int* cmock_to_return",
827
- :void? => false
828
- },
829
- :modifier=>"const",
844
+ expected = [{ :var_arg => nil,
845
+ :name => "PorkRoast",
846
+ :return => { :type => "int const*",
847
+ :name => 'cmock_to_return',
848
+ :ptr? => true,
849
+ :const? => true,
850
+ :const_ptr? => false,
851
+ :str => "int const* cmock_to_return",
852
+ :void? => false
853
+ },
854
+ :modifier => "",
830
855
  :contains_ptr? => false,
831
- :args=>[],
832
- :args_string=>"void",
833
- :args_call=>""
856
+ :args => [],
857
+ :args_string => "void",
858
+ :args_call => ""
834
859
  }]
835
860
 
836
861
  sources.each do |source|
@@ -861,6 +886,69 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
861
886
  assert_equal(expected, @parser.parse("module", source)[:functions])
862
887
  end
863
888
 
889
+ it "properly parse const and pointer argument types with no arg names" do
890
+
891
+ source = "void foo(int const*, int*const, const int*, const int*const, int const*const, int*, int, const int);\n"
892
+
893
+ expected = [{ :name => "foo",
894
+ :modifier => "",
895
+ :return => { :type => "void",
896
+ :name => "cmock_to_return",
897
+ :str => "void cmock_to_return",
898
+ :void? => true,
899
+ :ptr? => false,
900
+ :const? => false,
901
+ :const_ptr? => false
902
+ },
903
+ :var_arg => nil,
904
+ :args_string => "int const* cmock_arg1, int* const cmock_arg2, const int* cmock_arg3, const int* const cmock_arg4, " +
905
+ "int const* const cmock_arg5, int* cmock_arg6, int cmock_arg7, const int cmock_arg8",
906
+ :args => [{ :type=>"int const*", :name => "cmock_arg1", :ptr? => true, :const? => true, :const_ptr? => false },
907
+ { :type=>"int*", :name => "cmock_arg2", :ptr? => true, :const? => false, :const_ptr? => true },
908
+ { :type=>"const int*", :name => "cmock_arg3", :ptr? => true, :const? => true, :const_ptr? => false },
909
+ { :type=>"const int*", :name => "cmock_arg4", :ptr? => true, :const? => true, :const_ptr? => true },
910
+ { :type=>"int const*", :name => "cmock_arg5", :ptr? => true, :const? => true, :const_ptr? => true },
911
+ { :type=>"int*", :name => "cmock_arg6", :ptr? => true, :const? => false, :const_ptr? => false },
912
+ { :type=>"int", :name => "cmock_arg7", :ptr? => false, :const? => false, :const_ptr? => false },
913
+ { :type=>"int", :name => "cmock_arg8", :ptr? => false, :const? => true, :const_ptr? => false }],
914
+ :args_call => "cmock_arg1, cmock_arg2, cmock_arg3, cmock_arg4, cmock_arg5, cmock_arg6, cmock_arg7, cmock_arg8",
915
+ :contains_ptr? => true
916
+ }]
917
+ assert_equal(expected, @parser.parse("module", source)[:functions])
918
+ end
919
+
920
+ it "properly parse const and pointer argument types with arg names" do
921
+
922
+ source = "void bar(int const* param1, int*const param2, const int* param3, const int*const param4,\n" +
923
+ " int const*const param5, int*param6, int param7, const int param8);\n"
924
+
925
+ expected = [{ :name => "bar",
926
+ :modifier => "",
927
+ :return => { :type => "void",
928
+ :name => "cmock_to_return",
929
+ :str => "void cmock_to_return",
930
+ :void? => true,
931
+ :ptr? => false,
932
+ :const? => false,
933
+ :const_ptr? => false
934
+ },
935
+ :var_arg => nil,
936
+ :args_string => "int const* param1, int* const param2, const int* param3, const int* const param4, " +
937
+ "int const* const param5, int* param6, int param7, const int param8",
938
+ :args => [{ :type=>"int const*", :name => "param1", :ptr? => true, :const? => true, :const_ptr? => false },
939
+ { :type=>"int*", :name => "param2", :ptr? => true, :const? => false, :const_ptr? => true },
940
+ { :type=>"const int*", :name => "param3", :ptr? => true, :const? => true, :const_ptr? => false },
941
+ { :type=>"const int*", :name => "param4", :ptr? => true, :const? => true, :const_ptr? => true },
942
+ { :type=>"int const*", :name => "param5", :ptr? => true, :const? => true, :const_ptr? => true },
943
+ { :type=>"int*", :name => "param6", :ptr? => true, :const? => false, :const_ptr? => false },
944
+ { :type=>"int", :name => "param7", :ptr? => false, :const? => false, :const_ptr? => false },
945
+ { :type=>"int", :name => "param8", :ptr? => false, :const? => true, :const_ptr? => false }],
946
+ :args_call => "param1, param2, param3, param4, param5, param6, param7, param8",
947
+ :contains_ptr? => true
948
+ }]
949
+ assert_equal(expected, @parser.parse("module", source)[:functions])
950
+ end
951
+
864
952
  it "properly detect typedef'd variants of void and use those" do
865
953
 
866
954
  source = "typedef (void) FUNKY_VOID_T;\n" +
@@ -937,7 +1025,7 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
937
1025
  :name=>"Penny",
938
1026
  :modifier=>"",
939
1027
  :contains_ptr? => true,
940
- :args=>[ {:type=>"struct _KeepYourHeadUp_*", :name=>"BillyBuddy", :ptr? => true, :const? => true, :const_ptr? => true} ],
1028
+ :args=>[ {:type=>"struct const _KeepYourHeadUp_*", :name=>"BillyBuddy", :ptr? => true, :const? => true, :const_ptr? => true} ],
941
1029
  :args_string=>"struct const _KeepYourHeadUp_* const BillyBuddy",
942
1030
  :args_call=>"BillyBuddy"
943
1031
  },
@@ -1440,7 +1528,7 @@ describe CMockHeaderParser, "Verify CMockHeaderParser Module" do
1440
1528
  :contains_ptr? => true,
1441
1529
  :args=>[ {:type=>"sqlite3_stmt*", :name=>"cmock_arg2", :ptr? => true, :const? => false, :const_ptr? => false},
1442
1530
  {:type=>"int", :name=>"cmock_arg3", :ptr? => false, :const? => false, :const_ptr? => false},
1443
- {:type=>"char*", :name=>"cmock_arg4", :ptr? => false, :const? => true, :const_ptr? => false},
1531
+ {:type=>"const char*", :name=>"cmock_arg4", :ptr? => false, :const? => true, :const_ptr? => false},
1444
1532
  {:type=>"int", :name=>"n", :ptr? => false, :const? => false, :const_ptr? => false},
1445
1533
  {:type=>"cmock_module_func_ptr1", :name=>"cmock_arg1", :ptr? => false, :const? => false, :const_ptr? => false}
1446
1534
  ],