| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> |
| <HTML |
| ><HEAD |
| ><TITLE |
| >Writing A Test Case</TITLE |
| ><META |
| NAME="GENERATOR" |
| CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+ |
| "><LINK |
| REL="HOME" |
| TITLE="DejaGnu" |
| HREF="book1.html"><LINK |
| REL="UP" |
| TITLE="Extending DejaGnu" |
| HREF="c1099.html"><LINK |
| REL="PREVIOUS" |
| TITLE="Board Config File Values" |
| HREF="x1234.html"><LINK |
| REL="NEXT" |
| TITLE="Debugging A Test Case" |
| HREF="x1462.html"></HEAD |
| ><BODY |
| CLASS="SECT1" |
| BGCOLOR="#FFFFFF" |
| TEXT="#000000" |
| LINK="#0000FF" |
| VLINK="#840084" |
| ALINK="#0000FF" |
| ><DIV |
| CLASS="NAVHEADER" |
| ><TABLE |
| SUMMARY="Header navigation table" |
| WIDTH="100%" |
| BORDER="0" |
| CELLPADDING="0" |
| CELLSPACING="0" |
| ><TR |
| ><TH |
| COLSPAN="3" |
| ALIGN="center" |
| >DejaGnu: The GNU Testing Framework</TH |
| ></TR |
| ><TR |
| ><TD |
| WIDTH="10%" |
| ALIGN="left" |
| VALIGN="bottom" |
| ><A |
| HREF="x1234.html" |
| ACCESSKEY="P" |
| ><<< Previous</A |
| ></TD |
| ><TD |
| WIDTH="80%" |
| ALIGN="center" |
| VALIGN="bottom" |
| >Extending DejaGnu</TD |
| ><TD |
| WIDTH="10%" |
| ALIGN="right" |
| VALIGN="bottom" |
| ><A |
| HREF="x1462.html" |
| ACCESSKEY="N" |
| >Next >>></A |
| ></TD |
| ></TR |
| ></TABLE |
| ><HR |
| ALIGN="LEFT" |
| WIDTH="100%"></DIV |
| ><DIV |
| CLASS="SECT1" |
| ><H1 |
| CLASS="SECT1" |
| ><A |
| NAME="WRITING" |
| ></A |
| >Writing A Test Case</H1 |
| ><P |
| >The easiest way to prepare a new test case is to base it |
| on an existing one for a similar situation. There are two major |
| categories of tests: batch or interactive. Batch oriented tests |
| are usually easier to write.</P |
| ><P |
| >The GCC tests are a good example of batch oriented tests. |
| All GCC tests consist primarily of a call to a single common |
| procedure, Since all the tests either have no output, or only |
| have a few warning messages when successfully compiled. Any |
| non-warning output is a test failure. All the C code needed is |
| kept in the test directory. The test driver, written in Tcl, |
| need only get a listing of all the C files in the directory, and |
| compile them all using a generic procedure. This procedure and a |
| few others supporting for these tests are kept in the library |
| module <TT |
| CLASS="FILENAME" |
| >lib/c-torture.exp</TT |
| > in the GCC test |
| suite. Most tests of this kind use very few |
| <SPAN |
| CLASS="PRODUCTNAME" |
| >expect</SPAN |
| > features, and are coded almost |
| purely in Tcl.</P |
| ><P |
| >Writing the complete suite of C tests, then, consisted of |
| these steps:</P |
| ><P |
| ></P |
| ><UL |
| ><LI |
| STYLE="list-style-type: disc" |
| ><P |
| >Copying all the C code into the test directory. |
| These tests were based on the C-torture test created by Torbjorn |
| Granlund (on behalf of the Free Software Foundation) for GCC |
| development.</P |
| ></LI |
| ><LI |
| STYLE="list-style-type: disc" |
| ><P |
| >Writing (and debugging) the generic Tcl procedures for |
| compilation.</P |
| ></LI |
| ><LI |
| STYLE="list-style-type: disc" |
| ><P |
| >Writing the simple test driver: its main task is to |
| search the directory (using the Tcl procedure |
| <I |
| CLASS="EMPHASIS" |
| >glob</I |
| > for filename expansion with wildcards) |
| and call a Tcl procedure with each filename. It also checks for |
| a few errors from the testing procedure.</P |
| ></LI |
| ></UL |
| ><P |
| >Testing interactive programs is intrinsically more |
| complex. Tests for most interactive programs require some trial |
| and error before they are complete.</P |
| ><P |
| >However, some interactive programs can be tested in a |
| simple fashion reminiscent of batch tests. For example, prior |
| to the creation of DejaGnu, the GDB distribution already |
| included a wide-ranging testing procedure. This procedure was |
| very robust, and had already undergone much more debugging and |
| error checking than many recent DejaGnu test cases. |
| Accordingly, the best approach was simply to encapsulate the |
| existing GDB tests, for reporting purposes. Thereafter, new GDB |
| tests built up a family of Tcl procedures specialized for GDB |
| testing.</P |
| ></DIV |
| ><DIV |
| CLASS="NAVFOOTER" |
| ><HR |
| ALIGN="LEFT" |
| WIDTH="100%"><TABLE |
| SUMMARY="Footer navigation table" |
| WIDTH="100%" |
| BORDER="0" |
| CELLPADDING="0" |
| CELLSPACING="0" |
| ><TR |
| ><TD |
| WIDTH="33%" |
| ALIGN="left" |
| VALIGN="top" |
| ><A |
| HREF="x1234.html" |
| ACCESSKEY="P" |
| ><<< Previous</A |
| ></TD |
| ><TD |
| WIDTH="34%" |
| ALIGN="center" |
| VALIGN="top" |
| ><A |
| HREF="book1.html" |
| ACCESSKEY="H" |
| >Home</A |
| ></TD |
| ><TD |
| WIDTH="33%" |
| ALIGN="right" |
| VALIGN="top" |
| ><A |
| HREF="x1462.html" |
| ACCESSKEY="N" |
| >Next >>></A |
| ></TD |
| ></TR |
| ><TR |
| ><TD |
| WIDTH="33%" |
| ALIGN="left" |
| VALIGN="top" |
| >Board Config File Values</TD |
| ><TD |
| WIDTH="34%" |
| ALIGN="center" |
| VALIGN="top" |
| ><A |
| HREF="c1099.html" |
| ACCESSKEY="U" |
| >Up</A |
| ></TD |
| ><TD |
| WIDTH="33%" |
| ALIGN="right" |
| VALIGN="top" |
| >Debugging A Test Case</TD |
| ></TR |
| ></TABLE |
| ></DIV |
| ></BODY |
| ></HTML |
| > |