- add ceedling/cmock/unity as testing framework and support
- unified makefile project for the whole repos - new separate project for tests
This commit is contained in:
63
tests/vendor/ceedling/lib/generator_test_runner.rb
vendored
Normal file
63
tests/vendor/ceedling/lib/generator_test_runner.rb
vendored
Normal file
@@ -0,0 +1,63 @@
|
||||
|
||||
class GeneratorTestRunner
|
||||
|
||||
constructor :configurator, :file_path_utils, :file_wrapper
|
||||
|
||||
def find_test_cases(test_file)
|
||||
tests = []
|
||||
tests_and_line_numbers = []
|
||||
lines = []
|
||||
|
||||
# if we don't have preprocessor assistance, do some basic preprocessing of our own
|
||||
if (not @configurator.project_use_test_preprocessor)
|
||||
source = @file_wrapper.read(test_file)
|
||||
|
||||
# remove line comments
|
||||
source = source.gsub(/\/\/.*$/, '')
|
||||
# remove block comments
|
||||
source = source.gsub(/\/\*.*?\*\//m, '')
|
||||
|
||||
# treat preprocessor directives as a logical line
|
||||
lines = source.split(/(^\s*\#.*$) | (;|\{|\}) /x) # match ;, {, and } as end of lines
|
||||
# otherwise, read the preprocessed file raw
|
||||
else
|
||||
lines = @file_wrapper.read( @file_path_utils.form_preprocessed_file_filepath(test_file) ).split(/;|\{|\}/)
|
||||
end
|
||||
|
||||
# step 1. find test functions in (possibly preprocessed) file
|
||||
# (note that lines are not broken up at end of lines)
|
||||
lines.each do |line|
|
||||
if (line =~ /^\s*void\s+((T|t)est.*)\s*\(\s*(void)?\s*\)/m)
|
||||
tests << ($1.strip)
|
||||
end
|
||||
end
|
||||
|
||||
# step 2. associate test functions with line numbers in (non-preprocessed) original file
|
||||
# (note that this time we must scan file contents broken up by end of lines)
|
||||
raw_lines = @file_wrapper.read(test_file).split("\n")
|
||||
raw_index = 0
|
||||
|
||||
tests.each do |test|
|
||||
raw_lines[raw_index..-1].each_with_index do |line, index|
|
||||
# test function might be declared across lines; look for it by its name followed
|
||||
# by a few tell-tale signs
|
||||
if (line =~ /#{test}\s*($|\(|\()/)
|
||||
raw_index += (index + 1)
|
||||
tests_and_line_numbers << {:test => test, :line_number => raw_index}
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return tests_and_line_numbers
|
||||
end
|
||||
|
||||
def generate(module_name, runner_filepath, test_cases, mock_list)
|
||||
require 'generate_test_runner.rb'
|
||||
@test_runner_generator ||= UnityTestRunnerGenerator.new( @configurator.get_runner_config )
|
||||
@test_runner_generator.generate( module_name,
|
||||
runner_filepath,
|
||||
test_cases,
|
||||
mock_list)
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user