Bash · 1945 bytes Raw Blame History
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