From c2fb1f691195b859fa22515d49a69d731a43eb6c Mon Sep 17 00:00:00 2001 From: Dwight Perry Date: Mon, 19 Sep 2011 17:58:20 -0400 Subject: [PATCH] Added test cases for imagepath attribute feature --- rtest/imagepath_test.txt | 76 ++++++++++++++ rtest/imagepath_test/base.gv | 10 ++ rtest/imagepath_test/delim.sed | 1 + rtest/imagepath_test/gen_graph.sh | 100 +++++++++++++++++++ rtest/imagepath_test/image.jpg | Bin 0 -> 13934 bytes rtest/imagepath_test/image_dir/image.jpg | Bin 0 -> 13987 bytes rtest/imagepath_test/imagepath_dir/image.jpg | Bin 0 -> 15367 bytes rtest/imagepath_test/imagepath_test.sh | 9 ++ rtest/imagepath_test/save_png_files.sh | 2 + rtest/imagepath_test/test_cases | 10 ++ 10 files changed, 208 insertions(+) create mode 100644 rtest/imagepath_test.txt create mode 100644 rtest/imagepath_test/base.gv create mode 100644 rtest/imagepath_test/delim.sed create mode 100755 rtest/imagepath_test/gen_graph.sh create mode 100644 rtest/imagepath_test/image.jpg create mode 100644 rtest/imagepath_test/image_dir/image.jpg create mode 100644 rtest/imagepath_test/imagepath_dir/image.jpg create mode 100755 rtest/imagepath_test/imagepath_test.sh create mode 100755 rtest/imagepath_test/save_png_files.sh create mode 100644 rtest/imagepath_test/test_cases diff --git a/rtest/imagepath_test.txt b/rtest/imagepath_test.txt new file mode 100644 index 000000000..28d588b32 --- /dev/null +++ b/rtest/imagepath_test.txt @@ -0,0 +1,76 @@ +# Graphviz test suite +# Tests are separated by blank or comment lines. +# Tests have the following syntax: +# testname +# Test input (one-line graph or name of .gv file or =) +# In the last case, the input file is taken as testname.gv +# One or more subtests of the form: +# layout_alg output_format additional_flags +# +# For example, the test +# Shapes +# shapes.gv +# dot ps +# neato png "-Gsize=3,3 -Ncolor=red" +# specifies the "shapes" test, using shapes.gv as input, and +# run "dot -Tps" and "neato -Tpng -Gsize=3,3 -Ncolor=red" on the input. +# +#Test graph names indicate the image attribute and the imagepath attribute +#being tested. For instance val_val.gv, is a graph that has the image +#attribute directory set to a valid directory name and the imagepath attribute +#directory set to a valid directory name. Likewise inv_inv.gv has both +#attribute directories set to an invalid directory name and nul_nul.gv has +#no setting for the image attribute and the imagepath attribute directories. +#Graphs named with combinations of val, inv and nul have +#image and imagepath attributes set correspondingly. + +#Since this test relies on absolute pathnames, it is necessary to run a +#shell script to generate the test graphs. +#Run imagepath_test.sh from within the imagepath_test directory before running +#rtest on this test suite. This script creates the input graphs and output png +#files and stores them in the graphs and imagepath_test/nshare directories. +#The png files may be copied into the nshare directory by running +#imagepath_test/save_png_files.sh when it is appropriate to update the expected +#test output. + +#The graphs in this test suite should also be tested using the mac os user +#interface. Select each of the test graphs from the Graphviz.app and visually +#determine whether the tests complete successfully. The image that is displayed +#should correspond to the expected result message that appears below it. + +val_val += +dot png + +val_inv += +dot png + +val_nul += +dot png + +inv_val += +dot png + +inv_inv += +dot png + +inv_nul += +dot png + +nul_val += +dot png + +nul_inv += +dot png + +nul_nul += +dot png + diff --git a/rtest/imagepath_test/base.gv b/rtest/imagepath_test/base.gv new file mode 100644 index 000000000..70a45272d --- /dev/null +++ b/rtest/imagepath_test/base.gv @@ -0,0 +1,10 @@ +graph G { imagepath_attr + +a[shape=plaintext,label=<
+config +
>]; +b[shape=box,fontsize=30,fontname="Helvetica-Bold",label=expect,image_attr]; +} + diff --git a/rtest/imagepath_test/delim.sed b/rtest/imagepath_test/delim.sed new file mode 100644 index 000000000..aed0b544e --- /dev/null +++ b/rtest/imagepath_test/delim.sed @@ -0,0 +1 @@ +s:/:\\/:g diff --git a/rtest/imagepath_test/gen_graph.sh b/rtest/imagepath_test/gen_graph.sh new file mode 100755 index 000000000..57a357288 --- /dev/null +++ b/rtest/imagepath_test/gen_graph.sh @@ -0,0 +1,100 @@ +#! /home/dperry/work_related/packages/arch/linux.i386-64/src/cmd/ksh93/ksh + +#directory where the executable is located +project_dir=`pwd | sed -f delim.sed` + +#directory pointed to by the image attribute +image_dir=`pwd | sed -e s:$:\\/image_dir: | sed -f delim.sed` + +#directory pointed to by the imagepath attribute +imagepath_dir=`pwd | sed -e s:$:\\/imagepath_dir: | sed -f delim.sed` + +#an invalid absolute path +inv_dir=`echo -n "/inv_dir" | sed -f delim.sed` + +#echo "project_dir=${project_dir}" +#echo "abs_dir=${abs_dir}" +#echo "rel_dir=${rel_dir}" +#echo "cur_dir=${cur_dir}" +#echo "inv_dir=${inv_dir}" + +#input parameters: +# a - image attribute directory type: val (valid), inv (invalid), nul (not present) +# b - imagepath attribute directory type: val (valid), inv (invalid), nul (not present) +# c - expectation +# d - name of output graph + +read a b c d + +#set image attribute directory +case $a in + "val") image="${image_dir}\/"; + image_attr="valid absolute pathname";; + "inv") image="${inv_dir}\/"; + image_attr="invalid absolute pathname";; + "nul") image=""; + image_attr="null";; + *) echo "Missing image attribute"; + echo "Usage arg0 image imagepath expectation output_filename"; + echo "image and imagepath valid values: val, inv, nul" + echo "expectation - expected outcome message" + echo "output_filename - defaults to test" + exit 1;; +esac + +#set imagepath attribute directory +case $b in + "val") imagepath="${imagepath_dir}\/"; + imagepath_attr="valid absolute pathname";; + "inv") imagepath="${inv_dir}\/"; + imagepath_attr="invalid absolute pathname";; + "nul") imagepath=""; + imagepath_attr="null";; + *) echo "Missing imagepath attribute"; + echo "Usage arg0 image imagepath expectation output_filename"; + echo "image and imagepath valid values: val, inv, nul" + echo "expectation - expected outcome message" + echo "output_filename - defaults to test" + exit 1;; +esac + +#set the expectation message that will be displayed on graph output +case $c in + "") echo "Missing expectation message"; + echo "Usage arg0 image imagepath expectation output_filename"; + echo "image and imagepath valid values: val, inv, nul" + echo "expectation - expected outcome message" + echo "output_filename - defaults to test" + exit 1;; + *) expect=$c;; +esac + + +#set the output graph filename +case $d in + "") outfile="test";; + *) outfile=$d;; +esac + +echo +echo "case: ${a}_${b}" +echo "image attribute: ${image_attr}" +echo "imagepath attribute: ${imagepath_attr}" + +#base.gv is a template for the graph being created +#construct the graph file and store in ../graphs +#space characters must be converted to '^' characters to not confuse sed +#restore '^' character to space before outputting the graph + +config="image attribute \(${image_attr}\)<\/FONT><\/TD><\/TR>imagepath attribute \(${imagepath_attr}\)<\/FONT><\/TD><\/TR>" +config=`echo -n $config | tr ' ' '^'` +expect=`echo -n $expect | tr ' ' '^'` +sed -e s/image_attr/image\=\"${image}image.jpg\",labelloc=b/ \ +-e s/expect/${expect}/ \ +-e s/config/${config}/ \ +-e s/imagepath_attr/imagepath\=\"${imagepath}\"/ base.gv | tr '^' ' ' > ../graphs/${outfile}.gv + +#place the image file into the nshare directory +dot -Tpng -o nshare/${outfile}_dot.png ../graphs/${outfile}.gv + + diff --git a/rtest/imagepath_test/image.jpg b/rtest/imagepath_test/image.jpg new file mode 100644 index 0000000000000000000000000000000000000000..14dc00c7901783a55ef24e9635cef13539745207 GIT binary patch literal 13934 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 Hf13YqSY*GQ literal 0 HcmV?d00001 diff --git a/rtest/imagepath_test/image_dir/image.jpg b/rtest/imagepath_test/image_dir/image.jpg new file mode 100644 index 0000000000000000000000000000000000000000..abbfdd1cf7947433418e41e4a198c5fe6cf9e440 GIT binary patch literal 13987 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

SyuBhRuv{ovag7yS0%(std7L0-Br4` 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