70 lines
3.1 KiB
CMake
70 lines
3.1 KiB
CMake
cmake_minimum_required( VERSION 3.13 )
|
|
set( BINARY_DIR ${CMAKE_BINARY_DIR} )
|
|
|
|
# Reset coverage counters.
|
|
execute_process( COMMAND lcov --directory ${CMAKE_BINARY_DIR}
|
|
--base-directory ${CMAKE_BINARY_DIR}
|
|
--zerocounters )
|
|
|
|
# Create directory for results.
|
|
execute_process( COMMAND mkdir -p ${CMAKE_BINARY_DIR}/coverage )
|
|
|
|
# Generate "baseline" coverage data with zero coverage for every instrumented
|
|
# line. This is later combined with the coverage data from test run to ensure
|
|
# that the percentage of total lines covered is correct even when not all source
|
|
# code files were loaded during the test.
|
|
execute_process( COMMAND lcov --directory ${CMAKE_BINARY_DIR}
|
|
--base-directory ${CMAKE_BINARY_DIR}
|
|
--initial
|
|
--capture
|
|
--rc lcov_branch_coverage=1
|
|
--rc genhtml_branch_coverage=1
|
|
--output-file=${CMAKE_BINARY_DIR}/base_coverage.info )
|
|
|
|
# Capture all the test binaries.
|
|
file( GLOB files "${CMAKE_BINARY_DIR}/bin/tests/*" )
|
|
|
|
# Create an empty report file.
|
|
set( REPORT_FILE ${CMAKE_BINARY_DIR}/utest_report.txt )
|
|
file( WRITE ${REPORT_FILE} "" )
|
|
|
|
# Execute all test binaries and capture all the output in the report file.
|
|
foreach( testname ${files} )
|
|
get_filename_component( test ${testname} NAME_WLE )
|
|
message( "Running ${testname}" )
|
|
execute_process( COMMAND ${testname} OUTPUT_FILE ${CMAKE_BINARY_DIR}/${test}_out.txt )
|
|
|
|
# Append the test run output to the report file.
|
|
file( READ ${CMAKE_BINARY_DIR}/${test}_out.txt CONTENTS )
|
|
file( APPEND ${REPORT_FILE} "${CONTENTS}" )
|
|
endforeach()
|
|
|
|
# Generate Junit style xml output.
|
|
execute_process( COMMAND ruby
|
|
${UNITY_DIR}/auto/parse_output.rb
|
|
-xml ${REPORT_FILE}
|
|
WORKING_DIRECTORY ${CMAKE_BINARY_DIR} )
|
|
|
|
# Capture coverage data after test run.
|
|
execute_process( COMMAND lcov --capture
|
|
--rc lcov_branch_coverage=1
|
|
--rc genhtml_branch_coverage=1
|
|
--base-directory ${CMAKE_BINARY_DIR}
|
|
--directory ${CMAKE_BINARY_DIR}
|
|
--output-file ${CMAKE_BINARY_DIR}/second_coverage.info )
|
|
|
|
# Combine baseline coverage data (zeros) with the coverage data from test run.
|
|
execute_process( COMMAND lcov --base-directory ${CMAKE_BINARY_DIR}
|
|
--directory ${CMAKE_BINARY_DIR}
|
|
--add-tracefile ${CMAKE_BINARY_DIR}/base_coverage.info
|
|
--add-tracefile ${CMAKE_BINARY_DIR}/second_coverage.info
|
|
--output-file ${CMAKE_BINARY_DIR}/coverage.info
|
|
--no-external
|
|
--rc lcov_branch_coverage=1 )
|
|
|
|
# Generate HTML Report.
|
|
execute_process( COMMAND genhtml --rc lcov_branch_coverage=1
|
|
--branch-coverage
|
|
--output-directory ${CMAKE_BINARY_DIR}/coverage
|
|
${CMAKE_BINARY_DIR}/coverage.info )
|