aboutsummaryrefslogtreecommitdiff
path: root/examples/bzlmod/whl_mods/pip_whl_mods_test.py
diff options
context:
space:
mode:
Diffstat (limited to 'examples/bzlmod/whl_mods/pip_whl_mods_test.py')
-rw-r--r--examples/bzlmod/whl_mods/pip_whl_mods_test.py130
1 files changed, 130 insertions, 0 deletions
diff --git a/examples/bzlmod/whl_mods/pip_whl_mods_test.py b/examples/bzlmod/whl_mods/pip_whl_mods_test.py
new file mode 100644
index 0000000..c739b80
--- /dev/null
+++ b/examples/bzlmod/whl_mods/pip_whl_mods_test.py
@@ -0,0 +1,130 @@
+#!/usr/bin/env python3
+# Copyright 2023 The Bazel Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+import os
+import platform
+import subprocess
+import sys
+import unittest
+from pathlib import Path
+
+from python.runfiles import runfiles
+
+
+class PipWhlModsTest(unittest.TestCase):
+ maxDiff = None
+
+ def package_path(self) -> str:
+ return "rules_python~override~pip~"
+
+ def wheel_pkg_dir(self) -> str:
+ env = os.environ.get("WHEEL_PKG_DIR")
+ self.assertIsNotNone(env)
+ return env
+
+ def test_build_content_and_data(self):
+ r = runfiles.Create()
+ rpath = r.Rlocation(
+ "{}{}/generated_file.txt".format(
+ self.package_path(),
+ self.wheel_pkg_dir(),
+ ),
+ )
+ generated_file = Path(rpath)
+ self.assertTrue(generated_file.exists())
+
+ content = generated_file.read_text().rstrip()
+ self.assertEqual(content, "Hello world from build content file")
+
+ def test_copy_files(self):
+ r = runfiles.Create()
+ rpath = r.Rlocation(
+ "{}{}/copied_content/file.txt".format(
+ self.package_path(),
+ self.wheel_pkg_dir(),
+ )
+ )
+ copied_file = Path(rpath)
+ self.assertTrue(copied_file.exists())
+
+ content = copied_file.read_text().rstrip()
+ self.assertEqual(content, "Hello world from copied file")
+
+ def test_copy_executables(self):
+ r = runfiles.Create()
+ rpath = r.Rlocation(
+ "{}{}/copied_content/executable{}".format(
+ self.package_path(),
+ self.wheel_pkg_dir(),
+ ".exe" if platform.system() == "windows" else ".py",
+ )
+ )
+ executable = Path(rpath)
+ self.assertTrue(executable.exists())
+
+ proc = subprocess.run(
+ [sys.executable, str(executable)],
+ check=True,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE,
+ )
+ stdout = proc.stdout.decode("utf-8").strip()
+ self.assertEqual(stdout, "Hello world from copied executable")
+
+ def test_data_exclude_glob(self):
+ current_wheel_version = "0.40.0"
+
+ r = runfiles.Create()
+ dist_info_dir = "{}{}/site-packages/wheel-{}.dist-info".format(
+ self.package_path(),
+ self.wheel_pkg_dir(),
+ current_wheel_version,
+ )
+
+ # Note: `METADATA` is important as it's consumed by https://docs.python.org/3/library/importlib.metadata.html
+ # `METADATA` is expected to be there to show dist-info files are included in the runfiles.
+ metadata_path = r.Rlocation("{}/METADATA".format(dist_info_dir))
+
+ # However, `WHEEL` was explicitly excluded, so it should be missing
+ wheel_path = r.Rlocation("{}/WHEEL".format(dist_info_dir))
+
+ self.assertTrue(Path(metadata_path).exists())
+ self.assertFalse(Path(wheel_path).exists())
+
+ def requests_pkg_dir(self) -> str:
+ env = os.environ.get("REQUESTS_PKG_DIR")
+ self.assertIsNotNone(env)
+ return env
+
+ def test_extra(self):
+ # This test verifies that annotations work correctly for pip packages with extras
+ # specified, in this case requests[security].
+ r = runfiles.Create()
+ rpath = r.Rlocation(
+ "{}{}/generated_file.txt".format(
+ self.package_path(),
+ self.requests_pkg_dir(),
+ ),
+ )
+ generated_file = Path(rpath)
+ self.assertTrue(generated_file.exists())
+
+ content = generated_file.read_text().rstrip()
+ self.assertEqual(content, "Hello world from requests")
+
+
+if __name__ == "__main__":
+ unittest.main()