Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to remove certain directories from lcov code coverage report?

Tags:

bash

shell

lcov

I'm not too strong with using lcov and shell scripting so it's a learning process for me. I understand the basics of making a code coverage report but I don't know the line of code to exclude certain directories. In a shell executable file I wrote the following code:

    #!/bin/sh
    ROOT_DIR=$1
    DEST_DIR=$2
    TARGET_DIR=$3
    TARGET=$4

   #init lcov
   lcov -c -i -d $TARGET_DIR/.. -o $TARGET_DIR/cov_init.info

    #run unit test executable
    "$DEST_DIR/$TARGET"

     #capture coverage after running executable
     lcov -c -d $TARGET_DIR/.. -o $TARGET_DIR/cov_test.info

     #I added this in-generate delta of coverage
     lcov -a $TARGET_DIR/cov_init.info -a $TARGET_DIR/cov_test.info -o $TARGET_DIR/cov.info

  # I added this in- Excludes some third party code
                    lcov --remove $TARGET_DIR/cov.info '/opt/*' '/usr/*' '$ROOT_DIR/Common?ExternalLibraries/*'

  #I added this in-generate report
            genhtml $TARGET_DIR/cov.info --ignore-errors source --output-directory $DEST_DIR/CoverageReport/$TARGET
            xdg-open $DEST_DIR/CoverageReport/$TARGET/index.html &

I'm pretty sure I need to exclude the directories before I capture the coverage after running executable.

like image 211
I_love_coding_93 Avatar asked Jul 18 '16 13:07

I_love_coding_93


People also ask

How do I view LCOV?

You just need to install the Dart and lcov-info packages. Then you load your project folder and press Ctrl+Alt+c , coverage will be displayed with a summary of the whole projects coverage and also with specific line highlighting.


1 Answers

lcov has an option --remove to ignore coverage data for specified files.

--remove tracefile pattern

Remove data from tracefile.

Use this switch if you want to remove coverage data for a par- ticular set of files from a tracefile. Additional command line parameters will be interpreted as shell wildcard patterns (note that they may need to be escaped accordingly to prevent the shell from expanding them first). Every file entry in tracefile which matches at least one of those patterns will be removed.

The result of the remove operation will be written to stdout or the tracefile specified with -o.

Only one of -z, -c, -a, -e, -r, -l, --diff or --summary may be specified at a time.

You can do something like; quoting from the hyper-link below

lcov --remove /tmp/libreoffice_total.info -o /tmp/libreoffice_filtered.info \
    '/usr/include/*' \
    '/usr/lib/*' \
    '/usr/local/src/libreoffice/*/UnpackedTarball/*' \
    '/usr/local/src/libreoffice/workdir/*' \
    '/usr/local/src/libreoffice/instdir/*' \
    '/usr/local/src/libreoffice/external/*' \

Refer to this page for more documentation.

like image 77
Inian Avatar answered Oct 12 '22 02:10

Inian