Andy Lester thought that the thing we now know as TAP needed a name. (See How TAP was named) The name is relatively recent but the protocol has been around since 1988.
TAP has roots from the Perl programming language. Due to conficting namespaces in that language, many Perl TAP authors signed a “nonproliferation treaty” with the intent to reduce namespace conflicts.
The vast range of programming languages makes the treaty difficult to enforce across the TAP ecosystem. The original treaty page is included on this history page for posterity.
Pulling apart the historical revisions of TAP is difficult both because there was no standard and because t/TEST in the perl core and Test::Harness parse slightly different dialects of TAP. Here’s the best we can piece together right now. This information comes from Sam Villan’s historical Perl GIT repository.
TAP as understood by Perl 1.0’s t/TEST. It understands the basic 1..M header, “ok #” and “not ok #”. No blank lines, directive, garbage lines or anything else is understood. This is implemented by t/TEST as part of Perl 1.
commit 840163baa12f7970131f7841c479bccf5be40ba9 Author: Larry Wall <firstname.lastname@example.org> Date: Sat Jan 30 23:00:00 1988 +0000
Checks the wait/exit status of each test.
Implemented by Test::Harness in Perl 5.002beta3
commit 4bce96efdcaa480e392138e10166c92c5fc5f22c Author: Perl 5 Porters <email@example.com> Date: Fri Feb 2 18:52:27 1996 -0800
Comment lines beginning with # are ignored.
Implemented by Test::Harness in Perl 5.002beta3 commit 4bce96efdcaa480e392138e10166c92c5fc5f22c Author: Perl 5 Porters <firstname.lastname@example.org> Date: Fri Feb 2 18:52:27 1996 -0800
Adds the “1..0” header for skipping the entire test. Previously it was considered a passing test.
This is first implemented by t/TEST as part of Perl 5.003_01 followed ten minutes later by Test::Harness.
commit 845b835a0bd51ac2f83e2e81f4088986d97114ff Author: Perl 5 Porters <email@example.com> Date: Mon Jul 8 23:11:22 1996 +0000
All non-TAP lines are ignored. Implemented by Test::Harness in Perl 5.003_01.
commit ae85fcb6e790acc2343e92002216642e766aa196 Author: Perl 5 Porters <firstname.lastname@example.org> Date: Mon Jul 8 23:22:00 1996 +0000
Support for the skip directive. Added in Test::Harness and allow (but ignored) in t/TEST in Perl 5.004_55.
Change 318: Output skipped test information in test suite: Subject: 5.004_55: Making test harness platform_aware Date: Wed, 26 Nov 1997 17:16:55 -0500 (EST) Date: Wed, 26 Nov 1997 17:16:55 -0500 (EST)
In-header “todo” syntax added to Test::Harness in Perl 5.004_59.
Change 539: Subject: [PATCH 5.004_59] allow the Test::Harness to grok TODO-type tests docs Date: Sat, 14 Feb 1998 17:58:01 -0500 From: Joshua Pritikin <email@example.com>
A reason is added to the skip directive. Added in Test::Harness in Perl 5.005_53.
Change 3389: From: Ilya Zakharevich <firstname.lastname@example.org> Date: Mon, 10 May 1999 02:07:01 -0400 (EDT) Message-Id: <199905100607.CAA26045@monk.mps.ohio-state.edu> Subject: [PATCH 5.005_53] Explanations by Test::Harness
A reason is added to the skip all header.
Change 3399: more testsuite smarts (many of them courtesy Ilya)
Added “Bail Out!”
Change 8028: Introduce macros for UTF8 decoding.
Added TODO directive.
Change 8824: Subject: [PATCH t/TEST lib/Test/Harness.pm] Adding todo tests From: email@example.com Date: Sun, 18 Feb 2001 01:48:50 -0500 Message-ID: <20010218014850.C19957@magnonel.guild.net>
Allowed header at end.
Implemented in Test::Harness 1.21.
Understands TAP version syntax.
Implemented in TAP::Parser 0.52.