Mercurial > vim
comparison src/testdir/test_functions.vim @ 29970:d891115c0aea v9.0.0323
patch 9.0.0323: using common name in tests leads to flaky tests
Commit: https://github.com/vim/vim/commit/3b0d70f4ff436cb144683dafd956e8a3ee485a90
Author: Bram Moolenaar <Bram@vim.org>
Date: Mon Aug 29 22:31:20 2022 +0100
patch 9.0.0323: using common name in tests leads to flaky tests
Problem: Using common name in tests leads to flaky tests.
Solution: Rename files and directories to be more specific.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Mon, 29 Aug 2022 23:45:04 +0200 |
parents | cb4d95b545f1 |
children | 85f4350627a7 |
comparison
equal
deleted
inserted
replaced
29969:5f2d38cacd6c | 29970:d891115c0aea |
---|---|
345 call assert_fails('call resolve("Xlink3")', 'E655:') | 345 call assert_fails('call resolve("Xlink3")', 'E655:') |
346 call delete('Xlink1') | 346 call delete('Xlink1') |
347 call delete('Xlink2') | 347 call delete('Xlink2') |
348 call delete('Xlink3') | 348 call delete('Xlink3') |
349 | 349 |
350 silent !ln -s -f Xdir//Xfile Xlink | 350 silent !ln -s -f Xresolvedir//Xfile Xresolvelink |
351 call assert_equal('Xdir/Xfile', resolve('Xlink')) | 351 call assert_equal('Xresolvedir/Xfile', resolve('Xresolvelink')) |
352 call delete('Xlink') | 352 call delete('Xresolvelink') |
353 | 353 |
354 silent !ln -s -f Xlink2/ Xlink1 | 354 silent !ln -s -f Xlink2/ Xlink1 |
355 call assert_equal('Xlink2', 'Xlink1'->resolve()) | 355 call assert_equal('Xlink2', 'Xlink1'->resolve()) |
356 call assert_equal('Xlink2/', resolve('Xlink1/')) | 356 call assert_equal('Xlink2/', resolve('Xlink1/')) |
357 call delete('Xlink1') | 357 call delete('Xlink1') |
373 func Test_resolve_win32() | 373 func Test_resolve_win32() |
374 CheckMSWindows | 374 CheckMSWindows |
375 | 375 |
376 " test for shortcut file | 376 " test for shortcut file |
377 if executable('cscript') | 377 if executable('cscript') |
378 new Xfile | 378 new Xresfile |
379 wq | 379 wq |
380 let lines =<< trim END | 380 let lines =<< trim END |
381 Set fs = CreateObject("Scripting.FileSystemObject") | 381 Set fs = CreateObject("Scripting.FileSystemObject") |
382 Set ws = WScript.CreateObject("WScript.Shell") | 382 Set ws = WScript.CreateObject("WScript.Shell") |
383 Set shortcut = ws.CreateShortcut("Xlink.lnk") | 383 Set shortcut = ws.CreateShortcut("Xlink.lnk") |
384 shortcut.TargetPath = fs.BuildPath(ws.CurrentDirectory, "Xfile") | 384 shortcut.TargetPath = fs.BuildPath(ws.CurrentDirectory, "Xresfile") |
385 shortcut.Save | 385 shortcut.Save |
386 END | 386 END |
387 call writefile(lines, 'link.vbs') | 387 call writefile(lines, 'link.vbs') |
388 silent !cscript link.vbs | 388 silent !cscript link.vbs |
389 call delete('link.vbs') | 389 call delete('link.vbs') |
390 call assert_equal(s:normalize_fname(getcwd() . '\Xfile'), s:normalize_fname(resolve('./Xlink.lnk'))) | 390 call assert_equal(s:normalize_fname(getcwd() . '\Xresfile'), s:normalize_fname(resolve('./Xlink.lnk'))) |
391 call delete('Xfile') | 391 call delete('Xresfile') |
392 | 392 |
393 call assert_equal(s:normalize_fname(getcwd() . '\Xfile'), s:normalize_fname(resolve('./Xlink.lnk'))) | 393 call assert_equal(s:normalize_fname(getcwd() . '\Xresfile'), s:normalize_fname(resolve('./Xlink.lnk'))) |
394 call delete('Xlink.lnk') | 394 call delete('Xlink.lnk') |
395 else | 395 else |
396 echomsg 'skipped test for shortcut file' | 396 echomsg 'skipped test for shortcut file' |
397 endif | 397 endif |
398 | 398 |
399 " remove files | 399 " remove files |
400 call delete('Xlink') | 400 call delete('Xlink') |
401 call delete('Xdir', 'd') | 401 call delete('Xresfile') |
402 call delete('Xfile') | |
403 | 402 |
404 " test for symbolic link to a file | 403 " test for symbolic link to a file |
405 new Xfile | 404 new Xslinkfile |
406 wq | 405 wq |
407 call assert_equal('Xfile', resolve('Xfile')) | 406 call assert_equal('Xslinkfile', resolve('Xslinkfile')) |
408 silent !mklink Xlink Xfile | 407 silent !mklink Xlink Xslinkfile |
409 if !v:shell_error | 408 if !v:shell_error |
410 call assert_equal(s:normalize_fname(getcwd() . '\Xfile'), s:normalize_fname(resolve('./Xlink'))) | 409 call assert_equal(s:normalize_fname(getcwd() . '\Xslinkfile'), s:normalize_fname(resolve('./Xlink'))) |
411 call delete('Xlink') | 410 call delete('Xlink') |
412 else | 411 else |
413 echomsg 'skipped test for symbolic link to a file' | 412 echomsg 'skipped test for symbolic link to a file' |
414 endif | 413 endif |
415 call delete('Xfile') | 414 call delete('Xslinkfile') |
416 | 415 |
417 " test for junction to a directory | 416 " test for junction to a directory |
418 call mkdir('Xdir') | 417 call mkdir('Xjuncdir') |
419 silent !mklink /J Xlink Xdir | 418 silent !mklink /J Xlink Xjuncdir |
420 if !v:shell_error | 419 if !v:shell_error |
421 call assert_equal(s:normalize_fname(getcwd() . '\Xdir'), s:normalize_fname(resolve(getcwd() . '/Xlink'))) | 420 call assert_equal(s:normalize_fname(getcwd() . '\Xjuncdir'), s:normalize_fname(resolve(getcwd() . '/Xlink'))) |
422 | 421 |
423 call delete('Xdir', 'd') | 422 call delete('Xjuncdir', 'd') |
424 | 423 |
425 " test for junction already removed | 424 " test for junction already removed |
426 call assert_equal(s:normalize_fname(getcwd() . '\Xlink'), s:normalize_fname(resolve(getcwd() . '/Xlink'))) | 425 call assert_equal(s:normalize_fname(getcwd() . '\Xlink'), s:normalize_fname(resolve(getcwd() . '/Xlink'))) |
427 call delete('Xlink') | 426 call delete('Xlink') |
428 else | 427 else |
429 echomsg 'skipped test for junction to a directory' | 428 echomsg 'skipped test for junction to a directory' |
430 call delete('Xdir', 'd') | 429 call delete('Xjuncdir', 'd') |
431 endif | 430 endif |
432 | 431 |
433 " test for symbolic link to a directory | 432 " test for symbolic link to a directory |
434 call mkdir('Xdir') | 433 call mkdir('Xjuncdir') |
435 silent !mklink /D Xlink Xdir | 434 silent !mklink /D Xlink Xjuncdir |
436 if !v:shell_error | 435 if !v:shell_error |
437 call assert_equal(s:normalize_fname(getcwd() . '\Xdir'), s:normalize_fname(resolve(getcwd() . '/Xlink'))) | 436 call assert_equal(s:normalize_fname(getcwd() . '\Xjuncdir'), s:normalize_fname(resolve(getcwd() . '/Xlink'))) |
438 | 437 |
439 call delete('Xdir', 'd') | 438 call delete('Xjuncdir', 'd') |
440 | 439 |
441 " test for symbolic link already removed | 440 " test for symbolic link already removed |
442 call assert_equal(s:normalize_fname(getcwd() . '\Xlink'), s:normalize_fname(resolve(getcwd() . '/Xlink'))) | 441 call assert_equal(s:normalize_fname(getcwd() . '\Xlink'), s:normalize_fname(resolve(getcwd() . '/Xlink'))) |
443 call delete('Xlink') | 442 call delete('Xlink') |
444 else | 443 else |
445 echomsg 'skipped test for symbolic link to a directory' | 444 echomsg 'skipped test for symbolic link to a directory' |
446 call delete('Xdir', 'd') | 445 call delete('Xjuncdir', 'd') |
447 endif | 446 endif |
448 | 447 |
449 " test for buffer name | 448 " test for buffer name |
450 new Xfile | 449 new Xfile |
451 wq | 450 wq |
459 echomsg 'skipped test for buffer name' | 458 echomsg 'skipped test for buffer name' |
460 endif | 459 endif |
461 call delete('Xfile') | 460 call delete('Xfile') |
462 | 461 |
463 " test for reparse point | 462 " test for reparse point |
464 call mkdir('Xdir') | 463 call mkdir('Xparsedir') |
465 call assert_equal('Xdir', resolve('Xdir')) | 464 call assert_equal('Xdir', resolve('Xparsedir')) |
466 silent !mklink /D Xdirlink Xdir | 465 silent !mklink /D Xdirlink Xparsedir |
467 if !v:shell_error | 466 if !v:shell_error |
468 w Xdir/text.txt | 467 w Xparsedir/text.txt |
469 call assert_equal('Xdir/text.txt', resolve('Xdir/text.txt')) | 468 call assert_equal('Xparsedir/text.txt', resolve('Xparsedir/text.txt')) |
470 call assert_equal(s:normalize_fname(getcwd() . '\Xdir\text.txt'), s:normalize_fname(resolve('Xdirlink\text.txt'))) | 469 call assert_equal(s:normalize_fname(getcwd() . '\Xparsedir\text.txt'), s:normalize_fname(resolve('Xdirlink\text.txt'))) |
471 call assert_equal(s:normalize_fname(getcwd() . '\Xdir'), s:normalize_fname(resolve('Xdirlink'))) | 470 call assert_equal(s:normalize_fname(getcwd() . '\Xparsedir'), s:normalize_fname(resolve('Xdirlink'))) |
472 call delete('Xdirlink') | 471 call delete('Xdirlink') |
473 else | 472 else |
474 echomsg 'skipped test for reparse point' | 473 echomsg 'skipped test for reparse point' |
475 endif | 474 endif |
476 | 475 |
477 call delete('Xdir', 'rf') | 476 call delete('Xparsedir', 'rf') |
478 endfunc | 477 endfunc |
479 | 478 |
480 func Test_simplify() | 479 func Test_simplify() |
481 call assert_equal('', simplify('')) | 480 call assert_equal('', simplify('')) |
482 call assert_equal('/', simplify('/')) | 481 call assert_equal('/', simplify('/')) |
495 call assert_equal('./file', simplify('./dir/../file')) | 494 call assert_equal('./file', simplify('./dir/../file')) |
496 call assert_equal('../dir/file', simplify('dir/../../dir/file')) | 495 call assert_equal('../dir/file', simplify('dir/../../dir/file')) |
497 call assert_equal('./file', simplify('dir/.././file')) | 496 call assert_equal('./file', simplify('dir/.././file')) |
498 call assert_equal('../dir', simplify('./../dir')) | 497 call assert_equal('../dir', simplify('./../dir')) |
499 call assert_equal('..', simplify('../testdir/..')) | 498 call assert_equal('..', simplify('../testdir/..')) |
500 call mkdir('Xdir') | 499 call mkdir('Xsimpdir') |
501 call assert_equal('.', simplify('Xdir/../.')) | 500 call assert_equal('.', simplify('Xsimpdir/../.')) |
502 call delete('Xdir', 'd') | 501 call delete('Xsimpdir', 'd') |
503 | 502 |
504 call assert_fails('call simplify({->0})', 'E729:') | 503 call assert_fails('call simplify({->0})', 'E729:') |
505 call assert_fails('call simplify([])', 'E730:') | 504 call assert_fails('call simplify([])', 'E730:') |
506 call assert_fails('call simplify({})', 'E731:') | 505 call assert_fails('call simplify({})', 'E731:') |
507 if has('float') | 506 if has('float') |
1334 call assert_notequal(0, setfperm('Xfilewritable', 'rw-r-----')) | 1333 call assert_notequal(0, setfperm('Xfilewritable', 'rw-r-----')) |
1335 call assert_equal(1, 'Xfilewritable'->filewritable()) | 1334 call assert_equal(1, 'Xfilewritable'->filewritable()) |
1336 | 1335 |
1337 call assert_equal(0, filewritable('doesnotexist')) | 1336 call assert_equal(0, filewritable('doesnotexist')) |
1338 | 1337 |
1339 call mkdir('Xdir') | 1338 call mkdir('Xwritedir') |
1340 call assert_equal(2, filewritable('Xdir')) | 1339 call assert_equal(2, filewritable('Xwritedir')) |
1341 call delete('Xdir', 'd') | 1340 call delete('Xwritedir', 'd') |
1342 | 1341 |
1343 call delete('Xfilewritable') | 1342 call delete('Xfilewritable') |
1344 bw! | 1343 bw! |
1345 endfunc | 1344 endfunc |
1346 | 1345 |
1362 call assert_equal(1, executable(notepadcmd)) | 1361 call assert_equal(1, executable(notepadcmd)) |
1363 call assert_equal(driveroot .. notepadcmd, notepadcmd->exepath()) | 1362 call assert_equal(driveroot .. notepadcmd, notepadcmd->exepath()) |
1364 bwipe | 1363 bwipe |
1365 | 1364 |
1366 " create "notepad.bat" | 1365 " create "notepad.bat" |
1367 call mkdir('Xdir') | 1366 call mkdir('Xnotedir') |
1368 let notepadbat = fnamemodify('Xdir/notepad.bat', ':p') | 1367 let notepadbat = fnamemodify('Xnotedir/notepad.bat', ':p') |
1369 call writefile([], notepadbat) | 1368 call writefile([], notepadbat) |
1370 new | 1369 new |
1371 " check that the path and the pathext order is valid | 1370 " check that the path and the pathext order is valid |
1372 lcd Xdir | 1371 lcd Xnotedir |
1373 let [pathext, $PATHEXT] = [$PATHEXT, '.com;.exe;.bat;.cmd'] | 1372 let [pathext, $PATHEXT] = [$PATHEXT, '.com;.exe;.bat;.cmd'] |
1374 call assert_equal(notepadbat, exepath('notepad')) | 1373 call assert_equal(notepadbat, exepath('notepad')) |
1375 let $PATHEXT = pathext | 1374 let $PATHEXT = pathext |
1376 bwipe | 1375 bwipe |
1377 eval 'Xdir'->delete('rf') | 1376 eval 'Xnotedir'->delete('rf') |
1378 elseif has('unix') | 1377 elseif has('unix') |
1379 call assert_equal(1, 'cat'->executable()) | 1378 call assert_equal(1, 'cat'->executable()) |
1380 call assert_equal(0, executable('nodogshere')) | 1379 call assert_equal(0, executable('nodogshere')) |
1381 | 1380 |
1382 " get "cat" path and remove the leading / | 1381 " get "cat" path and remove the leading / |
2071 call assert_equal(uname =~? 'CYGWIN\|MSYS', has('win32unix')) | 2070 call assert_equal(uname =~? 'CYGWIN\|MSYS', has('win32unix')) |
2072 endif | 2071 endif |
2073 endfunc | 2072 endfunc |
2074 | 2073 |
2075 func Test_readdir() | 2074 func Test_readdir() |
2076 call mkdir('Xdir') | 2075 call mkdir('Xreaddir') |
2077 call writefile([], 'Xdir/foo.txt') | 2076 call writefile([], 'Xreaddir/foo.txt') |
2078 call writefile([], 'Xdir/bar.txt') | 2077 call writefile([], 'Xreaddir/bar.txt') |
2079 call mkdir('Xdir/dir') | 2078 call mkdir('Xreaddir/dir') |
2080 | 2079 |
2081 " All results | 2080 " All results |
2082 let files = readdir('Xdir') | 2081 let files = readdir('Xreaddir') |
2083 call assert_equal(['bar.txt', 'dir', 'foo.txt'], sort(files)) | 2082 call assert_equal(['bar.txt', 'dir', 'foo.txt'], sort(files)) |
2084 | 2083 |
2085 " Only results containing "f" | 2084 " Only results containing "f" |
2086 let files = 'Xdir'->readdir({ x -> stridx(x, 'f') != -1 }) | 2085 let files = 'Xreaddir'->readdir({ x -> stridx(x, 'f') != -1 }) |
2087 call assert_equal(['foo.txt'], sort(files)) | 2086 call assert_equal(['foo.txt'], sort(files)) |
2088 | 2087 |
2089 " Only .txt files | 2088 " Only .txt files |
2090 let files = readdir('Xdir', { x -> x =~ '.txt$' }) | 2089 let files = readdir('Xreaddir', { x -> x =~ '.txt$' }) |
2091 call assert_equal(['bar.txt', 'foo.txt'], sort(files)) | 2090 call assert_equal(['bar.txt', 'foo.txt'], sort(files)) |
2092 | 2091 |
2093 " Only .txt files with string | 2092 " Only .txt files with string |
2094 let files = readdir('Xdir', 'v:val =~ ".txt$"') | 2093 let files = readdir('Xreaddir', 'v:val =~ ".txt$"') |
2095 call assert_equal(['bar.txt', 'foo.txt'], sort(files)) | 2094 call assert_equal(['bar.txt', 'foo.txt'], sort(files)) |
2096 | 2095 |
2097 " Limit to 1 result. | 2096 " Limit to 1 result. |
2098 let l = [] | 2097 let l = [] |
2099 let files = readdir('Xdir', {x -> len(add(l, x)) == 2 ? -1 : 1}) | 2098 let files = readdir('Xreaddir', {x -> len(add(l, x)) == 2 ? -1 : 1}) |
2100 call assert_equal(1, len(files)) | 2099 call assert_equal(1, len(files)) |
2101 | 2100 |
2102 " Nested readdir() must not crash | 2101 " Nested readdir() must not crash |
2103 let files = readdir('Xdir', 'readdir("Xdir", "1") != []') | 2102 let files = readdir('Xreaddir', 'readdir("Xreaddir", "1") != []') |
2104 call sort(files)->assert_equal(['bar.txt', 'dir', 'foo.txt']) | 2103 call sort(files)->assert_equal(['bar.txt', 'dir', 'foo.txt']) |
2105 | 2104 |
2106 eval 'Xdir'->delete('rf') | 2105 eval 'Xreaddir'->delete('rf') |
2107 endfunc | 2106 endfunc |
2108 | 2107 |
2109 func Test_readdirex() | 2108 func Test_readdirex() |
2110 call mkdir('Xdir') | 2109 call mkdir('Xexdir') |
2111 call writefile(['foo'], 'Xdir/foo.txt') | 2110 call writefile(['foo'], 'Xexdir/foo.txt') |
2112 call writefile(['barbar'], 'Xdir/bar.txt') | 2111 call writefile(['barbar'], 'Xexdir/bar.txt') |
2113 call mkdir('Xdir/dir') | 2112 call mkdir('Xexdir/dir') |
2114 | 2113 |
2115 " All results | 2114 " All results |
2116 let files = readdirex('Xdir')->map({-> v:val.name}) | 2115 let files = readdirex('Xexdir')->map({-> v:val.name}) |
2117 call assert_equal(['bar.txt', 'dir', 'foo.txt'], sort(files)) | 2116 call assert_equal(['bar.txt', 'dir', 'foo.txt'], sort(files)) |
2118 let sizes = readdirex('Xdir')->map({-> v:val.size}) | 2117 let sizes = readdirex('Xexdir')->map({-> v:val.size}) |
2119 call assert_equal([0, 4, 7], sort(sizes)) | 2118 call assert_equal([0, 4, 7], sort(sizes)) |
2120 | 2119 |
2121 " Only results containing "f" | 2120 " Only results containing "f" |
2122 let files = 'Xdir'->readdirex({ e -> stridx(e.name, 'f') != -1 }) | 2121 let files = 'Xexdir'->readdirex({ e -> stridx(e.name, 'f') != -1 }) |
2123 \ ->map({-> v:val.name}) | 2122 \ ->map({-> v:val.name}) |
2124 call assert_equal(['foo.txt'], sort(files)) | 2123 call assert_equal(['foo.txt'], sort(files)) |
2125 | 2124 |
2126 " Only .txt files | 2125 " Only .txt files |
2127 let files = readdirex('Xdir', { e -> e.name =~ '.txt$' }) | 2126 let files = readdirex('Xexdir', { e -> e.name =~ '.txt$' }) |
2128 \ ->map({-> v:val.name}) | 2127 \ ->map({-> v:val.name}) |
2129 call assert_equal(['bar.txt', 'foo.txt'], sort(files)) | 2128 call assert_equal(['bar.txt', 'foo.txt'], sort(files)) |
2130 | 2129 |
2131 " Only .txt files with string | 2130 " Only .txt files with string |
2132 let files = readdirex('Xdir', 'v:val.name =~ ".txt$"') | 2131 let files = readdirex('Xexdir', 'v:val.name =~ ".txt$"') |
2133 \ ->map({-> v:val.name}) | 2132 \ ->map({-> v:val.name}) |
2134 call assert_equal(['bar.txt', 'foo.txt'], sort(files)) | 2133 call assert_equal(['bar.txt', 'foo.txt'], sort(files)) |
2135 | 2134 |
2136 " Limit to 1 result. | 2135 " Limit to 1 result. |
2137 let l = [] | 2136 let l = [] |
2138 let files = readdirex('Xdir', {e -> len(add(l, e.name)) == 2 ? -1 : 1}) | 2137 let files = readdirex('Xexdir', {e -> len(add(l, e.name)) == 2 ? -1 : 1}) |
2139 \ ->map({-> v:val.name}) | 2138 \ ->map({-> v:val.name}) |
2140 call assert_equal(1, len(files)) | 2139 call assert_equal(1, len(files)) |
2141 | 2140 |
2142 " Nested readdirex() must not crash | 2141 " Nested readdirex() must not crash |
2143 let files = readdirex('Xdir', 'readdirex("Xdir", "1") != []') | 2142 let files = readdirex('Xexdir', 'readdirex("Xexdir", "1") != []') |
2144 \ ->map({-> v:val.name}) | 2143 \ ->map({-> v:val.name}) |
2145 call sort(files)->assert_equal(['bar.txt', 'dir', 'foo.txt']) | 2144 call sort(files)->assert_equal(['bar.txt', 'dir', 'foo.txt']) |
2146 | 2145 |
2147 " report broken link correctly | 2146 " report broken link correctly |
2148 if has("unix") | 2147 if has("unix") |
2149 call writefile([], 'Xdir/abc.txt') | 2148 call writefile([], 'Xexdir/abc.txt') |
2150 call system("ln -s Xdir/abc.txt Xdir/link") | 2149 call system("ln -s Xexdir/abc.txt Xexdir/link") |
2151 call delete('Xdir/abc.txt') | 2150 call delete('Xexdir/abc.txt') |
2152 let files = readdirex('Xdir', 'readdirex("Xdir", "1") != []') | 2151 let files = readdirex('Xexdir', 'readdirex("Xexdir", "1") != []') |
2153 \ ->map({-> v:val.name .. '_' .. v:val.type}) | 2152 \ ->map({-> v:val.name .. '_' .. v:val.type}) |
2154 call sort(files)->assert_equal( | 2153 call sort(files)->assert_equal( |
2155 \ ['bar.txt_file', 'dir_dir', 'foo.txt_file', 'link_link']) | 2154 \ ['bar.txt_file', 'dir_dir', 'foo.txt_file', 'link_link']) |
2156 endif | 2155 endif |
2157 eval 'Xdir'->delete('rf') | 2156 eval 'Xexdir'->delete('rf') |
2158 | 2157 |
2159 call assert_fails('call readdirex("doesnotexist")', 'E484:') | 2158 call assert_fails('call readdirex("doesnotexist")', 'E484:') |
2160 endfunc | 2159 endfunc |
2161 | 2160 |
2162 func Test_readdirex_sort() | 2161 func Test_readdirex_sort() |
2164 " Skip tests on Mac OS X and Cygwin (does not allow several files with different casing) | 2163 " Skip tests on Mac OS X and Cygwin (does not allow several files with different casing) |
2165 if has("osxdarwin") || has("osx") || has("macunix") || has("win32unix") | 2164 if has("osxdarwin") || has("osx") || has("macunix") || has("win32unix") |
2166 throw 'Skipped: Test_readdirex_sort on systems that do not allow this using the default filesystem' | 2165 throw 'Skipped: Test_readdirex_sort on systems that do not allow this using the default filesystem' |
2167 endif | 2166 endif |
2168 let _collate = v:collate | 2167 let _collate = v:collate |
2169 call mkdir('Xdir2') | 2168 call mkdir('Xsortdir2') |
2170 call writefile(['1'], 'Xdir2/README.txt') | 2169 call writefile(['1'], 'Xsortdir2/README.txt') |
2171 call writefile(['2'], 'Xdir2/Readme.txt') | 2170 call writefile(['2'], 'Xsortdir2/Readme.txt') |
2172 call writefile(['3'], 'Xdir2/readme.txt') | 2171 call writefile(['3'], 'Xsortdir2/readme.txt') |
2173 | 2172 |
2174 " 1) default | 2173 " 1) default |
2175 let files = readdirex('Xdir2')->map({-> v:val.name}) | 2174 let files = readdirex('Xsortdir2')->map({-> v:val.name}) |
2176 let default = copy(files) | 2175 let default = copy(files) |
2177 call assert_equal(['README.txt', 'Readme.txt', 'readme.txt'], files, 'sort using default') | 2176 call assert_equal(['README.txt', 'Readme.txt', 'readme.txt'], files, 'sort using default') |
2178 | 2177 |
2179 " 2) no sorting | 2178 " 2) no sorting |
2180 let files = readdirex('Xdir2', 1, #{sort: 'none'})->map({-> v:val.name}) | 2179 let files = readdirex('Xsortdir2', 1, #{sort: 'none'})->map({-> v:val.name}) |
2181 let unsorted = copy(files) | 2180 let unsorted = copy(files) |
2182 call assert_equal(['README.txt', 'Readme.txt', 'readme.txt'], sort(files), 'unsorted') | 2181 call assert_equal(['README.txt', 'Readme.txt', 'readme.txt'], sort(files), 'unsorted') |
2183 call assert_fails("call readdirex('Xdir2', 1, #{slort: 'none'})", 'E857: Dictionary key "sort" required') | 2182 call assert_fails("call readdirex('Xsortdir2', 1, #{slort: 'none'})", 'E857: Dictionary key "sort" required') |
2184 | 2183 |
2185 " 3) sort by case (same as default) | 2184 " 3) sort by case (same as default) |
2186 let files = readdirex('Xdir2', 1, #{sort: 'case'})->map({-> v:val.name}) | 2185 let files = readdirex('Xsortdir2', 1, #{sort: 'case'})->map({-> v:val.name}) |
2187 call assert_equal(default, files, 'sort by case') | 2186 call assert_equal(default, files, 'sort by case') |
2188 | 2187 |
2189 " 4) sort by ignoring case | 2188 " 4) sort by ignoring case |
2190 let files = readdirex('Xdir2', 1, #{sort: 'icase'})->map({-> v:val.name}) | 2189 let files = readdirex('Xsortdir2', 1, #{sort: 'icase'})->map({-> v:val.name}) |
2191 call assert_equal(unsorted->sort('i'), files, 'sort by icase') | 2190 call assert_equal(unsorted->sort('i'), files, 'sort by icase') |
2192 | 2191 |
2193 " 5) Default Collation | 2192 " 5) Default Collation |
2194 let collate = v:collate | 2193 let collate = v:collate |
2195 lang collate C | 2194 lang collate C |
2196 let files = readdirex('Xdir2', 1, #{sort: 'collate'})->map({-> v:val.name}) | 2195 let files = readdirex('Xsortdir2', 1, #{sort: 'collate'})->map({-> v:val.name}) |
2197 call assert_equal(['README.txt', 'Readme.txt', 'readme.txt'], files, 'sort by C collation') | 2196 call assert_equal(['README.txt', 'Readme.txt', 'readme.txt'], files, 'sort by C collation') |
2198 | 2197 |
2199 " 6) Collation de_DE | 2198 " 6) Collation de_DE |
2200 " Switch locale, this may not work on the CI system, if the locale isn't | 2199 " Switch locale, this may not work on the CI system, if the locale isn't |
2201 " available | 2200 " available |
2202 try | 2201 try |
2203 lang collate de_DE | 2202 lang collate de_DE |
2204 let files = readdirex('Xdir2', 1, #{sort: 'collate'})->map({-> v:val.name}) | 2203 let files = readdirex('Xsortdir2', 1, #{sort: 'collate'})->map({-> v:val.name}) |
2205 call assert_equal(['readme.txt', 'Readme.txt', 'README.txt'], files, 'sort by de_DE collation') | 2204 call assert_equal(['readme.txt', 'Readme.txt', 'README.txt'], files, 'sort by de_DE collation') |
2206 catch | 2205 catch |
2207 throw 'Skipped: de_DE collation is not available' | 2206 throw 'Skipped: de_DE collation is not available' |
2208 | 2207 |
2209 finally | 2208 finally |
2210 exe 'lang collate' collate | 2209 exe 'lang collate' collate |
2211 eval 'Xdir2'->delete('rf') | 2210 eval 'Xsortdir2'->delete('rf') |
2212 endtry | 2211 endtry |
2213 endfunc | 2212 endfunc |
2214 | 2213 |
2215 func Test_readdir_sort() | 2214 func Test_readdir_sort() |
2216 " some more cases for testing sorting for readdirex | 2215 " some more cases for testing sorting for readdirex |
2217 let dir = 'Xdir3' | 2216 let dir = 'Xsortdir3' |
2218 call mkdir(dir) | 2217 call mkdir(dir) |
2219 call writefile(['1'], dir .. '/README.txt') | 2218 call writefile(['1'], dir .. '/README.txt') |
2220 call writefile(['2'], dir .. '/Readm.txt') | 2219 call writefile(['2'], dir .. '/Readm.txt') |
2221 call writefile(['3'], dir .. '/read.txt') | 2220 call writefile(['3'], dir .. '/read.txt') |
2222 call writefile(['4'], dir .. '/Z.txt') | 2221 call writefile(['4'], dir .. '/Z.txt') |
2257 | 2256 |
2258 eval dir->delete('rf') | 2257 eval dir->delete('rf') |
2259 endfunc | 2258 endfunc |
2260 | 2259 |
2261 func Test_delete_rf() | 2260 func Test_delete_rf() |
2262 call mkdir('Xdir') | 2261 call mkdir('Xrfdir') |
2263 call writefile([], 'Xdir/foo.txt') | 2262 call writefile([], 'Xrfdir/foo.txt') |
2264 call writefile([], 'Xdir/bar.txt') | 2263 call writefile([], 'Xrfdir/bar.txt') |
2265 call mkdir('Xdir/[a-1]') " issue #696 | 2264 call mkdir('Xrfdir/[a-1]') " issue #696 |
2266 call writefile([], 'Xdir/[a-1]/foo.txt') | 2265 call writefile([], 'Xrfdir/[a-1]/foo.txt') |
2267 call writefile([], 'Xdir/[a-1]/bar.txt') | 2266 call writefile([], 'Xrfdir/[a-1]/bar.txt') |
2268 call assert_true(filereadable('Xdir/foo.txt')) | 2267 call assert_true(filereadable('Xrfdir/foo.txt')) |
2269 call assert_true('Xdir/[a-1]/foo.txt'->filereadable()) | 2268 call assert_true('Xrfdir/[a-1]/foo.txt'->filereadable()) |
2270 | 2269 |
2271 call assert_equal(0, delete('Xdir', 'rf')) | 2270 call assert_equal(0, delete('Xrfdir', 'rf')) |
2272 call assert_false(filereadable('Xdir/foo.txt')) | 2271 call assert_false(filereadable('Xrfdir/foo.txt')) |
2273 call assert_false(filereadable('Xdir/[a-1]/foo.txt')) | 2272 call assert_false(filereadable('Xrfdir/[a-1]/foo.txt')) |
2274 | 2273 |
2275 if has('unix') | 2274 if has('unix') |
2276 call mkdir('Xdir/Xdir2', 'p') | 2275 call mkdir('Xrfdir/Xdir2', 'p') |
2277 silent !chmod 555 Xdir | 2276 silent !chmod 555 Xrfdir |
2278 call assert_equal(-1, delete('Xdir/Xdir2', 'rf')) | 2277 call assert_equal(-1, delete('Xrfdir/Xdir2', 'rf')) |
2279 call assert_equal(-1, delete('Xdir', 'rf')) | 2278 call assert_equal(-1, delete('Xrfdir', 'rf')) |
2280 silent !chmod 755 Xdir | 2279 silent !chmod 755 Xrfdir |
2281 call assert_equal(0, delete('Xdir', 'rf')) | 2280 call assert_equal(0, delete('Xrfdir', 'rf')) |
2282 endif | 2281 endif |
2283 endfunc | 2282 endfunc |
2284 | 2283 |
2285 func Test_call() | 2284 func Test_call() |
2286 call assert_equal(3, call('len', [123])) | 2285 call assert_equal(3, call('len', [123])) |