<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">package Test2::Workflow::Task::Group;
use strict;
use warnings;

our $VERSION = '0.000162';

use Carp qw/croak/;

use Test2::Workflow::Task::Action;

use base 'Test2::Workflow::Task';
use Test2::Util::HashBase qw/before after primary rand variant/;

sub init {
    my $self = shift;

    if (my $take = delete $self-&gt;{take}) {
        $self-&gt;{$_} = delete $take-&gt;{$_} for ISO, ASYNC, TODO, SKIP;
        $self-&gt;{$_} = $take-&gt;{$_} for FLAT, SCAFFOLD, NAME, CODE, FRAME;
        $take-&gt;{+FLAT}     = 1;
        $take-&gt;{+SCAFFOLD} = 1;
    }

    {
        local $Carp::CarpLevel = $Carp::CarpLevel + 1;
        $self-&gt;SUPER::init();
    }

    $self-&gt;{+BEFORE}  ||= [];
    $self-&gt;{+AFTER}   ||= [];
    $self-&gt;{+PRIMARY} ||= [];
}

sub filter {
    my $self = shift;
    my ($filter) = @_;

    return if $self-&gt;{+IS_ROOT};

    my $result = $self-&gt;SUPER::filter($filter);

    my $child_ok = 0;
    for my $c (@{$self-&gt;{+PRIMARY}}) {
        next if $c-&gt;{+SCAFFOLD};
        # A child matches the filter, so we should not be filtered, but also
        # should not satisfy the filter.
        my $res = $c-&gt;filter($filter);

        # A child satisfies the filter
        $child_ok++ if !$res || $res-&gt;{satisfied};
        last if $child_ok;
    }

    # If the filter says we are ok
    unless($result) {
        # If we are a variant then allow everything under us to be run
        return {satisfied =&gt; 1} if $self-&gt;{+VARIANT} || !$child_ok;

        # Normal group
        return;
    }

    return if $child_ok;

    return $result;
}

1;

__END__

=pod

=encoding UTF-8

=head1 NAME

Test2::Workflow::Task::Group - Encapsulation of a group (describe).

=head1 SOURCE

The source code repository for Test2-Workflow can be found at
F&lt;https://github.com/Test-More/Test2-Suite/&gt;.

=head1 MAINTAINERS

=over 4

=item Chad Granum E&lt;lt&gt;exodist@cpan.orgE&lt;gt&gt;

=back

=head1 AUTHORS

=over 4

=item Chad Granum E&lt;lt&gt;exodist@cpan.orgE&lt;gt&gt;

=back

=head1 COPYRIGHT

Copyright 2018 Chad Granum E&lt;lt&gt;exodist7@gmail.comE&lt;gt&gt;.

This program is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.

See F&lt;http://dev.perl.org/licenses/&gt;

=cut

</pre></body></html>