name: "Builtins: exec"
cases:
  - name: "Exec an invalid path"
    ignore_stderr: true
    stdin: |
      exec /some/nonexistent/path

  - name: "Exec with no arguments"
    stdin: |
      pid=$$
      exec
      [[ "${pid}" == "$$" ]] || echo "PID changed"

  - name: "Exec with no arguments and redirection for new fd"
    stdin: |
      exec 3>some-file.txt
      echo "Hello, fd 3!" >&3

  - name: "Exec with no arguments and redirection of stderr"
    stdin: |
      exec 2>/dev/null

      # Do something that should display an error to stderr
      source /non-existent

  - name: "Exec with no arguments and redirection in a script"
    test_files:
      - path: "script.sh"
        contents: |
          exec 2>output-file.txt
          echo hi >&2
    args: ["./script.sh"]

  - name: "Exec a command"
    stdin: |
      exec $0 -c 'echo "In child shell"'
      echo "This is never reached"

  - name: "exec without -c"
    stdin: |
      export myvar=value
      exec $0 -c 'echo "myvar: ${myvar}"'

  - name: "exec -c"
    stdin: |
      export myvar=value
      exec -c $0 -c 'echo "myvar: ${myvar}"'

  - name: "exec -a"
    stdin: |
      exec -a shellname $0 -c 'echo "0: $0"'
