Merge nucleic/sleek-thistle-egret-fyej into dev
This commit is contained in:
@@ -0,0 +1,202 @@
|
||||
name: "Builtins: mapfile"
|
||||
cases:
|
||||
#
|
||||
# Basic functionality
|
||||
#
|
||||
- name: "mapfile basic"
|
||||
stdin: |
|
||||
mapfile arr < <(echo -e "a\nb\nc")
|
||||
declare -p arr
|
||||
|
||||
- name: "mapfile -t"
|
||||
stdin: |
|
||||
mapfile -t arr < <(echo -e "a\nb\nc")
|
||||
declare -p arr
|
||||
|
||||
- name: "readarray -t"
|
||||
stdin: |
|
||||
readarray -t arr < <(echo -e "a\nb\nc")
|
||||
declare -p arr
|
||||
|
||||
- name: "mapfile default MAPFILE"
|
||||
stdin: |
|
||||
mapfile -t < <(echo -e "a\nb")
|
||||
declare -p MAPFILE
|
||||
|
||||
#
|
||||
# -O flag
|
||||
#
|
||||
- name: "mapfile -O starts at offset"
|
||||
stdin: |
|
||||
mapfile -t -O 3 arr < <(echo -e "a\nb\nc")
|
||||
declare -p arr
|
||||
|
||||
- name: "mapfile -O 0 preserves existing"
|
||||
stdin: |
|
||||
arr=(x y z w)
|
||||
mapfile -t -O 0 arr < <(echo -e "a\nb")
|
||||
declare -p arr
|
||||
|
||||
- name: "mapfile without -O clears existing"
|
||||
stdin: |
|
||||
arr=(x y z w)
|
||||
mapfile -t arr < <(echo -e "a\nb")
|
||||
declare -p arr
|
||||
|
||||
- name: "mapfile -O preserves sparse array"
|
||||
stdin: |
|
||||
declare -a arr
|
||||
arr[0]=x
|
||||
arr[5]=y
|
||||
arr[10]=z
|
||||
mapfile -t -O 2 arr < <(echo -e "a\nb")
|
||||
declare -p arr
|
||||
|
||||
- name: "mapfile -O large offset"
|
||||
stdin: |
|
||||
mapfile -t -O 100 arr < <(echo -e "a\nb")
|
||||
declare -p arr
|
||||
|
||||
- name: "mapfile -O negative"
|
||||
ignore_stderr: true
|
||||
stdin: |
|
||||
mapfile -O -1 arr < /dev/null
|
||||
echo "exit: $?"
|
||||
|
||||
#
|
||||
# Variable state edge cases
|
||||
#
|
||||
- name: "mapfile into nonexistent variable"
|
||||
stdin: |
|
||||
mapfile -t newvar < <(echo -e "a\nb")
|
||||
declare -p newvar
|
||||
|
||||
- name: "mapfile into string variable"
|
||||
stdin: |
|
||||
myvar="hello"
|
||||
mapfile -t myvar < <(echo -e "a\nb")
|
||||
declare -p myvar
|
||||
|
||||
- name: "mapfile -O into string variable"
|
||||
stdin: |
|
||||
myvar="hello"
|
||||
mapfile -t -O 2 myvar < <(echo -e "a\nb")
|
||||
declare -p myvar
|
||||
|
||||
- name: "mapfile into associative array"
|
||||
ignore_stderr: true
|
||||
stdin: |
|
||||
declare -A myassoc
|
||||
mapfile -t myassoc < <(echo -e "a\nb")
|
||||
echo "exit: $?"
|
||||
|
||||
#
|
||||
# -d delimiter
|
||||
#
|
||||
- name: "mapfile -d custom delimiter"
|
||||
stdin: |
|
||||
mapfile -t -d 'Z' arr < <(echo -ne "helloZthereZgeneralZkenobi")
|
||||
declare -p arr
|
||||
|
||||
- name: "mapfile -d empty string (NUL)"
|
||||
stdin: |
|
||||
mapfile -t -d '' arr < <(printf 'a\0b\0c')
|
||||
declare -p arr
|
||||
|
||||
#
|
||||
# -n count
|
||||
#
|
||||
- name: "mapfile -n limits count"
|
||||
stdin: |
|
||||
mapfile -t -n 2 arr < <(echo -e "a\nb\nc\nd")
|
||||
declare -p arr
|
||||
|
||||
- name: "mapfile -n 0 no limit"
|
||||
stdin: |
|
||||
mapfile -t -n 0 arr < <(echo -e "a\nb\nc")
|
||||
declare -p arr
|
||||
|
||||
#
|
||||
# -s skip
|
||||
#
|
||||
- name: "mapfile -s"
|
||||
stdin: |
|
||||
mapfile -t -s 2 arr < <(echo -e "a\nb\nc\nd")
|
||||
declare -p arr
|
||||
|
||||
- name: "mapfile -s with -n"
|
||||
stdin: |
|
||||
mapfile -t -s 1 -n 2 arr < <(echo -e "a\nb\nc\nd\ne")
|
||||
declare -p arr
|
||||
|
||||
#
|
||||
# -u file descriptor
|
||||
#
|
||||
- name: "mapfile -u reads from fd"
|
||||
stdin: |
|
||||
exec 3< <(echo -e "a\nb\nc")
|
||||
mapfile -t -u 3 arr
|
||||
exec 3<&-
|
||||
declare -p arr
|
||||
|
||||
- name: "mapfile -u invalid fd"
|
||||
ignore_stderr: true
|
||||
stdin: |
|
||||
mapfile -u 99 arr
|
||||
echo "exit: $?"
|
||||
|
||||
#
|
||||
# Combinations
|
||||
#
|
||||
- name: "mapfile -O with -s and -n"
|
||||
stdin: |
|
||||
mapfile -t -O 10 -s 1 -n 2 arr < <(echo -e "a\nb\nc\nd\ne")
|
||||
declare -p arr
|
||||
|
||||
- name: "mapfile multiple invocations without -O"
|
||||
stdin: |
|
||||
mapfile -t arr < <(echo -e "a\nb")
|
||||
mapfile -t arr < <(echo -e "x\ny\nz")
|
||||
declare -p arr
|
||||
|
||||
- name: "mapfile multiple invocations with -O"
|
||||
stdin: |
|
||||
mapfile -t arr < <(echo -e "a\nb")
|
||||
mapfile -t -O 2 arr < <(echo -e "x\ny\nz")
|
||||
declare -p arr
|
||||
|
||||
#
|
||||
# Empty input
|
||||
#
|
||||
- name: "mapfile empty input"
|
||||
stdin: |
|
||||
mapfile -t arr < /dev/null
|
||||
declare -p arr 2>/dev/null || echo "arr not set"
|
||||
|
||||
- name: "mapfile empty input clears existing"
|
||||
stdin: |
|
||||
arr=(x y z)
|
||||
mapfile -t arr < /dev/null
|
||||
declare -p arr 2>/dev/null || echo "arr not set"
|
||||
|
||||
- name: "mapfile -O empty input preserves"
|
||||
stdin: |
|
||||
arr=(x y z)
|
||||
mapfile -t -O 0 arr < /dev/null
|
||||
declare -p arr
|
||||
|
||||
- name: "mapfile into nameref variable"
|
||||
known_failure: true
|
||||
stdin: |
|
||||
declare -a target
|
||||
declare -n ref=target
|
||||
mapfile -t ref < <(echo -e "a\nb\nc")
|
||||
declare -p target
|
||||
|
||||
- name: "mapfile -O into nameref variable"
|
||||
known_failure: true
|
||||
stdin: |
|
||||
target=(x y)
|
||||
declare -n ref=target
|
||||
mapfile -t -O 2 ref < <(echo -e "a\nb")
|
||||
declare -p target
|
||||
Reference in New Issue
Block a user