# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 # For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt """Tests for FileReporters""" from __future__ import annotations import sys from coverage.plugin import FileReporter from coverage.python import PythonFileReporter from tests.coveragetest import CoverageTest, UsingModulesMixin from tests.helpers import os_sep # pylint: disable=import-error # Unable to import 'aa' (No module named aa) class FileReporterTest(UsingModulesMixin, CoverageTest): """Tests for FileReporter classes.""" run_in_temp_dir = False def test_filenames(self) -> None: acu = PythonFileReporter("aa/afile.py") bcu = PythonFileReporter("aa/bb/bfile.py") ccu = PythonFileReporter("aa/bb/cc/cfile.py") assert acu.relative_filename() == "aa/afile.py" assert bcu.relative_filename() == "aa/bb/bfile.py" assert ccu.relative_filename() == "aa/bb/cc/cfile.py" assert acu.source() == "# afile.py\n" assert bcu.source() == "# bfile.py\n" assert ccu.source() == "# cfile.py\n" def test_odd_filenames(self) -> None: acu = PythonFileReporter("aa/afile.odd.py") bcu = PythonFileReporter("aa/bb/bfile.odd.py") b2cu = PythonFileReporter("aa/bb.odd/bfile.py") assert acu.relative_filename() == "aa/afile.odd.py" assert bcu.relative_filename() == "aa/bb/bfile.odd.py" assert b2cu.relative_filename() == "aa/bb.odd/bfile.py" assert acu.source() == "# afile.odd.py\n" assert bcu.source() == "# bfile.odd.py\n" assert b2cu.source() == "# bfile.py\n" def test_modules(self) -> None: import aa import aa.bb import aa.bb.cc acu = PythonFileReporter(aa) bcu = PythonFileReporter(aa.bb) ccu = PythonFileReporter(aa.bb.cc) assert acu.relative_filename() == os_sep("aa/__init__.py") assert bcu.relative_filename() == os_sep("aa/bb/__init__.py") assert ccu.relative_filename() == os_sep("aa/bb/cc/__init__.py") assert acu.source() == "# aa\n" assert bcu.source() == "# bb\n" assert ccu.source() == "" # yes, empty def test_module_files(self) -> None: import aa.afile import aa.bb.bfile import aa.bb.cc.cfile acu = PythonFileReporter(aa.afile) bcu = PythonFileReporter(aa.bb.bfile) ccu = PythonFileReporter(aa.bb.cc.cfile) assert acu.relative_filename() == os_sep("aa/afile.py") assert bcu.relative_filename() == os_sep("aa/bb/bfile.py") assert ccu.relative_filename() == os_sep("aa/bb/cc/cfile.py") assert acu.source() == "# afile.py\n" assert bcu.source() == "# bfile.py\n" assert ccu.source() == "# cfile.py\n" def test_comparison(self) -> None: acu = FileReporter("aa/afile.py") acu2 = FileReporter("aa/afile.py") zcu = FileReporter("aa/zfile.py") bcu = FileReporter("aa/bb/bfile.py") assert acu == acu2 and acu <= acu2 and acu >= acu2 # pylint: disable=chained-comparison assert acu < zcu and acu <= zcu and acu != zcu assert zcu > acu and zcu >= acu and zcu != acu assert acu < bcu and acu <= bcu and acu != bcu assert bcu > acu and bcu >= acu and bcu != acu def test_zipfile(self) -> None: sys.path.append("tests/zip1.zip") # Test that we can get files out of zipfiles, and read their source files. # The zip1 module is installed by an action in igor.py. import zip1 import zip1.zip1 # Verify that we really imported from an zipfile. If we did, then the # __file__ won't be an actual file, because one of the "directories" # in the path is actually the zip file. self.assert_doesnt_exist(zip1.__file__) z1 = PythonFileReporter(zip1) z1z1 = PythonFileReporter(zip1.zip1) assert z1.source() == "" assert "# My zip file!" in z1z1.source().splitlines()