* Added nsc parameter to xml2xpath() and ensured the xpath uses prefixes.

* Old code: add `NULL` as second parameter
This commit is contained in:
Olof hagsand 2022-05-09 13:26:42 +02:00
parent 82a0670031
commit 614c927343
6 changed files with 157 additions and 13 deletions

91
test/test_xpath_inverse.sh Executable file
View file

@ -0,0 +1,91 @@
#!/usr/bin/env bash
# Test xpath inverse function.
# That is, given an xml + xpath -> specific node x in xml -> xml2xpath(x)
# Magic line must be first in script (see README.md)
s="$_" ; . ./lib.sh || if [ "$s" = $0 ]; then exit 0; else return 0; fi
: ${clixon_util_xpath:=clixon_util_xpath}
ydir=$dir/yang
xml1=$dir/xml1.xml
xml2=$dir/xml2.xml
if [ ! -d $ydir ]; then
mkdir $ydir
fi
# canonical namespace xpath tests
# need yang modules
cat <<EOF > $ydir/a.yang
module a{
namespace "urn:example:a";
prefix a;
container x{
leaf y{
type string;
}
list z {
key k;
leaf k{
type string;
}
}
}
}
EOF
# Default prefix
cat <<EOF > $xml1
<x xmlns="urn:example:a">
<y>foo</y>
<z>
<k>1</k>
</z>
<z>
<k>2</k>
</z>
</x>
EOF
# Explicit indexes
cat <<EOF > $xml2
<a:x xmlns:a="urn:example:a">
<a:y>foo</a:y>
<a:z>
<a:k>1</a:k>
</a:z>
<a:z>
<a:k>2</a:k>
</a:z>
</a:x>
EOF
new "xpath leaf default ns"
expectpart "$($clixon_util_xpath -If $xml1 -y $ydir -p /x/y)" 0 'Inverse: /x/y'
new "xpath leaf explicit prefix"
expectpart "$($clixon_util_xpath -If $xml2 -y $ydir -p /a:x/a:y)" 0 'Inverse: /a:x/a:y'
new "xpath leaf explicit prefix"
expectpart "$($clixon_util_xpath -If $xml2 -y $ydir -p /a:x/a:y -n a:urn:example:a)" 0 'Inverse: /a:x/a:y'
new "xpath leaf no prefix"
expectpart "$($clixon_util_xpath -If $xml1 -y $ydir -p /x/y -n a:urn:example:a)" 0 'Inverse: /a:x/a:y'
new "xpath leaf other nsc"
expectpart "$($clixon_util_xpath -If $xml1 -y $ydir -p /a:x/a:y -n b:urn:example:a)" 0 'Inverse: /b:x/b:y' --not-- /a:x/a:y
new "xpath list same nsc"
expectpart "$($clixon_util_xpath -If $xml1 -y $ydir -p /a:x/a:z[a:k='2'] -n a:urn:example:a)" 0 'Inverse: /a:x/a:z\[a:k="2"\]'
new "xpath list same nsc"
expectpart "$($clixon_util_xpath -If $xml1 -y $ydir -p /a:x/a:z[a:k='2'] -n b:urn:example:a)" 0 'Inverse: /b:x/b:z\[b:k="2"\]' --not-- '/a:x/a:z'
rm -rf $dir
# unset conditional parameters
unset clixon_util_xpath
new "endtest"
endtest