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