42 lines
1.5 KiB
Python
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()
|