Add support for a "working-directory" parameter
This commit updates the tests to check that this works and also rewrites the test script from Bash to Perl. Co-authored-by: Dave Rolsky <autarch@urth.org>
This commit is contained in:
100
tests/check-binary.pl
Executable file
100
tests/check-binary.pl
Executable file
@@ -0,0 +1,100 @@
|
||||
#!/usr/bin/env perl
|
||||
|
||||
use v5.30;
|
||||
use strict;
|
||||
use warnings;
|
||||
no warnings 'experimental::signatures';
|
||||
use feature 'signatures';
|
||||
use autodie;
|
||||
|
||||
use FindBin qw( $Bin );
|
||||
use File::Spec;
|
||||
use lib File::Spec->catdir( $Bin, 'lib' );
|
||||
|
||||
use Getopt::Long;
|
||||
use IPC::System::Simple qw( capturex );
|
||||
use Path::Tiny qw( path );
|
||||
use Test::More;
|
||||
|
||||
sub main {
|
||||
my $target;
|
||||
my $expect_cross;
|
||||
my $expect_file_re;
|
||||
my $expect_stripped;
|
||||
|
||||
GetOptions(
|
||||
'target=s' => \$target,
|
||||
'expect-file-re=s' => \$expect_file_re,
|
||||
'expect-cross!' => \$expect_cross,
|
||||
'expect-stripped!' => \$expect_stripped,
|
||||
);
|
||||
|
||||
check_cross( path( $ENV{RUNNER_TEMP} ), $expect_cross );
|
||||
|
||||
for my $bin (
|
||||
path( qw( . target ), $target, qw( debug test-project ) ),
|
||||
path( qw( . subcrate target ), $target, qw( debug subcrate ) )
|
||||
) {
|
||||
check_binary( $bin, $expect_file_re, $expect_stripped );
|
||||
}
|
||||
|
||||
done_testing();
|
||||
}
|
||||
|
||||
sub check_cross ( $bin_dir, $expect_cross ) {
|
||||
my $cross = $bin_dir->child('cross');
|
||||
if ($expect_cross) {
|
||||
ok( $cross->is_file && -x $cross, 'found `cross` in $PATH' );
|
||||
}
|
||||
else {
|
||||
ok( !$cross->exists, 'did not find `cross` in $PATH' );
|
||||
}
|
||||
}
|
||||
|
||||
sub check_binary ( $bin, $expect_file_re, $expect_stripped ) {
|
||||
ok( $bin->exists, "Binary at $bin exists" )
|
||||
or return;
|
||||
ok( $bin->is_file, "Binary at $bin is a file" )
|
||||
or return;
|
||||
ok( -x $bin, "Binary at $bin is executable" )
|
||||
or return;
|
||||
|
||||
my $file = capturex( qw( file --brief ), $bin ) // q{};
|
||||
chomp $file;
|
||||
|
||||
like(
|
||||
$file, qr/$expect_file_re/,
|
||||
"`file` output for $bin matches expected output"
|
||||
);
|
||||
|
||||
# The file command on macOS doesn't report whether the binary is stripped
|
||||
# or not.
|
||||
return if $^O eq 'darwin';
|
||||
|
||||
if ($expect_stripped) {
|
||||
unlike(
|
||||
$file, qr/not stripped/,
|
||||
"`file` does not report $bin as not stripped"
|
||||
);
|
||||
like( $file, qr/stripped/, "`file` reports $bin as stripped" );
|
||||
}
|
||||
else {
|
||||
if ( $^O eq 'MSWin32' || $^O eq 'msys' ) {
|
||||
|
||||
# On Windows, unstripped binaries don't contain the word
|
||||
# "stripped" at all.
|
||||
unlike(
|
||||
$file, qr/stripped/,
|
||||
"`file` does not report $bin as stripped"
|
||||
);
|
||||
}
|
||||
else {
|
||||
like(
|
||||
$file, qr/not stripped/,
|
||||
"`file` reports $bin as not stripped"
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
main();
|
||||
Reference in New Issue
Block a user