Mercurial > vim
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 |