name: "Pipeline"
cases:
  - name: "Basic pipe"
    stdin: |
      echo hi | grep -l h

  - name: "Longer pipe"
    stdin: |
      echo hi | grep h | wc -l

  - name: "Invert result"
    stdin: |
      ! false
      echo "! false: $?"
      ! true
      echo "! true: $?"

  - name: "Standalone negation (no command)"
    stdin: |
      !
      echo "After !: $?"
      ! !
      echo "After ! !: $?"

  - name: "Exit codes for piped commands"
    test_files:
      - path: "script.sh"
        executable: true
        contents: |
          #!/bin/sh
          (cat; echo -n "-> $1")
          exit $1
    stdin: |
      ./script.sh 10 | ./script.sh 0 | ./script.sh 33

  - name: "Side effects in pipe commands"
    stdin: |
      var=0
      echo "var: ${var}"
      { var=1; }
      echo "var: ${var}"
      { var=2; echo hi; } | cat
      echo "var: ${var}"
      echo hi | { var=3; cat; }
      echo "var: ${var}"

  - name: "pipeline extension"
    stdin: |
      echo -e "hello" |& wc -l
      cat dfdfgdfgdf |& wc -l
      foo() { cat dfgdfg; } |& wc -l

  - name: "Possible broken pipe case"
    stdin: |
      echo hello | var=value

  - name: "printf broken pipe returns 141 in PIPESTATUS"
    stdin: |
      printf '%s\n' {0..10000} | x=1
      echo "Last: $?, PIPESTATUS: ${PIPESTATUS[*]}"
