Files
go-sip/scripts/test_coverage.py
T

42 lines
1.5 KiB
Python

#!/usr/bin/env python3
"""Coverage must measure application packages, not local replacement modules."""
import os
from pathlib import Path
import subprocess
import tempfile
import unittest
class CoverageBoundaryTests(unittest.TestCase):
def test_explicit_project_packages_and_generated_code_exclusion(self):
with tempfile.TemporaryDirectory() as directory:
root = Path(directory)
go = root / 'go'
go.write_text('''#!/bin/sh
set -eu
case "$1" in
list) printf 'example/app/internal/ai\\nexample/app/gen/agent\\n' ;;
test)
printf '%s\\n' "$@" > "$COMMANDS"
printf 'mode: set\\nexample/app/internal/ai/a.go:1.1,2.2 1 1\\nexample/app/gen/agent/a.go:1.1,2.2 1 0\\n' > "$COVER_PROFILE"
;;
tool) exit 0 ;;
*) exit 1 ;;
esac
''')
go.chmod(0o700)
env = dict(os.environ, PATH=str(root) + os.pathsep + os.environ['PATH'],
COMMANDS=str(root / 'commands'), COVER_PROFILE=str(root / 'all.out'),
COVER_BUSINESS_PROFILE=str(root / 'business.out'))
subprocess.run(['sh', str(Path(__file__).with_name('coverage.sh'))], env=env, check=True)
args = (root / 'commands').read_text()
self.assertIn('-coverpkg=example/app/internal/ai,example/app/gen/agent', args)
self.assertNotIn('-coverpkg=./...', args)
report = (root / 'business.out').read_text()
self.assertIn('/internal/ai/', report)
self.assertNotIn('/gen/', report)
if __name__ == '__main__':
unittest.main()