# Copyright 2022 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 subprocess import unittest class TestPythonVersion(unittest.TestCase): @classmethod def setUpClass(cls): os.chdir("%test_location%") rules_python_path = os.path.join(os.environ["TEST_SRCDIR"], "rules_python") test_tmpdir = os.environ["TEST_TMPDIR"] if %is_windows%: home = os.path.join(test_tmpdir, "HOME") os.mkdir(home) os.environ["HOME"] = home local_app_data = os.path.join(test_tmpdir, "LocalAppData") os.mkdir(local_app_data) os.environ["LocalAppData"] = local_app_data # Bazelisk requires a cache directory be set os.environ["XDG_CACHE_HOME"] = os.path.join(test_tmpdir, "xdg-cache-home") # Unset this so this works when called by Bazel's latest Bazel build # pipeline. It sets the following combination, which interfere with each other: # * --sandbox_tmpfs_path=/tmp # * --test_env=USE_BAZEL_VERSION # * USE_BAZEL_VERSION=/tmp/ os.environ.pop("USE_BAZEL_VERSION", None) with open(".bazelrc", "w") as bazelrc: bazelrc.write( os.linesep.join( [ 'build --override_repository rules_python="{}"'.format( rules_python_path.replace("\\", "/") ), "build --test_output=errors", ] ) ) def test_match_toolchain(self): output = subprocess.check_output( f"bazel run @python//:python3 -- --version", shell = True, # Shell needed to look up via PATH text=True, ).strip() self.assertEqual(output, "Python %python_version%") subprocess.run("bazel test //...", shell=True, check=True) if __name__ == "__main__": unittest.main()