Test2::Manual::Tooling::Plugin::TestingDone(3pm) Perl Programmers Reference Guide Test2::Manual::Tooling::Plugin::TestingDone(3pm)

# [NAME](#NAME)

Test2::Manual::Tooling::Plugin::TestingDone - Run code when the test file is finished, or when done\_testing is called.

# [DESCRIPTION](#DESCRIPTION)

This is a way to add behavior to the end of a test file. This code is run either when **done\_testing()** is called, or when the test file has no more run-time code to run.

When triggered by **done\_testing()** this will be run BEFORE the plan is calculated and sent. This means it IS safe to make test assertions in this callback.

# [COMPLETE CODE UP FRONT](#COMPLETE_CODE_UP_FRONT)

```
    package Test2::Plugin::MyPlugin;
    use Test2::API qw{test2_add_callback_testing_done};
    sub import {
        my $class = shift;
        test2_add_callback_testing_done(sub {
            ok(!$some_global, '$some_global was not set');
            print "The test file is done, or done_testing was just called\n"
        });
    }
    1;
```

# [LINE BY LINE](#LINE_BY_LINE)

[use Test2::API qw{test2\_add\_callback\_testing\_done};](#use)

This imports the test2\_add\_callback\_testing\_done() callback.

[test2\_add\_callback\_testing\_done(sub { ... });](#test2_add_callback_testing_done%28sub)

This adds our callback to be called when testing is done.

[ok(!$some\_global, '$some\_global was not set')](#ok%28!$some_global,)

It is safe to make assertions in this type of callback. This code simply asserts that some global was never set over the course of the test.

[print "The test file is done, or done\_testing was just called\\n"](#print)

This prints a message when the callback is run.

# [UNDER THE HOOD](#UNDER_THE_HOOD)

Before **test2\_add\_callback\_testing\_done()** this kind of thing was still possible, but it was hard to get right, here is the code to do it:

```
    test2_add_callback_post_load(sub {
        my $stack = test2_stack();
        # Insure we have at least one hub, but we do not necessarily want the
        # one this returns.
        $stack->top;
        # We want the root hub, not the top one.
        my ($root) = Test2::API::test2_stack->all;
        # Make sure the hub does not believe nothing has happened.
        $root->set_active(1);
        # Now we can add our follow-up code
        $root->follow_up(sub {
            # Your callback code here
        });
    });
```

# [SEE ALSO](#SEE_ALSO)

Test2::Manual - Primary index of the manual.

# [SOURCE](#SOURCE)

The source code repository for Test2-Manual can be found at *https://github.com/Test-More/test-more/*.

# [MAINTAINERS](#MAINTAINERS)

[Chad Granum &lt;exodist@cpan.org&gt;](#Chad)

# [AUTHORS](#AUTHORS)

[Chad Granum &lt;exodist@cpan.org&gt;](#Chad~2)

# [COPYRIGHT](#COPYRIGHT)

Copyright Chad Granum &lt;exodist@cpan.org&gt;.

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/*

2026-10-21 perl v5.44.0

---

Document: Test2::Manual::Tooling::Plugin::TestingDone(3pm) from perl 5.44.0-r2 (Chainguard OS)
Source: https://github.com/Perl/perl5.git
