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.
- checksums.yaml +4 -4
- data/assets/ceedling +3 -0
- data/assets/ceedling.cmd +1 -0
- data/assets/default_gitignore +5 -0
- data/assets/project_with_guts.yml +1 -0
- data/assets/project_with_guts_gcov.yml +3 -0
- data/assets/test_example_file_verbose.c +12 -0
- data/bin/ceedling +30 -6
- data/docs/CeedlingPacket.md +135 -23
- data/docs/CeedlingPacket.odt +0 -0
- data/examples/blinky/rakefile.rb +2 -1
- data/lib/ceedling/configurator.rb +7 -5
- data/lib/ceedling/configurator_builder.rb +10 -7
- data/lib/ceedling/configurator_plugins.rb +29 -24
- data/lib/ceedling/configurator_setup.rb +0 -1
- data/lib/ceedling/defaults.rb +7 -2
- data/lib/ceedling/dependinator.rb +10 -2
- data/lib/ceedling/file_finder.rb +57 -49
- data/lib/ceedling/file_path_utils.rb +12 -4
- data/lib/ceedling/file_wrapper.rb +4 -0
- data/lib/ceedling/generator.rb +4 -3
- data/lib/ceedling/generator_test_results.rb +15 -13
- data/lib/ceedling/plugin_manager.rb +18 -18
- data/lib/ceedling/plugin_reportinator.rb +3 -2
- data/lib/ceedling/plugin_reportinator_helper.rb +2 -3
- data/lib/ceedling/preprocessinator_extractor.rb +2 -2
- data/lib/ceedling/preprocessinator_includes_handler.rb +5 -0
- data/lib/ceedling/rakefile.rb +1 -0
- data/lib/ceedling/release_invoker_helper.rb +5 -2
- data/lib/ceedling/rules_release.rake +2 -1
- data/lib/ceedling/rules_tests.rake +18 -9
- data/lib/ceedling/rules_tests_deep_dependencies.rake +2 -2
- data/lib/ceedling/task_invoker.rb +15 -3
- data/lib/ceedling/tasks_vendor.rake +3 -3
- data/lib/ceedling/test_invoker.rb +39 -12
- data/lib/ceedling/test_invoker_helper.rb +5 -1
- data/lib/ceedling/tool_executor.rb +8 -4
- data/lib/ceedling/version.rb +1 -1
- data/out.fail +21 -0
- data/plugins/beep/README.md +22 -0
- data/plugins/beep/lib/beep.rb +40 -0
- data/plugins/bullseye/bullseye.rake +43 -36
- data/plugins/bullseye/config/defaults.yml +4 -0
- data/plugins/bullseye/lib/bullseye.rb +27 -5
- data/plugins/command_hooks/lib/command_hooks.rb +3 -0
- data/plugins/gcov/README.md +34 -1
- data/plugins/gcov/config/defaults.yml +3 -3
- data/plugins/gcov/gcov.rake +7 -5
- data/plugins/gcov/lib/gcov.rb +3 -1
- data/plugins/gcov/lib/gcov_constants.rb +2 -0
- data/plugins/junit_tests_report/lib/junit_tests_report.rb +12 -9
- data/plugins/module_generator/lib/module_generator.rb +14 -1
- data/plugins/module_generator/module_generator.rake +21 -4
- data/plugins/raw_output_report/lib/raw_output_report.rb +41 -0
- data/spec/gcov/gcov_deployment_spec.rb +1 -1
- data/spec/gcov/gcov_test_cases_spec.rb +2 -2
- data/spec/generator_test_results_spec.rb +5 -0
- data/spec/preprocessinator_includes_handler_spec.rb +1 -0
- data/spec/spec_system_helper.rb +178 -4
- data/spec/support/test_example.fail +1 -0
- data/spec/support/test_example.pass +1 -0
- data/spec/support/test_example_empty.pass +1 -0
- data/spec/support/test_example_ignore.pass +1 -0
- data/spec/support/test_example_mangled.pass +1 -0
- data/spec/support/test_example_with_time.pass +22 -0
- data/spec/system/deployment_spec.rb +33 -0
- data/vendor/cmock/README.md +4 -3
- data/vendor/cmock/docs/CMock_Summary.md +1 -1
- data/vendor/cmock/lib/cmock_config.rb +4 -0
- data/vendor/cmock/lib/cmock_generator.rb +5 -2
- data/vendor/cmock/lib/cmock_generator_plugin_array.rb +4 -4
- data/vendor/cmock/lib/cmock_generator_plugin_callback.rb +9 -11
- data/vendor/cmock/lib/cmock_generator_plugin_cexception.rb +0 -1
- data/vendor/cmock/lib/cmock_generator_plugin_ignore.rb +2 -3
- data/vendor/cmock/lib/cmock_generator_plugin_ignore_arg.rb +2 -4
- data/vendor/cmock/lib/cmock_generator_plugin_return_thru_ptr.rb +0 -2
- data/vendor/cmock/lib/cmock_generator_utils.rb +16 -3
- data/vendor/cmock/lib/cmock_header_parser.rb +59 -34
- data/vendor/cmock/release/build.info +1 -1
- data/vendor/cmock/release/version.info +1 -1
- data/vendor/cmock/scripts/create_makefile.rb +17 -2
- data/vendor/cmock/src/cmock.c +13 -7
- data/vendor/cmock/test/test_helper.rb +11 -10
- data/vendor/cmock/test/unit/cmock_config_test.rb +4 -2
- data/vendor/cmock/test/unit/cmock_generator_main_test.rb +10 -4
- data/vendor/cmock/test/unit/cmock_generator_plugin_array_test.rb +20 -12
- data/vendor/cmock/test/unit/cmock_generator_plugin_expect_a_test.rb +2 -2
- data/vendor/cmock/test/unit/cmock_generator_plugin_expect_b_test.rb +2 -2
- data/vendor/cmock/test/unit/cmock_generator_plugin_ignore_arg_test.rb +3 -3
- data/vendor/cmock/test/unit/cmock_generator_plugin_return_thru_ptr_test.rb +8 -6
- data/vendor/cmock/test/unit/cmock_generator_utils_test.rb +27 -10
- data/vendor/cmock/test/unit/cmock_header_parser_test.rb +108 -20
- data/vendor/cmock/vendor/c_exception/Gemfile +4 -0
- data/vendor/cmock/vendor/c_exception/Gemfile.lock +12 -0
- data/vendor/cmock/vendor/c_exception/LICENSE.txt +30 -0
- data/vendor/cmock/vendor/c_exception/README.md +162 -0
- data/vendor/cmock/vendor/c_exception/Rakefile +42 -0
- data/vendor/cmock/vendor/c_exception/docs/CException.md +292 -0
- data/vendor/cmock/vendor/c_exception/docs/ThrowTheSwitchCodingStandard.md +207 -0
- data/vendor/cmock/vendor/c_exception/lib/CException.c +46 -0
- data/vendor/cmock/vendor/c_exception/lib/CException.h +110 -0
- data/vendor/cmock/vendor/c_exception/makefile +24 -0
- data/vendor/cmock/vendor/c_exception/release/build.info +2 -0
- data/vendor/cmock/vendor/c_exception/release/version.info +2 -0
- data/vendor/cmock/vendor/c_exception/test/CExceptionConfig.h +46 -0
- data/vendor/cmock/vendor/c_exception/test/TestException.c +391 -0
- data/vendor/cmock/vendor/c_exception/test/TestException_Runner.c +67 -0
- data/vendor/cmock/vendor/unity/README.md +231 -0
- data/vendor/cmock/vendor/unity/auto/colour_prompt.rb +118 -0
- data/vendor/cmock/vendor/unity/auto/colour_reporter.rb +39 -0
- data/vendor/cmock/vendor/unity/auto/generate_config.yml +36 -0
- data/vendor/cmock/vendor/unity/auto/generate_module.rb +308 -0
- data/vendor/cmock/vendor/unity/auto/generate_test_runner.rb +457 -0
- data/vendor/cmock/vendor/unity/auto/parse_output.rb +323 -0
- data/vendor/cmock/vendor/unity/auto/stylize_as_junit.rb +252 -0
- data/vendor/cmock/vendor/unity/auto/test_file_filter.rb +25 -0
- data/vendor/cmock/vendor/unity/auto/type_sanitizer.rb +6 -0
- data/vendor/cmock/vendor/unity/auto/unity_test_summary.py +139 -0
- data/vendor/cmock/vendor/unity/auto/unity_test_summary.rb +136 -0
- data/vendor/cmock/vendor/unity/auto/unity_to_junit.py +146 -0
- data/vendor/cmock/vendor/unity/docs/ThrowTheSwitchCodingStandard.md +206 -0
- data/vendor/cmock/vendor/unity/docs/UnityAssertionsCheatSheetSuitableforPrintingandPossiblyFraming.pdf +0 -0
- data/vendor/cmock/vendor/unity/docs/UnityAssertionsReference.md +779 -0
- data/vendor/cmock/vendor/unity/docs/UnityConfigurationGuide.md +433 -0
- data/vendor/cmock/vendor/unity/docs/UnityGettingStartedGuide.md +192 -0
- data/vendor/cmock/vendor/unity/docs/UnityHelperScriptsGuide.md +260 -0
- data/vendor/cmock/vendor/unity/docs/license.txt +21 -0
- data/vendor/cmock/vendor/unity/examples/example_1/makefile +71 -0
- data/vendor/cmock/vendor/unity/examples/example_1/readme.txt +5 -0
- data/vendor/cmock/vendor/unity/examples/example_1/src/ProductionCode.c +24 -0
- data/vendor/cmock/vendor/unity/examples/example_1/src/ProductionCode.h +3 -0
- data/vendor/cmock/vendor/unity/examples/example_1/src/ProductionCode2.c +11 -0
- data/vendor/cmock/vendor/unity/examples/example_1/src/ProductionCode2.h +2 -0
- data/vendor/cmock/vendor/unity/examples/example_1/test/TestProductionCode.c +62 -0
- data/vendor/cmock/vendor/unity/examples/example_1/test/TestProductionCode2.c +31 -0
- data/vendor/cmock/vendor/unity/examples/example_1/test/test_runners/TestProductionCode2_Runner.c +53 -0
- data/vendor/cmock/vendor/unity/examples/example_1/test/test_runners/TestProductionCode_Runner.c +57 -0
- data/vendor/cmock/vendor/unity/examples/example_2/makefile +70 -0
- data/vendor/cmock/vendor/unity/examples/example_2/readme.txt +5 -0
- data/vendor/cmock/vendor/unity/examples/example_2/src/ProductionCode.c +24 -0
- data/vendor/cmock/vendor/unity/examples/example_2/src/ProductionCode.h +3 -0
- data/vendor/cmock/vendor/unity/examples/example_2/src/ProductionCode2.c +11 -0
- data/vendor/cmock/vendor/unity/examples/example_2/src/ProductionCode2.h +2 -0
- data/vendor/cmock/vendor/unity/examples/example_2/test/TestProductionCode.c +64 -0
- data/vendor/cmock/vendor/unity/examples/example_2/test/TestProductionCode2.c +33 -0
- data/vendor/cmock/vendor/unity/examples/example_2/test/test_runners/TestProductionCode2_Runner.c +9 -0
- data/vendor/cmock/vendor/unity/examples/example_2/test/test_runners/TestProductionCode_Runner.c +11 -0
- data/vendor/cmock/vendor/unity/examples/example_2/test/test_runners/all_tests.c +12 -0
- data/vendor/cmock/vendor/unity/examples/example_3/helper/UnityHelper.c +10 -0
- data/vendor/cmock/vendor/unity/examples/example_3/helper/UnityHelper.h +12 -0
- data/vendor/cmock/vendor/unity/examples/example_3/rakefile.rb +43 -0
- data/vendor/cmock/vendor/unity/examples/example_3/rakefile_helper.rb +249 -0
- data/vendor/cmock/vendor/unity/examples/example_3/readme.txt +13 -0
- data/vendor/cmock/vendor/unity/examples/example_3/src/ProductionCode.c +24 -0
- data/vendor/cmock/vendor/unity/examples/example_3/src/ProductionCode.h +3 -0
- data/vendor/cmock/vendor/unity/examples/example_3/src/ProductionCode2.c +11 -0
- data/vendor/cmock/vendor/unity/examples/example_3/src/ProductionCode2.h +2 -0
- data/vendor/cmock/vendor/unity/examples/example_3/target_gcc_32.yml +46 -0
- data/vendor/cmock/vendor/unity/examples/example_3/test/TestProductionCode.c +62 -0
- data/vendor/cmock/vendor/unity/examples/example_3/test/TestProductionCode2.c +31 -0
- data/vendor/cmock/vendor/unity/examples/unity_config.h +247 -0
- data/vendor/cmock/vendor/unity/extras/eclipse/error_parsers.txt +26 -0
- data/vendor/cmock/vendor/unity/extras/fixture/rakefile.rb +48 -0
- data/vendor/cmock/vendor/unity/extras/fixture/rakefile_helper.rb +178 -0
- data/vendor/cmock/vendor/unity/extras/fixture/readme.txt +9 -0
- data/vendor/cmock/vendor/unity/extras/fixture/src/unity_fixture.c +436 -0
- data/vendor/cmock/vendor/unity/extras/fixture/src/unity_fixture.h +83 -0
- data/vendor/cmock/vendor/unity/extras/fixture/src/unity_fixture_internals.h +51 -0
- data/vendor/cmock/vendor/unity/extras/fixture/src/unity_fixture_malloc_overrides.h +47 -0
- data/vendor/cmock/vendor/unity/extras/fixture/test/Makefile +75 -0
- data/vendor/cmock/vendor/unity/extras/fixture/test/main/AllTests.c +22 -0
- data/vendor/cmock/vendor/unity/extras/fixture/test/template_fixture_tests.c +39 -0
- data/vendor/cmock/vendor/unity/extras/fixture/test/unity_fixture_Test.c +543 -0
- data/vendor/cmock/vendor/unity/extras/fixture/test/unity_fixture_TestRunner.c +57 -0
- data/vendor/cmock/vendor/unity/extras/fixture/test/unity_output_Spy.c +57 -0
- data/vendor/cmock/vendor/unity/extras/fixture/test/unity_output_Spy.h +17 -0
- data/vendor/cmock/vendor/unity/release/build.info +2 -0
- data/vendor/cmock/vendor/unity/release/version.info +2 -0
- data/vendor/cmock/vendor/unity/src/unity.c +1572 -0
- data/vendor/cmock/vendor/unity/src/unity.h +503 -0
- data/vendor/cmock/vendor/unity/src/unity_internals.h +924 -0
- data/vendor/cmock/vendor/unity/test/Makefile +68 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_cmd.c +61 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_def.c +57 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_head1.c +55 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_head1.h +15 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_cmd.c +80 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_def.c +76 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_head1.c +75 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_head1.h +13 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_new1.c +89 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_new2.c +89 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_param.c +77 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_run1.c +89 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_run2.c +89 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_mock_yaml.c +90 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_new1.c +67 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_new2.c +70 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_param.c +58 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_run1.c +67 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_run2.c +70 -0
- data/vendor/cmock/vendor/unity/test/expectdata/testsample_yaml.c +71 -0
- data/vendor/cmock/vendor/unity/test/rakefile +125 -0
- data/vendor/cmock/vendor/unity/test/rakefile_helper.rb +260 -0
- data/vendor/cmock/vendor/unity/test/spec/generate_module_existing_file_spec.rb +158 -0
- data/vendor/cmock/vendor/unity/test/targets/clang_file.yml +78 -0
- data/vendor/cmock/vendor/unity/test/targets/clang_strict.yml +78 -0
- data/vendor/cmock/vendor/unity/test/targets/gcc_32.yml +49 -0
- data/vendor/cmock/vendor/unity/test/targets/gcc_64.yml +50 -0
- data/vendor/cmock/vendor/unity/test/targets/gcc_auto_limits.yml +47 -0
- data/vendor/cmock/vendor/unity/test/targets/gcc_auto_stdint.yml +59 -0
- data/vendor/cmock/vendor/unity/test/targets/gcc_manual_math.yml +47 -0
- data/vendor/cmock/vendor/unity/test/targets/hitech_picc18.yml +101 -0
- data/vendor/cmock/vendor/unity/test/targets/iar_arm_v4.yml +90 -0
- data/vendor/cmock/vendor/unity/test/targets/iar_arm_v5.yml +80 -0
- data/vendor/cmock/vendor/unity/test/targets/iar_arm_v5_3.yml +80 -0
- data/vendor/cmock/vendor/unity/test/targets/iar_armcortex_LM3S9B92_v5_4.yml +94 -0
- data/vendor/cmock/vendor/unity/test/targets/iar_cortexm3_v5.yml +84 -0
- data/vendor/cmock/vendor/unity/test/targets/iar_msp430.yml +95 -0
- data/vendor/cmock/vendor/unity/test/targets/iar_sh2a_v6.yml +86 -0
- data/vendor/cmock/vendor/unity/test/testdata/CException.h +11 -0
- data/vendor/cmock/vendor/unity/test/testdata/Defs.h +8 -0
- data/vendor/cmock/vendor/unity/test/testdata/cmock.h +14 -0
- data/vendor/cmock/vendor/unity/test/testdata/mockMock.h +13 -0
- data/vendor/cmock/vendor/unity/test/testdata/testRunnerGenerator.c +186 -0
- data/vendor/cmock/vendor/unity/test/testdata/testRunnerGeneratorSmall.c +70 -0
- data/vendor/cmock/vendor/unity/test/testdata/testRunnerGeneratorWithMocks.c +195 -0
- data/vendor/cmock/vendor/unity/test/tests/test_generate_test_runner.rb +1252 -0
- data/vendor/cmock/vendor/unity/test/tests/testparameterized.c +113 -0
- data/vendor/cmock/vendor/unity/test/tests/testunity.c +5371 -0
- data/vendor/unity/auto/generate_test_runner.rb +30 -10
- data/vendor/unity/auto/parse_output.rb +212 -109
- data/vendor/unity/docs/ThrowTheSwitchCodingStandard.md +9 -10
- data/vendor/unity/docs/UnityAssertionsReference.md +11 -2
- data/vendor/unity/docs/UnityConfigurationGuide.md +90 -55
- data/vendor/unity/docs/UnityGettingStartedGuide.md +6 -5
- data/vendor/unity/docs/UnityHelperScriptsGuide.md +23 -5
- data/vendor/unity/examples/unity_config.h +8 -0
- data/vendor/unity/extras/fixture/src/unity_fixture.c +4 -0
- data/vendor/unity/extras/fixture/src/unity_fixture.h +1 -1
- data/vendor/unity/extras/fixture/src/unity_fixture_internals.h +2 -2
- data/vendor/unity/release/build.info +1 -1
- data/vendor/unity/release/version.info +1 -1
- data/vendor/unity/src/unity.c +64 -57
- data/vendor/unity/src/unity.h +111 -7
- data/vendor/unity/src/unity_internals.h +173 -73
- data/vendor/unity/test/Makefile +5 -1
- data/vendor/unity/test/testdata/testRunnerGenerator.c +4 -1
- data/vendor/unity/test/testdata/testRunnerGeneratorSmall.c +4 -1
- data/vendor/unity/test/testdata/testRunnerGeneratorWithMocks.c +4 -1
- data/vendor/unity/test/tests/testparameterized.c +5 -2
- data/vendor/unity/test/tests/testunity.c +34 -0
- metadata +150 -2
|
@@ -26,6 +26,7 @@ class UnityTestRunnerGenerator
|
|
|
26
26
|
framework: :unity,
|
|
27
27
|
test_prefix: 'test|spec|should',
|
|
28
28
|
mock_prefix: 'Mock',
|
|
29
|
+
mock_suffix: '',
|
|
29
30
|
setup_name: 'setUp',
|
|
30
31
|
teardown_name: 'tearDown',
|
|
31
32
|
main_name: 'main', # set to :auto to automatically generate each time
|
|
@@ -119,7 +120,7 @@ class UnityTestRunnerGenerator
|
|
|
119
120
|
source_index = 0
|
|
120
121
|
tests_and_line_numbers.size.times do |i|
|
|
121
122
|
source_lines[source_index..-1].each_with_index do |line, index|
|
|
122
|
-
next unless line =~
|
|
123
|
+
next unless line =~ /\s+#{tests_and_line_numbers[i][:test]}(?:\s|\()/
|
|
123
124
|
source_index += index
|
|
124
125
|
tests_and_line_numbers[i][:line_number] = source_index + 1
|
|
125
126
|
break
|
|
@@ -148,7 +149,7 @@ class UnityTestRunnerGenerator
|
|
|
148
149
|
mock_headers = []
|
|
149
150
|
includes.each do |include_path|
|
|
150
151
|
include_file = File.basename(include_path)
|
|
151
|
-
mock_headers << include_path if include_file =~ /^#{@options[:mock_prefix]}
|
|
152
|
+
mock_headers << include_path if include_file =~ /^#{@options[:mock_prefix]}.*#{@options[:mock_suffix]}$/i
|
|
152
153
|
end
|
|
153
154
|
mock_headers
|
|
154
155
|
end
|
|
@@ -157,9 +158,14 @@ class UnityTestRunnerGenerator
|
|
|
157
158
|
output.puts('/* AUTOGENERATED FILE. DO NOT EDIT. */')
|
|
158
159
|
create_runtest(output, mocks)
|
|
159
160
|
output.puts("\n/*=======Automagically Detected Files To Include=====*/")
|
|
161
|
+
output.puts('#ifdef __WIN32__')
|
|
162
|
+
output.puts('#define UNITY_INCLUDE_SETUP_STUBS')
|
|
163
|
+
output.puts('#endif')
|
|
160
164
|
output.puts("#include \"#{@options[:framework]}.h\"")
|
|
161
165
|
output.puts('#include "cmock.h"') unless mocks.empty?
|
|
166
|
+
output.puts('#ifndef UNITY_EXCLUDE_SETJMP_H')
|
|
162
167
|
output.puts('#include <setjmp.h>')
|
|
168
|
+
output.puts("#endif")
|
|
163
169
|
output.puts('#include <stdio.h>')
|
|
164
170
|
if @options[:defines] && !@options[:defines].empty?
|
|
165
171
|
@options[:defines].each { |d| output.puts("#define #{d}") }
|
|
@@ -235,22 +241,36 @@ class UnityTestRunnerGenerator
|
|
|
235
241
|
end
|
|
236
242
|
|
|
237
243
|
def create_suite_setup(output)
|
|
238
|
-
return if @options[:suite_setup].nil?
|
|
239
|
-
|
|
240
244
|
output.puts("\n/*=======Suite Setup=====*/")
|
|
241
245
|
output.puts('static void suite_setup(void)')
|
|
242
246
|
output.puts('{')
|
|
243
|
-
|
|
247
|
+
if @options[:suite_setup].nil?
|
|
248
|
+
# New style, call suiteSetUp() if we can use weak symbols
|
|
249
|
+
output.puts('#if defined(UNITY_WEAK_ATTRIBUTE) || defined(UNITY_WEAK_PRAGMA)')
|
|
250
|
+
output.puts(' suiteSetUp();')
|
|
251
|
+
output.puts('#endif')
|
|
252
|
+
else
|
|
253
|
+
# Old style, C code embedded in the :suite_setup option
|
|
254
|
+
output.puts(@options[:suite_setup])
|
|
255
|
+
end
|
|
244
256
|
output.puts('}')
|
|
245
257
|
end
|
|
246
258
|
|
|
247
259
|
def create_suite_teardown(output)
|
|
248
|
-
return if @options[:suite_teardown].nil?
|
|
249
|
-
|
|
250
260
|
output.puts("\n/*=======Suite Teardown=====*/")
|
|
251
261
|
output.puts('static int suite_teardown(int num_failures)')
|
|
252
262
|
output.puts('{')
|
|
253
|
-
|
|
263
|
+
if @options[:suite_teardown].nil?
|
|
264
|
+
# New style, call suiteTearDown() if we can use weak symbols
|
|
265
|
+
output.puts('#if defined(UNITY_WEAK_ATTRIBUTE) || defined(UNITY_WEAK_PRAGMA)')
|
|
266
|
+
output.puts(' return suiteTearDown(num_failures);')
|
|
267
|
+
output.puts('#else')
|
|
268
|
+
output.puts(' return num_failures;')
|
|
269
|
+
output.puts('#endif')
|
|
270
|
+
else
|
|
271
|
+
# Old style, C code embedded in the :suite_teardown option
|
|
272
|
+
output.puts(@options[:suite_teardown])
|
|
273
|
+
end
|
|
254
274
|
output.puts('}')
|
|
255
275
|
end
|
|
256
276
|
|
|
@@ -342,7 +362,7 @@ class UnityTestRunnerGenerator
|
|
|
342
362
|
output.puts("int #{main_name}(void)")
|
|
343
363
|
output.puts('{')
|
|
344
364
|
end
|
|
345
|
-
output.puts(' suite_setup();')
|
|
365
|
+
output.puts(' suite_setup();')
|
|
346
366
|
output.puts(" UnityBegin(\"#{filename.gsub(/\\/, '\\\\\\')}\");")
|
|
347
367
|
if @options[:use_param_tests]
|
|
348
368
|
tests.each do |test|
|
|
@@ -357,7 +377,7 @@ class UnityTestRunnerGenerator
|
|
|
357
377
|
end
|
|
358
378
|
output.puts
|
|
359
379
|
output.puts(' CMock_Guts_MemFreeFinal();') unless used_mocks.empty?
|
|
360
|
-
output.puts(" return
|
|
380
|
+
output.puts(" return suite_teardown(UnityEnd());")
|
|
361
381
|
output.puts('}')
|
|
362
382
|
end
|
|
363
383
|
|
|
@@ -1,206 +1,309 @@
|
|
|
1
1
|
#============================================================
|
|
2
|
-
# Author:
|
|
3
|
-
# A simple parser.
|
|
4
|
-
# extracts information relating to the tests.
|
|
2
|
+
# Author: John Theofanopoulos
|
|
3
|
+
# A simple parser. Takes the output files generated during the
|
|
4
|
+
# build process and extracts information relating to the tests.
|
|
5
5
|
#
|
|
6
6
|
# Notes:
|
|
7
7
|
# To capture an output file under VS builds use the following:
|
|
8
|
-
# devenv [build instructions]
|
|
8
|
+
# devenv [build instructions] > Output.txt & type Output.txt
|
|
9
9
|
#
|
|
10
|
-
# To capture an output file under
|
|
10
|
+
# To capture an output file under Linux builds use the following:
|
|
11
11
|
# make | tee Output.txt
|
|
12
12
|
#
|
|
13
|
+
# This script can handle the following output formats:
|
|
14
|
+
# - normal output (raw unity)
|
|
15
|
+
# - fixture output (unity_fixture.h/.c)
|
|
16
|
+
# - fixture output with verbose flag set ("-v")
|
|
17
|
+
#
|
|
13
18
|
# To use this parser use the following command
|
|
14
19
|
# ruby parseOutput.rb [options] [file]
|
|
15
|
-
# options:
|
|
16
|
-
#
|
|
20
|
+
# options: -xml : produce a JUnit compatible XML file
|
|
21
|
+
# file: file to scan for results
|
|
17
22
|
#============================================================
|
|
18
23
|
|
|
24
|
+
# Parser class for handling the input file
|
|
19
25
|
class ParseOutput
|
|
20
26
|
def initialize
|
|
21
|
-
|
|
27
|
+
# internal data
|
|
28
|
+
@class_name_idx = 0
|
|
29
|
+
@path_delim = nil
|
|
30
|
+
|
|
31
|
+
# xml output related
|
|
22
32
|
@xml_out = false
|
|
23
33
|
@array_list = false
|
|
24
|
-
|
|
25
|
-
|
|
34
|
+
|
|
35
|
+
# current suite name and statistics
|
|
36
|
+
@test_suite = nil
|
|
37
|
+
@total_tests = 0
|
|
38
|
+
@test_passed = 0
|
|
39
|
+
@test_failed = 0
|
|
40
|
+
@test_ignored = 0
|
|
26
41
|
end
|
|
27
42
|
|
|
28
|
-
#
|
|
43
|
+
# Set the flag to indicate if there will be an XML output file or not
|
|
29
44
|
def set_xml_output
|
|
30
45
|
@xml_out = true
|
|
31
46
|
end
|
|
32
47
|
|
|
33
|
-
#
|
|
48
|
+
# If write our output to XML
|
|
34
49
|
def write_xml_output
|
|
35
50
|
output = File.open('report.xml', 'w')
|
|
36
51
|
output << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
|
|
37
52
|
@array_list.each do |item|
|
|
38
53
|
output << item << "\n"
|
|
39
54
|
end
|
|
40
|
-
output << "</testsuite>\n"
|
|
41
55
|
end
|
|
42
56
|
|
|
43
|
-
#
|
|
57
|
+
# Pushes the suite info as xml to the array list, which will be written later
|
|
58
|
+
def push_xml_output_suite_info
|
|
59
|
+
# Insert opening tag at front
|
|
60
|
+
heading = '<testsuite name="Unity" tests="' + @total_tests.to_s + '" failures="' + @test_failed.to_s + '"' + ' skips="' + @test_ignored.to_s + '">'
|
|
61
|
+
@array_list.insert(0, heading)
|
|
62
|
+
# Push back the closing tag
|
|
63
|
+
@array_list.push '</testsuite>'
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# Pushes xml output data to the array list, which will be written later
|
|
67
|
+
def push_xml_output_passed(test_name)
|
|
68
|
+
@array_list.push ' <testcase classname="' + @test_suite + '" name="' + test_name + '"/>'
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# Pushes xml output data to the array list, which will be written later
|
|
72
|
+
def push_xml_output_failed(test_name, reason)
|
|
73
|
+
@array_list.push ' <testcase classname="' + @test_suite + '" name="' + test_name + '">'
|
|
74
|
+
@array_list.push ' <failure type="ASSERT FAILED">' + reason + '</failure>'
|
|
75
|
+
@array_list.push ' </testcase>'
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# Pushes xml output data to the array list, which will be written later
|
|
79
|
+
def push_xml_output_ignored(test_name, reason)
|
|
80
|
+
@array_list.push ' <testcase classname="' + @test_suite + '" name="' + test_name + '">'
|
|
81
|
+
@array_list.push ' <skipped type="TEST IGNORED">' + reason + '</skipped>'
|
|
82
|
+
@array_list.push ' </testcase>'
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# This function will try and determine when the suite is changed. This is
|
|
44
86
|
# is the name that gets added to the classname parameter.
|
|
45
87
|
def test_suite_verify(test_suite_name)
|
|
46
|
-
return if @test_flag
|
|
47
|
-
|
|
48
|
-
@test_flag = true
|
|
49
88
|
# Split the path name
|
|
50
|
-
test_name = test_suite_name.split(
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
89
|
+
test_name = test_suite_name.split(@path_delim)
|
|
90
|
+
|
|
91
|
+
# Remove the extension and extract the base_name
|
|
92
|
+
base_name = test_name[test_name.size - 1].split('.')[0]
|
|
93
|
+
|
|
94
|
+
# Return if the test suite hasn't changed
|
|
95
|
+
return unless base_name.to_s != @test_suite.to_s
|
|
96
|
+
|
|
97
|
+
@test_suite = base_name
|
|
54
98
|
printf "New Test: %s\n", @test_suite
|
|
55
99
|
end
|
|
56
100
|
|
|
57
|
-
#
|
|
58
|
-
def
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
101
|
+
# Prepares the line for verbose fixture output ("-v")
|
|
102
|
+
def prepare_fixture_line(line)
|
|
103
|
+
line = line.sub('IGNORE_TEST(', '')
|
|
104
|
+
line = line.sub('TEST(', '')
|
|
105
|
+
line = line.sub(')', ',')
|
|
106
|
+
line = line.chomp
|
|
107
|
+
array = line.split(',')
|
|
108
|
+
array.map { |x| x.to_s.lstrip.chomp }
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
# Test was flagged as having passed so format the output.
|
|
112
|
+
# This is using the Unity fixture output and not the original Unity output.
|
|
113
|
+
def test_passed_unity_fixture(array)
|
|
114
|
+
class_name = array[0]
|
|
115
|
+
test_name = array[1]
|
|
116
|
+
test_suite_verify(class_name)
|
|
62
117
|
printf "%-40s PASS\n", test_name
|
|
63
118
|
|
|
64
|
-
|
|
119
|
+
push_xml_output_passed(test_name) if @xml_out
|
|
120
|
+
end
|
|
65
121
|
|
|
66
|
-
|
|
122
|
+
# Test was flagged as having failed so format the output.
|
|
123
|
+
# This is using the Unity fixture output and not the original Unity output.
|
|
124
|
+
def test_failed_unity_fixture(array)
|
|
125
|
+
class_name = array[0]
|
|
126
|
+
test_name = array[1]
|
|
127
|
+
test_suite_verify(class_name)
|
|
128
|
+
reason_array = array[2].split(':')
|
|
129
|
+
reason = reason_array[-1].lstrip.chomp + ' at line: ' + reason_array[-4]
|
|
130
|
+
|
|
131
|
+
printf "%-40s FAILED\n", test_name
|
|
132
|
+
|
|
133
|
+
push_xml_output_failed(test_name, reason) if @xml_out
|
|
67
134
|
end
|
|
68
135
|
|
|
69
|
-
# Test was flagged as
|
|
136
|
+
# Test was flagged as being ignored so format the output.
|
|
70
137
|
# This is using the Unity fixture output and not the original Unity output.
|
|
71
|
-
def
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
138
|
+
def test_ignored_unity_fixture(array)
|
|
139
|
+
class_name = array[0]
|
|
140
|
+
test_name = array[1]
|
|
141
|
+
reason = 'No reason given'
|
|
142
|
+
if array.size > 2
|
|
143
|
+
reason_array = array[2].split(':')
|
|
144
|
+
tmp_reason = reason_array[-1].lstrip.chomp
|
|
145
|
+
reason = tmp_reason == 'IGNORE' ? 'No reason given' : tmp_reason
|
|
146
|
+
end
|
|
147
|
+
test_suite_verify(class_name)
|
|
148
|
+
printf "%-40s IGNORED\n", test_name
|
|
149
|
+
|
|
150
|
+
push_xml_output_ignored(test_name, reason) if @xml_out
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
# Test was flagged as having passed so format the output
|
|
154
|
+
def test_passed(array)
|
|
155
|
+
last_item = array.length - 1
|
|
156
|
+
test_name = array[last_item - 1]
|
|
157
|
+
test_suite_verify(array[@class_name_idx])
|
|
158
|
+
printf "%-40s PASS\n", test_name
|
|
75
159
|
|
|
76
160
|
return unless @xml_out
|
|
77
161
|
|
|
78
|
-
|
|
162
|
+
push_xml_output_passed(test_name) if @xml_out
|
|
79
163
|
end
|
|
80
164
|
|
|
81
|
-
# Test was flagged as
|
|
82
|
-
def
|
|
165
|
+
# Test was flagged as having failed so format the line
|
|
166
|
+
def test_failed(array)
|
|
83
167
|
last_item = array.length - 1
|
|
84
168
|
test_name = array[last_item - 2]
|
|
85
|
-
reason = array[last_item].chomp
|
|
86
|
-
|
|
87
|
-
printf "%-40s IGNORED\n", test_name
|
|
169
|
+
reason = array[last_item].chomp.lstrip + ' at line: ' + array[last_item - 3]
|
|
170
|
+
class_name = array[@class_name_idx]
|
|
88
171
|
|
|
89
172
|
if test_name.start_with? 'TEST('
|
|
90
173
|
array2 = test_name.split(' ')
|
|
91
|
-
|
|
92
|
-
|
|
174
|
+
|
|
175
|
+
test_suite = array2[0].sub('TEST(', '')
|
|
176
|
+
test_suite = test_suite.sub(',', '')
|
|
177
|
+
class_name = test_suite
|
|
178
|
+
|
|
93
179
|
test_name = array2[1].sub(')', '')
|
|
94
180
|
end
|
|
95
181
|
|
|
96
|
-
|
|
182
|
+
test_suite_verify(class_name)
|
|
183
|
+
printf "%-40s FAILED\n", test_name
|
|
97
184
|
|
|
98
|
-
|
|
99
|
-
@array_list.push ' <skipped type="TEST IGNORED"> ' + reason + ' </skipped>'
|
|
100
|
-
@array_list.push ' </testcase>'
|
|
185
|
+
push_xml_output_failed(test_name, reason) if @xml_out
|
|
101
186
|
end
|
|
102
187
|
|
|
103
|
-
# Test was flagged as
|
|
104
|
-
def
|
|
188
|
+
# Test was flagged as being ignored so format the output
|
|
189
|
+
def test_ignored(array)
|
|
105
190
|
last_item = array.length - 1
|
|
106
191
|
test_name = array[last_item - 2]
|
|
107
|
-
reason = array[last_item].chomp
|
|
108
|
-
|
|
109
|
-
printf "%-40s FAILED\n", test_name
|
|
192
|
+
reason = array[last_item].chomp.lstrip
|
|
193
|
+
class_name = array[@class_name_idx]
|
|
110
194
|
|
|
111
195
|
if test_name.start_with? 'TEST('
|
|
112
196
|
array2 = test_name.split(' ')
|
|
113
|
-
|
|
114
|
-
|
|
197
|
+
|
|
198
|
+
test_suite = array2[0].sub('TEST(', '')
|
|
199
|
+
test_suite = test_suite.sub(',', '')
|
|
200
|
+
class_name = test_suite
|
|
201
|
+
|
|
115
202
|
test_name = array2[1].sub(')', '')
|
|
116
203
|
end
|
|
117
204
|
|
|
118
|
-
|
|
205
|
+
test_suite_verify(class_name)
|
|
206
|
+
printf "%-40s IGNORED\n", test_name
|
|
119
207
|
|
|
120
|
-
|
|
121
|
-
@array_list.push ' <failure type="ASSERT FAILED"> ' + reason + ' </failure>'
|
|
122
|
-
@array_list.push ' </testcase>'
|
|
208
|
+
push_xml_output_ignored(test_name, reason) if @xml_out
|
|
123
209
|
end
|
|
124
210
|
|
|
125
|
-
#
|
|
126
|
-
#
|
|
127
|
-
def
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
end
|
|
211
|
+
# Adjusts the os specific members according to the current path style
|
|
212
|
+
# (Windows or Unix based)
|
|
213
|
+
def set_os_specifics(line)
|
|
214
|
+
if line.include? '\\'
|
|
215
|
+
# Windows X:\Y\Z
|
|
216
|
+
@class_name_idx = 1
|
|
217
|
+
@path_delim = '\\'
|
|
218
|
+
else
|
|
219
|
+
# Unix Based /X/Y/Z
|
|
220
|
+
@class_name_idx = 0
|
|
221
|
+
@path_delim = '/'
|
|
222
|
+
end
|
|
138
223
|
end
|
|
139
224
|
|
|
140
225
|
# Main function used to parse the file that was captured.
|
|
141
|
-
def process(
|
|
142
|
-
@test_flag = false
|
|
226
|
+
def process(file_name)
|
|
143
227
|
@array_list = []
|
|
144
228
|
|
|
145
|
-
|
|
229
|
+
puts 'Parsing file: ' + file_name
|
|
146
230
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
test_fail = 0
|
|
151
|
-
test_ignore = 0
|
|
231
|
+
@test_passed = 0
|
|
232
|
+
@test_failed = 0
|
|
233
|
+
@test_ignored = 0
|
|
152
234
|
puts ''
|
|
153
235
|
puts '=================== RESULTS ====================='
|
|
154
236
|
puts ''
|
|
155
|
-
File.open(
|
|
156
|
-
# Typical test lines look like
|
|
237
|
+
File.open(file_name).each do |line|
|
|
238
|
+
# Typical test lines look like these:
|
|
239
|
+
# ----------------------------------------------------
|
|
240
|
+
# 1. normal output:
|
|
157
241
|
# <path>/<test_file>.c:36:test_tc1000_opsys:FAIL: Expected 1 Was 0
|
|
158
242
|
# <path>/<test_file>.c:112:test_tc5004_initCanChannel:IGNORE: Not Yet Implemented
|
|
159
243
|
# <path>/<test_file>.c:115:test_tc5100_initCanVoidPtrs:PASS
|
|
160
244
|
#
|
|
161
|
-
#
|
|
245
|
+
# 2. fixture output
|
|
246
|
+
# <path>/<test_file>.c:63:TEST(<test_group>, <test_function>):FAIL: Expected 0x00001234 Was 0x00005A5A
|
|
247
|
+
# <path>/<test_file>.c:36:TEST(<test_group>, <test_function>):IGNORE
|
|
248
|
+
# Note: "PASS" information won't be generated in this mode
|
|
249
|
+
#
|
|
250
|
+
# 3. fixture output with verbose information ("-v")
|
|
251
|
+
# TEST(<test_group, <test_file>)<path>/<test_file>:168::FAIL: Expected 0x8D Was 0x8C
|
|
252
|
+
# TEST(<test_group>, <test_file>)<path>/<test_file>:22::IGNORE: This Test Was Ignored On Purpose
|
|
253
|
+
# IGNORE_TEST(<test_group, <test_file>)
|
|
254
|
+
# TEST(<test_group, <test_file>) PASS
|
|
255
|
+
#
|
|
256
|
+
# Note: Where path is different on Unix vs Windows devices (Windows leads with a drive letter)!
|
|
257
|
+
set_os_specifics(line)
|
|
162
258
|
line_array = line.split(':')
|
|
163
259
|
|
|
164
260
|
# If we were able to split the line then we can look to see if any of our target words
|
|
165
|
-
# were found.
|
|
166
|
-
if (line_array.size >= 4) || (line.start_with? 'TEST(')
|
|
167
|
-
|
|
168
|
-
if
|
|
261
|
+
# were found. Case is important.
|
|
262
|
+
if (line_array.size >= 4) || (line.start_with? 'TEST(') || (line.start_with? 'IGNORE_TEST(')
|
|
263
|
+
|
|
264
|
+
# check if the output is fixture output (with verbose flag "-v")
|
|
265
|
+
if (line.start_with? 'TEST(') || (line.start_with? 'IGNORE_TEST(')
|
|
266
|
+
line_array = prepare_fixture_line(line)
|
|
267
|
+
if line.include? ' PASS'
|
|
268
|
+
test_passed_unity_fixture(line_array)
|
|
269
|
+
@test_passed += 1
|
|
270
|
+
elsif line.include? 'FAIL'
|
|
271
|
+
test_failed_unity_fixture(line_array)
|
|
272
|
+
@test_failed += 1
|
|
273
|
+
elsif line.include? 'IGNORE'
|
|
274
|
+
test_ignored_unity_fixture(line_array)
|
|
275
|
+
@test_ignored += 1
|
|
276
|
+
end
|
|
277
|
+
# normal output / fixture output (without verbose "-v")
|
|
278
|
+
elsif line.include? ':PASS'
|
|
169
279
|
test_passed(line_array)
|
|
170
|
-
|
|
171
|
-
elsif line.include? ':FAIL
|
|
280
|
+
@test_passed += 1
|
|
281
|
+
elsif line.include? ':FAIL'
|
|
172
282
|
test_failed(line_array)
|
|
173
|
-
|
|
283
|
+
@test_failed += 1
|
|
174
284
|
elsif line.include? ':IGNORE:'
|
|
175
285
|
test_ignored(line_array)
|
|
176
|
-
|
|
177
|
-
elsif line.
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
test_pass += 1
|
|
182
|
-
end
|
|
183
|
-
# If none of the keywords are found there are no more tests for this suite so clear
|
|
184
|
-
# the test flag
|
|
185
|
-
else
|
|
186
|
-
@test_flag = false
|
|
286
|
+
@test_ignored += 1
|
|
287
|
+
elsif line.include? ':IGNORE'
|
|
288
|
+
line_array.push('No reason given')
|
|
289
|
+
test_ignored(line_array)
|
|
290
|
+
@test_ignored += 1
|
|
187
291
|
end
|
|
188
|
-
|
|
189
|
-
@test_flag = false
|
|
292
|
+
@total_tests = @test_passed + @test_failed + @test_ignored
|
|
190
293
|
end
|
|
191
294
|
end
|
|
192
295
|
puts ''
|
|
193
296
|
puts '=================== SUMMARY ====================='
|
|
194
297
|
puts ''
|
|
195
|
-
puts 'Tests Passed : ' +
|
|
196
|
-
puts 'Tests Failed : ' +
|
|
197
|
-
puts 'Tests Ignored : ' +
|
|
198
|
-
@total_tests = test_pass + test_fail + test_ignore
|
|
298
|
+
puts 'Tests Passed : ' + @test_passed.to_s
|
|
299
|
+
puts 'Tests Failed : ' + @test_failed.to_s
|
|
300
|
+
puts 'Tests Ignored : ' + @test_ignored.to_s
|
|
199
301
|
|
|
200
302
|
return unless @xml_out
|
|
201
303
|
|
|
202
|
-
|
|
203
|
-
|
|
304
|
+
# push information about the suite
|
|
305
|
+
push_xml_output_suite_info
|
|
306
|
+
# write xml output file
|
|
204
307
|
write_xml_output
|
|
205
308
|
end
|
|
206
309
|
end
|
|
@@ -209,11 +312,11 @@ end
|
|
|
209
312
|
parse_my_file = ParseOutput.new
|
|
210
313
|
|
|
211
314
|
if ARGV.size >= 1
|
|
212
|
-
ARGV.each do |
|
|
213
|
-
if
|
|
315
|
+
ARGV.each do |arg|
|
|
316
|
+
if arg == '-xml'
|
|
214
317
|
parse_my_file.set_xml_output
|
|
215
318
|
else
|
|
216
|
-
parse_my_file.process(
|
|
319
|
+
parse_my_file.process(arg)
|
|
217
320
|
break
|
|
218
321
|
end
|
|
219
322
|
end
|