testsuite.atはBourneシェルスクリプトで,特殊なAutotest M4マクロを
使用して作成します.それは,最初の方でAT_INIT
の呼び出しを含んでい
て,それにテストのためのソースファイルごとにm4_include
の呼び出し
が続きます.それぞれのインクルードファイルや,インクルードファイルが使用
されていない場合はtestsuite.atの残りは,テストグループの連続した
手続きが含まれています.それぞれのテストグループはAT_SETUP
の呼び
出しで始まり,それは任意の数のシェルコマンドやAT_CHECK
の呼び出し
が含まれていて,AT_CLEANUP
の呼び出しで完結します.
Autotestを初期化します.パッケージに複数のテストスイートを含める場合,テ ストスイートにnameを与えることが推奨されます.すべての状況で,テス トスイートは常にパッケージ名とバージョンを表示します.それはパッケージの バグを報告する(メール)アドレスも継承します.
それぞれのプログラムのパスと--versionの答を,スペースで分離され ているリストexecutablesにログをとります.複数回呼び出されると新し い実行が登録され,言い替えると,一つのプログラムの複数回の登録を危惧する 必要はありません.
Autotestテストスイートは,テストされるプログラムを見つける際に
PATH
に依存します.これは様々なツールの絶対パスから生成されるもの
から保存され,インストールされているプログラムのテストを可能にします.そ
のため,動作しているプログラムを知ることは,テストスイート自身やその偶発
的な誤使用の問題を理解するために重要です.互換性の問題を簡単に診断するた
めに,依存している外部のプログラムを登録することも重要です.
このマクロは関連するテストのグループがすべて同じサブシェルで実行されるよ うに開始します.それは,開始されるテストグループの目的を手短に記述した数 語の単語(30から40文字以下)を保持している,単一の引数を受け入れます.
まとまっているテストグループに関連する,スペースで分離されている keywordsのリストです.これでテストスイートの“slices”を実行するこ とが可能になります.例えばテストグループの`foo'の機能を行使している 場合,`AT_KEYWORDS(foo)'を使用することで,これらのテストグループを 排他的に実行するために`./testsuite -k foo'を実行します.テストグルー プのtitleは,
AT_KEYWORDS
に自動的に保存されます.テストグループ内で複数回呼び出すことで新しいキーワードを累積します.言い 替えると,テストグループで同じキーワードを複数回登録することを危惧する必 要はありません.
テストが,既知のバグで期待されたように失敗するかどうかを決定します(サポー トされていない機能に対してはテストを省略するべきです). shell-conditionは
test
コマンドのようなシェルの式です.同じテ ストグループから,このマクロを何回でも利用することが可能で,テストが期待 した異常終了になるには,条件の一つで十分でしょう.
入力データのfileを,与えられたcontentsで初期化します.もちろ ん,カンマが含まれていることや,見せかけのM4の展開から保護するために, contentsは適切に角カッコで囲む必要があります.内容は行末(EOF)で終 える必要があります.
与えられたシェルコマンドcommandsを実行することでテストを実行します. これらのコマンドは,期待されるstdoutとstderrの内容を生成しな がら,通常のstatusで終えるべきです.commandsが77のステータス で終了する場合,テストグループ全体が省略されます.それ以外で,このテスト が失敗する場合はシェルコマンドrun-if-failを実行し,このテストがパ スした場合はシェルコマンドrun-if-passを実行します.
commandsを標準出力にも標準エラー出力にもリダイレクトしてはい けません.
status,またはstdout,またはstderrが`ignore'の場 合,対応する値は調査されません.
stdoutに対する特殊な値`expout'は,commandsの出力がファ イルexpoutの内容であることを期待するという意味があります. stdoutが`stdout'の場合,commandsの標準出力はファイル stdoutのテスト以外でも利用可能です.`expout'と`stderr' を用いているstderrも同様です.