133 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
		
		
			
		
	
	
			133 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
|   | require 'rubygems' | ||
|  | require 'rake' # for adding ext() method to string | ||
|  | 
 | ||
|  | class FileFinder | ||
|  | 
 | ||
|  |   constructor :configurator, :file_finder_helper, :cacheinator, :file_path_utils, :file_wrapper, :yaml_wrapper | ||
|  | 
 | ||
|  |   def prepare_search_sources | ||
|  |     @all_test_source_and_header_file_collection =  | ||
|  |       @configurator.collection_all_tests + | ||
|  |       @configurator.collection_all_source +  | ||
|  |       @configurator.collection_all_headers | ||
|  |   end | ||
|  | 
 | ||
|  | 
 | ||
|  |   def find_header_file(mock_file) | ||
|  |     header = File.basename(mock_file).sub(/#{@configurator.cmock_mock_prefix}/, '').ext(@configurator.extension_header) | ||
|  | 
 | ||
|  |     found_path = @file_finder_helper.find_file_in_collection(header, @configurator.collection_all_headers, :error) | ||
|  | 
 | ||
|  |     return found_path | ||
|  |   end | ||
|  | 
 | ||
|  | 
 | ||
|  |   def find_header_input_for_mock_file(mock_file) | ||
|  |     found_path = find_header_file(mock_file) | ||
|  |     mock_input = found_path | ||
|  |      | ||
|  |     if (@configurator.project_use_test_preprocessor) | ||
|  |       mock_input = @cacheinator.diff_cached_test_file( @file_path_utils.form_preprocessed_file_filepath( found_path ) ) | ||
|  |     end | ||
|  |      | ||
|  |     return mock_input | ||
|  |   end | ||
|  |    | ||
|  | 
 | ||
|  |   def find_source_from_test(test, complain) | ||
|  |     test_prefix  = @configurator.project_test_file_prefix | ||
|  |     source_paths = @configurator.collection_all_source | ||
|  |      | ||
|  |     source = File.basename(test).sub(/#{test_prefix}/, '') | ||
|  | 
 | ||
|  |     # we don't blow up if a test file has no corresponding source file | ||
|  |     return @file_finder_helper.find_file_in_collection(source, source_paths, complain) | ||
|  |   end | ||
|  | 
 | ||
|  | 
 | ||
|  |   def find_test_from_runner_path(runner_path) | ||
|  |     extension_source = @configurator.extension_source | ||
|  | 
 | ||
|  |     test_file = File.basename(runner_path).sub(/#{@configurator.test_runner_file_suffix}#{'\\'+extension_source}/, extension_source) | ||
|  |      | ||
|  |     found_path = @file_finder_helper.find_file_in_collection(test_file, @configurator.collection_all_tests, :error) | ||
|  | 
 | ||
|  |     return found_path | ||
|  |   end | ||
|  | 
 | ||
|  |    | ||
|  |   def find_test_input_for_runner_file(runner_path) | ||
|  |     found_path   = find_test_from_runner_path(runner_path) | ||
|  |     runner_input = found_path | ||
|  |      | ||
|  |     if (@configurator.project_use_test_preprocessor) | ||
|  |       runner_input = @cacheinator.diff_cached_test_file( @file_path_utils.form_preprocessed_file_filepath( found_path ) ) | ||
|  |     end | ||
|  |      | ||
|  |     return runner_input | ||
|  |   end | ||
|  |    | ||
|  | 
 | ||
|  |   def find_test_from_file_path(file_path) | ||
|  |     test_file = File.basename(file_path).ext(@configurator.extension_source) | ||
|  |      | ||
|  |     found_path = @file_finder_helper.find_file_in_collection(test_file, @configurator.collection_all_tests, :error) | ||
|  |      | ||
|  |     return found_path     | ||
|  |   end | ||
|  | 
 | ||
|  | 
 | ||
|  |   def find_test_or_source_or_header_file(file_path) | ||
|  |     file = File.basename(file_path) | ||
|  |     return @file_finder_helper.find_file_in_collection(file, @all_test_source_and_header_file_collection, :error) | ||
|  |   end | ||
|  |    | ||
|  |    | ||
|  |   def find_compilation_input_file(file_path, complain=:error) | ||
|  |     found_file = nil | ||
|  |      | ||
|  |     source_file = File.basename(file_path).ext(@configurator.extension_source) | ||
|  | 
 | ||
|  |     # We only collect files that already exist when we start up. | ||
|  |     # FileLists can produce undesired results for dynamically generated files depending on when they're accessed. | ||
|  |     # So collect mocks and runners separately and right now. | ||
|  |     if (source_file =~ /#{@configurator.test_runner_file_suffix}/) | ||
|  |       found_file =  | ||
|  |         @file_finder_helper.find_file_in_collection( | ||
|  |           source_file, | ||
|  |           @file_wrapper.directory_listing( File.join(@configurator.project_test_runners_path, '*') ), | ||
|  |           complain) | ||
|  |            | ||
|  |     elsif (@configurator.project_use_mocks and (source_file =~ /#{@configurator.cmock_mock_prefix}/)) | ||
|  |       found_file =  | ||
|  |         @file_finder_helper.find_file_in_collection( | ||
|  |           source_file, | ||
|  |           @file_wrapper.directory_listing( File.join(@configurator.cmock_mock_path, '*') ), | ||
|  |           complain) | ||
|  | 
 | ||
|  |     else | ||
|  |       found_file =  | ||
|  |         @file_finder_helper.find_file_in_collection( | ||
|  |           source_file, | ||
|  |           @configurator.collection_all_existing_compilation_input, | ||
|  |           complain) | ||
|  |     end | ||
|  | 
 | ||
|  |     return found_file | ||
|  |   end | ||
|  | 
 | ||
|  |    | ||
|  |   def find_source_file(file_path, complain) | ||
|  |     source_file = File.basename(file_path).ext(@configurator.extension_source) | ||
|  |     return @file_finder_helper.find_file_in_collection(source_file, @configurator.collection_all_source, complain) | ||
|  |   end | ||
|  | 
 | ||
|  |    | ||
|  |   def find_assembly_file(file_path) | ||
|  |     assembly_file = File.basename(file_path).ext(@configurator.extension_assembly) | ||
|  |     return @file_finder_helper.find_file_in_collection(assembly_file, @configurator.collection_all_assembly, :error) | ||
|  |   end | ||
|  |      | ||
|  | end | ||
|  | 
 |