Convert-Pheno
view release on metacpan or search on metacpan
t/19-cli-regression.t view on Meta::CPAN
}
sub run_cli {
my (@cmd) = @_;
my ( $fh, $log_file ) = tempfile( DIR => $tmpdir, SUFFIX => '.cli.log', UNLINK => 1 );
my $pid = fork();
die 'fork failed' unless defined $pid;
if ( $pid == 0 ) {
open STDOUT, '>&', $fh or die "dup STDOUT failed: $!";
open STDERR, '>&', $fh or die "dup STDERR failed: $!";
exec @cmd or die "exec failed: $!";
}
waitpid( $pid, 0 );
seek $fh, 0, 0;
local $/;
my $output = <$fh>;
close $fh;
return ( $? >> 8, $output );
}
for my $case (@cases) {
SKIP: {
skip 'CLI file comparisons are unreliable on Windows', 2 if IS_WINDOWS;
skip q{share/db/ohdsi.db is required for this CLI OMOP test}, 2
if $case->{requires_db} && !has_ohdsi_db();
my $tmp_file = temp_output_file( suffix => $case->{suffix}, dir => $tmpdir );
my @cmd = map { $_ eq '__OUT__' ? $tmp_file : $_ } @{ $case->{cmd} };
unshift @cmd, $^X, $cli;
push @cmd, '-O', '--test';
my $actual_file = $case->{entity_output}
? File::Spec->catfile( $tmpdir, $case->{entity_output} )
: $tmp_file;
my ( $status, $output ) = run_cli(@cmd);
diag($output) if $status != 0 && defined $output && length $output;
is( $status, 0, "CLI $case->{name} exits successfully" );
ok(
compare_case_output( $case->{compare}, $case->{expected}, $actual_file ),
"CLI $case->{name} matches reference output",
);
}
}
SKIP: {
skip 'CLI file comparisons are unreliable on Windows', 2 if IS_WINDOWS;
my $tmp_file = temp_output_file( suffix => '.json', dir => $tmpdir );
my $input_file = temp_output_file( suffix => '.json', dir => $tmpdir );
my $payload = {
patient => { id => 'openehr-patient-2' },
compositions => [
load_json_file('t/openehr2bff/in/gecco_personendaten.json'),
load_json_file('t/openehr2bff/in/ips_canonical.json'),
load_json_file('t/openehr2bff/in/laboratory_report.json'),
load_json_file('t/openehr2bff/in/compo_corona.json'),
],
};
write_json_file( $input_file, $payload );
my @cmd = ( $^X, $cli, '-iopenehr', $input_file, '-opxf', $tmp_file, '-O', '--test' );
my ( $exit, $output ) = run_cli(@cmd);
is( $exit, 0, 'CLI openehr2pxf exits successfully' )
or diag $output;
ok(
structured_files_match( 't/openehr2pxf/out/pxf.json', $tmp_file ),
'CLI openehr2pxf matches reference output'
);
}
SKIP: {
skip 'CLI file comparisons are unreliable on Windows', 2 if IS_WINDOWS;
my $tmp_file = temp_output_file( suffix => '.json', dir => $tmpdir );
my @cmd = (
$^X, $cli,
'-ibff', 't/bff2pxf/in/individuals.json',
'-opxf', $tmp_file,
'--default-vital-status', 'UNKNOWN_STATUS',
'-O',
'--test',
);
my ( $status, $output ) = run_cli(@cmd);
diag($output) if $status != 0 && defined $output && length $output;
is( $status, 0, 'CLI bff2pxf accepts --default-vital-status' );
my $pxf = load_json_file($tmp_file);
is(
$pxf->[0]{subject}{vitalStatus}{status},
'UNKNOWN_STATUS',
'CLI bff2pxf applies the configured default vitalStatus when no source value is available',
);
}
done_testing();
( run in 0.536 second using v1.01-cache-2.11-cpan-39bf76dae61 )