kopia lustrzana https://github.com/alecmuffett/eotk
567 wiersze
5.7 KiB
Bash
567 wiersze
5.7 KiB
Bash
|
#!/bin/sh
|
||
|
# eotk (c) 2017 Alec Muffett
|
||
|
|
||
|
# gentlemen, behold! unit tests!
|
||
|
|
||
|
export EXP_TAG="TAG $$ `date`"
|
||
|
|
||
|
TEMPLATE=/tmp/exp-template$$
|
||
|
EXPECT=/tmp/exp-expect$$
|
||
|
RESULT=/tmp/exp-result$$
|
||
|
LOG=/tmp/exp-log$$
|
||
|
|
||
|
Template() {
|
||
|
(
|
||
|
cat
|
||
|
echo "%EXP_TAG%" # add to end so line numbers not off
|
||
|
) > $TEMPLATE
|
||
|
}
|
||
|
|
||
|
Expect() {
|
||
|
(
|
||
|
echo "# -- DO NOT EDIT THIS FILE! --"
|
||
|
cat
|
||
|
echo "$EXP_TAG"
|
||
|
echo "# -- DO NOT EDIT THIS FILE! --"
|
||
|
) > $EXPECT
|
||
|
}
|
||
|
|
||
|
Test() {
|
||
|
./expand-template.pl --debug $TEMPLATE >$RESULT 2>$LOG
|
||
|
|
||
|
if ! cmp $EXPECT $RESULT ; then
|
||
|
echo :::: broken test: "$@" ::::
|
||
|
cat $LOG
|
||
|
echo ""
|
||
|
echo :::: problem ::::
|
||
|
ls -l $EXPECT $RESULT
|
||
|
diff -c $EXPECT $RESULT
|
||
|
exit 1
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
##################################################################
|
||
|
|
||
|
# see if this works
|
||
|
|
||
|
Template <<EOF
|
||
|
hello world
|
||
|
EOF
|
||
|
|
||
|
Expect <<EOF
|
||
|
hello world
|
||
|
EOF
|
||
|
|
||
|
Test hello world < /dev/null
|
||
|
|
||
|
##################################################################
|
||
|
|
||
|
# environment expansion
|
||
|
|
||
|
Template <<EOF
|
||
|
foo %FOO% foo
|
||
|
bar %BAR% bar
|
||
|
baz %BAZ% baz
|
||
|
EOF
|
||
|
|
||
|
Expect <<EOF
|
||
|
foo 1 foo
|
||
|
bar 2 bar
|
||
|
baz wibble baz
|
||
|
EOF
|
||
|
|
||
|
export FOO=1
|
||
|
export BAR=2
|
||
|
export BAZ=wibble
|
||
|
Test env expand < /dev/null
|
||
|
|
||
|
##################################################################
|
||
|
|
||
|
# basic template
|
||
|
|
||
|
Template <<EOF
|
||
|
foo %FOO% foo
|
||
|
%%BEGIN
|
||
|
bar1 %BAR1% bar1
|
||
|
bar3 %BAR3% bar3
|
||
|
bar2 %BAR2% bar2
|
||
|
%%END
|
||
|
baz %BAZ% baz
|
||
|
EOF
|
||
|
|
||
|
Expect <<EOF
|
||
|
foo 1 foo
|
||
|
bar1 101 bar1
|
||
|
bar3 103 bar3
|
||
|
bar2 102 bar2
|
||
|
bar1 201 bar1
|
||
|
bar3 203 bar3
|
||
|
bar2 202 bar2
|
||
|
bar1 301 bar1
|
||
|
bar3 303 bar3
|
||
|
bar2 302 bar2
|
||
|
baz 3 baz
|
||
|
EOF
|
||
|
|
||
|
export FOO=1 BAZ=3
|
||
|
unset BAR1 BAR2 BAR3
|
||
|
Test basic template <<EOF
|
||
|
BAR1 BAR2 BAR3
|
||
|
101 102 103
|
||
|
201 202 203
|
||
|
301 302 303
|
||
|
EOF
|
||
|
|
||
|
##################################################################
|
||
|
|
||
|
# two templates
|
||
|
|
||
|
Template <<EOF
|
||
|
----
|
||
|
%%BEGIN
|
||
|
: f1 %F1% f3 %F3% f2 %F2% :
|
||
|
%%END
|
||
|
----
|
||
|
%%BEGIN
|
||
|
: f2 %F2% f3 %F3% f1 %F1% :
|
||
|
%%END
|
||
|
----
|
||
|
EOF
|
||
|
|
||
|
Expect <<EOF
|
||
|
----
|
||
|
: f1 101 f3 103 f2 102 :
|
||
|
: f1 201 f3 203 f2 202 :
|
||
|
----
|
||
|
: f2 102 f3 103 f1 101 :
|
||
|
: f2 202 f3 203 f1 201 :
|
||
|
----
|
||
|
EOF
|
||
|
|
||
|
unset F1 F2 F3
|
||
|
Test two templates <<EOF
|
||
|
F1 F2 F3
|
||
|
101 102 103
|
||
|
201 202 203
|
||
|
EOF
|
||
|
|
||
|
##################################################################
|
||
|
|
||
|
# instatemplate
|
||
|
|
||
|
Template <<EOF
|
||
|
%%BEGIN
|
||
|
foo %FOO%
|
||
|
%%END
|
||
|
EOF
|
||
|
|
||
|
Expect <<EOF
|
||
|
foo 1
|
||
|
foo 2
|
||
|
foo 3
|
||
|
EOF
|
||
|
|
||
|
unset FOO
|
||
|
Test instatemplate <<EOF
|
||
|
FOO
|
||
|
1
|
||
|
2
|
||
|
3
|
||
|
EOF
|
||
|
|
||
|
##################################################################
|
||
|
|
||
|
# empty template
|
||
|
|
||
|
Template <<EOF
|
||
|
%%BEGIN
|
||
|
%%END
|
||
|
EOF
|
||
|
|
||
|
Expect <<EOF
|
||
|
EOF
|
||
|
|
||
|
unset FOO
|
||
|
Test empty template <<EOF
|
||
|
FOO
|
||
|
1
|
||
|
2
|
||
|
3
|
||
|
EOF
|
||
|
|
||
|
##################################################################
|
||
|
|
||
|
# empty template head
|
||
|
|
||
|
Template <<EOF
|
||
|
head
|
||
|
%%BEGIN
|
||
|
%%END
|
||
|
EOF
|
||
|
|
||
|
Expect <<EOF
|
||
|
head
|
||
|
EOF
|
||
|
|
||
|
unset FOO
|
||
|
Test empty template head <<EOF
|
||
|
FOO
|
||
|
1
|
||
|
2
|
||
|
3
|
||
|
EOF
|
||
|
|
||
|
##################################################################
|
||
|
|
||
|
# empty template tail
|
||
|
|
||
|
Template <<EOF
|
||
|
%%BEGIN
|
||
|
%%END
|
||
|
tail
|
||
|
EOF
|
||
|
|
||
|
Expect <<EOF
|
||
|
tail
|
||
|
EOF
|
||
|
|
||
|
unset FOO
|
||
|
Test empty template tail <<EOF
|
||
|
FOO
|
||
|
1
|
||
|
2
|
||
|
3
|
||
|
EOF
|
||
|
|
||
|
##################################################################
|
||
|
|
||
|
# Conditional
|
||
|
|
||
|
Template <<EOF
|
||
|
----
|
||
|
%%IF %FOO%
|
||
|
%BAR%
|
||
|
%%BEGIN
|
||
|
true %BAZ%
|
||
|
%%END
|
||
|
%%ELSE
|
||
|
%BAR%
|
||
|
%%BEGIN
|
||
|
false %BAZ%
|
||
|
%%END
|
||
|
%%ENDIF
|
||
|
----
|
||
|
EOF
|
||
|
|
||
|
####
|
||
|
|
||
|
Expect <<EOF
|
||
|
----
|
||
|
bar
|
||
|
false baz
|
||
|
----
|
||
|
EOF
|
||
|
|
||
|
export FOO=0 BAR=bar
|
||
|
Test conditional false <<EOF
|
||
|
BAZ
|
||
|
baz
|
||
|
EOF
|
||
|
|
||
|
####
|
||
|
|
||
|
Expect <<EOF
|
||
|
----
|
||
|
bar
|
||
|
true baz
|
||
|
----
|
||
|
EOF
|
||
|
|
||
|
export FOO=1 BAR=bar
|
||
|
Test conditional true <<EOF
|
||
|
BAZ
|
||
|
baz
|
||
|
EOF
|
||
|
|
||
|
##################################################################
|
||
|
|
||
|
# conditional inputs
|
||
|
|
||
|
Template <<EOF
|
||
|
%%BEGIN
|
||
|
%%IF %BONG%
|
||
|
bong is true
|
||
|
%%ELSE
|
||
|
bong is false
|
||
|
%%ENDIF
|
||
|
%%END
|
||
|
EOF
|
||
|
|
||
|
Expect <<EOF
|
||
|
bong is true
|
||
|
bong is true
|
||
|
bong is false
|
||
|
bong is true
|
||
|
bong is true
|
||
|
bong is false
|
||
|
EOF
|
||
|
|
||
|
Test <<EOF
|
||
|
BONG
|
||
|
2
|
||
|
1
|
||
|
0
|
||
|
2
|
||
|
1
|
||
|
0
|
||
|
EOF
|
||
|
|
||
|
##################################################################
|
||
|
|
||
|
# nested
|
||
|
|
||
|
Template <<EOF
|
||
|
A
|
||
|
%%IF %OUTER%
|
||
|
B
|
||
|
%%IF %INNER1%
|
||
|
C
|
||
|
%%ENDIF
|
||
|
D
|
||
|
%%IF %INNER2%
|
||
|
E
|
||
|
%%ENDIF
|
||
|
F
|
||
|
%%ENDIF
|
||
|
G
|
||
|
EOF
|
||
|
|
||
|
##
|
||
|
|
||
|
Expect <<EOF
|
||
|
A
|
||
|
G
|
||
|
EOF
|
||
|
|
||
|
export OUTER=0 INNER1=1 INNER2=1
|
||
|
Test nesting1 < /dev/null
|
||
|
|
||
|
##
|
||
|
|
||
|
Expect <<EOF
|
||
|
A
|
||
|
B
|
||
|
C
|
||
|
D
|
||
|
E
|
||
|
F
|
||
|
G
|
||
|
EOF
|
||
|
|
||
|
export OUTER=1 INNER1=1 INNER2=1
|
||
|
Test nesting2 < /dev/null
|
||
|
|
||
|
##
|
||
|
|
||
|
Expect <<EOF
|
||
|
A
|
||
|
B
|
||
|
C
|
||
|
D
|
||
|
F
|
||
|
G
|
||
|
EOF
|
||
|
|
||
|
export OUTER=1 INNER1=1 INNER2=0
|
||
|
Test nesting3 < /dev/null
|
||
|
|
||
|
##
|
||
|
|
||
|
Expect <<EOF
|
||
|
A
|
||
|
B
|
||
|
D
|
||
|
E
|
||
|
F
|
||
|
G
|
||
|
EOF
|
||
|
|
||
|
export OUTER=1 INNER1=0 INNER2=1
|
||
|
Test nesting4 < /dev/null
|
||
|
|
||
|
##################################################################
|
||
|
|
||
|
Template <<EOF
|
||
|
A
|
||
|
%%IF %OUTER%
|
||
|
B
|
||
|
%%IF %INNER1%
|
||
|
C
|
||
|
%%ELSE -- inner1
|
||
|
D
|
||
|
%%ENDIF
|
||
|
E
|
||
|
%%ELSE -- outer
|
||
|
F
|
||
|
%%IF %INNER2%
|
||
|
G
|
||
|
%%ELSE -- inner2
|
||
|
H
|
||
|
%%ENDIF
|
||
|
I
|
||
|
%%ENDIF
|
||
|
J
|
||
|
EOF
|
||
|
|
||
|
Expect <<EOF
|
||
|
A
|
||
|
B
|
||
|
D
|
||
|
E
|
||
|
J
|
||
|
EOF
|
||
|
|
||
|
export OUTER=1 INNER1=0 INNER2=1
|
||
|
|
||
|
Test nesting else 1 < /dev/null
|
||
|
|
||
|
##
|
||
|
|
||
|
Expect <<EOF
|
||
|
A
|
||
|
F
|
||
|
G
|
||
|
I
|
||
|
J
|
||
|
EOF
|
||
|
|
||
|
export OUTER=0 INNER1=1 INNER2=1
|
||
|
|
||
|
Test nesting else 2 < /dev/null
|
||
|
|
||
|
##################################################################
|
||
|
|
||
|
Template <<EOF
|
||
|
%%BEGIN
|
||
|
foo %value%
|
||
|
%%BEGIN
|
||
|
bar %value%
|
||
|
%%END
|
||
|
baz %value%
|
||
|
%%END
|
||
|
EOF
|
||
|
|
||
|
Expect <<EOF
|
||
|
foo 1
|
||
|
bar 1
|
||
|
bar 2
|
||
|
bar 3
|
||
|
baz 1
|
||
|
foo 2
|
||
|
bar 1
|
||
|
bar 2
|
||
|
bar 3
|
||
|
baz 2
|
||
|
foo 3
|
||
|
bar 1
|
||
|
bar 2
|
||
|
bar 3
|
||
|
baz 3
|
||
|
EOF
|
||
|
|
||
|
Test nested scopes <<EOF
|
||
|
value
|
||
|
1
|
||
|
2
|
||
|
3
|
||
|
EOF
|
||
|
|
||
|
##################################################################
|
||
|
|
||
|
Template <<EOF
|
||
|
A
|
||
|
%%RANGE I 1 3
|
||
|
B %I%
|
||
|
%%ENDRANGE
|
||
|
C
|
||
|
EOF
|
||
|
|
||
|
Expect <<EOF
|
||
|
A
|
||
|
B 1
|
||
|
B 2
|
||
|
B 3
|
||
|
C
|
||
|
EOF
|
||
|
|
||
|
Test range 1 < /dev/null
|
||
|
|
||
|
##################################################################
|
||
|
|
||
|
Template <<EOF
|
||
|
A
|
||
|
%%RANGE I 1 3
|
||
|
B %I%
|
||
|
%%RANGE J 4 5
|
||
|
C %I% %J%
|
||
|
%%ENDRANGE
|
||
|
D
|
||
|
%%ENDRANGE
|
||
|
E
|
||
|
EOF
|
||
|
|
||
|
Expect <<EOF
|
||
|
A
|
||
|
B 1
|
||
|
C 1 4
|
||
|
C 1 5
|
||
|
D
|
||
|
B 2
|
||
|
C 2 4
|
||
|
C 2 5
|
||
|
D
|
||
|
B 3
|
||
|
C 3 4
|
||
|
C 3 5
|
||
|
D
|
||
|
E
|
||
|
EOF
|
||
|
|
||
|
Test range 2 < /dev/null
|
||
|
|
||
|
##################################################################
|
||
|
|
||
|
Template <<EOF
|
||
|
A %I% %J%
|
||
|
%%RANGE K %I% %J%
|
||
|
B %I% %J% %K%
|
||
|
%%ENDRANGE
|
||
|
C %I% %J%
|
||
|
EOF
|
||
|
|
||
|
Expect <<EOF
|
||
|
A 3 5
|
||
|
B 3 5 3
|
||
|
B 3 5 4
|
||
|
B 3 5 5
|
||
|
C 3 5
|
||
|
EOF
|
||
|
|
||
|
export I=3 J=5
|
||
|
Test range 1 < /dev/null
|
||
|
|
||
|
##################################################################
|
||
|
|
||
|
Template <<EOF
|
||
|
%%IF 0
|
||
|
%%ELSE
|
||
|
%%ENDIF
|
||
|
EOF
|
||
|
|
||
|
Expect <<EOF
|
||
|
EOF
|
||
|
|
||
|
Test empty1 </dev/null
|
||
|
|
||
|
exit 0
|