#!/bin/bash
#shellcheck disable=SC2016,SC1090
. "$TF_DIR/include/subtest.sh"
. "$TF_DIR/include/tools.sh"
PRETTY=plain
. "$(sfpath)" || tf_exit_error "failed to init shellfu"
shellfu import pxpath || tf_exit_error "failed to import pxpath"
tf_enum_subtests() {
echo elem_abs
echo elem_rel
echo attr
echo inv_xpath
echo usage_noargs
echo usage_1arg
echo io_nofile
echo io_pipe
#FIXME: missing coverage: more usage/xml/io errors, [] expressions, namespaces...
}
mkxml() {
echo ''
echo ' '
echo ' '
echo ' pass'
echo ' '
echo ' '
echo ' none'
echo ' '
echo ' '
echo ' pass'
echo ' '
echo ' '
echo ''
}
mka() {
local what=$1
case $name:$what in
elem_abs:xpath)
echo '/benchmark/testresult/foo'
;;
elem_abs:o_out)
echo ''
echo ' pass'
echo ' '
echo ''
echo ' none'
echo ' '
echo ''
echo ' pass'
echo ' '
;;
elem_rel:xpath)
echo '//foo/bar'
;;
elem_rel:o_out)
echo 'pass'
echo 'none'
echo 'pass'
;;
attr:xpath)
echo '//foo/@id'
;;
attr:o_out)
echo 'one'
echo 'two'
echo 'three'
;;
inv_xpath:xpath)
echo '//foo@id'
;;
inv_xpath:o_err)
echo 'Invalid expression'
echo 'Traceback (most recent call last):'
echo ' File _SOME_FILE_, line _SOME_LINE_, in '
echo ' matches = context.xpathEvalExpression(expr)'
echo ' File _SOME_FILE_, line _SOME_LINE_, in xpathEvalExpression'
echo " if ret is None:raise xpathError('xmlXPathEvalExpression() failed')"
echo 'libxml2.xpathError: xmlXPathEvalExpression() failed'
;;
inv_xpath:o_es)
echo 1
;;
usage_*:o_err)
echo 'usage: __pxpath__usage usage: pxpath [-f FMT] EXPR FILE [NSNAME:NSURI]'
;;
usage_*:o_es)
echo 2
;;
io_nofile:o_err)
echo 'no such file, ignoring query: nonexistent.xml'
;;
io_nofile:o_es)
echo 1
;;
io_pipe:o_out)
echo 'pass'
echo 'none'
echo 'pass'
;;
*:o_out) true ;;
*:o_err) true ;;
*:o_es) echo 0 ;;
*:xpath) echo '//foo/bar' ;;
*:*) tf_exit_error "bad test name or part name: $name:$what" ;;
esac
}
runtest() {
local xpath
local r_es=0
mkdir -p "test" "result/$name"
mkxml > "test.xml"
xpath=$(mka xpath)
case $name in
usage_1arg) pxpath "$xpath" ;;
usage_noargs) pxpath ;;
io_nofile) pxpath "$xpath" "nonexistent.xml" ;;
io_adir) pxpath "$xpath" oracle ;;
io_pipe) <"test.xml" pxpath "$xpath" - ;;
*) pxpath "$xpath" "test.xml" ;;
esac >out.cache 2>err.cache; r_es=$?
cat out.cache
&2
return $r_es
}
tf_do_subtest() {
local name=$1
local o_out=oracle/$name.stdout
local o_err=oracle/$name.stderr
mka o_out >"$o_out"
mka o_err >"$o_err"
o_es=$(mka o_es)
tf_testflt -n "$name" -E "$o_err" -O "$o_out" -S "$o_es" runtest
}
mkdir -p oracle
tf_do_subtests