def executeGCovCommand(testExecutableFileName): currentDirectory = os.getcwd() targetDirectory = os.path.dirname(os.path.abspath(testExecutableFileName)) testExecutableBaseName = os.path.basename(testExecutableFileName) os.chdir(targetDirectory) objects = Language_C.findFiles("./", testExecutableBaseName + "*.o") if not objects: return objdir = os.path.dirname(objects[0]) gcdas = Language_C.findFiles("./", testExecutableBaseName + "*.gcda") if not gcdas: return gcda = gcdas[0] gcnos = Language_C.findFiles("./", testExecutableBaseName + "*.gcno") if not gcnos: return gcno = gcnos[0] proc = subprocess.Popen([ 'gcov', '-af', '-o=' + objdir, '-gcda=' + gcda, '-gcno=' + gcno, testExecutableBaseName ], stdout=subprocess.PIPE, stderr=subprocess.PIPE) os.chdir(currentDirectory) inputLines = map(lambda line: line.strip(), proc.stdout) return canonicalizeLines(inputLines)
def executeGCovCommand(testExecutableFileName): currentDirectory = os.getcwd() targetDirectory = os.path.dirname(os.path.abspath(testExecutableFileName)) testExecutableBaseName = os.path.basename(testExecutableFileName) os.chdir(targetDirectory) objects = Language_C.findFiles("./", testExecutableBaseName + "*.o") if not objects: return objdir = os.path.dirname(objects[0]) gcdas = Language_C.findFiles("./", testExecutableBaseName + "*.gcda") if not gcdas: return gcda = gcdas[0] gcnos = Language_C.findFiles("./", testExecutableBaseName + "*.gcno") if not gcnos: return gcno = gcnos[0] proc = subprocess.Popen( ["gcov", "-af", "-o=" + objdir, "-gcda=" + gcda, "-gcno=" + gcno, testExecutableBaseName], stdout=subprocess.PIPE, stderr=subprocess.PIPE, ) os.chdir(currentDirectory) inputLines = map(lambda line: line.strip(), proc.stdout) return canonicalizeLines(inputLines)
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 checkTestExecutable(executableFileName): result = False if not os.path.exists(executableFileName): return result path = os.path.dirname(executableFileName) pattern = os.path.basename(executableFileName) + '*.gcda' if not Language_C.findFiles(path, pattern): return result pattern = os.path.basename(executableFileName) + '*.gcno' if not Language_C.findFiles(path, pattern): return result result = True return result
def checkTestExecutable(executableFileName): result = False if not os.path.exists(executableFileName): return result path = os.path.dirname(executableFileName) pattern = os.path.basename(executableFileName)+'*.gcda' if not Language_C.findFiles(path, pattern): return result pattern = os.path.basename(executableFileName)+'*.gcno' if not Language_C.findFiles(path, pattern): return result result = True return result
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