--- /dev/null
+from gcov import gcov_from_env
+
+import pytest
+
+
+@pytest.fixture(scope='function', autouse=True)
+def gcov():
+ return gcov_from_env()
+
+
+def test_basics(gcov):
+ files = gcov['files']
+ assert len(files) == 1
+ functions = files[0]['functions']
+ assert len(functions) == 3
+
+
+def test_lines(gcov):
+ lines = gcov['files'][0]['lines']
+ linesdict = {}
+ for line in lines:
+ linesdict[int(line['line_number'])] = line
+
+ assert linesdict[21]['function_name'] == 'main'
+ assert linesdict[15]['function_name'] == '_ZZ4mainENKUlvE_clEv'
+ assert (linesdict[12]['function_name']
+ == '_ZZZ4mainENKUlvE_clEvENKUlvE_clEv')
return $failed
}
+# Call by dg-final to run gcov --json-format which produces a JSON file
+# that is later analysed by a pytest Python script.
+# We pass filename of a test via GCOV_PATH environment variable.
+
+proc run-gcov-pytest { args } {
+ global GCOV
+ global srcdir subdir
+ # Extract the test file name from the arguments.
+ set testcase [lindex $args 0]
+
+ verbose "Running $GCOV $testcase in $srcdir/$subdir" 2
+ set testcase [remote_download host $testcase]
+ set result [remote_exec host $GCOV "$testcase -i"]
+
+ set result [remote_exec host "pytest -m pytest --version"]
+ set status [lindex $result 0]
+ if { $status != 0 } then {
+ unresolved "could not find Python interpreter and (or) pytest module for $testcase"
+ return
+ }
+
+ set pytest_script [lindex $args 1]
+ setenv GCOV_PATH $testcase
+ verbose "pytest_script: $pytest_script" 2
+ spawn -noecho python3 -m pytest --color=no -rA -s --tb=no $srcdir/$subdir/$pytest_script
+
+ set prefix "\[^\r\n\]*"
+ expect {
+ -re "FAILED($prefix)\[^\r\n\]+\r\n" {
+ fail "$expect_out(1,string)"
+ exp_continue
+ }
+ -re "ERROR($prefix)\[^\r\n\]+\r\n" {
+ fail "$expect_out(1,string)"
+ exp_continue
+ }
+ -re "PASSED($prefix)\[^\r\n\]+\r\n" {
+ pass "$expect_out(1,string)"
+ exp_continue
+ }
+ }
+
+ clean-gcov $testcase
+}
+
# Called by dg-final to run gcov and analyze the results.
#
# ARGS consists of the optional strings "branches" and/or "calls",