my @failed = ();
- if ($self->{exit_status} != $self->{test}->{return} // 0) {
+ if ($self->{exit_status} != ($self->{test}->{return} // 0)) {
push @failed, 'exit status';
if ($self->{verbose}) {
print "Unexpected exit status:\n";
return $ok;
}
-sub backslash_decode {
+sub args_decode {
- my ($str) = @_;
+ my ($str, $srcdir) = @_;
if ($str =~ m/\\/) {
$str =~ s/\\a/\a/gi;
$str =~ s/\\(.)/$1/g;
}
+ if ($srcdir !~ m,^/,) {
+ $srcdir = "../$srcdir";
+ }
+
+ if ($str =~ m/^\$srcdir(.*)/) {
+ $str = "$srcdir$1";
+ }
+
return $str;
}
my ($stdin, $stdout, $stderr);
$stderr = gensym;
- my @cmd = ('../' . $self->{test}->{program}, map ({ backslash_decode($_); } @{$self->{test}->{args}}));
+ my @cmd = ('../' . $self->{test}->{program}, map ({ args_decode($_, $self->{srcdir}); } @{$self->{test}->{args}}));
### TODO: catch errors?
sub pipein_win32() {
my ($self) = @_;
- my $cmd = "$self->{test}->{pipein}| ..\\$self->{test}->{program} " . join(' ', map ({ backslash_decode($_); } @{$self->{test}->{args}}));
+ my $cmd = "$self->{test}->{pipein}| ..\\$self->{test}->{program} " . join(' ', map ({ args_decode($_, $self->{srcdir}); } @{$self->{test}->{args}}));
my ($success, $error_message, $full_buf, $stdout_buf, $stderr_buf) = IPC::Cmd::run(command => $cmd);
if (!$success) {
### TODO: catch errors?