name: "Basic tests"
cases:
  - name: "Basic -c usage"
    args:
      - "-c"
      - "echo hi"

  - name: "Basic -c usage: output"
    stdin: |
      # Capture raw output of command
      raw_output=$($0 -c 'echo hi')

      # Dump raw output as characters
      echo "[Character output]"
      for ((i = 0; i < ${#raw_output}; i++)); do
        char="${raw_output:i:1}"
        printf '%c' "$char"
      done
      printf '\n\n'

      # Dump raw output as hex
      echo "[Hex output]"
      for ((i = 0; i < ${#raw_output}; i++)); do
        if (( i % 16 == 0 )); then
          printf '%04x: ' "$i"
        fi

        char="${raw_output:i:1}"
        printf '%02x ' "'$char"

        if (( (i + 1) % 16 == 0 )); then
          printf '\n'
        fi
      done

      printf '\n'

  - name: "Basic stdin usage"
    stdin: |
      echo hi

  - name: "Basic sequence"
    stdin: |
      echo 'hi'; echo 'there'

  - name: "Basic -s usage with -c"
    args: ["-s", "-c", "echo hi1 hi2"]
    stdin: |
      [[ $(type -P $0) == $(type -P $BASH) ]] && echo '$0 matches $BASH'
      echo "\$1: $1"
      echo "\$2: $2"
      echo "\$3: $3"

  - name: "Basic -s usage with positional args"
    args: ["-s", "arg1", "arg2", "arg3"]
    stdin: |
      [[ $(type -P $0) == $(type -P $BASH) ]] && echo '$0 matches $BASH'
      echo "\$1: $1"
      echo "\$2: $2"
      echo "\$3: $3"

  - name: "Basic -i usage with commands via stdin"
    args: ["-i"]
    ignore_stderr: true
    stdin: |
      echo hi
      echo there

  - name: "Basic script execution"
    test_files:
      - path: "script.sh"
        contents: |
          echo "ARGS: $@"
          exit 22
    args: ["./script.sh", 1, 2, 3]

  - name: "Passing option-like arg to script"
    test_files:
      - path: "script.sh"
        contents: |
          echo "ARGS: $@"
          exit 22
    args: ["./script.sh", "-v"]

  - name: "Ensure ~ is resolvable"
    stdin: "test ~"

  - name: "Rc file loading (interactive)"
    ignore_stderr: true
    removed_default_args: ["--norc"] # Need to cancel this out so we can override
    args: ["--rcfile", "testrc", "-i"]
    env:
      PS1: ""
    test_files:
      - path: "testrc"
        contents: |
          echo "Executing in rc file"
    stdin: |
      echo "Executing in main script body"

  - name: "Rc file loading (non-interactive)"
    ignore_stderr: true
    removed_default_args: ["--norc"] # Need to cancel this out so we can override
    args: ["--rcfile", "testrc"]
    env:
      PS1: ""
    test_files:
      - path: "testrc"
        contents: |
          echo "Executing in rc file"
    stdin: |
      echo "Executing in main script body"

  - name: "Missing rc file"
    ignore_stderr: true
    removed_default_args: ["--norc"] # Need to cancel this out so we can override
    args: ["--rcfile", "non-existent-file", "-i"]
    env:
      PS1: ""
    stdin: |
      echo "Executing in main script body"

  - name: "Unknown option"
    ignore_stderr: true
    args: ["--unknown-option", "-c", "echo hi"]

  - name: "-f on the command line"
    args: ["-f"]
    stdin: |
      touch abc
      touch abd
      echo a*
