diff options
Diffstat (limited to 'doc/html/x1522.html')
-rw-r--r-- | doc/html/x1522.html | 274 |
1 files changed, 274 insertions, 0 deletions
diff --git a/doc/html/x1522.html b/doc/html/x1522.html new file mode 100644 index 0000000..e1fd843 --- /dev/null +++ b/doc/html/x1522.html @@ -0,0 +1,274 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> +<HTML +><HEAD +><TITLE +>Hints On 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="Adding A Test Case To A Testsuite." +HREF="x1493.html"><LINK +REL="NEXT" +TITLE="Special variables used by test cases." +HREF="x1551.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="x1493.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="x1551.html" +ACCESSKEY="N" +>Next >>></A +></TD +></TR +></TABLE +><HR +ALIGN="LEFT" +WIDTH="100%"></DIV +><DIV +CLASS="SECT1" +><H1 +CLASS="SECT1" +><A +NAME="HINTS" +></A +>Hints On Writing A Test Case</H1 +><P +>It is safest to write patterns that match all the output + generated by the tested program; this is called closure. + If a pattern does not match the entire output, any output that + remains will be examined by the next <B +CLASS="COMMAND" +>expect</B +> + command. In this situation, the precise boundary that determines + which <B +CLASS="COMMAND" +>expect</B +> command sees what is very + sensitive to timing between the Expect task and the task running + the tested tool. As a result, the test may sometimes appear to + work, but is likely to have unpredictable results. (This problem + is particularly likely for interactive tools, but can also + affect batch tools---especially for tests that take a long time + to finish.) The best way to ensure closure is to use the + <TT +CLASS="OPTION" +>-re</TT +> option for the <B +CLASS="COMMAND" +>expect</B +> + command to write the pattern as a full regular expressions; then + you can match the end of output using a <I +CLASS="EMPHASIS" +>$</I +>. + It is also a good idea to write patterns that match all + available output by using <I +CLASS="EMPHASIS" +>.*\</I +> after the + text of interest; this will also match any intervening blank + lines. Sometimes an alternative is to match end of line using + <I +CLASS="EMPHASIS" +>\r</I +> or <I +CLASS="EMPHASIS" +>\n</I +>, but this is + usually too dependent on terminal settings.</P +><P +>Always escape punctuation, such as <I +CLASS="EMPHASIS" +>(</I +> + or <I +CLASS="EMPHASIS" +>"</I +>, in your patterns; for example, write + <I +CLASS="EMPHASIS" +>\(</I +>. If you forget to escape punctuation, + you will usually see an error message like <TABLE +BORDER="0" +BGCOLOR="#E0E0E0" +WIDTH="100%" +><TR +><TD +><PRE +CLASS="PROGRAMLISTING" +>extra + characters after close-quote.</PRE +></TD +></TR +></TABLE +></P +><P +>If you have trouble understanding why a pattern does not + match the program output, try using the <TT +CLASS="OPTION" +>--debug</TT +> + option to <B +CLASS="COMMAND" +>runtest</B +>, and examine the debug log + carefully.</P +><P +>Be careful not to neglect output generated by setup rather + than by the interesting parts of a test case. For example, + while testing GDB, I issue a send <I +CLASS="EMPHASIS" +>set height + 0\n</I +> command. The purpose is simply to make sure GDB + never calls a paging program. The <I +CLASS="EMPHASIS" +>set + height</I +> command in GDB does not generate any + output; but running any command makes GDB issue a new + <I +CLASS="EMPHASIS" +>(gdb) </I +> prompt. If there were no + <B +CLASS="COMMAND" +>expect</B +> command to match this prompt, the + output <I +CLASS="EMPHASIS" +>(gdb) </I +> begins the text seen by the + next <B +CLASS="COMMAND" +>expect</B +> command---which might make that + pattern fail to match.</P +><P +>To preserve basic sanity, I also recommended that no test + ever pass if there was any kind of problem in the test case. To + take an extreme case, tests that pass even when the tool will + not spawn are misleading. Ideally, a test in this sort of + situation should not fail either. Instead, print an error + message by calling one of the DejaGnu procedures + <B +CLASS="COMMAND" +>error</B +> or <B +CLASS="COMMAND" +>warning</B +>.</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="x1493.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="x1551.html" +ACCESSKEY="N" +>Next >>></A +></TD +></TR +><TR +><TD +WIDTH="33%" +ALIGN="left" +VALIGN="top" +>Adding A Test Case To A Testsuite.</TD +><TD +WIDTH="34%" +ALIGN="center" +VALIGN="top" +><A +HREF="c1099.html" +ACCESSKEY="U" +>Up</A +></TD +><TD +WIDTH="33%" +ALIGN="right" +VALIGN="top" +>Special variables used by test cases.</TD +></TR +></TABLE +></DIV +></BODY +></HTML +>
\ No newline at end of file |