Add coverage export for tests.

pull/1664/head
Elliott Sales de Andrade 7 years ago
parent b595cda4ed
commit 17328e7019
  1. 17
      .coveragerc
  2. 1
      .gitignore
  3. 7
      docs/markdown/Release-notes-for-0.41.0.md
  4. 29
      run_tests.py

@ -0,0 +1,17 @@
[run]
branch = True
concurrency =
multiprocessing
data_file = .coverage/coverage
parallel = True
source =
meson.py
mesonbuild/
mesonconf.py
mesonintrospect.py
mesonrewriter.py
mesontest.py
run_cross_test.py
run_project_tests.py
run_tests.py
run_unittests.py

1
.gitignore vendored

@ -5,6 +5,7 @@
/.idea
__pycache__
.coverage
/install dir
/work area

@ -52,7 +52,12 @@ installed. This is roughly equivalent to the `distcheck` target in
other build systems. Currently this only works for projects using Git
and only with the Ninja backend.
## Support for passing arguments to Rust compiler
Targets for building rust now take a `rust_args` keyword.
## Code coverage export for tests
Code coverage can be generated for tests by passing the `--cov` argument to
the `run_tests.py` test runner. Note, since multiple processes are used,
coverage must be combined before producing a report (`coverage3 combine`.)

@ -19,6 +19,7 @@ import sys
import time
import shutil
import subprocess
import tempfile
import platform
from mesonbuild import mesonlib
from mesonbuild.environment import detect_ninja
@ -125,6 +126,13 @@ class FakeEnvironment(object):
return False
if __name__ == '__main__':
# Enable coverage early...
enable_coverage = '--cov' in sys.argv
if enable_coverage:
os.makedirs('.coverage', exist_ok=True)
sys.argv.remove('--cov')
import coverage
coverage.process_startup()
returncode = 0
# Iterate over list in reverse order to find the last --backend arg
backend = Backend.ninja
@ -164,10 +172,19 @@ if __name__ == '__main__':
# Can't pass arguments to unit tests, so set the backend to use in the environment
env = os.environ.copy()
env['MESON_UNIT_TEST_BACKEND'] = backend.name
returncode += subprocess.call([sys.executable, 'run_unittests.py', '-v'] + units, env=env)
# Ubuntu packages do not have a binary without -6 suffix.
if should_run_linux_cross_tests():
print('Running cross compilation tests.\n')
returncode += subprocess.call([sys.executable, 'run_cross_test.py', 'cross/ubuntu-armhf.txt'])
returncode += subprocess.call([sys.executable, 'run_project_tests.py'] + sys.argv[1:])
with tempfile.TemporaryDirectory() as td:
# Enable coverage on all subsequent processes.
if enable_coverage:
with open(os.path.join(td, 'usercustomize.py'), 'w') as f:
f.write('import coverage\n'
'coverage.process_startup()\n')
env['COVERAGE_PROCESS_START'] = '.coveragerc'
env['PYTHONPATH'] = os.pathsep.join([td] + env.get('PYTHONPATH', []))
returncode += subprocess.call([sys.executable, 'run_unittests.py', '-v'] + units, env=env)
# Ubuntu packages do not have a binary without -6 suffix.
if should_run_linux_cross_tests():
print('Running cross compilation tests.\n')
returncode += subprocess.call([sys.executable, 'run_cross_test.py', 'cross/ubuntu-armhf.txt'], env=env)
returncode += subprocess.call([sys.executable, 'run_project_tests.py'] + sys.argv[1:], env=env)
sys.exit(returncode)

Loading…
Cancel
Save