98 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
		
		
			
		
	
	
			98 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
|   | require 'constants' | ||
|  | 
 | ||
|  | 
 | ||
|  | class TestInvoker | ||
|  | 
 | ||
|  |   attr_reader :sources, :tests, :mocks | ||
|  | 
 | ||
|  |   constructor :configurator, | ||
|  |               :test_invoker_helper, | ||
|  |               :plugin_manager, | ||
|  |               :streaminator, | ||
|  |               :preprocessinator, | ||
|  |               :task_invoker, | ||
|  |               :dependinator, | ||
|  |               :project_config_manager, | ||
|  |               :build_invoker_utils, | ||
|  |               :file_path_utils, | ||
|  |               :file_wrapper | ||
|  | 
 | ||
|  |   def setup | ||
|  |     @sources = [] | ||
|  |     @tests   = [] | ||
|  |     @mocks   = [] | ||
|  |   end | ||
|  |    | ||
|  |   def setup_and_invoke(tests, context=TEST_SYM, options={:force_run => true}) | ||
|  |    | ||
|  |     @tests = tests | ||
|  | 
 | ||
|  |     @project_config_manager.process_test_config_change | ||
|  |    | ||
|  |     @tests.each do |test| | ||
|  |       # announce beginning of test run | ||
|  |       header = "Test '#{File.basename(test)}'" | ||
|  |       @streaminator.stdout_puts("\n\n#{header}\n#{'-' * header.length}") | ||
|  | 
 | ||
|  |       begin | ||
|  |         @plugin_manager.pre_test | ||
|  |          | ||
|  |         # collect up test fixture pieces & parts | ||
|  |         runner       = @file_path_utils.form_runner_filepath_from_test( test ) | ||
|  |         mock_list    = @preprocessinator.preprocess_test_and_invoke_test_mocks( test ) | ||
|  |         sources      = @test_invoker_helper.extract_sources( test ) | ||
|  |         extras       = @configurator.collection_test_fixture_extra_link_objects | ||
|  |         core         = [test] + mock_list + sources | ||
|  |         objects      = @file_path_utils.form_test_build_objects_filelist( [runner] + core + extras ) | ||
|  |         results_pass = @file_path_utils.form_pass_results_filepath( test ) | ||
|  |         results_fail = @file_path_utils.form_fail_results_filepath( test ) | ||
|  |          | ||
|  |         # clean results files so we have a missing file with which to kick off rake's dependency rules | ||
|  |         @test_invoker_helper.clean_results( {:pass => results_pass, :fail => results_fail}, options ) | ||
|  | 
 | ||
|  |         # load up auxiliary dependencies so deep changes cause rebuilding appropriately | ||
|  |         @test_invoker_helper.process_deep_dependencies( core ) do |dependencies_list|  | ||
|  |           @dependinator.load_test_object_deep_dependencies( dependencies_list ) | ||
|  |         end | ||
|  | 
 | ||
|  |         # tell rake to create test runner if needed | ||
|  |         @task_invoker.invoke_test_runner( runner ) | ||
|  | 
 | ||
|  |         # enhance object file dependencies to capture externalities influencing regeneration | ||
|  |         @dependinator.enhance_test_build_object_dependencies( objects ) | ||
|  | 
 | ||
|  |         # associate object files with executable | ||
|  |         @dependinator.setup_test_executable_dependencies( test, objects ) | ||
|  | 
 | ||
|  |         # 3, 2, 1... launch | ||
|  |         @task_invoker.invoke_test_results( results_pass )         | ||
|  |       rescue => e | ||
|  |         @build_invoker_utils.process_exception( e, context ) | ||
|  |       ensure | ||
|  |         @plugin_manager.post_test         | ||
|  |       end | ||
|  |        | ||
|  |       # store away what's been processed | ||
|  |       @mocks.concat( mock_list ) | ||
|  |       @sources.concat( sources ) | ||
|  |     end | ||
|  | 
 | ||
|  |     # post-process collected mock list | ||
|  |     @mocks.uniq! | ||
|  |      | ||
|  |     # post-process collected sources list | ||
|  |     @sources.uniq! | ||
|  |   end | ||
|  | 
 | ||
|  | 
 | ||
|  |   def refresh_deep_dependencies | ||
|  |     @file_wrapper.rm_f(  | ||
|  |       @file_wrapper.directory_listing(  | ||
|  |         File.join( @configurator.project_test_dependencies_path, '*' + @configurator.extension_dependencies ) ) ) | ||
|  | 
 | ||
|  |     @test_invoker_helper.process_deep_dependencies(  | ||
|  |       @configurator.collection_all_tests + @configurator.collection_all_source ) | ||
|  |   end | ||
|  | 
 | ||
|  | end |