name: "and/or"
cases:
  - name: "Basic &&"
    stdin: |
      false && echo 1
      true && echo 2

  - name: "Basic ||"
    stdin: |
      false || echo 1
      true || echo 2

  - name: "Longer chains"
    stdin: |
      false || false || false || echo "Got to the end"
      echo "1" && echo "2" && echo "3" && echo "4"

  - name: "Mixed chains"
    stdin: |
      false && true  || echo "1. Got to the end"
      false && false || echo "2. Got to the end"
      true  && false || echo "3. Got to the end"

  - name: "And with return in function"
    stdin: |
      f() {
        echo "Before" && return 42 && echo "After return"
        echo "After and-or"
      }
      f
      echo "Exit code: $?"

  - name: "And with exit"
    stdin: |
      echo "Before" && exit 42 && echo "After exit"
      echo "After and-or"

  - name: "And with break in loop"
    stdin: |
      for i in 1 2 3; do
        echo "Iteration $i" && break && echo "After break"
        echo "After and-or"
      done
      echo "After loop"

  - name: "And with continue in loop"
    stdin: |
      for i in 1 2 3; do
        echo "Iteration $i" && continue && echo "After continue"
        echo "After and-or"
      done
      echo "After loop"

  - name: "Or with return in function"
    stdin: |
      f() {
        false || return 42 || echo "After return"
        echo "After or-list"
      }
      f
      echo "Exit code: $?"

  - name: "Or with exit"
    stdin: |
      false || exit 42 || echo "After exit"
      echo "After or-list"

  - name: "Or with break in loop"
    stdin: |
      for i in 1 2 3; do
        false || break || echo "After break"
        echo "After or-list"
      done
      echo "After loop"

  - name: "Or with continue in loop"
    stdin: |
      for i in 1 2 3; do
        echo "Iteration $i"
        false || continue || echo "After continue"
        echo "After or-list"
      done
      echo "After loop"
