def test_simple_filters():
     # Set up filters
     import filters
     extension = '.c'
     extension_filter = filters.create_filter_by_extension(extension)
     pattern = '.*\.h$'
     pattern_filter = filters.create_filter_by_regular_expression(pattern)
     minimum_size = 9
     minimum_size_filter = filters.create_filter_by_minimum_size(minimum_size)
     text_pattern = '.*\.txt'
     text_filter = filters.create_filter_by_regular_expression(text_pattern)
     rest_filter = filters.create_filter_by_regular_expression('.*')
     filters_directories = [
                              ([extension_filter], 'c', None)
                             ,([pattern_filter], 'h', None)
                             # AND filters by combining them in a list
                             ,([minimum_size_filter,text_filter],
                                     'large_files', None)
                             # OR filters by making several entries with the
                             # same directory
                             ,([text_filter], 'others', None)
                             ,([rest_filter], 'others', None)
                           ]
     # Apply filters to test files
     def all_files_in_directory(directory):
         for root, _, files in os.walk(directory):
             for file_name in files:
                 file_path = os.path.join(root, file_name)
                 yield file_path
     targets = all_files_in_directory('test_data')
     root = '.'
     apply_filters(filters_directories, targets, root)
 def test_combined_filters():
     # Set up filters
     import filters
     minimum_size = 9
     minimum_size_filter = filters.create_filter_by_minimum_size(minimum_size)
     text_pattern = '.*\.txt'
     text_filter = filters.create_filter_by_regular_expression(text_pattern)
     extension = '.c'
     extension_filter = filters.create_filter_by_extension(extension)
     combined_and_filter = filters.combined_filters(lambda x, y: x and y
                                                    ,[minimum_size_filter
                                                    ,text_filter])
     combined_or_filter = filters.combined_filters(lambda x, y: x or y
                                                   ,[text_filter
                                                   ,extension_filter])
     filters_directories = [
                              ([combined_and_filter], 'large_files', None)
                             ,([combined_or_filter], 'others', None)
                           ]
     # Apply filters to test files
     def all_files_in_directory(directory):
         for root, _, files in os.walk(directory):
             for file_name in files:
                 file_path = os.path.join(root, file_name)
                 yield file_path
     targets = all_files_in_directory('test_data')
     root = '.'
     apply_filters(filters_directories, targets, root)