mirror of
				https://github.com/cuberite/polarssl.git
				synced 2025-11-04 04:32:24 -05:00 
			
		
		
		
	check_test_cases: move some functions into the logical class
With previous refactorings, some functions are now solely meant to be called from other functions in a particular class. Move them into this class. No behavior change. Signed-off-by: Gilles Peskine <Gilles.Peskine@arm.com>
This commit is contained in:
		
							parent
							
								
									78c45dbb0f
								
							
						
					
					
						commit
						6f6ff3346d
					
				@ -45,37 +45,6 @@ class Results:
 | 
				
			|||||||
                             .format(file_name, line_number, *args))
 | 
					                             .format(file_name, line_number, *args))
 | 
				
			||||||
            self.warnings += 1
 | 
					            self.warnings += 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def collect_test_directories():
 | 
					 | 
				
			||||||
    """Get the relative path for the TLS and Crypto test directories."""
 | 
					 | 
				
			||||||
    if os.path.isdir('tests'):
 | 
					 | 
				
			||||||
        tests_dir = 'tests'
 | 
					 | 
				
			||||||
    elif os.path.isdir('suites'):
 | 
					 | 
				
			||||||
        tests_dir = '.'
 | 
					 | 
				
			||||||
    elif os.path.isdir('../suites'):
 | 
					 | 
				
			||||||
        tests_dir = '..'
 | 
					 | 
				
			||||||
    directories = [tests_dir]
 | 
					 | 
				
			||||||
    return directories
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def check_description(results, seen, file_name, line_number, description):
 | 
					 | 
				
			||||||
    """Check test case descriptions for errors."""
 | 
					 | 
				
			||||||
    if description in seen:
 | 
					 | 
				
			||||||
        results.error(file_name, line_number,
 | 
					 | 
				
			||||||
                      'Duplicate description (also line {})',
 | 
					 | 
				
			||||||
                      seen[description])
 | 
					 | 
				
			||||||
        return
 | 
					 | 
				
			||||||
    if re.search(br'[\t;]', description):
 | 
					 | 
				
			||||||
        results.error(file_name, line_number,
 | 
					 | 
				
			||||||
                      'Forbidden character \'{}\' in description',
 | 
					 | 
				
			||||||
                      re.search(br'[\t;]', description).group(0).decode('ascii'))
 | 
					 | 
				
			||||||
    if re.search(br'[^ -~]', description):
 | 
					 | 
				
			||||||
        results.error(file_name, line_number,
 | 
					 | 
				
			||||||
                      'Non-ASCII character in description')
 | 
					 | 
				
			||||||
    if len(description) > 66:
 | 
					 | 
				
			||||||
        results.warning(file_name, line_number,
 | 
					 | 
				
			||||||
                        'Test description too long ({} > 66)',
 | 
					 | 
				
			||||||
                        len(description))
 | 
					 | 
				
			||||||
    seen[description] = line_number
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class TestDescriptionExplorer:
 | 
					class TestDescriptionExplorer:
 | 
				
			||||||
    """An iterator over test cases with descriptions.
 | 
					    """An iterator over test cases with descriptions.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -140,9 +109,21 @@ state may override this method.
 | 
				
			|||||||
                self.process_test_case(descriptions,
 | 
					                self.process_test_case(descriptions,
 | 
				
			||||||
                                       file_name, line_number, description)
 | 
					                                       file_name, line_number, description)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @staticmethod
 | 
				
			||||||
 | 
					    def collect_test_directories():
 | 
				
			||||||
 | 
					        """Get the relative path for the TLS and Crypto test directories."""
 | 
				
			||||||
 | 
					        if os.path.isdir('tests'):
 | 
				
			||||||
 | 
					            tests_dir = 'tests'
 | 
				
			||||||
 | 
					        elif os.path.isdir('suites'):
 | 
				
			||||||
 | 
					            tests_dir = '.'
 | 
				
			||||||
 | 
					        elif os.path.isdir('../suites'):
 | 
				
			||||||
 | 
					            tests_dir = '..'
 | 
				
			||||||
 | 
					        directories = [tests_dir]
 | 
				
			||||||
 | 
					        return directories
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def walk_all(self):
 | 
					    def walk_all(self):
 | 
				
			||||||
        """Iterate over all named test cases."""
 | 
					        """Iterate over all named test cases."""
 | 
				
			||||||
        test_directories = collect_test_directories()
 | 
					        test_directories = self.collect_test_directories()
 | 
				
			||||||
        for directory in test_directories:
 | 
					        for directory in test_directories:
 | 
				
			||||||
            for data_file_name in glob.glob(os.path.join(directory, 'suites',
 | 
					            for data_file_name in glob.glob(os.path.join(directory, 'suites',
 | 
				
			||||||
                                                         '*.data')):
 | 
					                                                         '*.data')):
 | 
				
			||||||
@ -162,12 +143,31 @@ class DescriptionChecker(TestDescriptionExplorer):
 | 
				
			|||||||
        self.results = results
 | 
					        self.results = results
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def per_file_state(self):
 | 
					    def per_file_state(self):
 | 
				
			||||||
 | 
					        """Dictionary mapping descriptions to their line number."""
 | 
				
			||||||
        return {}
 | 
					        return {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def process_test_case(self, per_file_state,
 | 
					    def process_test_case(self, per_file_state,
 | 
				
			||||||
                          file_name, line_number, description):
 | 
					                          file_name, line_number, description):
 | 
				
			||||||
        check_description(self.results, per_file_state,
 | 
					        """Check test case descriptions for errors."""
 | 
				
			||||||
                          file_name, line_number, description)
 | 
					        results = self.results
 | 
				
			||||||
 | 
					        seen = per_file_state
 | 
				
			||||||
 | 
					        if description in seen:
 | 
				
			||||||
 | 
					            results.error(file_name, line_number,
 | 
				
			||||||
 | 
					                          'Duplicate description (also line {})',
 | 
				
			||||||
 | 
					                          seen[description])
 | 
				
			||||||
 | 
					            return
 | 
				
			||||||
 | 
					        if re.search(br'[\t;]', description):
 | 
				
			||||||
 | 
					            results.error(file_name, line_number,
 | 
				
			||||||
 | 
					                          'Forbidden character \'{}\' in description',
 | 
				
			||||||
 | 
					                          re.search(br'[\t;]', description).group(0).decode('ascii'))
 | 
				
			||||||
 | 
					        if re.search(br'[^ -~]', description):
 | 
				
			||||||
 | 
					            results.error(file_name, line_number,
 | 
				
			||||||
 | 
					                          'Non-ASCII character in description')
 | 
				
			||||||
 | 
					        if len(description) > 66:
 | 
				
			||||||
 | 
					            results.warning(file_name, line_number,
 | 
				
			||||||
 | 
					                            'Test description too long ({} > 66)',
 | 
				
			||||||
 | 
					                            len(description))
 | 
				
			||||||
 | 
					        seen[description] = line_number
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def main():
 | 
					def main():
 | 
				
			||||||
    parser = argparse.ArgumentParser(description=__doc__)
 | 
					    parser = argparse.ArgumentParser(description=__doc__)
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user