patman: test_util: Handle nonexistent tests while loading tests
It's possible to request a specific test to run when trying to run a python tool's tests. If we request a nonexistent test, the unittest loaders generate a fake test that reports this as an error. However, we get these fake tests even when the test exists, because test_util can load tests from multiple places one by one and the test we want only exists in one. The test_util helpers currently remove these fake tests when printing test results, but that's more of a workaround than a proper solution. Instead, don't even try to load the missing tests. Signed-off-by: Alper Nebi Yasak <alpernebiyasak@gmail.com> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
		
							parent
							
								
									6474aaa1d1
								
							
						
					
					
						commit
						ce12c47b92
					
				| 
						 | 
					@ -110,19 +110,6 @@ def report_result(toolname:str, test_name: str, result: unittest.TestResult):
 | 
				
			||||||
        test_name: Name of test that was run, or None for all
 | 
					        test_name: Name of test that was run, or None for all
 | 
				
			||||||
        result: A unittest.TestResult object containing the results
 | 
					        result: A unittest.TestResult object containing the results
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
    # Remove errors which just indicate a missing test. Since Python v3.5 If an
 | 
					 | 
				
			||||||
    # ImportError or AttributeError occurs while traversing name then a
 | 
					 | 
				
			||||||
    # synthetic test that raises that error when run will be returned. These
 | 
					 | 
				
			||||||
    # errors are included in the errors accumulated by result.errors.
 | 
					 | 
				
			||||||
    if test_name:
 | 
					 | 
				
			||||||
        errors = []
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        for test, err in result.errors:
 | 
					 | 
				
			||||||
            if ("has no attribute '%s'" % test_name) not in err:
 | 
					 | 
				
			||||||
                errors.append((test, err))
 | 
					 | 
				
			||||||
            result.testsRun -= 1
 | 
					 | 
				
			||||||
        result.errors = errors
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    print(result)
 | 
					    print(result)
 | 
				
			||||||
    for test, err in result.errors:
 | 
					    for test, err in result.errors:
 | 
				
			||||||
        print(test.id(), err)
 | 
					        print(test.id(), err)
 | 
				
			||||||
| 
						 | 
					@ -184,10 +171,12 @@ def run_test_suites(result, debug, verbosity, test_preserve_dirs, processes,
 | 
				
			||||||
                preserve_outdirs=test_preserve_dirs and test_name is not None,
 | 
					                preserve_outdirs=test_preserve_dirs and test_name is not None,
 | 
				
			||||||
                toolpath=toolpath, verbosity=verbosity)
 | 
					                toolpath=toolpath, verbosity=verbosity)
 | 
				
			||||||
        if test_name:
 | 
					        if test_name:
 | 
				
			||||||
            try:
 | 
					            # Since Python v3.5 If an ImportError or AttributeError occurs
 | 
				
			||||||
 | 
					            # while traversing a name then a synthetic test that raises that
 | 
				
			||||||
 | 
					            # error when run will be returned. Check that the requested test
 | 
				
			||||||
 | 
					            # exists, otherwise these errors are included in the results.
 | 
				
			||||||
 | 
					            if test_name in loader.getTestCaseNames(module):
 | 
				
			||||||
                suite.addTests(loader.loadTestsFromName(test_name, module))
 | 
					                suite.addTests(loader.loadTestsFromName(test_name, module))
 | 
				
			||||||
            except AttributeError:
 | 
					 | 
				
			||||||
                continue
 | 
					 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
            suite.addTests(loader.loadTestsFromTestCase(module))
 | 
					            suite.addTests(loader.loadTestsFromTestCase(module))
 | 
				
			||||||
    if use_concurrent and processes != 1:
 | 
					    if use_concurrent and processes != 1:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue