comparison 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
comparison
equal deleted inserted replaced
20642:c0c5e1e1bad9 20643:c2beb6baa42c
1832 " All results 1832 " All results
1833 let files = readdir('Xdir') 1833 let files = readdir('Xdir')
1834 call assert_equal(['bar.txt', 'dir', 'foo.txt'], sort(files)) 1834 call assert_equal(['bar.txt', 'dir', 'foo.txt'], sort(files))
1835 1835
1836 " Only results containing "f" 1836 " Only results containing "f"
1837 let files = 'Xdir'->readdir({ x -> stridx(x, 'f') !=- 1 }) 1837 let files = 'Xdir'->readdir({ x -> stridx(x, 'f') != -1 })
1838 call assert_equal(['foo.txt'], sort(files)) 1838 call assert_equal(['foo.txt'], sort(files))
1839 1839
1840 " Only .txt files 1840 " Only .txt files
1841 let files = readdir('Xdir', { x -> x =~ '.txt$' }) 1841 let files = readdir('Xdir', { x -> x =~ '.txt$' })
1842 call assert_equal(['bar.txt', 'foo.txt'], sort(files)) 1842 call assert_equal(['bar.txt', 'foo.txt'], sort(files))
1850 let files = readdir('Xdir', {x -> len(add(l, x)) == 2 ? -1 : 1}) 1850 let files = readdir('Xdir', {x -> len(add(l, x)) == 2 ? -1 : 1})
1851 call assert_equal(1, len(files)) 1851 call assert_equal(1, len(files))
1852 1852
1853 " Nested readdir() must not crash 1853 " Nested readdir() must not crash
1854 let files = readdir('Xdir', 'readdir("Xdir", "1") != []') 1854 let files = readdir('Xdir', 'readdir("Xdir", "1") != []')
1855 call sort(files)->assert_equal(['bar.txt', 'dir', 'foo.txt'])
1856
1857 eval 'Xdir'->delete('rf')
1858 endfunc
1859
1860 func Test_readdirex()
1861 call mkdir('Xdir')
1862 call writefile([], 'Xdir/foo.txt')
1863 call writefile([], 'Xdir/bar.txt')
1864 call mkdir('Xdir/dir')
1865
1866 " All results
1867 let files = readdirex('Xdir')->map({-> v:val.name})
1868 call assert_equal(['bar.txt', 'dir', 'foo.txt'], sort(files))
1869
1870 " Only results containing "f"
1871 let files = 'Xdir'->readdirex({ e -> stridx(e.name, 'f') != -1 })
1872 \ ->map({-> v:val.name})
1873 call assert_equal(['foo.txt'], sort(files))
1874
1875 " Only .txt files
1876 let files = readdirex('Xdir', { e -> e.name =~ '.txt$' })
1877 \ ->map({-> v:val.name})
1878 call assert_equal(['bar.txt', 'foo.txt'], sort(files))
1879
1880 " Only .txt files with string
1881 let files = readdirex('Xdir', 'v:val.name =~ ".txt$"')
1882 \ ->map({-> v:val.name})
1883 call assert_equal(['bar.txt', 'foo.txt'], sort(files))
1884
1885 " Limit to 1 result.
1886 let l = []
1887 let files = readdirex('Xdir', {e -> len(add(l, e.name)) == 2 ? -1 : 1})
1888 \ ->map({-> v:val.name})
1889 call assert_equal(1, len(files))
1890
1891 " Nested readdirex() must not crash
1892 let files = readdirex('Xdir', 'readdirex("Xdir", "1") != []')
1893 \ ->map({-> v:val.name})
1855 call sort(files)->assert_equal(['bar.txt', 'dir', 'foo.txt']) 1894 call sort(files)->assert_equal(['bar.txt', 'dir', 'foo.txt'])
1856 1895
1857 eval 'Xdir'->delete('rf') 1896 eval 'Xdir'->delete('rf')
1858 endfunc 1897 endfunc
1859 1898