ref: e32330da41503781238c33e659e8e5e095662349
dir: /test/xq.rc/
#!/bin/rc
rfork en
ramfs
cd ..
flagfmt='e:extended, c:console'
if (! ifs=() eval `{aux/getflags $*}) {
aux/usage
exit usage
}
nl='
'
fn testxq{
# hack to print test cases more correct
p=`{echo $"1 | sed 's/''''/''/g'}
# hack to make nested quotes in test cases more intuitive
n=`{echo $"1 | sed 's/''/''''/g'}
c=`{echo $"cmd ''''^$"n^''' >/tmp/out >[2]/tmp/err'}
eval $"c
if (~ $2 '')
echo -n '' >/tmp/want
if not
echo $"2 >/tmp/want
if (~ $#extended 1) {
echo $nl^'expect:' $"p
cat /tmp/want
echo got:
cat /tmp/out
echo err:
cat /tmp/err
}
if (cmp -s /tmp/want /tmp/out) {
if (~ $#extended 1)
echo '→ success' $"p
}
if not {
echo '→ failed' $"1
}
}
cat <<EOF >/tmp/test.xml
<?xml?>
<hello hattr="hval">
<world wattr="wval" wattr2="bla">
Free text
<stuff sattr="sval"/>
</world>
<world wattr="wval2">
Another free text
<stuff sattr="sval2"/>
</world>
</hello>
EOF
# first test expects data from pipe
cmd='cat /tmp/test.xml | 6.xq -t '
testxq '/hello/world' \
'<world wattr=''wval'' wattr2=''bla'' />
<world wattr=''wval2'' />'
# remaining tests read from file directly
cmd='6.xq -t -f /tmp/test.xml '
testxq '/hello/world' \
'<world wattr=''wval'' wattr2=''bla'' />
<world wattr=''wval2'' />'
testxq '/hello/world/@wattr' \
'wval
wval2'
testxq '/hello/world/text()' \
'Free text
Another free text'
testxq '/hello/world[@wattr=''wval2'']/text()' \
'Another free text'
testxq '/hello/world[@wattr=''wval2'']/stuff' \
'<stuff sattr=''sval2'' />'
testxq '/hello/world[@wattr=''none'']' ''
testxq '/hello//stuff/@sattr' \
'sval
sval2'
testxq '/hello/world[2]' \
'<world wattr=''wval2'' />'
testxq '/hello/world[2]/stuff' \
'<stuff sattr=''sval2'' />'
if (~ $#console 0)
exit
echo '
enter console, ^D to exit'
6.xq -f /tmp/test.xml