Test2::...Grabber(3)
π NAME π
Bestie, this is the Test2::...Grabber(3) page β aka Test2::Util::Grabber β from the User Contributed Perl Documentation. Itβs literally an object used to temporarily intercept all events. Yes, all of them. Iconic behavior. π
πΈ DESCRIPTION πΈ
Once created, this object will intercept and stash all events sent to the shared Test2::Hub object. Once the object is destroyed, events will once again be sent to the shared hub. Itβs giving temporary main-character portal energy. β¨
π¦ SYNOPSIS π¦
use Test2 qw/Core Grab/;
my $grab = grab();
# Generate some events, they are intercepted.
ok(1, "pass");
ok(0, "fail");
my $events_a = $grab->flush;
# Generate some more events, they are intercepted.
ok(1, "pass");
ok(0, "fail");
# Same as flush, except it destroys the grab object.
my $events_b = $grab->finish;
After calling finish() the grab object is destroyed and $grab is set to undef. $events_a is an arrayref with the first two events. $events_b is an arrayref with the second two events. Slay, the math is mathing. π
π«Ά EXPORTS π«Ά
π $grab = grab()
This lets you intercept all events for a section of code without adding anything to your call stack. This is useful for things that are sensitive to changes in the stack depth. No cap, stack-depth girlies need this. π§
my $grab = grab();
ok(1, 'foo');
ok(0, 'bar');
# $grab is magically undef after this.
my $events = $grab->finish;
is(@$events, 2, "grabbed two events.");
When you call finish() the $grab object will automagically undef itself, but only for the reference used in the method call. If you have other references to the $grab object they will not be set to undef. Important distinction, bestie. π₯
If the $grab object is destroyed without calling finish(), it will automatically clean up after itself and restore the parent hub. Very responsible of it, ngl. π
{
my $grab = grab();
# Things are grabbed
}
# Things are back to normal
By default the hub used has "no_ending" set to true. This will prevent the hub from enforcing that you issued a plan and ran at least one test. You can turn enforcement back one like this:
$grab->hub->set_no_ending(0);
With "no_ending" turned off, finish will run the post-test checks to enforce the plan and that tests were run. In many cases this will result in additional events in your events array. Surprise events, but make it official. π
π METHODS π
$grab = $class->new()β Create a new grab object, and it immediately starts intercepting events. It does not wait. It does not chill. It grabs. π$ar = $grab->flush()β Get an arrayref of all the events so far, clearing the grab objectβs internal list. Itβs a little reset moment. β¨$ar = $grab->events()β Get an arrayref of all events so far. Does not clear the internal list. Look, donβt touch. π$ar = $grab->finish()β Get an arrayref of all the events, then destroy the grab object. It ate and then left. π₯$hub = $grab->hub()β Get the hub that is used by the grab event.
π ENDING BEHAVIOR π
Okay so this is the same tea as above, but itβs important so here it is again:
By default the hub used has "no_ending" set to true. This will prevent the hub from enforcing that you issued a plan and ran at least one test. You can turn enforcement back one like this:
$grab->hub->set_no_ending(0);
With "no_ending" turned off, finish will run the post-test checks to enforce the plan and that tests were run. In many cases this will result in additional events in your events array. Extra events are extra events, periodt. π
π SEE ALSO π
Test2::Tools::Interceptβ Accomplish the same thing, but using blocks instead. Block-based bestie energy. π«Ά
π¦ SOURCE π¦
The source code repository for Test2 can be found at https://github.com/Test-More/test-more/. Go look, bestie. π
π MAINTAINERS π
Chad Granum <exodist@cpan.org>
π AUTHORS π
Chad Granum <exodist@cpan.org>
π COPYRIGHT π
Copyright Chad Granum <exodist@cpan.org>.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
See http://dev.perl.org/licenses/
Bye bestie π«Ά this pageβs source/version is perl v5.42.0, itβs dated 2025-07-28, and the manual is Test2::...Grabber(3). Mwah π
π¦ where this page comes from
- opensuse-leap 16.0: perl-Test-Simple 1.302214-bp160.1.2 Β· Artistic-1.0 OR GPL-1.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms