mirror of
https://github.com/hathach/tinyusb.git
synced 2025-01-17 05:32:55 +08:00
bc735bbe22
- unified makefile project for the whole repos - new separate project for tests
82 lines
2.1 KiB
Ruby
82 lines
2.1 KiB
Ruby
|
|
class TestIncludesExtractor
|
|
|
|
constructor :configurator, :yaml_wrapper, :file_wrapper
|
|
|
|
|
|
def setup
|
|
@includes = {}
|
|
@mocks = {}
|
|
end
|
|
|
|
|
|
# for includes_list file, slurp up array from yaml file and sort & store includes
|
|
def parse_includes_list(includes_list)
|
|
gather_and_store_includes( includes_list, @yaml_wrapper.load(includes_list) )
|
|
end
|
|
|
|
# open, scan for, and sort & store includes of test file
|
|
def parse_test_file(test)
|
|
gather_and_store_includes( test, extract_from_file(test) )
|
|
end
|
|
|
|
# mocks with no file extension
|
|
def lookup_raw_mock_list(test)
|
|
file_key = form_file_key(test)
|
|
return [] if @mocks[file_key].nil?
|
|
return @mocks[file_key]
|
|
end
|
|
|
|
# includes with file extension
|
|
def lookup_includes_list(file)
|
|
file_key = form_file_key(file)
|
|
return [] if (@includes[file_key]).nil?
|
|
return @includes[file_key]
|
|
end
|
|
|
|
private #################################
|
|
|
|
def form_file_key(filepath)
|
|
return File.basename(filepath).to_sym
|
|
end
|
|
|
|
def extract_from_file(file)
|
|
includes = []
|
|
header_extension = @configurator.extension_header
|
|
|
|
contents = @file_wrapper.read(file)
|
|
|
|
# remove line comments
|
|
contents = contents.gsub(/\/\/.*$/, '')
|
|
# remove block comments
|
|
contents = contents.gsub(/\/\*.*?\*\//m, '')
|
|
|
|
contents.split("\n").each do |line|
|
|
# look for include statement
|
|
scan_results = line.scan(/#include\s+\"\s*(.+#{'\\'+header_extension})\s*\"/)
|
|
|
|
includes << scan_results[0][0] if (scan_results.size > 0)
|
|
end
|
|
|
|
return includes.uniq
|
|
end
|
|
|
|
def gather_and_store_includes(file, includes)
|
|
mock_prefix = @configurator.cmock_mock_prefix
|
|
header_extension = @configurator.extension_header
|
|
file_key = form_file_key(file)
|
|
@mocks[file_key] = []
|
|
|
|
# add includes to lookup hash
|
|
@includes[file_key] = includes
|
|
|
|
includes.each do |include_file|
|
|
# check if include is a mock
|
|
scan_results = include_file.scan(/(#{mock_prefix}.+)#{'\\'+header_extension}/)
|
|
# add mock to lookup hash
|
|
@mocks[file_key] << scan_results[0][0] if (scan_results.size > 0)
|
|
end
|
|
end
|
|
|
|
end
|