diff --git a/llvm/utils/lit/lit/TestRunner.py b/llvm/utils/lit/lit/TestRunner.py index da7fa86fd3917..c96b7927dd37c 100644 --- a/llvm/utils/lit/lit/TestRunner.py +++ b/llvm/utils/lit/lit/TestRunner.py @@ -570,6 +570,14 @@ def executeBuiltinColon(cmd, cmd_shenv): return ShellCommandResult(cmd, "", "", 0, False) +def executeBuiltinUnset(cmd, shenv): + """executeBuiltinUnset - Handle the 'unset' command.""" + raise InternalShellError( + cmd, + "'unset' command is not supported by the lit internal shell. Please use 'env -u VARIABLE' to unset environment variables.", + ) + + def processRedirects(cmd, stdin_source, cmd_shenv, opened_files): """Return the standard fds for cmd after applying redirects @@ -720,6 +728,7 @@ def _executeShCmd(cmd, shenv, results, timeoutHelper): "pushd": executeBuiltinPushd, "rm": executeBuiltinRm, ":": executeBuiltinColon, + "unset": executeBuiltinUnset, } # To avoid deadlock, we use a single stderr stream for piped # output. This is null until we have seen some output using diff --git a/llvm/utils/lit/tests/Inputs/shtest-unset/lit.cfg b/llvm/utils/lit/tests/Inputs/shtest-unset/lit.cfg new file mode 100644 index 0000000000000..ec8c43263be72 --- /dev/null +++ b/llvm/utils/lit/tests/Inputs/shtest-unset/lit.cfg @@ -0,0 +1,10 @@ +import lit.formats + +config.name = "shtest-unset" +config.suffixes = [".txt"] +config.test_format = lit.formats.ShTest() +config.test_source_root = None +config.test_exec_root = None +config.environment["FOO"] = "1" +config.environment["BAR"] = "2" +config.substitutions.append(("%{python}", '"%s"' % (sys.executable))) diff --git a/llvm/utils/lit/tests/Inputs/shtest-unset/unset-multiple-variables.txt b/llvm/utils/lit/tests/Inputs/shtest-unset/unset-multiple-variables.txt new file mode 100644 index 0000000000000..f7dc7e80bd93b --- /dev/null +++ b/llvm/utils/lit/tests/Inputs/shtest-unset/unset-multiple-variables.txt @@ -0,0 +1,3 @@ +## Tests the 'unset' command with multiple variables. + +# RUN: unset FOO BAR diff --git a/llvm/utils/lit/tests/Inputs/shtest-unset/unset-no-args.txt b/llvm/utils/lit/tests/Inputs/shtest-unset/unset-no-args.txt new file mode 100644 index 0000000000000..bc9f27710c5bf --- /dev/null +++ b/llvm/utils/lit/tests/Inputs/shtest-unset/unset-no-args.txt @@ -0,0 +1,3 @@ +## Tests the 'unset' command when no arguments are provided. + +# RUN: unset diff --git a/llvm/utils/lit/tests/Inputs/shtest-unset/unset-nonexistent-variable.txt b/llvm/utils/lit/tests/Inputs/shtest-unset/unset-nonexistent-variable.txt new file mode 100644 index 0000000000000..5fbe3fb757291 --- /dev/null +++ b/llvm/utils/lit/tests/Inputs/shtest-unset/unset-nonexistent-variable.txt @@ -0,0 +1,3 @@ +## Test the behavior of the 'unset' command when trying to unset a variable that does not exist. + +# RUN: unset NONEXISTENT diff --git a/llvm/utils/lit/tests/Inputs/shtest-unset/unset-variable.txt b/llvm/utils/lit/tests/Inputs/shtest-unset/unset-variable.txt new file mode 100644 index 0000000000000..11adcd234e717 --- /dev/null +++ b/llvm/utils/lit/tests/Inputs/shtest-unset/unset-variable.txt @@ -0,0 +1,3 @@ +## Tests the 'unset' command with a single variable + +# RUN: unset FOO diff --git a/llvm/utils/lit/tests/shtest-unset.py b/llvm/utils/lit/tests/shtest-unset.py new file mode 100644 index 0000000000000..6517864e8f9bd --- /dev/null +++ b/llvm/utils/lit/tests/shtest-unset.py @@ -0,0 +1,42 @@ +## Check that the 'unset' command fails as expected for various tests. + +# RUN: not %{lit} -a -v %{inputs}/shtest-unset \ +# RUN: | FileCheck -match-full-lines %s +# +# END. + +## Check that the 'unset' command's expected failures. + +# CHECK: -- Testing: 4 tests{{.*}} + +# CHECK: FAIL: shtest-unset :: unset-multiple-variables.txt{{.*}} +# CHECK: unset FOO BAR +# CHECK-NEXT: # executed command: unset FOO BAR +# CHECK-NEXT: # .---command stderr------------ +# CHECK-NEXT: # | 'unset' command is not supported by the lit internal shell. Please use 'env -u VARIABLE' to unset environment variables. +# CHECK: # error: command failed with exit status: 127 + +# CHECK: FAIL: shtest-unset :: unset-no-args.txt{{.*}} +# CHECK: unset +# CHECK-NEXT: # executed command: unset +# CHECK-NEXT: # .---command stderr------------ +# CHECK-NEXT: # | 'unset' command is not supported by the lit internal shell. Please use 'env -u VARIABLE' to unset environment variables. +# CHECK: # error: command failed with exit status: 127 + +# CHECK: FAIL: shtest-unset :: unset-nonexistent-variable.txt{{.*}} +# CHECK: unset NONEXISTENT +# CHECK-NEXT: # executed command: unset NONEXISTENT +# CHECK-NEXT: # .---command stderr------------ +# CHECK-NEXT: # | 'unset' command is not supported by the lit internal shell. Please use 'env -u VARIABLE' to unset environment variables. +# CHECK: # error: command failed with exit status: 127 + +# CHECK: FAIL: shtest-unset :: unset-variable.txt{{.*}} +# CHECK: unset FOO +# CHECK-NEXT: # executed command: unset FOO +# CHECK-NEXT: # .---command stderr------------ +# CHECK-NEXT: # | 'unset' command is not supported by the lit internal shell. Please use 'env -u VARIABLE' to unset environment variables. +# CHECK: # error: command failed with exit status: 127 + +# CHECK: Total Discovered Tests: 4 +# CHECK: Failed: 4 {{\([0-9]*\.[0-9]*%\)}} +# CHECK-NOT: {{.}}