program TestExtractDrive; {$IFDEF FPC} {$mode objfpc}{$H+} {$ELSE} {$APPTYPE CONSOLE} {$ENDIF} uses SysUtils; var err : boolean; function tiRemoveDrive(pStrPath : string) : string; var sDrive : string; begin sDrive := extractFileDrive(pStrPath); if sDrive <> '' then begin result := copy(pStrPath, length(sDrive)+1, length(pStrPath) - length(sDrive)); end else begin result := pStrPath; end; end; procedure CheckEquals(expected, actual, msg: string); const c = '%s: Expected <%s> but found <%s>'; begin if expected <> actual then begin Writeln(Format(c, [msg, expected, actual])); err:=true; end else Writeln('...test passed.'); end; begin {$if not(defined(Windows) or defined(go32v2) or defined(os2) or defined(emx))} AllowDirectorySeparators:=['\']; AllowDriveSeparators:=[':']; {$endif} Writeln('Start tests...'); { What I use in my application } CheckEquals('', tiRemoveDrive('c:'), 'Failed on 1'); CheckEquals('\temp', tiRemoveDrive('c:\temp'), 'Failed on 2'); CheckEquals('\temp\hos.txt', tiRemoveDrive('c:\temp\hos.txt'), 'Failed on 3'); CheckEquals('\Program Files\My Program\run.bat', tiRemoveDrive('c:\Program Files\My Program\run.bat'), 'Failed on 4'); { To put the previous four test in a different way, calling ExtractFileDrive directly. } CheckEquals('c:', ExtractFileDrive('c:'), 'Failed on 5'); CheckEquals('c:', ExtractFileDrive('c:\temp'), 'Failed on 6'); CheckEquals('c:', ExtractFileDrive('c:\temp\hos.txt'), 'Failed on 6'); CheckEquals('c:', ExtractFileDrive('c:\Program Files\My Program\run.bat'), 'Failed on 7'); Writeln('Done.'); if err then halt(1); end.