| #!/usr/bin/env python3 |
| # ===----------------------------------------------------------------------===## |
| # |
| # Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| # See https://llvm.org/LICENSE.txt for license information. |
| # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| # |
| # ===----------------------------------------------------------------------===## |
| |
| import os |
| import subprocess |
| import sys |
| import tempfile |
| |
| cur_dir = os.path.dirname(os.path.realpath(__file__)) |
| bisect_script = os.path.join(cur_dir, "..", "rsp_bisect.py") |
| test1 = os.path.join(cur_dir, "test_script.py") |
| test2 = os.path.join(cur_dir, "test_script_inv.py") |
| rsp = os.path.join(cur_dir, "rsp") |
| |
| |
| def run_bisect(success, test_script): |
| args = [ |
| bisect_script, |
| "--test", |
| test_script, |
| "--rsp", |
| rsp, |
| "--other-rel-path", |
| "../Other", |
| ] |
| res = subprocess.run(args, capture_output=True, encoding="UTF-8") |
| if len(sys.argv) > 1 and sys.argv[1] == "-v": |
| print("Ran {} with return code {}".format(args, res.returncode)) |
| print("Stdout:") |
| print(res.stdout) |
| print("Stderr:") |
| print(res.stderr) |
| if res.returncode != (0 if success else 1): |
| print(res.stdout) |
| print(res.stderr) |
| raise AssertionError("unexpected bisection return code for " + str(args)) |
| return res.stdout |
| |
| |
| # Test that an empty rsp file fails. |
| with open(rsp, "w") as f: |
| pass |
| |
| run_bisect(False, test1) |
| |
| # Test that an rsp file without any paths fails. |
| with open(rsp, "w") as f: |
| f.write("hello\nfoo\n") |
| |
| run_bisect(False, test1) |
| |
| # Test that an rsp file with one path succeeds. |
| with open(rsp, "w") as f: |
| f.write("./foo\n") |
| |
| output = run_bisect(True, test1) |
| assert "./foo" in output |
| |
| # Test that an rsp file with one path and one extra arg succeeds. |
| with open(rsp, "w") as f: |
| f.write("hello\n./foo\n") |
| |
| output = run_bisect(True, test1) |
| assert "./foo" in output |
| |
| # Test that an rsp file with three paths and one extra arg succeeds. |
| with open(rsp, "w") as f: |
| f.write("hello\n./foo\n./bar\n./baz\n") |
| |
| output = run_bisect(True, test1) |
| assert "./foo" in output |
| |
| with open(rsp, "w") as f: |
| f.write("hello\n./bar\n./foo\n./baz\n") |
| |
| output = run_bisect(True, test1) |
| assert "./foo" in output |
| |
| with open(rsp, "w") as f: |
| f.write("hello\n./bar\n./baz\n./foo\n") |
| |
| output = run_bisect(True, test1) |
| assert "./foo" in output |
| |
| output = run_bisect(True, test2) |
| assert "./foo" in output |
| |
| with open(rsp + ".0", "r") as f: |
| contents = f.read() |
| assert " ../Other/./foo" in contents |
| |
| with open(rsp + ".1", "r") as f: |
| contents = f.read() |
| assert " ./foo" in contents |
| |
| os.remove(rsp) |
| os.remove(rsp + ".0") |
| os.remove(rsp + ".1") |
| |
| print("Success!") |