adding new ceedling test project
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
require 'ceedling/constants'
|
||||
|
||||
|
||||
class ProjectFileLoader
|
||||
|
||||
attr_reader :main_file, :user_file
|
||||
|
||||
constructor :yaml_wrapper, :stream_wrapper, :system_wrapper, :file_wrapper
|
||||
|
||||
def setup
|
||||
@main_file = nil
|
||||
@mixin_files = []
|
||||
@user_file = nil
|
||||
|
||||
@main_project_filepath = ''
|
||||
@mixin_project_filepaths = []
|
||||
@user_project_filepath = ''
|
||||
end
|
||||
|
||||
|
||||
def find_project_files
|
||||
# first go hunting for optional user project file by looking for environment variable and then default location on disk
|
||||
user_filepath = @system_wrapper.env_get('CEEDLING_USER_PROJECT_FILE')
|
||||
|
||||
if ( not user_filepath.nil? and @file_wrapper.exist?(user_filepath) )
|
||||
@user_project_filepath = user_filepath
|
||||
elsif (@file_wrapper.exist?(DEFAULT_CEEDLING_USER_PROJECT_FILE))
|
||||
@user_project_filepath = DEFAULT_CEEDLING_USER_PROJECT_FILE
|
||||
end
|
||||
|
||||
# next check for mixin project files by looking for environment variable
|
||||
mixin_filepaths = @system_wrapper.env_get('CEEDLING_MIXIN_PROJECT_FILES')
|
||||
if ( not mixin_filepaths.nil? )
|
||||
mixin_filepaths.split(File::PATH_SEPARATOR).each do |filepath|
|
||||
if ( @file_wrapper.exist?(filepath) )
|
||||
@mixin_project_filepaths.push(filepath)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# next check for main project file by looking for environment variable and then default location on disk;
|
||||
# blow up if we don't find this guy -- like, he's so totally important
|
||||
main_filepath = @system_wrapper.env_get('CEEDLING_MAIN_PROJECT_FILE')
|
||||
|
||||
if ( not main_filepath.nil? and @file_wrapper.exist?(main_filepath) )
|
||||
@main_project_filepath = main_filepath
|
||||
elsif (@file_wrapper.exist?(DEFAULT_CEEDLING_MAIN_PROJECT_FILE))
|
||||
@main_project_filepath = DEFAULT_CEEDLING_MAIN_PROJECT_FILE
|
||||
else
|
||||
# no verbosity checking since this is lowest level reporting anyhow &
|
||||
# verbosity checking depends on configurator which in turns needs this class (circular dependency)
|
||||
@stream_wrapper.stderr_puts('Found no Ceedling project file (*.yml)')
|
||||
raise
|
||||
end
|
||||
|
||||
@main_file = File.basename( @main_project_filepath )
|
||||
@mixin_project_filepaths.each do |filepath|
|
||||
@mixin_files.push(File.basename( filepath ))
|
||||
end
|
||||
@user_file = File.basename( @user_project_filepath ) if ( not @user_project_filepath.empty? )
|
||||
end
|
||||
|
||||
def yaml_merger(y1, y2)
|
||||
o1 = y1
|
||||
y2.each_pair do |k,v|
|
||||
if o1[k].nil?
|
||||
o1[k] = v
|
||||
else
|
||||
if (o1[k].instance_of? Hash)
|
||||
o1[k] = yaml_merger(o1[k], v)
|
||||
elsif (o1[k].instance_of? Array)
|
||||
o1[k] += v
|
||||
else
|
||||
o1[k] = v
|
||||
end
|
||||
end
|
||||
end
|
||||
return o1
|
||||
end
|
||||
|
||||
def load_project_config
|
||||
config_hash = @yaml_wrapper.load(@main_project_filepath)
|
||||
|
||||
# if there are mixin project files, then use them
|
||||
@mixin_project_filepaths.each do |filepath|
|
||||
mixin = @yaml_wrapper.load(filepath)
|
||||
config_hash = yaml_merger( config_hash, mixin )
|
||||
end
|
||||
|
||||
# if there's a user project file, then use it
|
||||
if ( not @user_project_filepath.empty? )
|
||||
user_hash = @yaml_wrapper.load(@user_project_filepath)
|
||||
config_hash = yaml_merger( config_hash, user_hash )
|
||||
end
|
||||
|
||||
return config_hash
|
||||
end
|
||||
|
||||
end
|
||||
Reference in New Issue
Block a user