Mercurial > vim
diff src/testdir/test_functions.vim @ 20643:c2beb6baa42c v8.2.0875
patch 8.2.0875: getting attributes for directory entries is slow
Commit: https://github.com/vim/vim/commit/6c9ba0428041d5316871245be38c13faa0107026
Author: Bram Moolenaar <Bram@vim.org>
Date: Mon Jun 1 16:09:41 2020 +0200
patch 8.2.0875: getting attributes for directory entries is slow
Problem: Getting attributes for directory entries is slow.
Solution: Add readdirex(). (Ken Takata, closes https://github.com/vim/vim/issues/5619)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Mon, 01 Jun 2020 16:15:03 +0200 |
parents | 7b8ac5e49451 |
children | 6ff992bf4c82 |
line wrap: on
line diff
--- a/src/testdir/test_functions.vim +++ b/src/testdir/test_functions.vim @@ -1834,7 +1834,7 @@ func Test_readdir() call assert_equal(['bar.txt', 'dir', 'foo.txt'], sort(files)) " Only results containing "f" - let files = 'Xdir'->readdir({ x -> stridx(x, 'f') !=- 1 }) + let files = 'Xdir'->readdir({ x -> stridx(x, 'f') != -1 }) call assert_equal(['foo.txt'], sort(files)) " Only .txt files @@ -1857,6 +1857,45 @@ func Test_readdir() eval 'Xdir'->delete('rf') endfunc +func Test_readdirex() + call mkdir('Xdir') + call writefile([], 'Xdir/foo.txt') + call writefile([], 'Xdir/bar.txt') + call mkdir('Xdir/dir') + + " All results + let files = readdirex('Xdir')->map({-> v:val.name}) + call assert_equal(['bar.txt', 'dir', 'foo.txt'], sort(files)) + + " Only results containing "f" + let files = 'Xdir'->readdirex({ e -> stridx(e.name, 'f') != -1 }) + \ ->map({-> v:val.name}) + call assert_equal(['foo.txt'], sort(files)) + + " Only .txt files + let files = readdirex('Xdir', { e -> e.name =~ '.txt$' }) + \ ->map({-> v:val.name}) + call assert_equal(['bar.txt', 'foo.txt'], sort(files)) + + " Only .txt files with string + let files = readdirex('Xdir', 'v:val.name =~ ".txt$"') + \ ->map({-> v:val.name}) + call assert_equal(['bar.txt', 'foo.txt'], sort(files)) + + " Limit to 1 result. + let l = [] + let files = readdirex('Xdir', {e -> len(add(l, e.name)) == 2 ? -1 : 1}) + \ ->map({-> v:val.name}) + call assert_equal(1, len(files)) + + " Nested readdirex() must not crash + let files = readdirex('Xdir', 'readdirex("Xdir", "1") != []') + \ ->map({-> v:val.name}) + call sort(files)->assert_equal(['bar.txt', 'dir', 'foo.txt']) + + eval 'Xdir'->delete('rf') +endfunc + func Test_delete_rf() call mkdir('Xdir') call writefile([], 'Xdir/foo.txt')