| # Copyright 2024 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 sys | |
| import unittest | |
| class InterpreterTest(unittest.TestCase): | |
| def setUp(self): | |
| super().setUp() | |
| self.interpreter = os.environ["PYTHON_BIN"] | |
| v = sys.version_info | |
| self.version = f"{v.major}.{v.minor}" | |
| def test_self_version(self): | |
| """Performs a sanity check on the Python version used for this test.""" | |
| expected_version = os.environ["EXPECTED_SELF_VERSION"] | |
| self.assertEqual(expected_version, self.version) | |
| def test_interpreter_version(self): | |
| """Validates that we can successfully execute arbitrary code from the CLI.""" | |
| expected_version = os.environ.get("EXPECTED_INTERPRETER_VERSION", self.version) | |
| try: | |
| result = subprocess.check_output( | |
| [self.interpreter], | |
| text=True, | |
| stderr=subprocess.STDOUT, | |
| input="\r".join( | |
| [ | |
| "import sys", | |
| "v = sys.version_info", | |
| "print(f'version: {v.major}.{v.minor}')", | |
| ] | |
| ), | |
| ).strip() | |
| except subprocess.CalledProcessError as error: | |
| print("OUTPUT:", error.stdout) | |
| raise | |
| self.assertEqual(result, f"version: {expected_version}") | |
| def test_json_tool(self): | |
| """Validates that we can successfully invoke a module from the CLI.""" | |
| # Pass unformatted JSON to the json.tool module. | |
| try: | |
| result = subprocess.check_output( | |
| [ | |
| self.interpreter, | |
| "-m", | |
| "json.tool", | |
| ], | |
| text=True, | |
| stderr=subprocess.STDOUT, | |
| input='{"json":"obj"}', | |
| ).strip() | |
| except subprocess.CalledProcessError as error: | |
| print("OUTPUT:", error.stdout) | |
| raise | |
| # Validate that we get formatted JSON back. | |
| self.assertEqual(result, '{\n "json": "obj"\n}') | |
| if __name__ == "__main__": | |
| unittest.main() |