- add ceedling/cmock/unity as testing framework and support
- unified makefile project for the whole repos - new separate project for tests
This commit is contained in:
		
							
								
								
									
										164
									
								
								tests/vendor/ceedling/lib/generator.rb
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										164
									
								
								tests/vendor/ceedling/lib/generator.rb
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,164 @@ | ||||
| require 'constants' | ||||
|  | ||||
|  | ||||
| class Generator | ||||
|  | ||||
|   constructor :configurator, | ||||
|               :generator_helper, | ||||
|               :preprocessinator, | ||||
|               :cmock_builder, | ||||
|               :generator_test_runner, | ||||
|               :generator_test_results, | ||||
|               :flaginator, | ||||
|               :test_includes_extractor, | ||||
|               :tool_executor, | ||||
|               :file_finder, | ||||
|               :file_path_utils, | ||||
|               :streaminator, | ||||
|               :plugin_manager, | ||||
|               :file_wrapper | ||||
|  | ||||
|  | ||||
|   def generate_shallow_includes_list(context, file) | ||||
|     @preprocessinator.preprocess_shallow_includes(file) | ||||
|   end | ||||
|  | ||||
|   def generate_preprocessed_file(context, file) | ||||
|     @streaminator.stdout_puts("Preprocessing #{File.basename(file)}...", Verbosity::NORMAL) | ||||
|     @preprocessinator.preprocess_file(file) | ||||
|   end | ||||
|  | ||||
|   def generate_dependencies_file(tool, context, source, object, dependencies) | ||||
|     @streaminator.stdout_puts("Generating dependencies for #{File.basename(source)}...", Verbosity::NORMAL) | ||||
|      | ||||
|     command =  | ||||
|       @tool_executor.build_command_line( | ||||
|         tool, | ||||
|         source, | ||||
|         dependencies, | ||||
|         object) | ||||
|      | ||||
|     @tool_executor.exec( command[:line], command[:options] ) | ||||
|   end | ||||
|  | ||||
|   def generate_mock(context, header_filepath) | ||||
|     arg_hash = {:header_file => header_filepath, :context => context} | ||||
|     @plugin_manager.pre_mock_generate( arg_hash ) | ||||
|      | ||||
|     begin | ||||
|       @cmock_builder.cmock.setup_mocks( arg_hash[:header_file] ) | ||||
|     rescue | ||||
|       raise | ||||
|     ensure | ||||
|       @plugin_manager.post_mock_generate( arg_hash ) | ||||
|     end | ||||
|   end | ||||
|  | ||||
|   # test_filepath may be either preprocessed test file or original test file | ||||
|   def generate_test_runner(context, test_filepath, runner_filepath) | ||||
|     arg_hash = {:context => context, :test_file => test_filepath, :runner_file => runner_filepath} | ||||
|     @plugin_manager.pre_runner_generate(arg_hash) | ||||
|      | ||||
|     # collect info we need | ||||
|     module_name = File.basename(arg_hash[:test_file]) | ||||
|     test_cases  = @generator_test_runner.find_test_cases( @file_finder.find_test_from_runner_path(runner_filepath) ) | ||||
|     mock_list   = @test_includes_extractor.lookup_raw_mock_list(arg_hash[:test_file]) | ||||
|  | ||||
|     @streaminator.stdout_puts("Generating runner for #{module_name}...", Verbosity::NORMAL) | ||||
|      | ||||
|     # build runner file | ||||
|     begin | ||||
|       @generator_test_runner.generate(module_name, runner_filepath, test_cases, mock_list) | ||||
|     rescue | ||||
|       raise | ||||
|     ensure | ||||
|       @plugin_manager.post_runner_generate(arg_hash)     | ||||
|     end | ||||
|   end | ||||
|  | ||||
|   def generate_object_file(tool, context, source, object, list='')     | ||||
|     shell_result = {} | ||||
|     arg_hash = {:tool => tool, :context => context, :source => source, :object => object, :list => list} | ||||
|     @plugin_manager.pre_compile_execute(arg_hash) | ||||
|  | ||||
|     @streaminator.stdout_puts("Compiling #{File.basename(arg_hash[:source])}...", Verbosity::NORMAL) | ||||
|     command = | ||||
|       @tool_executor.build_command_line( arg_hash[:tool], | ||||
|                                          arg_hash[:source], | ||||
|                                          arg_hash[:object], | ||||
|                                          arg_hash[:list], | ||||
|                                          @flaginator.flag_down( OPERATION_COMPILE_SYM, context, source ) ) | ||||
|  | ||||
|     begin | ||||
|       shell_result = @tool_executor.exec( command[:line], command[:options] ) | ||||
|     rescue ShellExecutionException => ex | ||||
|       shell_result = ex.shell_result | ||||
|       raise '' | ||||
|     ensure | ||||
|       arg_hash[:shell_result] = shell_result | ||||
|       @plugin_manager.post_compile_execute(arg_hash) | ||||
|     end | ||||
|   end | ||||
|  | ||||
|   def generate_executable_file(tool, context, objects, executable, map='') | ||||
|     shell_result = {} | ||||
|     arg_hash = {:tool => tool, :context => context, :objects => objects, :executable => executable, :map => map} | ||||
|     @plugin_manager.pre_link_execute(arg_hash) | ||||
|      | ||||
|     @streaminator.stdout_puts("Linking #{File.basename(arg_hash[:executable])}...", Verbosity::NORMAL) | ||||
|     command = | ||||
|       @tool_executor.build_command_line( arg_hash[:tool], | ||||
|                                          arg_hash[:objects], | ||||
|                                          arg_hash[:executable], | ||||
|                                          arg_hash[:map], | ||||
|                                          @flaginator.flag_down( OPERATION_LINK_SYM, context, executable ) ) | ||||
|      | ||||
|     begin | ||||
|       shell_result = @tool_executor.exec( command[:line], command[:options] ) | ||||
|     rescue ShellExecutionException => ex | ||||
|       notice =    "\n" + | ||||
|                   "NOTICE: If the linker reports missing symbols, the following may be to blame:\n" + | ||||
|                   "  1. Test lacks #include statements corresponding to needed source files.\n" + | ||||
|                   "  2. Project search paths do not contain source files corresponding to #include statements in the test.\n" | ||||
|        | ||||
|       if (@configurator.project_use_mocks) | ||||
|         notice += "  3. Test does not #include needed mocks.\n\n" | ||||
|       else | ||||
|         notice += "\n" | ||||
|       end | ||||
|        | ||||
|       @streaminator.stderr_puts(notice, Verbosity::COMPLAIN) | ||||
|       shell_result = ex.shell_result | ||||
|       raise '' | ||||
|     ensure | ||||
|       arg_hash[:shell_result] = shell_result | ||||
|       @plugin_manager.post_link_execute(arg_hash) | ||||
|     end | ||||
|   end | ||||
|  | ||||
|   def generate_test_results(tool, context, executable, result) | ||||
|     arg_hash = {:tool => tool, :context => context, :executable => executable, :result_file => result} | ||||
|     @plugin_manager.pre_test_fixture_execute(arg_hash) | ||||
|      | ||||
|     @streaminator.stdout_puts("Running #{File.basename(arg_hash[:executable])}...", Verbosity::NORMAL) | ||||
|      | ||||
|     # Unity's exit code is equivalent to the number of failed tests, so we tell @tool_executor not to fail out if there are failures | ||||
|     # so that we can run all tests and collect all results | ||||
|     command = @tool_executor.build_command_line(arg_hash[:tool], arg_hash[:executable]) | ||||
|     command[:options][:boom] = false | ||||
|     shell_result = @tool_executor.exec( command[:line], command[:options] ) | ||||
|      | ||||
|     @generator_helper.test_results_error_handler(executable, shell_result) | ||||
|      | ||||
|     processed = @generator_test_results.process_and_write_results( shell_result, | ||||
|                                                                    arg_hash[:result_file], | ||||
|                                                                    @file_finder.find_test_from_file_path(arg_hash[:executable]) ) | ||||
|      | ||||
|     arg_hash[:result_file]  = processed[:result_file] | ||||
|     arg_hash[:results]      = processed[:results] | ||||
|     arg_hash[:shell_result] = shell_result # for raw output display if no plugins for formatted display | ||||
|      | ||||
|     @plugin_manager.post_test_fixture_execute(arg_hash) | ||||
|   end | ||||
|    | ||||
| end | ||||
		Reference in New Issue
	
	Block a user
	 hathach
					hathach