name: "Options: nullglob"
cases:
  - name: "nullglob removes unmatched glob"
    stdin: |
      shopt -s nullglob
      echo "result:" non-existent-*.txt

  - name: "nullglob does not affect matching glob"
    stdin: |
      touch realfile.txt
      shopt -s nullglob
      echo real*.txt

  - name: "nullglob does not affect quoted glob chars"
    stdin: |
      shopt -s nullglob
      echo 'non-existent-*.txt'

  - name: "nullglob does not affect literal text without glob chars"
    stdin: |
      shopt -s nullglob
      echo hello world

  - name: "nullglob with multiple unmatched patterns"
    stdin: |
      shopt -s nullglob
      echo "result:" *.zzz *.yyy *.xxx

  - name: "nullglob with mix of matched and unmatched"
    stdin: |
      touch realfile.txt
      shopt -s nullglob
      echo real*.txt *.zzz

  - name: "nullglob with question mark glob"
    stdin: |
      shopt -s nullglob
      echo "result:" ?.nonexistent

  - name: "nullglob with bracket glob"
    stdin: |
      shopt -s nullglob
      echo "result:" [abc].nonexistent

  - name: "nullglob disabled by default"
    stdin: |
      echo *.nonexistent

  - name: "nullglob can be toggled"
    stdin: |
      shopt -s nullglob
      echo "on:" *.nonexistent
      shopt -u nullglob
      echo "off:" *.nonexistent

  - name: "nullglob in subshell"
    stdin: |
      shopt -s nullglob
      (echo "inner:" *.nonexistent)
      echo "outer:" *.nonexistent

  - name: "nullglob with for loop"
    stdin: |
      shopt -s nullglob
      for f in *.nonexistent; do
        echo "unexpected: $f"
      done
      echo "done"

  - name: "nullglob with array assignment"
    stdin: |
      shopt -s nullglob
      arr=(*.nonexistent)
      echo "count: ${#arr[@]}"

  - name: "nullglob with directory glob"
    stdin: |
      shopt -s nullglob
      echo "result:" nonexistent_dir/*/
