import io import sys import unittest from unittest.mock import MagicMock, patch import run_coverage class RunCoverageTest(unittest.TestCase): def test_run_command_does_not_use_shell(self): completed = MagicMock(returncode=0) with patch('run_coverage.subprocess.run', return_value=completed) as run, \ patch('sys.stdout', io.StringIO()): ok = run_coverage.run_command( [sys.executable, '-m', 'coverage', 'report'], 'Generating console coverage report', ) self.assertTrue(ok) run.assert_called_once_with( [sys.executable, '-m', 'coverage', 'report'], shell=False, ) def test_build_coverage_commands_uses_current_python(self): commands = run_coverage.build_coverage_commands() self.assertEqual( [sys.executable, '-m', 'coverage', 'run', '-m', 'unittest', 'discover', '-s', 'tests', '-p', 'test_*.py'], commands[0][0], ) self.assertEqual('Running tests with coverage', commands[0][1]) self.assertEqual([sys.executable, '-m', 'coverage', 'report'], commands[1][0]) self.assertEqual([sys.executable, '-m', 'coverage', 'html'], commands[2][0]) self.assertEqual([sys.executable, '-m', 'coverage', 'xml'], commands[3][0]) self.assertEqual('Generating XML coverage report (for CI/CD)', commands[3][1]) if __name__ == '__main__': unittest.main()