test(coverage): add a test to check the sys.path under bzlmod (#1223)
Whilst it is for documentation purposes for maintainers it is also a
regression
test for #1045. Also add a test to ensure that the `html` module is not
shadowed when running under `coverage`.
Fixes #1196.
diff --git a/examples/bzlmod/test.py b/examples/bzlmod/test.py
index cdc1c89..a36c19d 100644
--- a/examples/bzlmod/test.py
+++ b/examples/bzlmod/test.py
@@ -12,12 +12,57 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+import os
+import pathlib
+import sys
import unittest
from lib import main
class ExampleTest(unittest.TestCase):
+ def test_coverage_doesnt_shadow_stdlib(self):
+ # When we try to import the html module
+ import html as html_stdlib
+
+ try:
+ import coverage.html as html_coverage
+ except ImportError:
+ self.skipTest("not running under coverage, skipping")
+
+ self.assertNotEqual(
+ html_stdlib,
+ html_coverage,
+ "'html' import should not be shadowed by coverage",
+ )
+
+ def test_coverage_sys_path(self):
+ all_paths = ",\n ".join(sys.path)
+
+ for i, path in enumerate(sys.path[1:-2]):
+ self.assertFalse(
+ "/coverage" in path,
+ f"Expected {i + 2}th '{path}' to not contain 'coverage.py' paths, "
+ f"sys.path has {len(sys.path)} items:\n {all_paths}",
+ )
+
+ first_item, last_item = sys.path[0], sys.path[-1]
+ self.assertFalse(
+ first_item.endswith("coverage"),
+ f"Expected the first item in sys.path '{first_item}' to not be related to coverage",
+ )
+ if os.environ.get("COVERAGE_MANIFEST"):
+ # we are running under the 'bazel coverage :test'
+ self.assertTrue(
+ "pypi__coverage_cp" in last_item,
+ f"Expected {last_item} to be related to coverage",
+ )
+ self.assertEqual(pathlib.Path(last_item).name, "coverage")
+ else:
+ self.assertFalse(
+ "coverage" in last_item, f"Expected coverage tooling to not be present"
+ )
+
def test_main(self):
self.assertEquals(
"""\