From e82eddd9e007597e8283922653de0e5abb94c0dc Mon Sep 17 00:00:00 2001 From: mitchell <70453897+orbitalquark@users.noreply.github.com> Date: Sun, 25 Oct 2020 00:43:25 -0400 Subject: Handle recursive symlinks in `lfs.walk()`. --- test/test.lua | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'test/test.lua') diff --git a/test/test.lua b/test/test.lua index ee4cbd0f..b1b4ee74 100644 --- a/test/test.lua +++ b/test/test.lua @@ -720,6 +720,30 @@ function test_lfs_ext_walk_win32() _G.WIN32 = win32 -- reset just in case end +function test_lfs_ext_walk_symlinks() + local dir = os.tmpname() + os.remove(dir) + lfs.mkdir(dir) + lfs.mkdir(dir .. '/1') + io.open(dir .. '/1/foo', 'w'):close() + lfs.mkdir(dir .. '/1/bar') + io.open(dir .. '/1/bar/baz', 'w'):close() + lfs.link(dir .. '/1/', dir .. '/1/bar/quux', true) -- trailing '/' on purpose + lfs.mkdir(dir .. '/2') + io.open(dir .. '/2/foobar', 'w'):close() + lfs.link(dir .. '/2/foobar', dir .. '/2/foobaz', true) + lfs.link(dir .. '/2', dir .. '/1/2', true) + local files = {} + for filename in lfs.walk(dir .. '/1/') do -- trailing '/' on purpose + files[#files + 1] = filename + end + table.sort(files) + local expected_files = {dir .. '/1/foo', dir .. '/1/bar/baz', dir .. '/1/2/foobar', dir .. '/1/2/foobaz'} + table.sort(expected_files) + assert_equal(files, expected_files) + os.execute('rm -r ' .. dir) +end + function test_lfs_ext_abs_path() assert_equal(lfs.abspath('bar', '/foo'), '/foo/bar') assert_equal(lfs.abspath('./bar', '/foo'), '/foo/bar') -- cgit v1.2.3