blob: 323cd41eaf81a45b2b3ec4286282fab4753c96c3 [file] [log] [blame]
<!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"
>&#60;&#60;&#60; 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 &#62;&#62;&#62;</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"
>&#60;&#60;&#60; 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 &#62;&#62;&#62;</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
>