|
#!/bin/bash |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
cli=../src/freesasa |
|
datadir=../tests/data |
|
sharedir=../share/ |
|
dump=tmp/test-cli.dump |
|
nofile=nonexistent-file |
|
nodir=nonexistent-dir/file |
|
smallpdb=$datadir/rsa/ALA.pdb |
|
|
|
errors=0 |
|
use_xml=0 |
|
if [[ "x" = "xyes" ]] ; then |
|
use_xml=1 |
|
fi |
|
use_xmllint=0 |
|
if [[ "x" = "xxmllint" ]] ; then |
|
use_xmllint=1 |
|
fi |
|
use_json=0 |
|
if [[ "x" = "xyes" ]] ; then |
|
use_json=1 |
|
fi |
|
use_jsonlint=0 |
|
if [[ "x" = "xjsonlint" ]] ; then |
|
use_jsonlint=1 |
|
fi |
|
|
|
|
|
function assert_pass |
|
{ |
|
eval $1 |
|
if [[ $? -ne 0 ]]; then |
|
echo Error: \"$1\" failed |
|
let errors=errors+1 |
|
|
|
|
|
fi |
|
} |
|
|
|
function assert_fail |
|
{ |
|
eval $1 2>/dev/null |
|
if [[ $? -eq 0 ]]; then |
|
echo Error: \"$1\" did not fail as expected |
|
let errors=errors+1 |
|
|
|
|
|
fi |
|
} |
|
|
|
function assert_equal_opt |
|
{ |
|
tmp1=tmp/tmp1 |
|
tmp2=tmp/tmp2 |
|
eval $1 $2 > $tmp1 2>/dev/null |
|
eval $1 $3 > $tmp2 2>/dev/null |
|
diff $tmp1 $tmp2 |
|
if [[ $? -ne 0 ]]; then |
|
echo Error: \"$1\" gives different results with arguments \"$2\" and \"$3\" |
|
let errors=errors+1 |
|
|
|
|
|
fi |
|
} |
|
|
|
if [[ ! -d tmp ]]; then mkdir tmp; fi |
|
|
|
rm -f tmp/* |
|
echo |
|
echo "== Basic file errors ==" |
|
assert_fail "$cli > $dump" |
|
assert_fail "$cli $nofile > $dump" |
|
assert_fail "$cli < $nofile > $dump" |
|
assert_fail "$cli -c $nofile < $smallpdb > $dump" |
|
assert_fail "$cli < $smallpdb > $nodir" |
|
assert_fail "$cli -e $nodir $smallpdb" |
|
assert_fail "$cli -o $nodir $smallpdb" |
|
|
|
assert_fail "$cli -o $dump -o $dump $smallpdb" |
|
|
|
assert_fail "$cli --B-value-file $nodir < $smallpdb > $dump" |
|
assert_fail "$cli --residue-type-file $nodir < $smallpdb > $dump" |
|
assert_fail "$cli --residue-file $nodir < $smallpdb > $dump" |
|
echo |
|
echo "== General options ==" |
|
|
|
assert_fail "$cli --blablabla $smallpdb" |
|
assert_fail "$cli -x $smallpdb" |
|
|
|
assert_fail "$cli $smallpdb -o" |
|
|
|
assert_pass "$cli -h > $dump 2> /dev/null" |
|
assert_pass "$cli --deprecated > $dump 2> /dev/null" |
|
|
|
version=`$cli -v | head -n 1` |
|
assert_pass "echo $version | perl -ne 'if (m/FreeSASA (\d+\.)*\d$/) {exit 0} else {exit 1}'" |
|
|
|
assert_pass "$cli -o $dump -e tmp/err -n 1 $smallpdb" |
|
echo |
|
echo "== Testing S&R ==" |
|
assert_pass "$cli -S < $datadir/1ubq.pdb > $dump" |
|
echo |
|
|
|
assert_pass "grep 'source\s\s*: stdin' $dump" |
|
$cli -S $datadir/1ubq.pdb > $dump |
|
assert_pass "grep 'source\s\s*: $datadir/1ubq.pdb' $dump" |
|
assert_pass "grep 'atoms\s\s*: 602' $dump" |
|
assert_pass "grep 'probe-radius\s\s*: [[:digit:]]' $dump" |
|
assert_pass "grep 'threads\s\s*: [[:digit:]]' $dump" |
|
assert_pass "grep 'testpoints\s\s*: [[:digit:]]' $dump" |
|
assert_pass "grep 'algorithm\s\s*: \w' $dump" |
|
assert_pass "grep 'Total\s\s*:\s\s*4834.72' $dump" |
|
assert_pass "grep 'Polar\s\s*:\s\s*2515.82' $dump" |
|
assert_pass "grep 'Apolar\s\s*:\s\s*2318.90' $dump" |
|
|
|
|
|
|
|
|
|
assert_pass "$cli -S -Y $datadir/1d3z.pdb -w > $dump" |
|
assert_pass "grep 'atoms\s\s*: 1231' $dump" |
|
assert_pass "grep 'Total\s\s*:\s\s*5035.61' $dump" |
|
assert_pass "$cli -S -H -w $datadir/1ubq.pdb > $dump" |
|
assert_pass "grep 'atoms\s\s*: 660' $dump" |
|
assert_pass "grep 'Total\s\s*:\s\s*5656.65' $dump" |
|
assert_pass "$cli -S -n 50 < $datadir/1ubq.pdb > $dump" |
|
assert_fail "$cli -S -n 0 < $datadir/1ubq.pdb > $dump" |
|
echo |
|
echo "== Testing -m -M and -C options ==" |
|
|
|
assert_pass "$cli -n 2 -S -M $datadir/1d3z.pdb > $dump" |
|
n_mod=`grep 1d3z.pdb $dump | wc -l` |
|
assert_pass "test $n_mod -eq 10" |
|
assert_pass "$cli -n 2 -S -C $datadir/1d3z.pdb > $dump" |
|
n_mod=`grep 1d3z.pdb $dump | wc -l` |
|
assert_pass "test $n_mod -eq 1" |
|
assert_pass "$cli -n 2 -S -M -C $datadir/1d3z.pdb > $dump" |
|
n_mod=`grep 1d3z.pdb $dump | wc -l` |
|
assert_pass "test $n_mod -eq 10" |
|
assert_pass "$cli -n 2 -S -M $datadir/2jo4.pdb > $dump" |
|
n_mod=`grep 2jo4.pdb $dump | wc -l` |
|
assert_pass "test $n_mod -eq 10" |
|
assert_pass "$cli -n 2 -S -C $datadir/2jo4.pdb > $dump" |
|
n_mod=`grep 2jo4.pdb $dump | wc -l` |
|
assert_pass "test $n_mod -eq 4" |
|
assert_pass "$cli -n 2 -S -M -C $datadir/2jo4.pdb > $dump" |
|
n_mod=`grep 2jo4.pdb $dump | wc -l` |
|
assert_pass "test $n_mod -eq 40" |
|
assert_fail "$cli -mM $datadir/2jo4.pdb > $dump" |
|
echo |
|
echo "== Testing L&R ==" |
|
assert_pass "$cli -L < $smallpdb > $dump" |
|
assert_pass "$cli -L -n 10 < $smallpdb > $dump" |
|
assert_fail "$cli -L -n 0 < $smallpdb > $dump" |
|
echo |
|
echo "== Testing option --chain-groups ==" |
|
assert_pass "$cli -g A -S -n 10 $smallpdb > $dump" |
|
assert_fail "$cli -g B -S -n 10 $smallpdb > $dump" |
|
assert_pass "$cli -g AB -S -n 10 $datadir/2jo4.pdb > $dump" |
|
assert_fail "$cli -g E -S -n 10 $datadir/2jo4.pdb > $dump" |
|
assert_pass "$cli -g AB+CD -S -n 10 $datadir/2jo4.pdb > $dump" |
|
assert_fail "$cli -g A-B -S -n 10 $datadir/2jo4.pdb > $dump" |
|
assert_fail "$cli -g AB -S -n 10 $smallpdb > $dump" |
|
assert_fail "$cli -g A+B -S -n 10 $smallpdb > $dump" |
|
echo |
|
echo "== Testing probe radius ==" |
|
assert_fail "$cli -S -n 10 -p=-1 < $datadir/1ubq.pdb > $dump" |
|
assert_pass "$cli -S -n 10 -p 1 < $datadir/1ubq.pdb > $dump" |
|
assert_pass "$cli -S -p 1.4 --format=pdb < $datadir/1ubq.pdb | grep -v REMARK > tmp/bfactor.pdb" |
|
assert_pass "diff tmp/bfactor.pdb $datadir/1ubq.B.pdb" |
|
echo "== Testing option --unknown ==" |
|
assert_pass "$cli --unknown=guess -Y -w -n 2 $datadir/1d3z.pdb > $dump" |
|
assert_pass "grep 1231 $dump" |
|
assert_pass "$cli --unknown=skip -Y -w -n 2 $datadir/1d3z.pdb > $dump" |
|
assert_pass "grep 602 $dump" |
|
assert_fail "$cli --unknown=halt -Y -w -n 2 $datadir/1d3z.pdb > $dump" |
|
|
|
assert_fail "$cli --unknown=haltt -Y -w -n 2 $datadir/1d3z.pdb > $dump" |
|
echo |
|
echo "== Testing user-configurations ==" |
|
assert_pass "$cli -c $sharedir/naccess.config -n 3 < $smallpdb > $dump" |
|
assert_pass "$cli -c $sharedir/oons.config -n 3 < $smallpdb > $dump" |
|
assert_fail "$cli -c $datadir/err.config -n 3 < $smallpdb > $dump" |
|
|
|
assert_fail "$cli -c $datadir/naccess.config -n 3 -O < $smallpdb > $dump" |
|
assert_fail "$cli -c $datadir/naccess.config -n 3 --radii=naccess < $smallpdb > $dump" |
|
echo |
|
echo "== Testing --radii" == |
|
assert_pass "$cli --radii=naccess -n 3 < $datadir/1ubq.pdb > tmp/static.dat" |
|
assert_pass "$cli -c $sharedir/naccess.config -n 3 < $datadir/1ubq.pdb > tmp/from_config.dat" |
|
assert_pass "diff tmp/static.dat tmp/from_config.dat" |
|
assert_pass "$cli --radii=protor -n 3 < $datadir/1ubq.pdb > tmp/static.dat" |
|
assert_pass "$cli -c $sharedir/protor.config -n 3 < $datadir/1ubq.pdb > tmp/from_config.dat" |
|
assert_pass "diff tmp/static.dat tmp/from_config.dat" |
|
assert_fail "$cli --radii=bla -n 3 < $datadir/1ubq.pdb > $dump" |
|
echo |
|
echo "== Testing res format ==" |
|
assert_pass "$cli -S --format=res -o tmp/restype -e $dump < $datadir/1ubq.pdb" |
|
assert_pass "diff tmp/restype $datadir/restype.reference" |
|
|
|
assert_pass "$cli -S -r < $datadir/1ubq.pdb > tmp/restype" |
|
assert_pass "diff tmp/restype $datadir/restype.reference" |
|
echo |
|
echo "== Testing seq format ==" |
|
assert_pass "$cli -S --format=seq -o tmp/seq < $datadir/1ubq.pdb" |
|
assert_pass "diff tmp/seq $datadir/seq.reference" |
|
|
|
assert_pass "$cli -S -R < $datadir/1ubq.pdb > tmp/seq" |
|
assert_pass "diff tmp/seq $datadir/seq.reference" |
|
echo |
|
echo "== Testing PDB format ==" |
|
assert_pass "$cli -S --format=pdb < $datadir/1ubq.pdb | grep -v REMARK > tmp/bfactor.pdb" |
|
assert_pass "diff tmp/bfactor.pdb $datadir/1ubq.B.pdb" |
|
|
|
assert_pass "$cli -S -B < $datadir/1ubq.pdb | grep -v REMARK > tmp/bfactor.pdb" |
|
assert_pass "diff tmp/bfactor.pdb $datadir/1ubq.B.pdb" |
|
echo |
|
echo "== Testing RSA format ==" |
|
for r in protor naccess |
|
do |
|
for p in $(ls $datadir/rsa/*.pdb) |
|
do |
|
rel=$($cli -L -n 1000 $p --format=rsa --radii=$r | grep "A 2" | sed "s/[[:space:]]\{1,\}/ /g" | cut -f 6,8,10,12,14 -d ' ') |
|
if [[ $p == *"GLY"* ]] |
|
then |
|
assert_pass "test '$rel' = '100.0 N/A 100.0 100.0 100.0' && test $p" |
|
else |
|
assert_pass "test '$rel' = '100.0 100.0 100.0 100.0 100.0' && test $p" |
|
fi |
|
done |
|
done |
|
assert_fail "$cli --format=rsa -C $smallpdb" |
|
assert_fail "$cli --format=rsa -M $smallpdb" |
|
assert_pass "$cli -L -n 1000 --format=rsa -O -w $datadir/rsa/ALA.pdb > tmp/no_rel" |
|
rel=$(grep "A 2" tmp/no_rel | sed "s/[[:space:]]\{1,\}/ /g" | cut -f 6,8,10,12,14 -d ' ') |
|
assert_pass "test '$rel' = 'N/A N/A N/A N/A N/A'" |
|
|
|
assert_pass "$cli --rsa $datadir/1ubq.pdb > $dump" |
|
|
|
|
|
if [[ use_xml -eq 1 ]] ; then |
|
echo |
|
echo "== Testing XML ==" |
|
xml_file=tmp/test.xml |
|
|
|
assert_pass "$cli --format=xml $smallpdb > $xml_file" |
|
if [[ use_xmllint -eq 1 ]] ; then assert_pass "xmllint $xml_file > $dump"; fi |
|
|
|
assert_pass "$cli --format=xml --depth=atom $smallpdb > $xml_file" |
|
if [[ use_xmllint -eq 1 ]] ; then assert_pass "xmllint $xml_file > $dump"; fi |
|
assert_pass "grep '<atom' $xml_file > $dump" |
|
assert_pass "grep '<residue' $xml_file > $dump" |
|
assert_pass "grep '<chain' $xml_file > $dump" |
|
|
|
assert_pass "$cli --format=xml --depth=residue $smallpdb > $xml_file" |
|
if [[ use_xmllint -eq 1 ]] ; then assert_pass "xmllint $xml_file > $dump"; fi |
|
assert_fail "grep '<atom' $xml_file > $dump" |
|
assert_pass "grep '<residue' $xml_file > $dump" |
|
assert_pass "grep '<chain' $xml_file > $dump" |
|
|
|
assert_pass "$cli --format=xml --depth=chain $smallpdb > $xml_file" |
|
if [[ use_xmllint -eq 1 ]] ; then assert_pass "xmllint $xml_file > $dump"; fi |
|
assert_fail "grep '<atom' $xml_file > $dump" |
|
assert_fail "grep '<residue' $xml_file > $dump" |
|
assert_pass "grep '<chain' $xml_file > $dump" |
|
|
|
assert_pass "$cli --format=xml --depth=structure $smallpdb > $xml_file" |
|
if [[ use_xmllint -eq 1 ]] ; then assert_pass "xmllint $xml_file > $dump"; fi |
|
assert_fail "grep '<atom' $xml_file > $dump" |
|
assert_fail "grep '<residue' $xml_file > $dump" |
|
assert_fail "grep '<chain' $xml_file > $dump" |
|
|
|
assert_pass "$cli --format=xml -C $datadir/2jo4.pdb > $xml_file" |
|
if [[ use_xmllint -eq 1 ]] ; then assert_pass "xmllint $xml_file > $dump"; fi |
|
assert_fail "grep '<selection' $xml_file > $dump" |
|
|
|
assert_pass "$cli --format=xml -C $smallpdb --select=\"ala, resn ala\" --select=\"C, name C\" > $xml_file" |
|
if [[ use_xmllint -eq 1 ]] ; then assert_pass "xmllint $xml_file > $dump"; fi |
|
assert_pass "grep '<selection' $xml_file > $dump" |
|
|
|
|
|
assert_fail "$cli --format=xml --depth=structures $smallpdb > $xml_file" |
|
fi |
|
|
|
if [[ use_json -eq 1 ]] ; then |
|
echo |
|
echo "== Testing JSON ==" |
|
json_file=tmp/test.json |
|
assert_pass "$cli --format=json $smallpdb > $json_file" |
|
if [[ use_jsonlint -eq 1 ]] ; then assert_pass "jsonlint $json_file > $dump"; fi |
|
|
|
assert_pass "$cli --format=json --depth=atom $smallpdb > $json_file" |
|
if [[ use_jsonlint -eq 1 ]] ; then assert_pass "jsonlint $json_file > $dump"; fi |
|
assert_pass "grep 'atom' $json_file > $dump" |
|
assert_pass "grep 'residue' $json_file > $dump" |
|
assert_pass "grep 'chain' $json_file > $dump" |
|
|
|
assert_pass "$cli --format=json -C $datadir/2jo4.pdb > $json_file" |
|
if [[ use_jsonlint -eq 1 ]] ; then assert_pass "jsonlint $json_file > $dump"; fi |
|
assert_fail "grep 'selection' $json_file > $dump" |
|
|
|
assert_pass "$cli --format=json $smallpdb --select=\"ala, resn ala\" --select=\"C, name C\" > $json_file" |
|
if [[ use_jsonlint -eq 1 ]] ; then assert_pass "jsonlint $json_file > $dump"; fi |
|
assert_pass "grep 'selection' $json_file > $dump" |
|
fi |
|
echo |
|
echo "== Testing option --select ==" |
|
assert_pass "$cli -S --select \"s1, resn ala\" --select \"s2, resn arg\" --select \"s3, resi 1\" $datadir/1ubq.pdb > tmp/select" |
|
sel_ala=$(grep s1 tmp/select | cut -f 2 -d ':' | sed 's/\ //g') |
|
res_ala=$(grep ALA tmp/restype | cut -f 2 -d ':' | sed 's/\ //g') |
|
if [ "$res_ala" != "$sel_ala" ]; |
|
then |
|
let errors=errors+1 |
|
echo "Error: --format=res and --select don't give same result for ALA ('$res_ala' and '$sel_ala')" |
|
fi |
|
sel_arg=$(grep s2 tmp/select | cut -f 2 -d ':' | sed 's/\ //g' | sed s/A2//) |
|
res_arg=$(grep ARG tmp/restype | cut -f 2 -d ':' | sed 's/\ //g' | sed s/A2// | sed s/ARG//) |
|
if [ "$res_arg" != "$sel_arg" ] |
|
then |
|
let errors=errors+1 |
|
echo "Error: --format=res and --select don't give same result for ARG ('$res_arg' and '$sel_arg')" |
|
fi |
|
sel_res1=$(grep s3 tmp/select | cut -f 2 -d ':' | sed 's/\ //g' | sed s/A2//) |
|
seq_res1=$(grep " 1 " tmp/seq | cut -f 2 -d ':' | cut -f 2 -d 'T' | sed 's/ //g') |
|
if [ "$seq_res1" != "$sel_res1" ] |
|
then |
|
let errors=errors+1 |
|
echo "Error: --format=seq and --select don't give same result for first residue in 1ubq.pdb ('$seq_res1' and '$sel_res1')" |
|
fi |
|
echo |
|
echo |
|
echo "== Testing multithreading ==" |
|
assert_pass "$cli -t 1 -S -n 10 < $smallpdb > $dump" |
|
assert_pass "$cli -t 2 -S -n 10 < $smallpdb > $dump" |
|
assert_pass "$cli -t 10 -S -n 10 < $smallpdb > $dump" |
|
assert_pass "$cli -t 1 -L -n 3 < $smallpdb > $dump" |
|
assert_pass "$cli -t 2 -L -n 3 < $smallpdb > $dump" |
|
assert_pass "$cli -t 10 -L -n 3 < $smallpdb > $dump" |
|
assert_fail "$cli -t 0 < $smallpdb > $dump" |
|
echo |
|
echo "== Testing conflicting options ==" |
|
assert_fail "$cli -m -M $smallpdb > $dump" |
|
assert_fail "$cli -g A+B -C $smallpdb > $dump" |
|
assert_fail "$cli -c $sharedir/naccess.config --radii=naccess $smallpdb > $dump" |
|
assert_fail "$cli -O --radii=naccess $smallpdb > $dump" |
|
assert_fail "$cli -c $sharedir/naccess.config -O $datadir/1ubq.pdb > $dump" |
|
echo |
|
echo "== Testing long-options ==" |
|
assert_equal_opt "$cli $smallpdb" "-h" "--help" |
|
assert_equal_opt "$cli $smallpdb" "-v" "--version" |
|
assert_equal_opt "$cli $smallpdb" "-S -n 10" "--shrake-rupley -n 10" |
|
assert_equal_opt "$cli $smallpdb" "-L -n 3 " "--lee-richards -n 3 " |
|
assert_equal_opt "$cli $smallpdb" "-p 1.5 -n 3" "--probe-radius=1.5 -n 3" |
|
assert_equal_opt "$cli $smallpdb" "-L -n 3 " "-L --resolution=3 " |
|
assert_equal_opt "$cli $smallpdb" "-n 5" "--resolution=5" |
|
assert_equal_opt "$cli $smallpdb" "-t 4" "--n-threads=4" |
|
assert_equal_opt "$cli $smallpdb" "-c $sharedir/naccess.config" "--config-file=$sharedir/naccess.config" |
|
assert_equal_opt "$cli $smallpdb" "-H -w" "--hetatm -w" |
|
assert_equal_opt "$cli $datadir/1d3z.pdb" "-Y -n 2" "--hydrogen -n 2" |
|
assert_equal_opt "$cli $datadir/1d3z.pdb" "-m -n 2" "--join-models -n 2" |
|
assert_equal_opt "$cli $datadir/1d3z.pdb" "-C -n 2" "--separate-chains -n 2" |
|
assert_equal_opt "$cli $datadir/1d3z.pdb" "-M -n 2" "--separate-models -n 2" |
|
assert_equal_opt "$cli $smallpdb" "-w -n 2" "--no-warnings -n 2" |
|
assert_equal_opt "$cli $datadir/2jo4.pdb" "-g AB+CD -n 2" "--chain-groups AB+CD -n 2" |
|
assert_equal_opt "$cli $datadir/2jo4.pdb" "-g AB+CD -n 2" "-g AB -g CD -n 2" |
|
assert_equal_opt "$cli $datadir/1ubq.B.pdb" "-O -n 2" "--radius-from-occupancy -n 2" |
|
assert_equal_opt "$cli $smallpdb" "-f xml -n 2" "--format=xml -n 2" |
|
|
|
assert_equal_opt "$cli $smallpdb" "-r -n 2" "--foreach-residue-type -n 2" |
|
assert_equal_opt "$cli $smallpdb" "-R -n 2" "--foreach-residue -n 2" |
|
assert_equal_opt "$cli $smallpdb" "-B -n 2" "--print-as-B-values -n 2" |
|
assert_equal_opt "$cli $smallpdb" "-l -n 2" "--no-log -n 2" |
|
|
|
rm -f tmp/* |
|
|
|
echo |
|
echo "There where $errors errors." |
|
echo |
|
if [ $errors -gt 0 ]; then |
|
exit $errors |
|
else |
|
exit 0 |
|
fi |
|
|