From 2e4799111cbff75266a084fe3fc5df997b87d32f Mon Sep 17 00:00:00 2001 From: Peter Mendham Date: Wed, 20 Jan 2016 13:45:25 +0000 Subject: [PATCH 1/2] Added a command line option to change the name of main. This allows alternative entry points. This is intended for the integration of the unit test into a larger system or for it to be used with a platform/OS which requires an application entry point other than main. At the moment there is no way to change the type signature. --- auto/generate_test_runner.rb | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/auto/generate_test_runner.rb b/auto/generate_test_runner.rb index 32c0ace..8a081f3 100644 --- a/auto/generate_test_runner.rb +++ b/auto/generate_test_runner.rb @@ -28,6 +28,7 @@ class UnityTestRunnerGenerator :test_prefix => "test|spec|should", :setup_name => "setUp", :teardown_name => "tearDown", + :main_name => "main", } end @@ -288,7 +289,10 @@ class UnityTestRunnerGenerator def create_main(output, filename, tests, used_mocks) output.puts("\n\n//=======MAIN=====") - output.puts("int main(void)") + if (@options[:main_name] != "main") + output.puts("int #{@options[:main_name]}(void);") + end + output.puts("int #{@options[:main_name]}(void)") output.puts("{") output.puts(" suite_setup();") unless @options[:suite_setup].nil? output.puts(" UnityBegin(\"#{filename.gsub(/\\/,'\\\\')}\");") @@ -358,6 +362,7 @@ if ($0 == __FILE__) " -cexception - include cexception support", " --setup_name=\"\" - redefine setUp func name to something else", " --teardown_name=\"\" - redefine tearDown func name to something else", + " --main_name=\"\" - redefine main func name to something else", " --test_prefix=\"\" - redefine test prefix from default test|spec|should", " --suite_setup=\"\" - code to execute for setup of entire suite", " --suite_teardown=\"\" - code to execute for teardown of entire suite", From 55a75ded7adab635831abc80948d68c69be769de Mon Sep 17 00:00:00 2001 From: Peter Mendham Date: Wed, 20 Jan 2016 13:48:15 +0000 Subject: [PATCH 2/2] Improved header file generation. Changed the guard syntax as it was cumbersome for header files in deep sub-directories. Added framework/mock includes to make the header file stand alone. Made sure that a valid prototype was generated in the case of no arguments (void). --- auto/generate_test_runner.rb | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/auto/generate_test_runner.rb b/auto/generate_test_runner.rb index 8a081f3..1ae56f0 100644 --- a/auto/generate_test_runner.rb +++ b/auto/generate_test_runner.rb @@ -83,7 +83,7 @@ class UnityTestRunnerGenerator if (@options[:header_file] && !@options[:header_file].empty?) File.open(@options[:header_file], 'w') do |output| - create_h_file(output, @options[:header_file], tests, testfile_includes) + create_h_file(output, @options[:header_file], tests, testfile_includes, used_mocks) end end end @@ -313,11 +313,13 @@ class UnityTestRunnerGenerator output.puts("}") end - def create_h_file(output, filename, tests, testfile_includes) - filename = filename.upcase.gsub(/(?:\/|\\|\.)*/,'_') + def create_h_file(output, filename, tests, testfile_includes, used_mocks) + filename = File.basename(filename).gsub(/[-\/\\\.\,\s]/, "_").upcase output.puts("/* AUTOGENERATED FILE. DO NOT EDIT. */") output.puts("#ifndef _#{filename}") output.puts("#define _#{filename}\n\n") + output.puts("#include \"#{@options[:framework].to_s}.h\"") + output.puts('#include "cmock.h"') unless (used_mocks.empty?) @options[:includes].flatten.uniq.compact.each do |inc| output.puts("#include #{inc.include?('<') ? inc : "\"#{inc.gsub('.h','')}.h\""}") end @@ -325,7 +327,13 @@ class UnityTestRunnerGenerator output.puts("#include #{inc.include?('<') ? inc : "\"#{inc.gsub('.h','')}.h\""}") end output.puts "\n" - tests.each {|test| output.puts("void #{test[:test]}(#{test[:params]});") } + tests.each do |test| + if ((test[:params].nil?) or (test[:params].empty?)) + output.puts("void #{test[:test]}(void);") + else + output.puts("void #{test[:test]}(#{test[:params]});") + end + end output.puts("#endif\n\n") end end @@ -341,10 +349,10 @@ if ($0 == __FILE__) options[:plugins] = [:cexception]; true when /\.*\.ya?ml/ options = UnityTestRunnerGenerator.grab_config(arg); true - when /\.*\.h/ - options[:includes] << arg; true when /--(\w+)=\"?(.*)\"?/ options[$1.to_sym] = $2; true + when /\.*\.h/ + options[:includes] << arg; true else false end end