name: "Options: inherit_errexit"
cases:
  - name: "inherit_errexit disabled by default"
    stdin: |
      shopt -q inherit_errexit && echo "enabled" || echo "disabled"

  - name: "inherit_errexit disabled - command substitution ignores errexit"
    stdin: |
      set -e
      shopt -u inherit_errexit
      result=$(false; echo "still running")
      echo "result: $result"
      echo "after"

  - name: "inherit_errexit enabled - command substitution inherits errexit"
    stdin: |
      set -e
      shopt -s inherit_errexit
      result=$(false; echo "should not print")
      echo "should not print"

  - name: "inherit_errexit with nested command substitution"
    stdin: |
      set -e
      shopt -s inherit_errexit
      result=$(echo "outer: $(false; echo inner)")
      echo "should not print"

  - name: "inherit_errexit disabled - nested substitution continues"
    stdin: |
      set -e
      shopt -u inherit_errexit
      result=$(echo "outer: $(false; echo inner)")
      echo "result: $result"
      echo "after"

  - name: "inherit_errexit with backtick substitution"
    stdin: |
      set -e
      shopt -s inherit_errexit
      result=`false; echo "should not print"`
      echo "should not print"

  - name: "inherit_errexit with assignment"
    stdin: |
      set -e
      shopt -s inherit_errexit
      var=$(false)
      echo "should not print"

  - name: "inherit_errexit in function"
    stdin: |
      set -e
      shopt -s inherit_errexit
      myfunc() {
        local result=$(false; echo "should not print")
        echo "after local"
      }
      myfunc
      echo "should not print"

  - name: "inherit_errexit toggling"
    stdin: |
      set -e
      shopt -s inherit_errexit
      result1=$(false; echo "should not print in first")
      echo "should not print 1"
    ignore_stderr: true

  - name: "inherit_errexit with multiple commands in substitution"
    stdin: |
      set -e
      shopt -u inherit_errexit
      result=$(echo "start"; false; echo "after false")
      echo "result: $result"
      echo "after"
