unit testFileNameUnit; interface uses SysUtils, ShellFileCtrl, NetworkUnit, XPTest, end_uses; procedure testGetLongFileName; procedure testGetShortFileName; procedure testCheckUNCPath; procedure testCheckDrivePath; procedure testFileDirectoryExists; procedure testExtractFileDrive; procedure testCheckFileFolderPath; procedure testPathLevel; procedure testCutPathLevel; procedure testTrailingPathDelimiter; procedure testGetAbsolutePathFromRelativePath; procedure testGetRelativePathFromAbsolutePath; implementation uses FileNameUnit, uses_end; //テスト用テキストファイルを作成する関数 procedure MakeTestFolderFile; var F: File; Str: String; FileName: String; begin Str := 'テスト'; FileName := 'C:\Temp\AA AA\BB B\CC CCC\itteyoshi.txt'; {↓テスト用テキストファイルを作成} ForceDirectories(ExtractFileDir(FileName)); AssignFile(F, FileName); Rewrite(F, Length(Str)); try if Length(Str) > 0 then BlockWrite(F, PChar(Str)^, 1); finally CloseFile(F); end; end; //テスト用テキストファイルを削除する関数 procedure DeleteTestFolderFile; var FileName: String; begin FileName := 'C:\Temp\AA AA\BB B\CC CCC\itteyoshi.txt'; ShellDeleteFile(0, FileName); ShellDeleteFolder(0, ExtractFileDir(FileName)); ShellDeleteFolder(0, ExtractFileDir(ExtractFileDir(FileName))); ShellDeleteFolder(0, ExtractFileDir(ExtractFileDir(ExtractFileDir(FileName)))); end; procedure CheckPath(A, B: String); begin A := StringReplace(A, 'c:\temp\', 'C:\Temp', [rfIgnoreCase]); B := StringReplace(B, 'c:\temp\', 'C:\Temp', [rfIgnoreCase]); XPTest.Check(A, B); end; procedure testGetLongFileName; begin MakeTestFolderFile; //通常の変換 CheckPath('C:\Temp\AA AA\BB B\CC CCC\itteyoshi.txt', GetLongFileName('C:\TEMP\AAAA~1\BBB~1\CCCCC~1\ITTEYO~1.TXT') ); CheckPath('C:\Temp\AA AA\BB B\CC CCC', GetLongFileName('C:\TEMP\AAAA~1\BBB~1\CCCCC~1') ); //変換しない CheckPath('C:\Temp\AA AA\BB B\CC CCC\itteyoshi.txt', GetLongFileName('C:\Temp\AA AA\BB B\CC CCC\itteyoshi.txt') ); CheckPath('C:\Temp\AA AA\BB B\CC CCC', GetLongFileName('C:\Temp\AA AA\BB B\CC CCC') ); DeleteTestFolderFile; //存在しないファイルとフォルダ CheckPath('', GetLongFileName('C:\TempTempTemp')); CheckPath('', GetLongFileName('C:\Temp\a.txt')); end; procedure testGetShortFileName; begin MakeTestFolderFile; //通常の変換 CheckPath('C:\Temp\AAAA~1\BBB~1\CCCCC~1\ITTEYO~1.TXT', GetShortFileName('C:\Temp\AA AA\BB B\CC CCC\itteyoshi.txt') ); CheckPath('C:\Temp\AAAA~1\BBB~1\CCCCC~1', GetShortFileName('C:\Temp\AA AA\BB B\CC CCC') ); //変換しない CheckPath('C:\Temp\AAAA~1\BBB~1\CCCCC~1\ITTEYO~1.TXT', GetShortFileName('C:\Temp\AAAA~1\BBB~1\CCCCC~1\ITTEYO~1.TXT') ); CheckPath('C:\Temp\AAAA~1\BBB~1\CCCCC~1', GetShortFileName('C:\Temp\AAAA~1\BBB~1\CCCCC~1') ); DeleteTestFolderFile; //存在しないファイルとフォルダ CheckPath('', GetShortFileName('C:\TempTempTemp')); CheckPath('', GetShortFileName('C:\Temp\a.txt')); end; procedure testCheckUNCPath; begin Check(False, CheckUNCPath('c:\aaa\bbb.txt')); Check(False, CheckUNCPath('c:\')); Check(False, CheckUNCPath('c:')); Check(True, CheckUNCPath('\\EXELION')); Check(True, CheckUNCPath('\\Exelion\TEMP')); Check(False, CheckUNCPath('\\')); end; procedure testCheckDrivePath; begin Check(True, CheckDrivePath('c:\aaa\bbb.txt')); Check(True, CheckDrivePath('c:\')); Check(True, CheckDrivePath('c:')); Check(True, CheckDrivePath('D:\aaa\bbb.txt')); Check(True, CheckDrivePath('D:\')); Check(True, CheckDrivePath('D:')); {↓二文字のドライブパスは受け付けない} Check(False, CheckDrivePath('aa:')); Check(False, CheckDrivePath('AA:')); Check(False, CheckDrivePath('aa:\')); Check(False, CheckDrivePath('AA:\')); Check(False, CheckDrivePath('AA:\temp')); Check(False, CheckDrivePath('abc:\abc')); Check(False, CheckDrivePath('\\EXELION')); Check(False, CheckDrivePath('\\Exelion\TEMP')); Check(False, CheckDrivePath('\\')); Check(False, CheckDrivePath('\:')); Check(False, CheckDrivePath('\:\')); end; {------------------------------- // DirectoryExists/FileExistsや ExtractFileDriveの動作を調査する 備考: 履歴: 2005/12/29 //--▼----------------------▽--} procedure testFileDirectoryExists; begin Check(True, DirectoryExists('C:\Temp')); Check(True, DirectoryExists('C:\Temp\')); Check(True, DirectoryExists('C:\')); Check(True, DirectoryExists('C:')); {↓マシン名はDirではない} Check(False, DirectoryExists('\\'+GetMachineNetworkInfo.HostName)); Check(True, DirectoryExists('\\'+GetMachineNetworkInfo.HostName+'\TEMP')); {↑共有フォルダはDir} MakeTestFolderFile; Check(True, FileExists('C:\Temp\AA AA\BB B\CC CCC\itteyoshi.txt')); Check(True, FileExists('C:\Temp\AA AA\BB B\CC CCC\itteyoshi.txt')); DeleteTestFolderFile; end; procedure testExtractFileDrive; begin Check('c:', ExtractFileDrive('c:\aaa\bbb.txt')); Check('C:', ExtractFileDrive('C:\aaa\bbb.txt')); end; //--△----------------------▲-- procedure testCheckFileFolderPath; begin Check(True, CheckPathFollowRule('c:\aaa\bbb.txt')); Check(True, CheckPathFollowRule('c:\')); Check(True, CheckPathFollowRule('c:')); Check(True, CheckPathFollowRule('\\EXELION')); Check(True, CheckPathFollowRule('\\B')); Check(True, CheckPathFollowRule('\\B\')); Check(True, CheckPathFollowRule('\\Exelion\TEMP')); Check(False, CheckPathFollowRule('\\')); Check(False, CheckPathFollowRule('c:\aaa\\bbb.txt')); Check(False, CheckPathFollowRule('\\Exelion\\TEMP')); Check(True, CheckPathFollowRule('.')); Check(True, CheckPathFollowRule('.\')); Check(False, CheckPathFollowRule('.\\')); Check(True, CheckPathFollowRule('..\')); Check(True, CheckPathFollowRule('..\')); Check(False, CheckPathFollowRule('...')); Check(False, CheckPathFollowRule('...\')); Check(False, CheckPathFollowRule('...\abc')); Check(False, CheckPathFollowRule('...\abc\def')); Check(False, CheckPathFollowRule('...\abc\def\')); Check(False, CheckPathFollowRule('C:\test\...')); Check(False, CheckPathFollowRule('C:\test\...\')); Check(False, CheckPathFollowRule('C:\test\...\abc')); Check(False, CheckPathFollowRule('C:\test\...\abc\def')); Check(False, CheckPathFollowRule('C:\test\...\abc\def\')); Check(False, CheckPathFollowRule('C:\test\...txt')); Check(False, CheckPathFollowRule('C:\test\...txt\')); Check(False, CheckPathFollowRule('C:\test\...txt\abc')); Check(False, CheckPathFollowRule('C:\test\...txt\abc\def')); Check(False, CheckPathFollowRule('C:\test\...txt\abc\def\')); Check(True, CheckPathFollowRule('A...')); Check(True, CheckPathFollowRule('A...\')); Check(True, CheckPathFollowRule('A...\abc')); Check(True, CheckPathFollowRule('A...\abc\def')); Check(True, CheckPathFollowRule('A...\abc\def\')); Check(True, CheckPathFollowRule('C:\test\A...')); Check(True, CheckPathFollowRule('C:\test\A...\')); Check(True, CheckPathFollowRule('C:\test\A...\abc')); Check(True, CheckPathFollowRule('C:\test\A...\abc\def')); Check(True, CheckPathFollowRule('C:\test\A...\abc\def\')); Check(False, CheckPathFollowRule('/')); Check(False, CheckPathFollowRule('a/')); Check(False, CheckPathFollowRule('/a')); Check(False, CheckPathFollowRule('ab/')); Check(False, CheckPathFollowRule('a/b')); Check(False, CheckPathFollowRule('/ab')); //{---------------------------------------- Check(False, CheckPathFollowRule('C:\Test\Test\Test\\')); //最後に\\がくるものはFalse Check(False, CheckPathFollowRule('\\')); Check(False, CheckPathFollowRule('\')); Check(False, CheckPathFollowRule('C:\Test\.\Test')); Check(False, CheckPathFollowRule('C:\Test\..\Test')); Check(True, CheckPathFollowRule('.\..\.\..\..\..\test')); Check(False, CheckPathFollowRule('.\..\.\..\a\..\..\test')); Check(False, CheckPathFollowRule('C:\..\Test')); Check(False, CheckPathFollowRule('-:\')); Check(False, CheckPathFollowRule('1:\')); Check(False, CheckPathFollowRule('_:\')); Check(True, CheckPathFollowRule('..\C:\Test\')); Check(True, CheckPathFollowRule('..\c:\Test\')); Check(False, CheckPathFollowRule('..\C:\Test\.')); Check(False, CheckPathFollowRule('..\C:\Test\.\')); Check(True, CheckPathFollowRule('..\C:\Test\a.\')); Check(False, CheckPathFollowRule('..\C:\Test\a.\\')); Check(False, CheckPathFollowRule('C:\Test\Test\:\')); Check(True, CheckPathFollowRule('C:\Test\Test\A\')); Check(False, CheckPathFollowRule('C:\Test\Test\A:\')); Check(True, CheckPathFollowRule('A:\Test\Test\A\')); Check(False, CheckPathFollowRule(':')); Check(False, CheckPathFollowRule(':\Test\')); Check(True, CheckPathFollowRule('p:\Test\')); Check(False, CheckPathFollowRule('p:\Test\\')); Check(False, CheckPathFollowRule('C:\Tst\Test\Test\...\')); Check(True, CheckPathFollowRule('C:\Tst\Test\Test\a...\')); Check(False, CheckPathFollowRule('C:\Tst\Test\Test\...txt\')); Check(False, CheckPathFollowRule('C:\Tst\Test\Test\.txt\')); Check(True, CheckPathFollowRule('C:\Tst\Test\Test\a..txt\')); Check(True, CheckPathFollowRule('C:\Tst\Test\Test\a...txt\')); Check(False, CheckPathFollowRule('.\..\.a\')); Check(False, CheckPathFollowRule('.\..\..a\')); Check(False, CheckPathFollowRule('.\..\..\.\...')); Check(False, CheckPathFollowRule('.\..\..\.\...\')); Check(False, CheckPathFollowRule('.\..\..\.\...\\')); Check(True, CheckPathFollowRule('.\..\..\.\')); Check(True, CheckPathFollowRule('.\..\..\.')); Check(True, CheckPathFollowRule('.\..\..\..\')); Check(True, CheckPathFollowRule('.\..\..\..')); Check(False, CheckPathFollowRule('.\..\..\...')); Check(True, CheckPathFollowRule('C:\Test\Test\A\')); Check(False, CheckPathFollowRule('C:\Test\/Test\A\')); Check(False, CheckPathFollowRule('C:\Test\Test/\A\')); Check(False, CheckPathFollowRule('C:\Test\Te/st/\A\')); Check(False, CheckPathFollowRule('C:\Test\Te')); Check(True, CheckPathFollowRule('A')); Check(True, CheckPathFollowRule('-')); Check(False, CheckPathFollowRule('"')); Check(True, CheckPathFollowRule('=')); end; procedure testPathLevel; begin Check(-1, PathLevel('abc')); Check(-1, PathLevel('123')); Check(-1, PathLevel('123:')); Check(-1, PathLevel('123:\')); Check(-1, PathLevel('\')); Check(-1, PathLevel('\\')); Check(-1, PathLevel('\:\')); Check(0, PathLevel('C:')); Check(0, PathLevel('C:\')); Check(0, PathLevel('D:')); Check(0, PathLevel('D:\')); Check(-1,PathLevel('AB:')); Check(-1,PathLevel('AB:\')); Check(1, PathLevel('C:\A')); Check(1, PathLevel('C:\Temp')); Check(1, PathLevel('C:\Temp\')); Check(2, PathLevel('C:\A\test.txt')); Check(2, PathLevel('C:\A\test')); Check(2, PathLevel('C:\A\test\')); Check(4, PathLevel('C:\Temp\TempA\TempB\aaa.txt')); Check(4, PathLevel('C:\Temp\TempA\TempB\aaa')); Check(4, PathLevel('C:\Temp\TempA\TempB\aaa\')); Check(-1, PathLevel('\test')); Check(-1, PathLevel('\t:')); Check(-1, PathLevel('\t:\')); Check(-1, PathLevel('\t\')); Check(0, PathLevel('\\test')); Check(0, PathLevel('\\test\')); Check(1, PathLevel('\\test\temp')); Check(1, PathLevel('\\test\temp\')); Check(2, PathLevel('\\test\temp\test.txt')); Check(4, PathLevel('\\A\Temp\TempA\TempB\aaa.txt')); Check(4, PathLevel('\\A\Temp\TempA\TempB\aaa')); Check(4, PathLevel('\\A\Temp\TempA\TempB\aaa\')); end; procedure testCutPathLevel; begin Check('C:\Temp\TempA\TempB\aaa.txt', CutPathLevel('C:\Temp\TempA\TempB\aaa.txt', 0)); Check('C:\Temp\TempA\TempB\', CutPathLevel('C:\Temp\TempA\TempB\aaa.txt', 1)); Check('C:\Temp\TempA\', CutPathLevel('C:\Temp\TempA\TempB\aaa.txt', 2)); Check('C:\', CutPathLevel('C:\Temp\TempA\TempB\aaa.txt', 4)); Check('', CutPathLevel('C:\Temp\TempA\TempB\aaa.txt', 5)); Check('', CutPathLevel('C:\Temp\TempA\TempB\aaa.txt', 6)); Check('', CutPathLevel('C:\Temp\TempA\TempB\aaa.txt', -1)); Check('C:\Temp\TempA\TempB\aaa', CutPathLevel('C:\Temp\TempA\TempB\aaa', 0)); Check('C:\Temp\TempA\TempB\aaa\', CutPathLevel('C:\Temp\TempA\TempB\aaa\', 0)); Check('C:\Temp\TempA\TempB\', CutPathLevel('C:\Temp\TempA\TempB\aaa', 1)); Check('C:\Temp\TempA\TempB\', CutPathLevel('C:\Temp\TempA\TempB\aaa\', 1)); Check('C:\Temp\TempA\', CutPathLevel('C:\Temp\TempA\TempB\aaa', 2)); Check('C:\Temp\TempA\', CutPathLevel('C:\Temp\TempA\TempB\aaa\', 2)); Check('C:\Temp\', CutPathLevel('C:\Temp\TempA\TempB\aaa', 3)); Check('C:\Temp\', CutPathLevel('C:\Temp\TempA\TempB\aaa\', 3)); Check('C:\', CutPathLevel('C:\Temp\TempA\TempB\aaa', 4)); Check('C:\', CutPathLevel('C:\Temp\TempA\TempB\aaa\', 4)); Check('', CutPathLevel('C:\Temp\TempA\TempB\aaa', 5)); Check('', CutPathLevel('C:\Temp\TempA\TempB\aaa\', 5)); Check('', CutPathLevel('C:\Temp\TempA\TempB\aaa', 6)); Check('', CutPathLevel('C:\Temp\TempA\TempB\aaa\', 6)); Check('', CutPathLevel('C:\Temp\TempA\TempB\aaa', -1)); Check('', CutPathLevel('C:\Temp\TempA\TempB\aaa\', -1)); Check('\\Test\Temp\TempA\TempB\aaa.txt', CutPathLevel('\\Test\Temp\TempA\TempB\aaa.txt', 0)); Check('\\Test\Temp\TempA\TempB\', CutPathLevel('\\Test\Temp\TempA\TempB\aaa.txt', 1)); Check('\\Test\Temp\TempA\', CutPathLevel('\\Test\Temp\TempA\TempB\aaa.txt', 2)); Check('\\Test\', CutPathLevel('\\Test\Temp\TempA\TempB\aaa.txt', 4)); Check('', CutPathLevel('\\Test\Temp\TempA\TempB\aaa.txt', 5)); Check('', CutPathLevel('\\Test\Temp\TempA\TempB\aaa.txt', 6)); Check('', CutPathLevel('\\Test\Temp\TempA\TempB\aaa.txt', -1)); Check('\\Test\Temp\TempA\TempB\aaa', CutPathLevel('\\Test\Temp\TempA\TempB\aaa', 0)); Check('\\Test\Temp\TempA\TempB\aaa\', CutPathLevel('\\Test\Temp\TempA\TempB\aaa\', 0)); Check('\\Test\Temp\TempA\TempB\', CutPathLevel('\\Test\Temp\TempA\TempB\aaa', 1)); Check('\\Test\Temp\TempA\TempB\', CutPathLevel('\\Test\Temp\TempA\TempB\aaa\', 1)); Check('\\Test\Temp\TempA\', CutPathLevel('\\Test\Temp\TempA\TempB\aaa', 2)); Check('\\Test\Temp\TempA\', CutPathLevel('\\Test\Temp\TempA\TempB\aaa\', 2)); Check('\\Test\Temp\', CutPathLevel('\\Test\Temp\TempA\TempB\aaa', 3)); Check('\\Test\Temp\', CutPathLevel('\\Test\Temp\TempA\TempB\aaa\', 3)); Check('\\Test\', CutPathLevel('\\Test\Temp\TempA\TempB\aaa', 4)); Check('\\Test\', CutPathLevel('\\Test\Temp\TempA\TempB\aaa\', 4)); Check('', CutPathLevel('\\Test\Temp\TempA\TempB\aaa', 5)); Check('', CutPathLevel('\\Test\Temp\TempA\TempB\aaa\', 5)); Check('', CutPathLevel('\\Test\Temp\TempA\TempB\aaa', 6)); Check('', CutPathLevel('\\Test\Temp\TempA\TempB\aaa\', 6)); Check('', CutPathLevel('\\Test\Temp\TempA\TempB\aaa', -1)); Check('', CutPathLevel('\\Test\Temp\TempA\TempB\aaa\', -1)); end; {------------------------------- // Include/ExcludeTrailingPathDelimiterの動作を調べるテスト 機能: 備考: 履歴: 2006/12/24(日) 00:33 //--▼----------------------▽--} procedure testTrailingPathDelimiter; begin Check('C:\Temp\', IncludeTrailingPathDelimiter('C:\Temp\')); Check('C:\Temp', ExcludeTrailingPathDelimiter('C:\Temp')); Check('C:\', IncludeTrailingPathDelimiter('C:')); Check('C:', ExcludeTrailingPathDelimiter('C:\')); end; //--△----------------------▲-- procedure testGetAbsolutePathFromRelativePath; begin {↓標準テスト} Check('C:\Test1\Test2\Test3\Test4\', GetAbsolutePathFromRelativePath('C:\Test1\Test2\Test3\Test4\Test5\', '..\')); {↓BasePathの\記号の影響なしテスト} Check('C:\Test1\Test2\Test3\Test4\', GetAbsolutePathFromRelativePath('C:\Test1\Test2\Test3\Test4\Test5', '..\')); {↓RelativePathの\記号の影響ありテスト} Check('C:\Test1\Test2\Test3\Test4', GetAbsolutePathFromRelativePath('C:\Test1\Test2\Test3\Test4\Test5\', '..')); {↓RelativePathの\記号の影響あり BasePathの\記号の影響なしテスト} Check('C:\Test1\Test2\Test3\Test4', GetAbsolutePathFromRelativePath('C:\Test1\Test2\Test3\Test4\Test5', '..')); {↓標準テスト} Check('C:\Test1\Test2\Test3\Test4\Test5\', GetAbsolutePathFromRelativePath('C:\Test1\Test2\Test3\Test4\Test5\', '.\')); {↓BasePathの\記号の影響なしテスト} Check('C:\Test1\Test2\Test3\Test4\Test5\', GetAbsolutePathFromRelativePath('C:\Test1\Test2\Test3\Test4\Test5', '.\')); {↓RelativePathの\記号の影響ありテスト} Check('C:\Test1\Test2\Test3\Test4\Test5', GetAbsolutePathFromRelativePath('C:\Test1\Test2\Test3\Test4\Test5\', '.')); {↓RelativePathの\記号の影響あり BasePathの\記号の影響なしテスト} Check('C:\Test1\Test2\Test3\Test4\Test5', GetAbsolutePathFromRelativePath('C:\Test1\Test2\Test3\Test4\Test5', '.')); {↓標準テスト} Check('C:\Test1\Test2\Test3\', GetAbsolutePathFromRelativePath('C:\Test1\Test2\Test3\Test4\Test5\', '..\..\')); {↓BasePathの\記号の影響なしテスト} Check('C:\Test1\Test2\Test3\', GetAbsolutePathFromRelativePath('C:\Test1\Test2\Test3\Test4\Test5', '..\..\')); {↓RelativePathの\記号の影響ありテスト} Check('C:\Test1\Test2\Test3', GetAbsolutePathFromRelativePath('C:\Test1\Test2\Test3\Test4\Test5\', '..\..')); {↓RelativePathの\記号の影響あり BasePathの\記号の影響なしテスト} Check('C:\Test1\Test2\Test3', GetAbsolutePathFromRelativePath('C:\Test1\Test2\Test3\Test4\Test5', '..\..')); {↓誤作動テスト} Check('', GetAbsolutePathFromRelativePath('C:\Test1\Test2\Test3\Test4\Test5', '...\')); Check('', GetAbsolutePathFromRelativePath('C:\Test1\Test2\Test3\Test4\Test5', '....\')); Check('', GetAbsolutePathFromRelativePath('C:\Test1\Test2\Test3\Test4\Test5', '..\...\')); Check('', GetAbsolutePathFromRelativePath('C:\Test1\Test2\Test3\Test4\Test5', '..\\')); {↓作動テスト} Check('C:\Test1\Test2\Test3\Test4\ABC', GetAbsolutePathFromRelativePath('C:\Test1\Test2\Test3\Test4\Test5\', '..\ABC')); Check('C:\Test1\Test2\Test3\ABC', GetAbsolutePathFromRelativePath('C:\Test1\Test2\Test3\Test4\Test5\', '..\..\ABC')); Check('C:\Test1\Test2\ABC', GetAbsolutePathFromRelativePath('C:\Test1\Test2\Test3\Test4\Test5\', '..\..\..\ABC')); Check('C:\Test1\ABC', GetAbsolutePathFromRelativePath('C:\Test1\Test2\Test3\Test4\Test5\', '..\..\..\..\ABC')); Check('C:\ABC', GetAbsolutePathFromRelativePath('C:\Test1\Test2\Test3\Test4\Test5\', '..\..\..\..\..\ABC')); {↓..\はC:\で収束されるテスト} Check('', GetAbsolutePathFromRelativePath('C:\Test1\Test2\Test3\Test4\Test5\', '..\..\..\..\..\..\ABC')); Check('D:', GetAbsolutePathFromRelativePath('C:\Test1\Test2\Test3\Test4\Test5\', '..\..\..\..\..\..\D:')); Check('D:\', GetAbsolutePathFromRelativePath('C:\Test1\Test2\Test3\Test4\Test5\', '..\..\..\..\..\..\D:\')); Check('', GetAbsolutePathFromRelativePath('C:\Test1\Test2\Test3\Test4\Test5\', '..\..\..\..\..\..\..\D:')); Check('', GetAbsolutePathFromRelativePath('C:\Test1\Test2\Test3\Test4\Test5\', '..\..\..\..\..\..\..\D:\')); {↓フォルダ名ファイル名連結テスト} Check('C:\Test1\ABC\test.txt', GetAbsolutePathFromRelativePath('C:\Test1\Test2\Test3\Test4\Test5\', '..\..\..\..\ABC\test.txt')); Check('C:\ABC\test.txt', GetAbsolutePathFromRelativePath('C:\Test1\Test2\Test3\Test4\Test5\', '..\..\..\..\..\ABC\test.txt')); {↓途中での.\の処理テスト} Check('C:\Test1\Test2\Test3\ABC', GetAbsolutePathFromRelativePath('C:\Test1\Test2\Test3\Test4\Test5\', '..\.\..\.\ABC')); Check('C:\Test1\Test2\Test3\Test4\Test5\ABC\test.txt', GetAbsolutePathFromRelativePath('C:\Test1\Test2\Test3\Test4\Test5\', '.\.\.\ABC\test.txt')); Check('', GetAbsolutePathFromRelativePath('C:\Test1\Test2\Test3\Test4\Test5\', '.\\.\ABC\test.txt')); Check('', GetAbsolutePathFromRelativePath('C:\Test1\Test2\Test3\Test4\Test5\', '\.\.\ABC\test.txt')); Check('C:\Test1\Test2\ABC\test.txt', GetAbsolutePathFromRelativePath('C:\Test1\Test2\Test3\Test4\Test5\', '.\.\..\..\..\.\ABC\test.txt')); Check('C:\Test1\Test2\ABC\test.txt', GetAbsolutePathFromRelativePath('C:\Test1\Test2\Test3\Test4\Test5', '.\.\..\..\..\.\ABC\test.txt')); Check('C:\Test1\Test2\ABC\D\E\F\test.txt', GetAbsolutePathFromRelativePath('C:\Test1\Test2\Test3\Test4\Test5\', '.\..\..\..\ABC\D\E\F\test.txt')); {↓省略テスト} {相対パスがそもそもファイルパスとして許容できないなら空文字を返す} Check('', GetAbsolutePathFromRelativePath('C:\Test1\Test2\Test3\Test4\Test5', '\')); Check('', GetAbsolutePathFromRelativePath('C:\Test1\Test2\Test3\Test4\Test5', '\..\')); Check('', GetAbsolutePathFromRelativePath('C:\Test1\Test2\Test3\Test4\Test5', '\..\test')); Check('', GetAbsolutePathFromRelativePath('C:\Test1\Test2\Test3\Test4\Test5', '')); Check('C:\Test1\Test2\Test3\Test4\Test5\ABC', GetAbsolutePathFromRelativePath('C:\Test1\Test2\Test3\Test4\Test5', 'ABC')); {↓くどいくらいにテスト} Check('C:\TEST1', GetAbsolutePathFromRelativePath('C:\TEST1\TEST2\', '..')); Check('C:\TEST1', GetAbsolutePathFromRelativePath('C:\TEST1\TEST2', '..')); Check('C:\TEST1\', GetAbsolutePathFromRelativePath('C:\TEST1\TEST2\', '..\')); Check('C:\TEST1\', GetAbsolutePathFromRelativePath('C:\TEST1\TEST2', '..\')); Check('C:', GetAbsolutePathFromRelativePath('C:\TEST1\TEST2\', '..\..')); Check('C:', GetAbsolutePathFromRelativePath('C:\TEST1\TEST2', '..\..')); Check('C:\', GetAbsolutePathFromRelativePath('C:\TEST1\TEST2\', '..\..\')); Check('C:\', GetAbsolutePathFromRelativePath('C:\TEST1\TEST2', '..\..\')); Check('C:\TEST1', GetAbsolutePathFromRelativePath('C:\TEST1\TEST2\', '..\.')); Check('C:\TEST1', GetAbsolutePathFromRelativePath('C:\TEST1\TEST2', '..\.')); Check('C:\TEST1\', GetAbsolutePathFromRelativePath('C:\TEST1\TEST2\', '..\.\')); Check('C:\TEST1\', GetAbsolutePathFromRelativePath('C:\TEST1\TEST2', '..\.\')); Check('C:\TEST1\TEST2', GetAbsolutePathFromRelativePath('C:\TEST1\TEST2\', '.')); Check('C:\TEST1\TEST2', GetAbsolutePathFromRelativePath('C:\TEST1\TEST2', '.')); Check('C:\TEST1\TEST2\', GetAbsolutePathFromRelativePath('C:\TEST1\TEST2\', '.\')); Check('C:\TEST1\TEST2\', GetAbsolutePathFromRelativePath('C:\TEST1\TEST2', '.\')); Check('C:\TEST1\TEST2', GetAbsolutePathFromRelativePath('C:\TEST1\TEST2\', '.\.')); Check('C:\TEST1\TEST2', GetAbsolutePathFromRelativePath('C:\TEST1\TEST2', '.\.')); Check('C:\TEST1\TEST2\', GetAbsolutePathFromRelativePath('C:\TEST1\TEST2\', '.\.\')); Check('C:\TEST1\TEST2\', GetAbsolutePathFromRelativePath('C:\TEST1\TEST2', '.\.\')); Check('', GetAbsolutePathFromRelativePath('C:\TEST1\TEST2', '')); Check('', GetAbsolutePathFromRelativePath('C:\TEST1\TEST2', '\')); Check('', GetAbsolutePathFromRelativePath('C:\TEST1\TEST2', '\\')); Check('', GetAbsolutePathFromRelativePath('C:\TEST1\TEST2', '\\\')); Check('', GetAbsolutePathFromRelativePath('C:\TEST1\TEST2', '\a\\')); {↓相対パス欄に絶対パス書いてもだめ} Check('', GetAbsolutePathFromRelativePath('C:\TEST1\TEST2', '\\a\')); Check('', GetAbsolutePathFromRelativePath('C:\TEST1\TEST2', '\\a')); Check('', GetAbsolutePathFromRelativePath('C:\TEST1\TEST2', '\\a\b\')); Check('', GetAbsolutePathFromRelativePath('C:\TEST1\TEST2', '\\a\b')); Check('', GetAbsolutePathFromRelativePath('C:\TEST1\TEST2', 'a:\')); Check('', GetAbsolutePathFromRelativePath('C:\TEST1\TEST2', 'a:')); Check('', GetAbsolutePathFromRelativePath('C:\TEST1\TEST2', 'a:\b\')); Check('', GetAbsolutePathFromRelativePath('C:\TEST1\TEST2', 'a:\b')); Check('', GetAbsolutePathFromRelativePath('C:\TEST1\TEST2', '.\\abc')); Check('C:\TEST1\TEST2\abc\', GetAbsolutePathFromRelativePath('C:\TEST1\TEST2', '.\abc\')); //OK Check('C:\TEST1\TEST2\abc', GetAbsolutePathFromRelativePath('C:\TEST1\TEST2', '.\abc')); //OK end; procedure testGetRelativePathFromAbsolutePath; begin {↓testGetAbsolutePathFromRelativePathの逆変換} Check('..\', GetRelativePathFromAbsolutePath('C:\Test1\Test2\Test3\Test4\Test5\', 'C:\Test1\Test2\Test3\Test4\')); {↓BasePathの\記号の影響なしテスト} Check('..\', GetRelativePathFromAbsolutePath('C:\Test1\Test2\Test3\Test4\Test5', 'C:\Test1\Test2\Test3\Test4\')); {↓AbsolutePathの\記号の影響ありテスト} Check('..', GetRelativePathFromAbsolutePath('C:\Test1\Test2\Test3\Test4\Test5\', 'C:\Test1\Test2\Test3\Test4')); Check('..', GetRelativePathFromAbsolutePath('C:\Test1\Test2\Test3\Test4\Test5', 'C:\Test1\Test2\Test3\Test4')); Check('.\Test6\Test7\', GetRelativePathFromAbsolutePath('C:\Test1\Test2\Test3\Test4\Test5\', 'C:\Test1\Test2\Test3\Test4\Test5\Test6\Test7\')); Check('.\Test6\Test7\', GetRelativePathFromAbsolutePath('C:\Test1\Test2\Test3\Test4\Test5', 'C:\Test1\Test2\Test3\Test4\Test5\Test6\Test7\')); Check('.\Test6\Test7', GetRelativePathFromAbsolutePath('C:\Test1\Test2\Test3\Test4\Test5\', 'C:\Test1\Test2\Test3\Test4\Test5\Test6\Test7')); Check('.\Test6\Test7', GetRelativePathFromAbsolutePath('C:\Test1\Test2\Test3\Test4\Test5', 'C:\Test1\Test2\Test3\Test4\Test5\Test6\Test7')); Check('.\Test6\', GetRelativePathFromAbsolutePath('C:\Test1\Test2\Test3\Test4\Test5\', 'C:\Test1\Test2\Test3\Test4\Test5\Test6\')); Check('.\Test6\', GetRelativePathFromAbsolutePath('C:\Test1\Test2\Test3\Test4\Test5', 'C:\Test1\Test2\Test3\Test4\Test5\Test6\')); Check('.\Test6', GetRelativePathFromAbsolutePath('C:\Test1\Test2\Test3\Test4\Test5\', 'C:\Test1\Test2\Test3\Test4\Test5\Test6')); Check('.\Test6', GetRelativePathFromAbsolutePath('C:\Test1\Test2\Test3\Test4\Test5', 'C:\Test1\Test2\Test3\Test4\Test5\Test6')); Check('.\', GetRelativePathFromAbsolutePath('C:\Test1\Test2\Test3\Test4\Test5\', 'C:\Test1\Test2\Test3\Test4\Test5\')); Check('.\', GetRelativePathFromAbsolutePath('C:\Test1\Test2\Test3\Test4\Test5', 'C:\Test1\Test2\Test3\Test4\Test5\')); Check('.', GetRelativePathFromAbsolutePath('C:\Test1\Test2\Test3\Test4\Test5\', 'C:\Test1\Test2\Test3\Test4\Test5')); Check('.', GetRelativePathFromAbsolutePath('C:\Test1\Test2\Test3\Test4\Test5', 'C:\Test1\Test2\Test3\Test4\Test5')); Check('..\..\', GetRelativePathFromAbsolutePath('C:\Test1\Test2\Test3\Test4\Test5\', 'C:\Test1\Test2\Test3\')); Check('..\..\', GetRelativePathFromAbsolutePath('C:\Test1\Test2\Test3\Test4\Test5', 'C:\Test1\Test2\Test3\')); Check('..\..', GetRelativePathFromAbsolutePath('C:\Test1\Test2\Test3\Test4\Test5\', 'C:\Test1\Test2\Test3')); Check('..\..', GetRelativePathFromAbsolutePath('C:\Test1\Test2\Test3\Test4\Test5', 'C:\Test1\Test2\Test3')); Check('..\..\..\', GetRelativePathFromAbsolutePath('C:\Test1\Test2\Test3\Test4\Test5\', 'C:\Test1\Test2\')); Check('..\..\..\..\', GetRelativePathFromAbsolutePath('C:\Test1\Test2\Test3\Test4\Test5\', 'C:\Test1\')); Check('..\..\..\..\..\', GetRelativePathFromAbsolutePath('C:\Test1\Test2\Test3\Test4\Test5\', 'C:\')); Check('..\..\..\..\..\', GetRelativePathFromAbsolutePath('C:\Test1\Test2\Test3\Test4\Test5', 'C:\')); Check('..\..\..\..\..', GetRelativePathFromAbsolutePath('C:\Test1\Test2\Test3\Test4\Test5\', 'C:')); Check('..\..\..\..\..', GetRelativePathFromAbsolutePath('C:\Test1\Test2\Test3\Test4\Test5', 'C:')); Check('', GetRelativePathFromAbsolutePath('C:\Test1\Test2\Test3\Test4\Test5', '')); Check('', GetRelativePathFromAbsolutePath('C:\Test1\Test2\Test3\Test4\Test5', 'C')); Check('', GetRelativePathFromAbsolutePath('C:\Test1\Test2\Test3\Test4\Test5', 'C:\Test1\Test2\Test3\Test4\\')); //「..\\」こんな値は返りません // Check("C:\Test1\Test2\Test3\Test4\ABC", // GetRelativePathFromAbsolutePath("C:\Test1\Test2\Test3\Test4\Test5\", "..\ABC")); // Check("C:\Test1\Test2\Test3\ABC", // GetRelativePathFromAbsolutePath("C:\Test1\Test2\Test3\Test4\Test5\", "..\..\ABC")); // Check("C:\Test1\Test2\ABC", // GetRelativePathFromAbsolutePath("C:\Test1\Test2\Test3\Test4\Test5\", "..\..\..\ABC")); // Check("C:\Test1\ABC", // GetRelativePathFromAbsolutePath("C:\Test1\Test2\Test3\Test4\Test5\", "..\..\..\..\ABC")); // // Check("C:\ABC", // GetRelativePathFromAbsolutePath("C:\Test1\Test2\Test3\Test4\Test5\", "..\..\..\..\..\ABC")); // // Check("C:\ABC", // end; end.