ceedling 0.28.2 → 0.28.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|