### 1.1 What is DejaGnu? ¶

DejaGnu is a framework for testing other programs, providing a single front-end for all tests. You can think of it as a library of Tcl procedures to help with writing a test harness. A test harness is the infrastructure that is created to test a specific program or tool. Each program can have multiple testsuites, all supported by a single test harness. DejaGnu is written in Expect, which in turn uses Tcl, the Tool command language. There is more information on Tcl at the Tcl/Tk web site and the Expect web site.

Julia Menapace first coined the term DejaGnu to describe an earlier testing framework she wrote at Cygnus Support for testing GDB. When we replaced it with the Expect-based framework, it was like DejaGnu all over again. More importantly, it was also named after my daughter, Deja Snow Savoye, who was a toddler during DejaGnu’s beginnings.

DejaGnu offers several advantages for testing:

- The flexibility and consistency of the DejaGnu framework make it easy to write tests for any program, with either batch-oriented, or interactive programs.
- DejaGnu provides a layer of abstraction which allows you to write tests that are portable to any host or target where a program must be tested. For instance, a test for `GDB` can run from any supported host system on any supported target system. DejaGnu runs tests on many single board computers, whose operating software ranges from a simple boot monitor to a real-time OS.
- All tests have the same output format. This makes it easy to integrate testing into other software development processes. DejaGnu’s output is designed to be parsed by other filtering script and it is also human readable.
- Using Tcl and Expect, it’s easy to create wrappers for existing testsuites. By incorporating existing tests under DejaGnu, it’s easier to have a single set of report analyse programs..

Running tests requires two things: the testing framework and the testsuites themselves. Tests are usually written in Expect using Tcl, but you can also use a Tcl script to run a testsuite that is not based on Expect. Expect script filenames conventionally use `.exp` as a suffix. For example, the main implementation of the DejaGnu test driver is in the file `runtest.exp`.