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]))