run examples fully and pass optional yaml file to them.

begin to automatically reject tests based on criteria.
This commit is contained in:
Mark VanderVoord
2026-05-29 16:09:22 -04:00
parent c40a6e08c6
commit c06bbe791c
7 changed files with 52 additions and 26 deletions
+1 -1
View File
@@ -14,7 +14,7 @@ all: setup test ${BUILD_DIR}/main run
setup:
mkdir -p ${BUILD_DIR}
mkdir -p ${OBJ}
ruby ../../scripts/create_makefile.rb --silent
ruby ../../scripts/create_makefile.rb
clean:
rm -rf ${BUILD_DIR}
+1 -1
View File
@@ -6,7 +6,7 @@
========================================================================= */
#include "unity.h"
#include "mock_foo.h"
#include "Mockfoo.h"
void setUp(void)
{
+5 -5
View File
@@ -179,8 +179,8 @@ module RakefileHelpers
def compile(file, extra_defines = [])
tool = $unity_cfg[:tools][:test_compiler]
ext = $unity_cfg[:extension][:object]
build_root = $proj[:project][:build_root]
ext = $unity_cfg[:extension][:object] || '.o'
build_root = $proj[:project][:build_root] || 'build/'
obj_file = build_root + File.basename(file, C_EXTENSION) + ext
cmd_str = "#{tackit(tool[:executable])} #{
@@ -195,8 +195,8 @@ module RakefileHelpers
def link_it(exe_name, obj_list)
tool = $unity_cfg[:tools][:test_linker]
ext = $unity_cfg[:extension][:executable]
build_root = $proj[:project][:build_root]
ext = $unity_cfg[:extension][:executable] || ''
build_root = $proj[:project][:build_root] || 'build/'
input_files = obj_list.uniq.map { |obj| build_root + obj }.join(' ')
output_file = build_root + exe_name + ext
@@ -288,7 +288,7 @@ module RakefileHelpers
# Execute unit test and generate results file
simulator = build_simulator_fields
build_root = $proj[:project][:build_root]
executable = build_root + test_base + $unity_cfg[:extension][:executable]
executable = build_root + test_base + ($unity_cfg[:extension][:executable] || '')
cmd_str = if simulator.nil?
executable
else
+1 -1
View File
@@ -24,7 +24,7 @@ CMOCK_OBJ = File.join(OBJ_DIR, 'cmock.o')
RUNNERS_DIR = File.join(TEST_BUILD_DIR, 'runners')
MOCKS_DIR = File.join(TEST_BUILD_DIR, 'mocks')
TEST_BIN_DIR = TEST_BUILD_DIR
MOCK_PREFIX = ENV.fetch('TEST_MOCK_PREFIX', 'mock_')
MOCK_PREFIX = ENV.fetch('TEST_MOCK_PREFIX', 'Mock')
MOCK_SUFFIX = ENV.fetch('TEST_MOCK_SUFFIX', '')
TEST_MAKEFILE = ENV.fetch('TEST_MAKEFILE', File.join(TEST_BUILD_DIR, 'MakefileTestSupport'))
MOCK_MATCHER = /#{MOCK_PREFIX}[A-Za-z_][A-Za-z0-9_\-.]+#{MOCK_SUFFIX}/
+23 -9
View File
@@ -27,8 +27,8 @@ SYSTEM_TEST_SUPPORT_DIRS.each do |dir|
CLOBBER.include(dir)
end
$config_file = DEFAULT_CONFIG_FILE
$overlay_file = nil
$cmock_test_config_file = DEFAULT_CONFIG_FILE
$cmock_test_overlay_file = nil
task :prep_system_tests => SYSTEM_TEST_SUPPORT_DIRS
task :default => [:test]
@@ -37,12 +37,12 @@ task :cruise => :ci
desc "Load configuration"
task :config, [:config_file, :cmock_overlay] do |t, args|
$config_file = args[:config_file]
$overlay_file = args[:cmock_overlay]
$cmock_test_config_file = args[:config_file]
$cmock_test_overlay_file = args[:cmock_overlay]
end
task :config_toolchains do
configure_toolchain($config_file, $overlay_file)
configure_toolchain($cmock_test_config_file, $cmock_test_overlay_file)
end
# Still support testing everything with just 'test' but switch default to ceedling-like test:all
@@ -74,10 +74,24 @@ namespace :test do
desc "Run System Tests"
task :system => [:config_toolchains, :clobber, :prep_system_tests] do
#get a list of all system tests, removing unsupported tests for this compiler
sys_unsupported = unsupported_tests.map {|a| 'system/test_interactions/'+a+'.yml'}
# Get a list of all system tests, removing unsupported tests for this toolchain
# including those explicitly not included, plus those implicitly based on needs
unsupported = unsupported_tests()
criteria = {
'out_of_memory' => { :defines => ['CMOCK_MEM_STATIC', 'CMOCK_MEM_SIZE=1024']}
}
criteria.each_pair do |k,v|
crit_defs = v[:defines] || []
conf_defs = $unity_cfg.dig(:defines,:test,'*') || $unity_cfg.dig(:defines,:test) || []
if (crit_defs & conf_defs).empty?
unsupported |= [k]
end
end
sys_unsupported = unsupported.map {|a| 'system/test_interactions/'+a+'.yml'}
# Determine which system tests remain after those are removed
sys_tests_to_run = FileList['system/test_interactions/*.yml'] - sys_unsupported
compile_unsupported = unsupported_tests.map {|a| SYSTEST_COMPILE_MOCKABLES_PATH+a+'.h'}
compile_unsupported = unsupported.map {|a| SYSTEST_COMPILE_MOCKABLES_PATH+a+'.h'}
compile_tests_to_run = FileList[SYSTEST_COMPILE_MOCKABLES_PATH + '*.h'] - compile_unsupported
unless (sys_unsupported.empty? and compile_unsupported.empty?)
report "\nIgnoring these system tests..."
@@ -93,7 +107,7 @@ namespace :test do
desc "Test cmock examples"
task :examples => [:config_toolchains, :prep_system_tests] do
run_examples(true)
run_examples()
end
#individual system tests
+20 -8
View File
@@ -147,7 +147,7 @@ module RakefileHelpers
# Returns the unsupported test list, regardless of whether it came from
# a CMock overlay or a CMock-only target file.
def unsupported_tests
$cmock_cfg[:unsupported] || $unity_cfg[:unsupported] || []
($cmock_cfg[:unsupported] || []) | ($unity_cfg[:unsupported] || [])
end
# Resolve argument template tokens and produce a flat argument string.
@@ -229,6 +229,7 @@ module RakefileHelpers
end
def execute(command_string, verbose=true, raise_on_failure=true)
report(command_string) if verbose
output = `#{command_string}`.chomp
report(output) if (verbose && !output.nil? && (output.length > 0))
if ($?.exitstatus != 0) and (raise_on_failure)
@@ -521,7 +522,7 @@ module RakefileHelpers
raise "C unit tests failed." if result =~ /FAILED/
end
def run_examples(verbose=false, raise_on_failure=true)
def run_examples()
report "\n"
report "-----------------\n"
report "VALIDATE EXAMPLES\n"
@@ -529,11 +530,20 @@ module RakefileHelpers
total_tests = 0
total_failures = 0
total_ignored = 0
[ "cd #{File.join("..", "examples", "make_example")} && make clean && make setup && make test",
"cd #{File.join("..", "examples", "temp_sensor")} && rake ci"
].each do |cmd|
report "Testing '#{cmd}'"
execute(cmd, verbose, false).each_line do |line|
puts "DEBUG DIS #{$cmock_test_config_file}"
cfg_file = "#{($cmock_test_config_file =~ /[\\\/]/) ? '../' : ''}#{$cmock_test_config_file}"
# Determine which examples are valid for this platform
examples = {
:make_example => "cd #{File.join("..", "examples", "make_example")} && make clean && make setup && make test",
:rake_example => "cd #{File.join("..", "examples", "temp_sensor")} && rake config[\"#{cfg_file}\"] ci"
}
examples.delete(:make_example) unless ($cmock_test_config_file =~ /gcc/)
# Run the examples
examples.each_pair do |key, cmd|
report "Testing Example: '#{key}'"
execute(cmd, true, false).each_line do |line|
if line =~ /(\d+) TOTAL TESTS (\d+) TOTAL FAILURES (\d+) IGNORED/
total_tests += Regexp.last_match(1).to_i
total_failures += Regexp.last_match(2).to_i
@@ -541,10 +551,12 @@ module RakefileHelpers
end
end
end
# Report the results from the examples
result = "#{total_tests} Tests #{total_failures} Failures #{total_ignored} Ignored\n"
result += total_failures > 0 ? "FAILED\n" : "OK\n"
save_test_results('examples', result)
raise "Examples failed." if total_failures > 0 && raise_on_failure
raise "Examples failed." if total_failures > 0
end
def fail_out(msg)
+1 -1