The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use Test::More tests => 3;
use Sys::Filesystem;
use Cwd qw(abs_path);
use Config;

my $RealTest = abs_path(__FILE__);
my $RealPerl = abs_path( $Config{perlpath} );
if ( $^O ne 'VMS' )
{
    $RealPerl .= $Config{_exe}
      unless $RealPerl =~ m/$Config{_exe}$/i;
}
$RealTest = ucfirst($RealTest) if ( $^O =~ m/Win32/ );

my $sfs;
eval { $sfs = Sys::Filesystem->new(); };
plan( skip_all => "Cannot initialize Sys::Filesystem" ) if ($@);
ok( ref($sfs) eq 'Sys::Filesystem', 'Create new Sys::Filesystem object' );

my ( $binmount, $mymount );

my @mounted_filesystems = sort { length($b) <=> length($a) } $sfs->filesystems( mounted => 1 );
SKIP:
{
    unless (@mounted_filesystems)
    {
        if ( $sfs->supported() )
        {
            diag("Unexpected empty list of mounted filesystems");
        }
        skip( 'Badly poor supported OS or no file systems found.', 0 );
    }
    foreach my $fs (@mounted_filesystems)
    {
        diag("Checking '$fs' being mountpoint for '$RealPerl' or '$RealTest' ...")
          if ( $^O eq 'MSWin32' or $^O eq 'cygwin' );
        if ( !defined($binmount) && ( 0 == index( $RealPerl, $fs ) ) )
        {
            $binmount = $fs;
        }

        if ( !defined($mymount) && ( 0 == index( $RealTest, $fs ) ) )
        {
            $mymount = $fs;
        }
    }
  TODO:
    {
        local $TODO = "Known fail for MSWin32, cygwin & Co. - let's make it not so important ...";
        ok( $mymount, sprintf( q{Found mountpoint for test file '%s' at '%s'}, $RealTest, $mymount || '<n/a>' ) );
        ok( $binmount,
            sprintf( q{Found mountpoint for perl executable '%s' at '%s'}, $RealPerl, $binmount || '<n/a>' ) );
    }
}