From 94672ec34be255dfc41330227b1f0e898442b506 Mon Sep 17 00:00:00 2001 From: 94xhn <87560781+94xhn@users.noreply.github.com> Date: Wed, 15 Jul 2026 06:19:27 +0800 Subject: [PATCH] fix(generator): Call teardown without begin/end The omit-begin/end path generated a snake_case call, but the custom hook is defined as suiteTearDown. Generated C therefore failed strict C99 compilation. Constraint: Preserve app-owned Unity lifecycle setup and cleanup Rejected: Rename suiteTearDown | public docs use this hook name Confidence: high Scope-risk: narrow Directive: Match calls to the emitted teardown hook name Tested: Targeted regression, strict C99 compile, host run, Ruby syntax Not-tested: Full scripts suite beyond existing Windows EACCES --- auto/generate_test_runner.rb | 2 +- docs/UnityChangeLog.md | 1 + test/tests/test_generate_test_runner.rb | 20 ++++++++++++++++++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/auto/generate_test_runner.rb b/auto/generate_test_runner.rb index 18da54c0..ee04be82 100755 --- a/auto/generate_test_runner.rb +++ b/auto/generate_test_runner.rb @@ -533,7 +533,7 @@ def create_main(output, filename, tests, used_mocks) output.puts(' CMock_Guts_MemFreeFinal();') unless used_mocks.empty? if @options[:has_suite_teardown] if @options[:omit_begin_end] - output.puts(' (void) suite_teardown(0);') + output.puts(' (void) suiteTearDown(0);') else output.puts(' return suiteTearDown(UNITY_END());') end diff --git a/docs/UnityChangeLog.md b/docs/UnityChangeLog.md index 16ea340e..d1d41609 100644 --- a/docs/UnityChangeLog.md +++ b/docs/UnityChangeLog.md @@ -30,6 +30,7 @@ Significant Bugfixes: - display of failures fixed on ARM processors, particularly with arrays (#807) - fixed each-equal assertion for memory (#797) - fix many warnings. + - Test runner generator calls custom suite teardown when begin/end calls are omitted. @94xhn Other: diff --git a/test/tests/test_generate_test_runner.rb b/test/tests/test_generate_test_runner.rb index 201c24de..118670b0 100644 --- a/test/tests/test_generate_test_runner.rb +++ b/test/tests/test_generate_test_runner.rb @@ -1303,6 +1303,26 @@ def verify_number(expected, expression, output) end end +should 'GenerateSuiteTeardownWhenBeginAndEndAreOmitted' do + runner_name = OUT_FILE + 'SuiteTeardownWithoutBeginEnd_runner.c' + UnityTestRunnerGenerator.new( + :test_prefix => 'test', + :suite_teardown => ' return num_failures;', + :omit_begin_end => true, + ).run('testdata/testRunnerGenerator.c', runner_name) + + runner = File.read(runner_name) + correct_call = runner.include?('(void) suiteTearDown(0);') + incorrect_call = runner.include?('(void) suite_teardown(0);') + if correct_call && !incorrect_call + report 'Runner_GenerateSuiteTeardownWhenBeginAndEndAreOmitted:PASS' + else + report 'Runner_GenerateSuiteTeardownWhenBeginAndEndAreOmitted:FAIL' + $generate_test_runner_failures += 1 + end + $generate_test_runner_tests += 1 +end + RUNNER_TESTS.each do |testset| basename = File.basename(testset[:testfile], C_EXTENSION) testset_name = "Runner_#{basename}_#{testset[:name]}"