[rt.cpan.org #103983] Test Fails for GetShortPathName

[email protected] ("https://me.yahoo.com/howdidwegetherereally#f714d via RT") Sun, 26 Apr 2015 12:23:12 -0400
Newsgroups perl.libwin32
Message-ID <[email protected]>
Sun Apr 26 12:23:12 2015: Request 103983 was acted upon.
Transaction: Ticket created by https://me.yahoo.com/howdidwegetherereally#f714d
       Queue: Win32
     Subject: Test Fails for GetShortPathName
   Broken in: 0.51
    Severity: (no value)
       Owner: Nobody
  Requestors: [email protected]
      Status: new
 Ticket <URL: https://rt.cpan.org/Ticket/Display.html?id=103983 >


GetShort PathName tests do not check if the file system the test runs on actually has short path names enabled.  Consequently it fails if run from a drive where that feature is not turned on.  Itz appears that only the System Drive has that feature enabled by default on most installations although it could be switched off there as well.  The following patch demonstrates the issue, if run on Cygwin/Win8.1 from an extra disk the test fails.  Moving the test file to the system drive, the test succeeds using the same build.

A rea fix should check the file system and/or try to use the system drive (which might not be "C:", so it needs to be determined).  If that's not possible the tests need to be skipped if short path names a re not available.

--- origsrc/Win32-0.51/t/GetShortPathName.t     2013-11-08 21:42:25.000000000 +0100
+++ src/Win32-0.51/t/GetShortPathName.t 2015-03-08 19:46:49.706174300 +0100
@@ -2,18 +2,21 @@ use strict;
 use Test;
 use Win32;
 
-my $path = "Long Path $$";
+my $path = "C:\\Long Path $$";
 unlink($path);
 END { unlink $path }
 
-plan tests => 5;
+plan tests => 7;
 
 Win32::CreateFile($path);
 ok(-f $path);
 
 my $short = Win32::GetShortPathName($path);
-ok($short, qr/^\S{1,8}(\.\S{1,3})?$/);
+ok($short, qr/^C:\\\S{1,8}(\.\S{1,3})?$/);
 ok(-f $short);
+my $long = Win32::GetLongPathName($short);
+ok($long, $path);
+ok(-f $long);
 
 unlink($path);
 ok(!-f $path);