Example #1
0
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)
Example #2
0
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)
Example #3
0
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
Example #4
0
def removeTestSourceFiles(gcovSummary):
    deleteThese = filter(lambda entry: Language_C.Module(entry).isTestSourceName(), gcovSummary)

    for entry in deleteThese:
        del gcovSummary[entry]

    return gcovSummary
Example #5
0
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
Example #6
0
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
Example #7
0
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