def findTestExecutable(fileName, hints=[]): ''' Given a file name, look in the canonical places for a corresponding LongBow test file. ''' directoryName = os.path.dirname(fileName) if len(directoryName) == 0: directoryName = "." file = Language_C.Module(fileName) possibleTestFiles = list() for hint in hints: possibleTestFiles.append(hint + "/" + file.getExecutableName()) possibleTestFiles.append(hint + "/" + file.getTestExecutableName()) possibleTestFiles.append(directoryName + "/" + file.getExecutableName()) possibleTestFiles.append(directoryName + "/" + file.getTestExecutableName()) possibleTestFiles.append(directoryName + "/test/" + file.getTestExecutableName()) result = None for possibleTestFile in possibleTestFiles: if checkTestExecutable(possibleTestFile) == True: result = os.path.abspath(possibleTestFile) break return result
def removeTestSourceFiles(gcovSummary): deleteThese = filter(lambda entry: Language_C.Module(entry).isTestSourceName(), gcovSummary) for entry in deleteThese: del gcovSummary[entry] return gcovSummary
def computeSummary(filesAndTests, newGCovResults): ''' First, for each target file named in the gcov results, find the corresponding testedFile and report the maximum coverage. If the target file is not in any of the testedFiles { targetFileName : { "coverage": percent, "veracity" : "direct" / "indirect" } } ''' newGCovResults = filter(lambda entry: entry != None, newGCovResults) result = dict() for entry in newGCovResults: for testExecutableName in entry: testExecutableCSourceName = Language_C.Module( testExecutableName).getCSourceName() for testedFileName in entry[testExecutableName]["testedFiles"]: testedFile = entry[testExecutableName]["testedFiles"][ testedFileName] if Language_C.Module(testedFileName).getTestExecutableName( ) == os.path.basename(testExecutableName): result[testedFileName] = testedFile result[testedFileName]["direct"] = "direct" elif testedFileName in result: bestCoverage = selectGreaterCoverage( testedFile, result[testedFileName]) if result[testedFileName] != bestCoverage: result[testedFileName] = bestCoverage result[testedFileName]["direct"] = "indirect" else: result[testedFileName] = testedFile result[testedFileName]["direct"] = "indirect" return result