1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
|
<!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.64
"><LINK
REL="HOME"
TITLE="DejaGnu"
HREF="book1.html"><LINK
REL="UP"
TITLE="Extending DejaGnu"
HREF="extending.html"><LINK
REL="PREVIOUS"
TITLE="Board Config File Values"
HREF="boarddefs.html"><LINK
REL="NEXT"
TITLE="Debugging A Test Case"
HREF="debugging.html"></HEAD
><BODY
CLASS="SECT1"
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#840084"
ALINK="#0000FF"
><DIV
CLASS="NAVHEADER"
><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="boarddefs.html"
><<< Previous</A
></TD
><TD
WIDTH="80%"
ALIGN="center"
VALIGN="bottom"
>Extending DejaGnu</TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
HREF="debugging.html"
>Next >>></A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><DIV
CLASS="SECT1"
><H1
CLASS="SECT1"
><A
NAME="WRITING"
>Writing A Test Case</A
></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
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
HREF="boarddefs.html"
><<< Previous</A
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="book1.html"
>Home</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="debugging.html"
>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="extending.html"
>Up</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>Debugging A Test Case</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>
|