diff --git a/examples/make_example/Makefile b/examples/make_example/Makefile new file mode 100644 index 0000000..1403e4e --- /dev/null +++ b/examples/make_example/Makefile @@ -0,0 +1,32 @@ +CC ?= gcc +BUILD_DIR ?= ./build +SRC_DIR ?= ./src +TEST_DIR ?= ./test +#UNITY_DIR ?= ../../vendor/cmock/vendor/unity +#CMOCK_DIR ?= ../.. +TEST_BUILD_DIR ?= ${BUILD_DIR}/test +TEST_MAKEFILE = ${TEST_BUILD_DIR}/MakefileTestSupport +OBJ ?= ${BUILD_DIR}/obj +OBJ_DIR = ${OBJ} + +default: all + +all: setup test ${BUILD_DIR}/main run + +setup: + mkdir -p ${BUILD_DIR} + mkdir -p ${OBJ} + ruby ../../scripts/create_makefile.rb + +clean: + rm -rf ${BUILD_DIR} + +${BUILD_DIR}/main: ${SRC_DIR}/main.c ${SRC_DIR}/foo.c + ${CC} $< -o $@ + +run: + ./build/main + +test: setup + +-include ${TEST_MAKEFILE} diff --git a/examples/make_example/src/foo.c b/examples/make_example/src/foo.c new file mode 100644 index 0000000..5490203 --- /dev/null +++ b/examples/make_example/src/foo.c @@ -0,0 +1,5 @@ +#include "foo.h" + +void foo_init(void) +{ +} diff --git a/examples/make_example/src/foo.h b/examples/make_example/src/foo.h new file mode 100644 index 0000000..3d2b5fb --- /dev/null +++ b/examples/make_example/src/foo.h @@ -0,0 +1,5 @@ +#ifndef _foo_h + +void foo_init(void); + +#endif diff --git a/examples/make_example/src/main.c b/examples/make_example/src/main.c new file mode 100644 index 0000000..52e8679 --- /dev/null +++ b/examples/make_example/src/main.c @@ -0,0 +1,15 @@ +#include +#include "foo.h" + +int real_main(int argc, char ** argv) +{ + printf("Hello world!\n"); + return 0; +} + +#ifndef TEST +int main(int argc, char ** argv) +{ + return real_main(argc, argv); +} +#endif diff --git a/examples/make_example/test/test_foo.c b/examples/make_example/test/test_foo.c new file mode 100644 index 0000000..80f17f3 --- /dev/null +++ b/examples/make_example/test/test_foo.c @@ -0,0 +1,17 @@ +#include "unity.h" +#include "foo.h" + +void setUp(void) +{ +} + +void tearDown(void) +{ +} + +void test_foo_init_should_initialize_multiplier() +{ + foo_init(); + + TEST_ASSERT_FALSE(1); +} diff --git a/examples/make_example/test/test_main.c b/examples/make_example/test/test_main.c new file mode 100644 index 0000000..f9b6749 --- /dev/null +++ b/examples/make_example/test/test_main.c @@ -0,0 +1,15 @@ +#include "unity.h" +#include "mock_foo.h" + +void setUp(void) +{ +} + +void tearDown(void) +{ +} + +void test_main_should_initialize_foo(void) +{ + TEST_IGNORE_MESSAGE("TODO: Implement main!"); +} diff --git a/examples/gcc.yml b/examples/temp_sensor/gcc.yml similarity index 100% rename from examples/gcc.yml rename to examples/temp_sensor/gcc.yml diff --git a/examples/iar_v4.yml b/examples/temp_sensor/iar_v4.yml similarity index 100% rename from examples/iar_v4.yml rename to examples/temp_sensor/iar_v4.yml diff --git a/examples/iar_v5.yml b/examples/temp_sensor/iar_v5.yml similarity index 100% rename from examples/iar_v5.yml rename to examples/temp_sensor/iar_v5.yml diff --git a/examples/rakefile.rb b/examples/temp_sensor/rakefile.rb similarity index 100% rename from examples/rakefile.rb rename to examples/temp_sensor/rakefile.rb diff --git a/examples/rakefile_helper.rb b/examples/temp_sensor/rakefile_helper.rb similarity index 100% rename from examples/rakefile_helper.rb rename to examples/temp_sensor/rakefile_helper.rb diff --git a/examples/src/AT91SAM7X256.h b/examples/temp_sensor/src/AT91SAM7X256.h similarity index 100% rename from examples/src/AT91SAM7X256.h rename to examples/temp_sensor/src/AT91SAM7X256.h diff --git a/examples/src/AdcConductor.c b/examples/temp_sensor/src/AdcConductor.c similarity index 100% rename from examples/src/AdcConductor.c rename to examples/temp_sensor/src/AdcConductor.c diff --git a/examples/src/AdcConductor.h b/examples/temp_sensor/src/AdcConductor.h similarity index 100% rename from examples/src/AdcConductor.h rename to examples/temp_sensor/src/AdcConductor.h diff --git a/examples/src/AdcHardware.c b/examples/temp_sensor/src/AdcHardware.c similarity index 100% rename from examples/src/AdcHardware.c rename to examples/temp_sensor/src/AdcHardware.c diff --git a/examples/src/AdcHardware.h b/examples/temp_sensor/src/AdcHardware.h similarity index 100% rename from examples/src/AdcHardware.h rename to examples/temp_sensor/src/AdcHardware.h diff --git a/examples/src/AdcHardwareConfigurator.c b/examples/temp_sensor/src/AdcHardwareConfigurator.c similarity index 100% rename from examples/src/AdcHardwareConfigurator.c rename to examples/temp_sensor/src/AdcHardwareConfigurator.c diff --git a/examples/src/AdcHardwareConfigurator.h b/examples/temp_sensor/src/AdcHardwareConfigurator.h similarity index 100% rename from examples/src/AdcHardwareConfigurator.h rename to examples/temp_sensor/src/AdcHardwareConfigurator.h diff --git a/examples/src/AdcModel.c b/examples/temp_sensor/src/AdcModel.c similarity index 100% rename from examples/src/AdcModel.c rename to examples/temp_sensor/src/AdcModel.c diff --git a/examples/src/AdcModel.h b/examples/temp_sensor/src/AdcModel.h similarity index 100% rename from examples/src/AdcModel.h rename to examples/temp_sensor/src/AdcModel.h diff --git a/examples/src/AdcTemperatureSensor.c b/examples/temp_sensor/src/AdcTemperatureSensor.c similarity index 100% rename from examples/src/AdcTemperatureSensor.c rename to examples/temp_sensor/src/AdcTemperatureSensor.c diff --git a/examples/src/AdcTemperatureSensor.h b/examples/temp_sensor/src/AdcTemperatureSensor.h similarity index 100% rename from examples/src/AdcTemperatureSensor.h rename to examples/temp_sensor/src/AdcTemperatureSensor.h diff --git a/examples/src/Executor.c b/examples/temp_sensor/src/Executor.c similarity index 100% rename from examples/src/Executor.c rename to examples/temp_sensor/src/Executor.c diff --git a/examples/src/Executor.h b/examples/temp_sensor/src/Executor.h similarity index 100% rename from examples/src/Executor.h rename to examples/temp_sensor/src/Executor.h diff --git a/examples/src/IntrinsicsWrapper.c b/examples/temp_sensor/src/IntrinsicsWrapper.c similarity index 100% rename from examples/src/IntrinsicsWrapper.c rename to examples/temp_sensor/src/IntrinsicsWrapper.c diff --git a/examples/src/IntrinsicsWrapper.h b/examples/temp_sensor/src/IntrinsicsWrapper.h similarity index 100% rename from examples/src/IntrinsicsWrapper.h rename to examples/temp_sensor/src/IntrinsicsWrapper.h diff --git a/examples/src/Main.c b/examples/temp_sensor/src/Main.c similarity index 100% rename from examples/src/Main.c rename to examples/temp_sensor/src/Main.c diff --git a/examples/src/Main.h b/examples/temp_sensor/src/Main.h similarity index 100% rename from examples/src/Main.h rename to examples/temp_sensor/src/Main.h diff --git a/examples/src/Model.c b/examples/temp_sensor/src/Model.c similarity index 100% rename from examples/src/Model.c rename to examples/temp_sensor/src/Model.c diff --git a/examples/src/Model.h b/examples/temp_sensor/src/Model.h similarity index 100% rename from examples/src/Model.h rename to examples/temp_sensor/src/Model.h diff --git a/examples/src/ModelConfig.h b/examples/temp_sensor/src/ModelConfig.h similarity index 100% rename from examples/src/ModelConfig.h rename to examples/temp_sensor/src/ModelConfig.h diff --git a/examples/src/TaskScheduler.c b/examples/temp_sensor/src/TaskScheduler.c similarity index 100% rename from examples/src/TaskScheduler.c rename to examples/temp_sensor/src/TaskScheduler.c diff --git a/examples/src/TaskScheduler.h b/examples/temp_sensor/src/TaskScheduler.h similarity index 100% rename from examples/src/TaskScheduler.h rename to examples/temp_sensor/src/TaskScheduler.h diff --git a/examples/src/TemperatureCalculator.c b/examples/temp_sensor/src/TemperatureCalculator.c similarity index 100% rename from examples/src/TemperatureCalculator.c rename to examples/temp_sensor/src/TemperatureCalculator.c diff --git a/examples/src/TemperatureCalculator.h b/examples/temp_sensor/src/TemperatureCalculator.h similarity index 100% rename from examples/src/TemperatureCalculator.h rename to examples/temp_sensor/src/TemperatureCalculator.h diff --git a/examples/src/TemperatureFilter.c b/examples/temp_sensor/src/TemperatureFilter.c similarity index 100% rename from examples/src/TemperatureFilter.c rename to examples/temp_sensor/src/TemperatureFilter.c diff --git a/examples/src/TemperatureFilter.h b/examples/temp_sensor/src/TemperatureFilter.h similarity index 100% rename from examples/src/TemperatureFilter.h rename to examples/temp_sensor/src/TemperatureFilter.h diff --git a/examples/src/TimerConductor.c b/examples/temp_sensor/src/TimerConductor.c similarity index 100% rename from examples/src/TimerConductor.c rename to examples/temp_sensor/src/TimerConductor.c diff --git a/examples/src/TimerConductor.h b/examples/temp_sensor/src/TimerConductor.h similarity index 100% rename from examples/src/TimerConductor.h rename to examples/temp_sensor/src/TimerConductor.h diff --git a/examples/src/TimerConfigurator.c b/examples/temp_sensor/src/TimerConfigurator.c similarity index 100% rename from examples/src/TimerConfigurator.c rename to examples/temp_sensor/src/TimerConfigurator.c diff --git a/examples/src/TimerConfigurator.h b/examples/temp_sensor/src/TimerConfigurator.h similarity index 100% rename from examples/src/TimerConfigurator.h rename to examples/temp_sensor/src/TimerConfigurator.h diff --git a/examples/src/TimerHardware.c b/examples/temp_sensor/src/TimerHardware.c similarity index 100% rename from examples/src/TimerHardware.c rename to examples/temp_sensor/src/TimerHardware.c diff --git a/examples/src/TimerHardware.h b/examples/temp_sensor/src/TimerHardware.h similarity index 100% rename from examples/src/TimerHardware.h rename to examples/temp_sensor/src/TimerHardware.h diff --git a/examples/src/TimerInterruptConfigurator.c b/examples/temp_sensor/src/TimerInterruptConfigurator.c similarity index 100% rename from examples/src/TimerInterruptConfigurator.c rename to examples/temp_sensor/src/TimerInterruptConfigurator.c diff --git a/examples/src/TimerInterruptConfigurator.h b/examples/temp_sensor/src/TimerInterruptConfigurator.h similarity index 100% rename from examples/src/TimerInterruptConfigurator.h rename to examples/temp_sensor/src/TimerInterruptConfigurator.h diff --git a/examples/src/TimerInterruptHandler.c b/examples/temp_sensor/src/TimerInterruptHandler.c similarity index 100% rename from examples/src/TimerInterruptHandler.c rename to examples/temp_sensor/src/TimerInterruptHandler.c diff --git a/examples/src/TimerInterruptHandler.h b/examples/temp_sensor/src/TimerInterruptHandler.h similarity index 100% rename from examples/src/TimerInterruptHandler.h rename to examples/temp_sensor/src/TimerInterruptHandler.h diff --git a/examples/src/TimerModel.c b/examples/temp_sensor/src/TimerModel.c similarity index 100% rename from examples/src/TimerModel.c rename to examples/temp_sensor/src/TimerModel.c diff --git a/examples/src/TimerModel.h b/examples/temp_sensor/src/TimerModel.h similarity index 100% rename from examples/src/TimerModel.h rename to examples/temp_sensor/src/TimerModel.h diff --git a/examples/src/Types.h b/examples/temp_sensor/src/Types.h similarity index 100% rename from examples/src/Types.h rename to examples/temp_sensor/src/Types.h diff --git a/examples/src/UsartBaudRateRegisterCalculator.c b/examples/temp_sensor/src/UsartBaudRateRegisterCalculator.c similarity index 100% rename from examples/src/UsartBaudRateRegisterCalculator.c rename to examples/temp_sensor/src/UsartBaudRateRegisterCalculator.c diff --git a/examples/src/UsartBaudRateRegisterCalculator.h b/examples/temp_sensor/src/UsartBaudRateRegisterCalculator.h similarity index 100% rename from examples/src/UsartBaudRateRegisterCalculator.h rename to examples/temp_sensor/src/UsartBaudRateRegisterCalculator.h diff --git a/examples/src/UsartConductor.c b/examples/temp_sensor/src/UsartConductor.c similarity index 100% rename from examples/src/UsartConductor.c rename to examples/temp_sensor/src/UsartConductor.c diff --git a/examples/src/UsartConductor.h b/examples/temp_sensor/src/UsartConductor.h similarity index 100% rename from examples/src/UsartConductor.h rename to examples/temp_sensor/src/UsartConductor.h diff --git a/examples/src/UsartConfigurator.c b/examples/temp_sensor/src/UsartConfigurator.c similarity index 100% rename from examples/src/UsartConfigurator.c rename to examples/temp_sensor/src/UsartConfigurator.c diff --git a/examples/src/UsartConfigurator.h b/examples/temp_sensor/src/UsartConfigurator.h similarity index 100% rename from examples/src/UsartConfigurator.h rename to examples/temp_sensor/src/UsartConfigurator.h diff --git a/examples/src/UsartHardware.c b/examples/temp_sensor/src/UsartHardware.c similarity index 100% rename from examples/src/UsartHardware.c rename to examples/temp_sensor/src/UsartHardware.c diff --git a/examples/src/UsartHardware.h b/examples/temp_sensor/src/UsartHardware.h similarity index 100% rename from examples/src/UsartHardware.h rename to examples/temp_sensor/src/UsartHardware.h diff --git a/examples/src/UsartModel.c b/examples/temp_sensor/src/UsartModel.c similarity index 100% rename from examples/src/UsartModel.c rename to examples/temp_sensor/src/UsartModel.c diff --git a/examples/src/UsartModel.h b/examples/temp_sensor/src/UsartModel.h similarity index 100% rename from examples/src/UsartModel.h rename to examples/temp_sensor/src/UsartModel.h diff --git a/examples/src/UsartPutChar.c b/examples/temp_sensor/src/UsartPutChar.c similarity index 100% rename from examples/src/UsartPutChar.c rename to examples/temp_sensor/src/UsartPutChar.c diff --git a/examples/src/UsartPutChar.h b/examples/temp_sensor/src/UsartPutChar.h similarity index 100% rename from examples/src/UsartPutChar.h rename to examples/temp_sensor/src/UsartPutChar.h diff --git a/examples/src/UsartTransmitBufferStatus.c b/examples/temp_sensor/src/UsartTransmitBufferStatus.c similarity index 100% rename from examples/src/UsartTransmitBufferStatus.c rename to examples/temp_sensor/src/UsartTransmitBufferStatus.c diff --git a/examples/src/UsartTransmitBufferStatus.h b/examples/temp_sensor/src/UsartTransmitBufferStatus.h similarity index 100% rename from examples/src/UsartTransmitBufferStatus.h rename to examples/temp_sensor/src/UsartTransmitBufferStatus.h diff --git a/examples/test/TestAdcConductor.c b/examples/temp_sensor/test/TestAdcConductor.c similarity index 100% rename from examples/test/TestAdcConductor.c rename to examples/temp_sensor/test/TestAdcConductor.c diff --git a/examples/test/TestAdcHardware.c b/examples/temp_sensor/test/TestAdcHardware.c similarity index 100% rename from examples/test/TestAdcHardware.c rename to examples/temp_sensor/test/TestAdcHardware.c diff --git a/examples/test/TestAdcHardwareConfigurator.c b/examples/temp_sensor/test/TestAdcHardwareConfigurator.c similarity index 100% rename from examples/test/TestAdcHardwareConfigurator.c rename to examples/temp_sensor/test/TestAdcHardwareConfigurator.c diff --git a/examples/test/TestAdcModel.c b/examples/temp_sensor/test/TestAdcModel.c similarity index 100% rename from examples/test/TestAdcModel.c rename to examples/temp_sensor/test/TestAdcModel.c diff --git a/examples/test/TestAdcTemperatureSensor.c b/examples/temp_sensor/test/TestAdcTemperatureSensor.c similarity index 100% rename from examples/test/TestAdcTemperatureSensor.c rename to examples/temp_sensor/test/TestAdcTemperatureSensor.c diff --git a/examples/test/TestExecutor.c b/examples/temp_sensor/test/TestExecutor.c similarity index 100% rename from examples/test/TestExecutor.c rename to examples/temp_sensor/test/TestExecutor.c diff --git a/examples/test/TestMain.c b/examples/temp_sensor/test/TestMain.c similarity index 100% rename from examples/test/TestMain.c rename to examples/temp_sensor/test/TestMain.c diff --git a/examples/test/TestModel.c b/examples/temp_sensor/test/TestModel.c similarity index 100% rename from examples/test/TestModel.c rename to examples/temp_sensor/test/TestModel.c diff --git a/examples/test/TestTaskScheduler.c b/examples/temp_sensor/test/TestTaskScheduler.c similarity index 100% rename from examples/test/TestTaskScheduler.c rename to examples/temp_sensor/test/TestTaskScheduler.c diff --git a/examples/test/TestTemperatureCalculator.c b/examples/temp_sensor/test/TestTemperatureCalculator.c similarity index 100% rename from examples/test/TestTemperatureCalculator.c rename to examples/temp_sensor/test/TestTemperatureCalculator.c diff --git a/examples/test/TestTemperatureFilter.c b/examples/temp_sensor/test/TestTemperatureFilter.c similarity index 100% rename from examples/test/TestTemperatureFilter.c rename to examples/temp_sensor/test/TestTemperatureFilter.c diff --git a/examples/test/TestTimerConductor.c b/examples/temp_sensor/test/TestTimerConductor.c similarity index 100% rename from examples/test/TestTimerConductor.c rename to examples/temp_sensor/test/TestTimerConductor.c diff --git a/examples/test/TestTimerConfigurator.c b/examples/temp_sensor/test/TestTimerConfigurator.c similarity index 100% rename from examples/test/TestTimerConfigurator.c rename to examples/temp_sensor/test/TestTimerConfigurator.c diff --git a/examples/test/TestTimerHardware.c b/examples/temp_sensor/test/TestTimerHardware.c similarity index 100% rename from examples/test/TestTimerHardware.c rename to examples/temp_sensor/test/TestTimerHardware.c diff --git a/examples/test/TestTimerInterruptConfigurator.c b/examples/temp_sensor/test/TestTimerInterruptConfigurator.c similarity index 100% rename from examples/test/TestTimerInterruptConfigurator.c rename to examples/temp_sensor/test/TestTimerInterruptConfigurator.c diff --git a/examples/test/TestTimerInterruptHandler.c b/examples/temp_sensor/test/TestTimerInterruptHandler.c similarity index 100% rename from examples/test/TestTimerInterruptHandler.c rename to examples/temp_sensor/test/TestTimerInterruptHandler.c diff --git a/examples/test/TestTimerModel.c b/examples/temp_sensor/test/TestTimerModel.c similarity index 100% rename from examples/test/TestTimerModel.c rename to examples/temp_sensor/test/TestTimerModel.c diff --git a/examples/test/TestUsartBaudRateRegisterCalculator.c b/examples/temp_sensor/test/TestUsartBaudRateRegisterCalculator.c similarity index 100% rename from examples/test/TestUsartBaudRateRegisterCalculator.c rename to examples/temp_sensor/test/TestUsartBaudRateRegisterCalculator.c diff --git a/examples/test/TestUsartConductor.c b/examples/temp_sensor/test/TestUsartConductor.c similarity index 100% rename from examples/test/TestUsartConductor.c rename to examples/temp_sensor/test/TestUsartConductor.c diff --git a/examples/test/TestUsartConfigurator.c b/examples/temp_sensor/test/TestUsartConfigurator.c similarity index 100% rename from examples/test/TestUsartConfigurator.c rename to examples/temp_sensor/test/TestUsartConfigurator.c diff --git a/examples/test/TestUsartHardware.c b/examples/temp_sensor/test/TestUsartHardware.c similarity index 100% rename from examples/test/TestUsartHardware.c rename to examples/temp_sensor/test/TestUsartHardware.c diff --git a/examples/test/TestUsartModel.c b/examples/temp_sensor/test/TestUsartModel.c similarity index 100% rename from examples/test/TestUsartModel.c rename to examples/temp_sensor/test/TestUsartModel.c diff --git a/examples/test/TestUsartPutChar.c b/examples/temp_sensor/test/TestUsartPutChar.c similarity index 100% rename from examples/test/TestUsartPutChar.c rename to examples/temp_sensor/test/TestUsartPutChar.c diff --git a/examples/test/TestUsartTransmitBufferStatus.c b/examples/temp_sensor/test/TestUsartTransmitBufferStatus.c similarity index 100% rename from examples/test/TestUsartTransmitBufferStatus.c rename to examples/temp_sensor/test/TestUsartTransmitBufferStatus.c diff --git a/scripts/create_makefile.rb b/scripts/create_makefile.rb new file mode 100644 index 0000000..90fa06d --- /dev/null +++ b/scripts/create_makefile.rb @@ -0,0 +1,162 @@ +require 'cmock' +require 'fileutils' +abs_root = FileUtils.pwd +cmock_dir = File.expand_path(ENV.fetch('CMOCK_DIR', File.join(abs_root, '..', '..'))) +puts "___CMOCK: #{cmock_dir}" +unity_dir = File.join(cmock_dir, 'vendor', 'unity') +puts "___UNITY: #{unity_dir}" +require "#{unity_dir}/auto/generate_test_runner" + +src_dir = ENV.fetch('SRC_DIR', './src') +test_dir = ENV.fetch('TEST_DIR', './test') +unity_src = File.join(unity_dir, 'src') +cmock_src = File.join(cmock_dir, 'src') +build_dir = ENV.fetch('BUILD_DIR', './build') +test_build_dir = ENV.fetch('TEST_BUILD_DIR', File.join(build_dir, 'test')) +obj_dir = File.join(test_build_dir, 'obj') +unity_obj = File.join(obj_dir, 'unity.o') +cmock_obj = File.join(obj_dir, 'cmock.o') +runners_dir = File.join(test_build_dir, 'runners') +mocks_dir = File.join(test_build_dir, 'mocks') +test_bin_dir = test_build_dir +mock_prefix = ENV.fetch('TEST_MOCK_PREFIX', 'mock_') +test_makefile = ENV.fetch('TEST_MAKEFILE', File.join(test_build_dir, 'MakefileTestSupport')) +MOCK_MATCHER = /#{mock_prefix}[A-Za-z_][A-Za-z0-9_\-\.]+/ + +[test_build_dir, obj_dir, runners_dir, mocks_dir, test_bin_dir].each do |dir| + FileUtils.mkdir_p dir +end + +all_headers_to_mock = [] + +File.open(test_makefile, "w") do |mkfile| + + # Define make variables + mkfile.puts "CC ?= gcc" + mkfile.puts "BUILD_DIR ?= ./build" + mkfile.puts "SRC_DIR ?= ./src" + mkfile.puts "TEST_DIR ?= ./test" + mkfile.puts "CMOCK_DIR ?= #{cmock_dir}" + mkfile.puts "UNITY_DIR ?= #{unity_dir}" + mkfile.puts "TEST_BUILD_DIR ?= ${BUILD_DIR}/test" + mkfile.puts "TEST_MAKEFILE = ${TEST_BUILD_DIR}/MakefileTestSupport" + mkfile.puts "OBJ ?= ${BUILD_DIR}/obj" + mkfile.puts "OBJ_DIR = ${OBJ}" + mkfile.puts "" + + # Build Unity + mkfile.puts "#{unity_obj}: #{unity_src}/unity.c" + mkfile.puts "\t${CC} -o $@ -c $< -I #{unity_src}" + mkfile.puts "" + + # Build CMock + mkfile.puts "#{cmock_obj}: #{cmock_src}/cmock.c" + mkfile.puts "\t${CC} -o $@ -c $< -I #{unity_src} -I #{cmock_src}" + mkfile.puts "" + + test_sources = Dir["#{test_dir}/**/test_*.c"] + test_targets = [] + generator = UnityTestRunnerGenerator.new + all_headers = Dir["#{src_dir}/**/*.h"] + + test_sources.each do |test| + module_name = File.basename(test, '.c') + src_module_name = module_name.sub(/^test_/, '') + test_obj = File.join(obj_dir, "#{module_name}.o") + runner_source = File.join(runners_dir, "runner_#{module_name}.c") + runner_obj = File.join(obj_dir, "runner_#{module_name}.o") + test_bin = File.join(test_bin_dir, module_name) + test_results = File.join(test_bin_dir, module_name + '.result') + + # Build main project modules, with TEST defined + module_src = File.join(src_dir, "#{src_module_name}.c") + module_obj = File.join(obj_dir, "#{src_module_name}.o") + mkfile.puts "#{module_obj}: #{module_src}" + mkfile.puts "\t${CC} -o $@ -c $< -DTEST -I #{src_dir}" + mkfile.puts "" + + # Create runners + mkfile.puts "#{runner_source}: #{test}" + mkfile.puts "\t@UNITY_DIR=${UNITY_DIR} ruby ${CMOCK_DIR}/scripts/create_runner.rb #{test} #{runner_source}" + mkfile.puts "" + + # Build runner + mkfile.puts "#{runner_obj}: #{runner_source}" + mkfile.puts "\t${CC} -o $@ -c $< -I #{src_dir} -I #{mocks_dir} -I #{unity_src} -I #{cmock_src}" + mkfile.puts "" + + # Collect mocks to generate + cfg = { + src: test, + includes: generator.find_includes(File.readlines(test).join('')) + } + system_mocks = cfg[:includes][:system].select{|name| name =~ MOCK_MATCHER} + raise "Mocking of system headers is not yet supported!" if !system_mocks.empty? + local_mocks = cfg[:includes][:local].select{|name| name =~ MOCK_MATCHER} + module_names_to_mock = local_mocks.map{|name| "#{name.sub(/#{mock_prefix}/,'')}.h"} + headers_to_mock = [] + module_names_to_mock.each do |name| + header_to_mock = nil + all_headers.each do |header| + if (header =~ /[\/\\]?#{name}$/) + header_to_mock = header + break + end + end + raise "Module header '#{name}' not found to mock!" unless header_to_mock + headers_to_mock << header_to_mock + end + all_headers_to_mock += headers_to_mock + mock_objs = headers_to_mock.map do |hdr| + mock_name = mock_prefix + File.basename(hdr, '.h') + File.join(mocks_dir, mock_name + '.o') + end + all_headers_to_mock.uniq! + + # Build test suite + mkfile.puts "#{test_obj}: #{test} #{module_obj} #{mock_objs.join(' ')}" + mkfile.puts "\t${CC} -o $@ -c $< -I #{src_dir} -I #{unity_src} -I #{cmock_src} -I #{mocks_dir}" + mkfile.puts "" + + # Build test suite executable + test_objs = "#{test_obj} #{runner_obj} #{module_obj} #{mock_objs.join(' ')} #{unity_obj} #{cmock_obj}" + mkfile.puts "#{test_bin}: #{test_objs}" + mkfile.puts "\t${CC} -o $@ #{test_objs}" + mkfile.puts "" + + # Run test suite and generate report + mkfile.puts "#{test_results}: #{test_bin}" + mkfile.puts "\t#{test_bin} &> #{test_results}" + mkfile.puts "" + + test_targets << test_bin + end + + # Generate and build mocks + all_headers_to_mock.each do |hdr| + mock_name = mock_prefix + File.basename(hdr, '.h') + mock_header = File.join(mocks_dir, mock_name + '.h') + mock_src = File.join(mocks_dir, mock_name + '.c') + mock_obj = File.join(mocks_dir, mock_name + '.o') + + mkfile.puts "#{mock_src}: #{hdr}" + mkfile.puts "\t@CMOCK_DIR=${CMOCK_DIR} ruby ${CMOCK_DIR}/scripts/create_mock.rb #{hdr}" + mkfile.puts "" + + mkfile.puts "#{mock_obj}: #{mock_src} #{mock_header}" + mkfile.puts "\t${CC} -o $@ -c $< -I #{mocks_dir} -I #{src_dir} -I #{unity_src} -I #{cmock_src}" + mkfile.puts "" + end + + # Create test summary task + mkfile.puts "test_summary:" + mkfile.puts "\t@UNITY_DIR=${UNITY_DIR} ruby ${CMOCK_DIR}/scripts/test_summary.rb" + mkfile.puts "" + mkfile.puts ".PHONY: test_summary" + mkfile.puts "" + + # Create target to run all tests + mkfile.puts "test: #{test_targets.map{|t| t + '.result'}.join(' ')} test_summary" + mkfile.puts "" + +end diff --git a/scripts/create_mock.rb b/scripts/create_mock.rb new file mode 100644 index 0000000..b5d6505 --- /dev/null +++ b/scripts/create_mock.rb @@ -0,0 +1,8 @@ +require 'cmock' + +raise "Header file to mock must be specified!" unless ARGV.length >= 1 + +mock_out = ENV.fetch('MOCK_OUT', './build/test/mocks') +mock_prefix = ENV.fetch('MOCK_PREFIX', 'mock_') +cmock = CMock.new(plugins: [:ignore, :return_thru_ptr], mock_prefix: 'mock_', mock_path: mock_out) +cmock.setup_mocks(ARGV[0]) diff --git a/scripts/create_runner.rb b/scripts/create_runner.rb new file mode 100644 index 0000000..4b2ad83 --- /dev/null +++ b/scripts/create_runner.rb @@ -0,0 +1,30 @@ +if ($0 == __FILE__) + + #make sure there is at least one parameter left (the input file) + if ARGV.length < 2 + puts ["\nusage: ruby #{__FILE__} input_test_file (output)", + "", + " input_test_file - this is the C file you want to create a runner for", + " output - this is the name of the runner file to generate", + " defaults to (input_test_file)_Runner", + ].join("\n") + exit 1 + end + + require 'cmock' + require 'fileutils' + src_dir = ENV.fetch('SRC_DIR', './src') + test_dir = ENV.fetch('TEST_DIR', './test') + runners_dir = ENV.fetch('RUNNERS_DIR', './build/runners') + puts "UNITY_DIR_CREATE_RUNNER: #{ENV['UNITY_DIR']}" + unity_dir = ENV['UNITY_DIR'] + require "#{unity_dir}/auto/generate_test_runner" + + test = ARGV[0] + runner = ARGV[1] + + generator = UnityTestRunnerGenerator.new + + generator.run(test, runner) + +end diff --git a/scripts/test_summary.rb b/scripts/test_summary.rb new file mode 100644 index 0000000..bfed3c6 --- /dev/null +++ b/scripts/test_summary.rb @@ -0,0 +1,13 @@ +require 'cmock' +require 'fileutils' +require "#{ENV['UNITY_DIR']}/auto/unity_test_summary.rb" + +build_dir = ENV.fetch('BUILD_DIR', './build') +test_build_dir = ENV.fetch('TEST_BUILD_DIR', File.join(build_dir, 'test')) + +parser = UnityTestSummary.new +results = Dir["#{test_build_dir}/*.result"] +parser.set_targets(results) +parser.run +puts parser.report +exit(parser.failures)