| 1 | #!/bin/sh |
| 2 | TEST_PREFIX="[declare]" |
| 3 | . "$(cd "$(dirname "$0")/.." && pwd)/test_harness.sh" |
| 4 | |
| 5 | section "1. declare basic flags" |
| 6 | compare_output "declare -i integer arithmetic" 'declare -i num=5+3; echo $num' |
| 7 | compare_output "declare -r is readonly" 'declare -r RO=hello; echo $RO' |
| 8 | compare_exit "declare -r prevents modification" 'declare -r RO=hello; RO=world 2>/dev/null' |
| 9 | compare_output "declare -x exports variable" 'declare -x MYEXP=exported; '"$BASH_REF"' -c "echo \$MYEXP"' |
| 10 | compare_output "declare plain variable" 'declare V=hello; echo $V' |
| 11 | |
| 12 | section "2. declare arrays" |
| 13 | compare_output "declare -a indexed array" 'declare -a arr=(a b c); echo ${arr[1]}' |
| 14 | compare_output "declare -a empty array" 'declare -a arr; arr[0]=x; echo ${arr[0]}' |
| 15 | compare_output "declare -A associative array" 'declare -A map; map[key]=val; echo ${map[key]}' |
| 16 | compare_output "declare -A multiple keys" 'declare -A m; m[a]=1; m[b]=2; echo ${m[a]} ${m[b]}' |
| 17 | compare_output "declare -A overwrite key" 'declare -A m; m[k]=old; m[k]=new; echo ${m[k]}' |
| 18 | |
| 19 | section "3. declare listing" |
| 20 | check_exit "declare -p prints attributes" 'declare -p >/dev/null' "0" |
| 21 | compare_output "declare without args succeeds" 'declare >/dev/null; echo $?' |
| 22 | compare_output "declare -p specific var" 'declare -i NUM=42; declare -p NUM' |
| 23 | |
| 24 | section "4. declare integer behavior" |
| 25 | compare_output "declare -i assignment evaluates arithmetic" 'declare -i x; x=2+3; echo $x' |
| 26 | compare_output "declare -i multiplication" 'declare -i x=3*4; echo $x' |
| 27 | compare_output "declare -i with variable reference" 'y=10; declare -i x=y+5; echo $x' |
| 28 | compare_output "declare -i string assigns zero" 'declare -i x=notanumber; echo $x' |
| 29 | |
| 30 | section "5. declare combined flags" |
| 31 | compare_output "declare -ix integer and export" 'declare -ix INTEXP=42; echo $INTEXP' |
| 32 | compare_output "declare -ri readonly integer" 'declare -ri RINT=42; echo $RINT' |
| 33 | compare_exit "declare -ri prevents modification" 'declare -ri RINT=42; RINT=99 2>/dev/null' |
| 34 | |
| 35 | print_summary |