Test2::Workflow(3pm)

πŸ’– NAME πŸ’–

okay so bestie, welcome to Test2::Workflow β€” the manual page from the Perl Programmers Reference Guide. Short version: a test workflow is a way of structuring tests using composable units. Periodt. 🫢

🌸 DESCRIPTION 🌸

A test workflow is a way of structuring tests using composable units. A well known example of a test workflow is RSPEC (http://rspec.info/). RSPEC is implemented using Test2::Workflow in Test2::Tools::Spec along with several extensions. Slay. ✨


πŸ”₯ IMPORTANT CONCEPTS πŸ”₯

🧱 BUILD 🧱

Test2::Workflow::Build

A Build is used to compose tasks. Usually a build object is pushed to the stack before running code that adds tasks to the build. Once the build sub is complete the build is popped and returned. Usually a build is converted into a root task or task group. No cap. πŸ’…

πŸƒ RUNNER πŸƒ

Test2::Workflow::Runner

A runner takes the composed tasks and executes them in the proper order. It's giving main character energy for the whole workflow. πŸ‘‘

🧩 TASK 🧩

Test2::Workflow::Task

A task is a unit of work to accomplish. There are 2 main types of task, bestie.

⚑ ACTION ⚑

An action is the most simple unit used in composition. An action is essentially a name and a codeblock to run. Short, sweet, iconic. πŸŽ€

πŸ‘― GROUP πŸ‘―

A group is a task that is composed of other tasks. It's literally the friend group of tasks. 🫢


✨ EXPORTS ✨

All exports are optional, you must request the ones you want. So don't come for me if nothing is auto-imported, bestie. 😭

πŸŽ€ parse_args πŸŽ€

$parsed = parse_args(args => \@args)
$parsed = parse_args(args => \@args, level => $L)
$parsed = parse_args(args => \@args, caller => [caller($L)])

This will parse a "typical" task builders arguments. The @args array MUST contain a name (plain scalar containing text) and also a single CODE reference. The @args array MAY also contain any quantity of line numbers or hashrefs. The resulting data structure will be a single hashref with all the provided hashrefs squashed together, and the 'name', 'code', 'lines' and 'frame' keys set from other arguments. The way that works? Obsessed. πŸ’–

{
    # All hashrefs from @args get squashed together:
    %squashed_input_hashref_data,

    # @args must have exactly 1 plaintext scalar that is not a number, it
    # is considered the name:
    name => 'name from input args'

    # Integer values are treated as line numbers
    lines => [ 35, 44 ],

    # Exactly 1 coderef must be provided in @args:
    code => \&some_code,

    # 'frame' contains the 'caller' data. This may be passed in directly,
    # obtained from the 'level' parameter, or automatically deduced.
    frame => ['A::Package', 'a_file.pm', 42, ...],
}

🌈 init_root 🌈

$build = init_root($pkg, %args)

This will initialize (or return the existing) a build for the specified package. %args get passed into the Test2::Workflow::Build constructor. This uses the following defaults (which can be overridden using %args):

    name    => $pkg,
    flat    => 1,
    iso     => 0,
    async   => 0,
    is_root => 1,
Note that %args is completely ignored if the package build has already been initialized. Like, completely. πŸ™ˆ

πŸ¦‹ root_build πŸ¦‹

$build = root_build($pkg)

This will return the root build for the specified package.

🌸 current_build 🌸

$build = current_build()

This will return the build currently at the top of the build stack (or undef).

πŸ“ build πŸ“

$build = build($name, \%params, sub { ... })

This will push a new build object onto the build stash then run the provided codeblock. Once the codeblock has finished running the build will be popped off the stack and returned.

See parse_args() for details about argument processing. πŸ’…


πŸ‘€ SEE ALSO πŸ‘€

  • Test2::Tools::Spec β€” Test2::Tools::Spec is an implementation of RSPEC using this library. iykyk. πŸ”₯

🧚 SOURCE 🧚

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

πŸ‘‘ MAINTAINERS πŸ‘‘

Chad Granum <exodist@cpan.org>

πŸ’œ AUTHORS πŸ’œ

Chad Granum <exodist@cpan.org>

Copyright Chad Granum <exodist7@gmail.com>.

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/


okay that's the whole vibe. This was the Test2::Workflow(3pm) page, source/version perl v5.42.3, dated 2026-11-03. mwah πŸ’‹βœ¨

πŸ“¦ where this page comes from