Test2::...Grabber(3pm)
π NAME π
Bestie, this is Test2::Util::Grabber β the object that temporarily intercepts all the events for you. Like a little event trap. A vibe checkpoint for your test output. β¨
πΈ DESCRIPTION πΈ
Okay so the moment this object is created, it starts intercepting and stashing all events sent to the shared Test2::Hub object. It's giving bouncer at the club, but for test events. π
Once the object is destroyed? Events go right back to being sent to the shared hub. Business as usual. No cap.
β¨ 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;
So after you call 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. Cute, right? π
π¦ EXPORTS π¦
$grab = grab()β this lets you intercept all events for a section of code without adding anything to your call stack. Highkey useful for things that are sensitive to changes in the stack depth. π
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!! Don't get caught lacking. π
If the $grab object is destroyed without calling finish(), it will automatically clean up after itself and restore the parent hub. Self-care icon behavior.
{
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. Consider yourself warned bestie π«Ά
π METHODS π
$grab = $class->new()β create a new grab object. It immediately starts intercepting events. Main character energy from the jump. β$ar = $grab->flush()β get an arrayref of all the events so far, clearing the grab object's internal list. Poof, gone, but you got the receipts. π§$ar = $grab->events()β get an arrayref of all events so far. Does not clear the internal list. The events stay put. π$ar = $grab->finish()β get an arrayref of all the events, then destroy the grab object. It's the grand finale. π$hub = $grab->hub()β get the hub that is used by the grab event. That's the one right there. π₯
π ENDING BEHAVIOR π
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. So likeβ¦ don't be surprised when extra events show up. It's giving consequences. π
π SEE ALSO π
Test2::Tools::Interceptβ accomplish the same thing, but using blocks instead. Same slay, different outfit. π
π SOURCE π
The source code repository for Test2 can be found at https://github.com/Test-More/test-more/. Go off, 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/
And that's the whole thing, bestie. This page is from perl v5.42.3, dated 2026-11-03, and it lives under Test2::...Grabber(3pm). Iconic. Periodt. π«Άπ
π¦ where this page comes from
- alpine 3.24: perl-doc 5.42.3-r0 Β· Artistic-1.0-Perl 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