NAME TestML - A Generic Software Testing Meta Language SYNOPSIS # file t/testml/encode.tml %TestML: 1.0 %Title: Tests for AcmeEncode %Plan: 3 *text.apply_rot13() == *rot13; *text.apply_md5() == *md5; === Encode some poetry --- text There once was a fellow named Ingy, Combining languages twas his Thingy. --- rot13 Gurer bapr jnf n sryybj anzrq Vatl, Pbzovavat ynathntrf gjnf uvf Guvatl. --- md5: 7a1538ff9fc8edf8ea55d02d0b0658be === Encode a password --- text: soopersekrit --- md5: 64002c26dcc62c1d6d0f1cb908de1435 This TestML document defines 2 assertions, and defines 2 data blocks. The first block has 3 data points, but the second one has only 2. Therefore the rot13 assertion applies only to the first block, while the the md5 assertion applies to both. This results in a total of 3 tests, which is specified in the meta Plan statement in the document. To run this test you would have a normal test file that looks like this: use TestML::Runner::TAP; TestML::Runner::TAP->new( document => 'testml/encode.tml', bridge => 't::Bridge', )->run(); or more simply: use TestML -run, -document => 'testml/encode.tml', -bridge => 't::Bridge'; The apply_* transform functions are defined in the bridge class that is specified outside this test (t/Bridge.pm). DESCRIPTION TestML is a generic, programming language agnostic, meta language for writing unit tests. The idea is that you can use the same test files in multiple implementations of a given programming idea. Then you can be more certain that your application written in, say, Python matches your Perl implementation. In a nutshell you write a bunch of data tests that have inputs and expected results. Using a simple syntax, you specify what functions the data must pass through to produce the expected results. You use a bridge class to write the data transform functions that pass the data through your application. SEE ALSO See for more information on TestML. AUTHOR Ingy döt Net COPYRIGHT Copyright (c) 2009, 2010. Ingy döt Net. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See http://www.perl.com/perl/misc/Artistic.html