1package TAP::Parser::Scheduler::Job; 2 3use strict; 4use warnings; 5use Carp; 6 7=head1 NAME 8 9TAP::Parser::Scheduler::Job - A single testing job. 10 11=head1 VERSION 12 13Version 3.48 14 15=cut 16 17our $VERSION = '3.48'; 18 19=head1 SYNOPSIS 20 21 use TAP::Parser::Scheduler::Job; 22 23=head1 DESCRIPTION 24 25Represents a single test 'job'. 26 27=head1 METHODS 28 29=head2 Class Methods 30 31=head3 C<new> 32 33 my $job = TAP::Parser::Scheduler::Job->new( 34 $filename, $description 35 ); 36 37Given the filename and description of a test as scalars, returns a new 38L<TAP::Parser::Scheduler::Job> object. 39 40=cut 41 42sub new { 43 my ( $class, $name, $desc, @ctx ) = @_; 44 return bless { 45 filename => $name, 46 description => $desc, 47 @ctx ? ( context => \@ctx ) : (), 48 }, $class; 49} 50 51=head2 Instance Methods 52 53=head3 C<on_finish> 54 55 $self->on_finish(\&method). 56 57Register a closure to be called when this job is destroyed. The callback 58will be passed the C<TAP::Parser::Scheduler::Job> object as it's only argument. 59 60=cut 61 62sub on_finish { 63 my ( $self, $cb ) = @_; 64 $self->{on_finish} = $cb; 65} 66 67=head3 C<finish> 68 69 $self->finish; 70 71Called when a job is complete to unlock it. If a callback has been registered 72with C<on_finish>, it calls it. Otherwise, it does nothing. 73 74=cut 75 76sub finish { 77 my $self = shift; 78 if ( my $cb = $self->{on_finish} ) { 79 $cb->($self); 80 } 81} 82 83=head2 Attributes 84 85 $self->filename; 86 $self->description; 87 $self->context; 88 89These are all "getters" which return the data set for these attributes during object construction. 90 91 92=head3 C<filename> 93 94=head3 C<description> 95 96=head3 C<context> 97 98=cut 99 100sub filename { shift->{filename} } 101sub description { shift->{description} } 102sub context { @{ shift->{context} || [] } } 103 104=head3 C<as_array_ref> 105 106For backwards compatibility in callbacks. 107 108=cut 109 110sub as_array_ref { 111 my $self = shift; 112 return [ $self->filename, $self->description, $self->{context} ||= [] ]; 113} 114 115=head3 C<is_spinner> 116 117 $self->is_spinner; 118 119Returns false indicating that this is a real job rather than a 120'spinner'. Spinners are returned when the scheduler still has pending 121jobs but can't (because of locking) return one right now. 122 123=cut 124 125sub is_spinner {0} 126 1271; 128