Test::Builder::Clutch - add a clutch to your testing drivechain
Version 0.07
use Test::Builder::Clutch; # suspend test output Test::Builder::Clutch::disengage; # enable test output again Test::Builder::Clutch::engage; # is the clutch engaged? Test::Builder::Clutch::engaged ? 'yes' : 'no'; Test::Builder::Clutch::disengaged ? 'no' : 'yes'; # metaprogram non-test "foo" from "foo_ok" Test::Builder::Clutch::antitest qw/foo_ok/; # metaprogram non-test "is_bar" from "bar_ok" Test::Builder::Clutch::antitest { 'bar_ok' => 'is_bar' };
Perhaps you have a test that does some useful work in its own right, but you don't want to see all the test output when it's used outside a testing context. Rather than writing two subroutines - one that emits TAP and one that doesn't - you can install Test::Builder::Clutch to turn the TAP on and off at will.
Test::Builder::Clutch
Routines are provided for engaging, disengaging in querying the state of the clutch, and for metaprogramming non-test variants of test routines..
Test::Builder::Clutch adds an attribute named disengaged to Test::Builder, as well as disengage and engage methods.
disengaged
disengage
engage
The disengaged attribute actually cannot be initialised, since the singleton Test::Builder is created when Test::Builder is loaded. This is the reason the attribute is called disengaged rather than engaged; the "default" is necessarily undefined, and test output must remain enabled when Test::Builder::Clutch is loaded.
engaged
$Test->disengaged(1); # suspend test output $Test->disengaged(0); # enable test output $Test->disengage; # suspend test output $Test->engage; # enable test output
The original ok method is only invoked if the clutch in engaged, but the is_passing attribute is still set according the first argument.
is_passing
The child Builder's clutch must be disengaged if the parent (that is, the invocant) is disengaged; this wrapper takes care of that.
If the clutch is currently engaged, defer to the original method. If the clutch is disengaged, the test is considered to be passing only if the original method returns true and no tests failed while the clutch was disengaged.
Return true if the clutch is currently engaged, otherwise false.
Return true if the clutch is currently disengaged, otherwise false.
Disable test output.
Enable test output.
Metaprogram non-test versions of test methods in the calling package.
The argument is a list of strings and hash references. Simple strings must refer to an existing method whose name ends with "_ok". The non-test methods' names will have the "_ok" stripped.
Hashref arguments give test method names as keys, and the desired names of the corresponding non-test methods as values.
If the resultant non-test methods are called from within the pacakge, the antitest call must be executed in a BEGIN block.
antitest
BEGIN
No guarantees are made about the return value of a method created by antitest where the test method emits multiple test results or uses subtest.
subtest
Fraser Tweedale, <frase at frase.id.au>
<frase at frase.id.au>
Please report any bugs or feature requests to bug-test-clutch at rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Test-Builder-Clutch. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
bug-test-clutch at rt.cpan.org
You can find documentation for this module with the perldoc command.
perldoc Test::Builder::Clutch
You can also look for information at:
RT: CPAN's request tracker
http://rt.cpan.org/NoAuth/Bugs.html?Dist=Test-Builder-Clutch
AnnoCPAN: Annotated CPAN documentation
http://annocpan.org/dist/Test-Builder-Clutch
CPAN Ratings
http://cpanratings.perl.org/d/Test-Builder-Clutch
Search CPAN
http://search.cpan.org/dist/Test-Builder-Clutch/
Test::Builder provides the test features that can be enabled/disabled courtesy of this module.
Class::MOP is the amazing meta-object protocol that makes all of this possible.
Copyright 2011 Benon Technologies Pty Ltd Copyright 2012 Fraser Tweedale
This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License.
See http://dev.perl.org/licenses/ for more information.
To install Test::Builder::Clutch, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Test::Builder::Clutch
CPAN shell
perl -MCPAN -e shell install Test::Builder::Clutch
For more information on module installation, please visit the detailed CPAN module installation guide.