our
$VERSION
=
'0.001031'
;
sub
viable { cluck __PACKAGE__ .
" is deprecated"
; 1 }
sub
find_inc {
my
$class
=
shift
;
my
$inc
=
$INC
{
"Test2/Harness/Job/Runner.pm"
};
$inc
=~ s{/Test2/Harness/Job/Runner\.pm$}{}g;
return
File::Spec->rel2abs(
$inc
);
}
sub
command_file {
my
$class
=
shift
;
my
(
$test
) =
@_
;
return
File::Spec->abs2rel(
$test
->job->file);
}
sub
command {
my
$class
=
shift
;
my
(
$test
,
$event_file
) =
@_
;
my
$job
=
$test
->job;
my
%seen
;
return
(
$^X,
(
map
{
"-I$_"
}
grep
{!
$seen
{
$_
}++} @{
$job
->libs},
$class
->find_inc,
@INC
),
$ENV
{HARNESS_PERL_SWITCHES} ?
$ENV
{HARNESS_PERL_SWITCHES} : (),
@{
$job
->switches},
(
map
{
"-M$_"
} @{
$job
->load_import || []}),
(
map
{
"-m$_"
} @{
$job
->load || []}),
$job
->use_stream ? (
"-MTest2::Formatter::Stream=file,$event_file"
) : (),
$job
->
times
? (
'-MTest2::Plugin::Times'
) : (),
$class
->command_file(
$test
),
@{
$job
->args},
);
}
sub
run {
my
$class
=
shift
;
my
(
$test
) =
@_
;
my
$job
=
$test
->job;
my
(
$in_file
,
$out_file
,
$err_file
,
$event_file
) =
$test
->output_filenames;
my
$out_fh
= open_file(
$out_file
,
'>'
);
my
$err_fh
= open_file(
$err_file
,
'>'
);
write_file(
$in_file
,
$job
->input);
my
$in_fh
= open_file(
$in_file
,
'<'
);
my
$env
= {
%{
$job
->env_vars},
$job
->use_stream ? (
T2_FORMATTER
=>
'Stream'
) : (),
};
my
@cmd
=
$class
->command(
$test
,
$event_file
);
my
$pid
;
local_env
$env
=>
sub
{
$pid
= open3(
'<&'
.
fileno
(
$in_fh
),
">&"
.
fileno
(
$out_fh
),
">&"
.
fileno
(
$err_fh
),
@cmd
,
);
};
return
(
$pid
,
undef
);
}
1;