/coverage

Code coverage library for Nim

Primary LanguageNimMIT LicenseMIT

coverage Build Status Coverage Status

Code coverage library for Nim. Inspired by Andreas Rumpf talk at OSCON.

Usage

import coverage
import tables

proc myProcToCover(x: int) {.cov.} = # Add cov pragma to proc definition to enable code coverage.
  if x == 0:
    echo "x is 0"
  else:
    echo "x is ", x

# Run your program or unittest
myProcToCover(1)

# At the end of the program, display coverage results:
echo "BY FILE: "
for fname, perc in coveragePercentageByFile():
  echo fname, " ", perc
# Outputs: BY FILE: {test.nim: 0.5}

echo "TOTAL: ", totalCoverage()
# Outputs: TOTAL: 0.5

# Finer grained information may be accessed with coverageInfoByFile proc.

Adding coverage to a unittest file

import coverage, tables, unittest

# Import your code and run the tests as usual
# suite "test": ...

echo "Coverage by file: "
for fname, num in coveragePercentageByFile().pairs():
  echo fname, " ", num

echo "Total coverage: ", totalCoverage()

Add "import coverage" and the top of your sources and add "{.cov.}" to every proc.

Generating a report

export NIM_COVERAGE_DIR=coverage_results
mkdir -p "$NIM_COVERAGE_DIR"

nim c -r your_tests.nim
nimcoverage genreport

Notes

  • Code coverage is disabled if release is defined. Define enableCodeCoverage option to keep it enabled in release mode.

Travic CI + Coveralls integration

If you're using Travis CI and Coveralls, you can upload coverage results right at the end of your program:

sendCoverageResultsToCoveralls()