![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
FRDM K64F Metronome
pal/Test/Unity/extras/fixture/rakefile_helper.rb@0:dbad57390bd1, 2017-05-14 (annotated)
- Committer:
- ram54288
- Date:
- Sun May 14 18:37:05 2017 +0000
- Revision:
- 0:dbad57390bd1
Initial commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ram54288 | 0:dbad57390bd1 | 1 | # ========================================== |
ram54288 | 0:dbad57390bd1 | 2 | # Unity Project - A Test Framework for C |
ram54288 | 0:dbad57390bd1 | 3 | # Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams |
ram54288 | 0:dbad57390bd1 | 4 | # [Released under MIT License. Please refer to license.txt for details] |
ram54288 | 0:dbad57390bd1 | 5 | # ========================================== |
ram54288 | 0:dbad57390bd1 | 6 | |
ram54288 | 0:dbad57390bd1 | 7 | require 'yaml' |
ram54288 | 0:dbad57390bd1 | 8 | require 'fileutils' |
ram54288 | 0:dbad57390bd1 | 9 | require HERE+'../../auto/unity_test_summary' |
ram54288 | 0:dbad57390bd1 | 10 | require HERE+'../../auto/generate_test_runner' |
ram54288 | 0:dbad57390bd1 | 11 | require HERE+'../../auto/colour_reporter' |
ram54288 | 0:dbad57390bd1 | 12 | |
ram54288 | 0:dbad57390bd1 | 13 | module RakefileHelpers |
ram54288 | 0:dbad57390bd1 | 14 | |
ram54288 | 0:dbad57390bd1 | 15 | C_EXTENSION = '.c' |
ram54288 | 0:dbad57390bd1 | 16 | |
ram54288 | 0:dbad57390bd1 | 17 | def load_configuration(config_file) |
ram54288 | 0:dbad57390bd1 | 18 | unless ($configured) |
ram54288 | 0:dbad57390bd1 | 19 | $cfg_file = HERE+"../../test/targets/#{config_file}" unless (config_file =~ /[\\|\/]/) |
ram54288 | 0:dbad57390bd1 | 20 | $cfg = YAML.load(File.read($cfg_file)) |
ram54288 | 0:dbad57390bd1 | 21 | $colour_output = false unless $cfg['colour'] |
ram54288 | 0:dbad57390bd1 | 22 | $configured = true if (config_file != DEFAULT_CONFIG_FILE) |
ram54288 | 0:dbad57390bd1 | 23 | end |
ram54288 | 0:dbad57390bd1 | 24 | end |
ram54288 | 0:dbad57390bd1 | 25 | |
ram54288 | 0:dbad57390bd1 | 26 | def configure_clean |
ram54288 | 0:dbad57390bd1 | 27 | CLEAN.include($cfg['compiler']['build_path'] + '*.*') unless $cfg['compiler']['build_path'].nil? |
ram54288 | 0:dbad57390bd1 | 28 | end |
ram54288 | 0:dbad57390bd1 | 29 | |
ram54288 | 0:dbad57390bd1 | 30 | def configure_toolchain(config_file=DEFAULT_CONFIG_FILE) |
ram54288 | 0:dbad57390bd1 | 31 | config_file += '.yml' unless config_file =~ /\.yml$/ |
ram54288 | 0:dbad57390bd1 | 32 | config_file = config_file unless config_file =~ /[\\|\/]/ |
ram54288 | 0:dbad57390bd1 | 33 | load_configuration(config_file) |
ram54288 | 0:dbad57390bd1 | 34 | configure_clean |
ram54288 | 0:dbad57390bd1 | 35 | end |
ram54288 | 0:dbad57390bd1 | 36 | |
ram54288 | 0:dbad57390bd1 | 37 | def tackit(strings) |
ram54288 | 0:dbad57390bd1 | 38 | if strings.is_a?(Array) |
ram54288 | 0:dbad57390bd1 | 39 | result = "\"#{strings.join}\"" |
ram54288 | 0:dbad57390bd1 | 40 | else |
ram54288 | 0:dbad57390bd1 | 41 | result = strings |
ram54288 | 0:dbad57390bd1 | 42 | end |
ram54288 | 0:dbad57390bd1 | 43 | return result |
ram54288 | 0:dbad57390bd1 | 44 | end |
ram54288 | 0:dbad57390bd1 | 45 | |
ram54288 | 0:dbad57390bd1 | 46 | def squash(prefix, items) |
ram54288 | 0:dbad57390bd1 | 47 | result = '' |
ram54288 | 0:dbad57390bd1 | 48 | items.each { |item| result += " #{prefix}#{tackit(item)}" } |
ram54288 | 0:dbad57390bd1 | 49 | return result |
ram54288 | 0:dbad57390bd1 | 50 | end |
ram54288 | 0:dbad57390bd1 | 51 | |
ram54288 | 0:dbad57390bd1 | 52 | def build_compiler_fields |
ram54288 | 0:dbad57390bd1 | 53 | command = tackit($cfg['compiler']['path']) |
ram54288 | 0:dbad57390bd1 | 54 | if $cfg['compiler']['defines']['items'].nil? |
ram54288 | 0:dbad57390bd1 | 55 | defines = '' |
ram54288 | 0:dbad57390bd1 | 56 | else |
ram54288 | 0:dbad57390bd1 | 57 | defines = squash($cfg['compiler']['defines']['prefix'], $cfg['compiler']['defines']['items'] + ['UNITY_OUTPUT_CHAR=UnityOutputCharSpy_OutputChar']) |
ram54288 | 0:dbad57390bd1 | 58 | end |
ram54288 | 0:dbad57390bd1 | 59 | options = squash('', $cfg['compiler']['options']) |
ram54288 | 0:dbad57390bd1 | 60 | includes = squash($cfg['compiler']['includes']['prefix'], $cfg['compiler']['includes']['items']) |
ram54288 | 0:dbad57390bd1 | 61 | includes = includes.gsub(/\\ /, ' ').gsub(/\\\"/, '"').gsub(/\\$/, '') # Remove trailing slashes (for IAR) |
ram54288 | 0:dbad57390bd1 | 62 | return {:command => command, :defines => defines, :options => options, :includes => includes} |
ram54288 | 0:dbad57390bd1 | 63 | end |
ram54288 | 0:dbad57390bd1 | 64 | |
ram54288 | 0:dbad57390bd1 | 65 | def compile(file, defines=[]) |
ram54288 | 0:dbad57390bd1 | 66 | compiler = build_compiler_fields |
ram54288 | 0:dbad57390bd1 | 67 | unity_include = $cfg['compiler']['includes']['prefix']+'../../src' |
ram54288 | 0:dbad57390bd1 | 68 | cmd_str = "#{compiler[:command]}#{compiler[:defines]}#{compiler[:options]}#{compiler[:includes]} #{unity_include} #{file} " + |
ram54288 | 0:dbad57390bd1 | 69 | "#{$cfg['compiler']['object_files']['prefix']}#{$cfg['compiler']['object_files']['destination']}" + |
ram54288 | 0:dbad57390bd1 | 70 | "#{File.basename(file, C_EXTENSION)}#{$cfg['compiler']['object_files']['extension']}" |
ram54288 | 0:dbad57390bd1 | 71 | execute(cmd_str) |
ram54288 | 0:dbad57390bd1 | 72 | end |
ram54288 | 0:dbad57390bd1 | 73 | |
ram54288 | 0:dbad57390bd1 | 74 | def build_linker_fields |
ram54288 | 0:dbad57390bd1 | 75 | command = tackit($cfg['linker']['path']) |
ram54288 | 0:dbad57390bd1 | 76 | if $cfg['linker']['options'].nil? |
ram54288 | 0:dbad57390bd1 | 77 | options = '' |
ram54288 | 0:dbad57390bd1 | 78 | else |
ram54288 | 0:dbad57390bd1 | 79 | options = squash('', $cfg['linker']['options']) |
ram54288 | 0:dbad57390bd1 | 80 | end |
ram54288 | 0:dbad57390bd1 | 81 | if ($cfg['linker']['includes'].nil? || $cfg['linker']['includes']['items'].nil?) |
ram54288 | 0:dbad57390bd1 | 82 | includes = '' |
ram54288 | 0:dbad57390bd1 | 83 | else |
ram54288 | 0:dbad57390bd1 | 84 | includes = squash($cfg['linker']['includes']['prefix'], $cfg['linker']['includes']['items']) |
ram54288 | 0:dbad57390bd1 | 85 | end |
ram54288 | 0:dbad57390bd1 | 86 | includes = includes.gsub(/\\ /, ' ').gsub(/\\\"/, '"').gsub(/\\$/, '') # Remove trailing slashes (for IAR) |
ram54288 | 0:dbad57390bd1 | 87 | return {:command => command, :options => options, :includes => includes} |
ram54288 | 0:dbad57390bd1 | 88 | end |
ram54288 | 0:dbad57390bd1 | 89 | |
ram54288 | 0:dbad57390bd1 | 90 | def link_it(exe_name, obj_list) |
ram54288 | 0:dbad57390bd1 | 91 | linker = build_linker_fields |
ram54288 | 0:dbad57390bd1 | 92 | cmd_str = "#{linker[:command]}#{linker[:options]}#{linker[:includes]} " + |
ram54288 | 0:dbad57390bd1 | 93 | (obj_list.map{|obj|"#{$cfg['linker']['object_files']['path']}#{obj} "}).join + |
ram54288 | 0:dbad57390bd1 | 94 | $cfg['linker']['bin_files']['prefix'] + ' ' + |
ram54288 | 0:dbad57390bd1 | 95 | $cfg['linker']['bin_files']['destination'] + |
ram54288 | 0:dbad57390bd1 | 96 | exe_name + $cfg['linker']['bin_files']['extension'] |
ram54288 | 0:dbad57390bd1 | 97 | execute(cmd_str) |
ram54288 | 0:dbad57390bd1 | 98 | end |
ram54288 | 0:dbad57390bd1 | 99 | |
ram54288 | 0:dbad57390bd1 | 100 | def build_simulator_fields |
ram54288 | 0:dbad57390bd1 | 101 | return nil if $cfg['simulator'].nil? |
ram54288 | 0:dbad57390bd1 | 102 | if $cfg['simulator']['path'].nil? |
ram54288 | 0:dbad57390bd1 | 103 | command = '' |
ram54288 | 0:dbad57390bd1 | 104 | else |
ram54288 | 0:dbad57390bd1 | 105 | command = (tackit($cfg['simulator']['path']) + ' ') |
ram54288 | 0:dbad57390bd1 | 106 | end |
ram54288 | 0:dbad57390bd1 | 107 | if $cfg['simulator']['pre_support'].nil? |
ram54288 | 0:dbad57390bd1 | 108 | pre_support = '' |
ram54288 | 0:dbad57390bd1 | 109 | else |
ram54288 | 0:dbad57390bd1 | 110 | pre_support = squash('', $cfg['simulator']['pre_support']) |
ram54288 | 0:dbad57390bd1 | 111 | end |
ram54288 | 0:dbad57390bd1 | 112 | if $cfg['simulator']['post_support'].nil? |
ram54288 | 0:dbad57390bd1 | 113 | post_support = '' |
ram54288 | 0:dbad57390bd1 | 114 | else |
ram54288 | 0:dbad57390bd1 | 115 | post_support = squash('', $cfg['simulator']['post_support']) |
ram54288 | 0:dbad57390bd1 | 116 | end |
ram54288 | 0:dbad57390bd1 | 117 | return {:command => command, :pre_support => pre_support, :post_support => post_support} |
ram54288 | 0:dbad57390bd1 | 118 | end |
ram54288 | 0:dbad57390bd1 | 119 | |
ram54288 | 0:dbad57390bd1 | 120 | def execute(command_string, verbose=true) |
ram54288 | 0:dbad57390bd1 | 121 | report command_string |
ram54288 | 0:dbad57390bd1 | 122 | output = `#{command_string}`.chomp |
ram54288 | 0:dbad57390bd1 | 123 | report(output) if (verbose && !output.nil? && (output.length > 0)) |
ram54288 | 0:dbad57390bd1 | 124 | if ($?.exitstatus != 0) |
ram54288 | 0:dbad57390bd1 | 125 | raise "Command failed. (Returned #{$?.exitstatus})" |
ram54288 | 0:dbad57390bd1 | 126 | end |
ram54288 | 0:dbad57390bd1 | 127 | return output |
ram54288 | 0:dbad57390bd1 | 128 | end |
ram54288 | 0:dbad57390bd1 | 129 | |
ram54288 | 0:dbad57390bd1 | 130 | def report_summary |
ram54288 | 0:dbad57390bd1 | 131 | summary = UnityTestSummary.new |
ram54288 | 0:dbad57390bd1 | 132 | summary.set_root_path(HERE) |
ram54288 | 0:dbad57390bd1 | 133 | results_glob = "#{$cfg['compiler']['build_path']}*.test*" |
ram54288 | 0:dbad57390bd1 | 134 | results_glob.gsub!(/\\/, '/') |
ram54288 | 0:dbad57390bd1 | 135 | results = Dir[results_glob] |
ram54288 | 0:dbad57390bd1 | 136 | summary.set_targets(results) |
ram54288 | 0:dbad57390bd1 | 137 | summary.run |
ram54288 | 0:dbad57390bd1 | 138 | end |
ram54288 | 0:dbad57390bd1 | 139 | |
ram54288 | 0:dbad57390bd1 | 140 | def run_tests |
ram54288 | 0:dbad57390bd1 | 141 | report 'Running Unity system tests...' |
ram54288 | 0:dbad57390bd1 | 142 | |
ram54288 | 0:dbad57390bd1 | 143 | # Tack on TEST define for compiling unit tests |
ram54288 | 0:dbad57390bd1 | 144 | load_configuration($cfg_file) |
ram54288 | 0:dbad57390bd1 | 145 | test_defines = ['TEST'] |
ram54288 | 0:dbad57390bd1 | 146 | $cfg['compiler']['defines']['items'] = [] if $cfg['compiler']['defines']['items'].nil? |
ram54288 | 0:dbad57390bd1 | 147 | |
ram54288 | 0:dbad57390bd1 | 148 | # Get a list of all source files needed |
ram54288 | 0:dbad57390bd1 | 149 | src_files = Dir[HERE+'src/*.c'] |
ram54288 | 0:dbad57390bd1 | 150 | src_files += Dir[HERE+'test/*.c'] |
ram54288 | 0:dbad57390bd1 | 151 | src_files += Dir[HERE+'test/main/*.c'] |
ram54288 | 0:dbad57390bd1 | 152 | src_files << '../../src/unity.c' |
ram54288 | 0:dbad57390bd1 | 153 | |
ram54288 | 0:dbad57390bd1 | 154 | # Build object files |
ram54288 | 0:dbad57390bd1 | 155 | src_files.each { |f| compile(f, test_defines) } |
ram54288 | 0:dbad57390bd1 | 156 | obj_list = src_files.map {|f| File.basename(f.ext($cfg['compiler']['object_files']['extension'])) } |
ram54288 | 0:dbad57390bd1 | 157 | |
ram54288 | 0:dbad57390bd1 | 158 | # Link the test executable |
ram54288 | 0:dbad57390bd1 | 159 | test_base = "framework_test" |
ram54288 | 0:dbad57390bd1 | 160 | link_it(test_base, obj_list) |
ram54288 | 0:dbad57390bd1 | 161 | |
ram54288 | 0:dbad57390bd1 | 162 | # Execute unit test and generate results file |
ram54288 | 0:dbad57390bd1 | 163 | simulator = build_simulator_fields |
ram54288 | 0:dbad57390bd1 | 164 | executable = $cfg['linker']['bin_files']['destination'] + test_base + $cfg['linker']['bin_files']['extension'] |
ram54288 | 0:dbad57390bd1 | 165 | if simulator.nil? |
ram54288 | 0:dbad57390bd1 | 166 | cmd_str = executable + " -v -r" |
ram54288 | 0:dbad57390bd1 | 167 | else |
ram54288 | 0:dbad57390bd1 | 168 | cmd_str = "#{simulator[:command]} #{simulator[:pre_support]} #{executable} #{simulator[:post_support]}" |
ram54288 | 0:dbad57390bd1 | 169 | end |
ram54288 | 0:dbad57390bd1 | 170 | output = execute(cmd_str) |
ram54288 | 0:dbad57390bd1 | 171 | test_results = $cfg['compiler']['build_path'] + test_base |
ram54288 | 0:dbad57390bd1 | 172 | if output.match(/OK$/m).nil? |
ram54288 | 0:dbad57390bd1 | 173 | test_results += '.testfail' |
ram54288 | 0:dbad57390bd1 | 174 | else |
ram54288 | 0:dbad57390bd1 | 175 | test_results += '.testpass' |
ram54288 | 0:dbad57390bd1 | 176 | end |
ram54288 | 0:dbad57390bd1 | 177 | File.open(test_results, 'w') { |f| f.print output } |
ram54288 | 0:dbad57390bd1 | 178 | end |
ram54288 | 0:dbad57390bd1 | 179 | end |