2023-11-18 17:12:57 +00:00
|
|
|
function get_directory_iterator_from_table(table)
|
|
|
|
return function(directory)
|
|
|
|
local index = 0
|
|
|
|
local filenames = table
|
|
|
|
|
|
|
|
return function()
|
|
|
|
index = index + 1
|
|
|
|
return filenames[index]
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe("ls", function()
|
|
|
|
local lfs = require "lfs"
|
2023-11-18 13:00:49 +00:00
|
|
|
local prevfile = require "prevfile"
|
|
|
|
|
2023-11-18 17:12:57 +00:00
|
|
|
insulate("if directory does not exist", function()
|
|
|
|
lfs.dir = function(directory) error("No such file or directory") end
|
|
|
|
|
|
|
|
it("should return nil", function()
|
|
|
|
local files = prevfile.ls("/testdir")
|
|
|
|
|
|
|
|
assert.equals(nil, files)
|
|
|
|
end)
|
|
|
|
end)
|
|
|
|
|
|
|
|
insulate("if directory is empty", function()
|
|
|
|
lfs.dir = get_directory_iterator_from_table({})
|
|
|
|
|
|
|
|
it("should return empty table", function()
|
|
|
|
local files = prevfile.ls("/testdir")
|
|
|
|
|
|
|
|
assert.are.same({}, files)
|
|
|
|
end)
|
|
|
|
|
|
|
|
it("should call lfs.dir with target directory", function()
|
|
|
|
spy.on(lfs, "dir")
|
|
|
|
local test_directory = "/testdir"
|
|
|
|
|
|
|
|
prevfile.ls(test_directory)
|
|
|
|
|
2023-11-18 17:23:38 +00:00
|
|
|
assert.spy(lfs.dir).was_called_with(test_directory)
|
2023-11-18 17:12:57 +00:00
|
|
|
end)
|
|
|
|
end)
|
|
|
|
|
|
|
|
insulate("if directory contains files", function()
|
|
|
|
lfs.dir = get_directory_iterator_from_table({"a.txt", "b.txt", "z.txt", "c.txt"})
|
|
|
|
|
|
|
|
it("should return the files in lexographical order", function()
|
|
|
|
local files = prevfile.ls("/testdir")
|
|
|
|
|
|
|
|
assert.are.same({"a.txt", "b.txt", "c.txt", "z.txt"}, files)
|
|
|
|
end)
|
|
|
|
end)
|
|
|
|
|
|
|
|
insulate("if directory contains numerically-named files", function()
|
|
|
|
lfs.dir = get_directory_iterator_from_table({"/testdir/709.txt", "/testdir/71.txt", "/testdir/710.txt"})
|
|
|
|
|
|
|
|
it("should return the files in numerical order", function()
|
|
|
|
local files = prevfile.ls("/testdir")
|
|
|
|
|
|
|
|
assert.are.same({"/testdir/71.txt", "/testdir/709.txt", "/testdir/710.txt"}, files)
|
|
|
|
end)
|
|
|
|
end)
|
|
|
|
|
|
|
|
insulate("if directory contains hidden files", function()
|
|
|
|
lfs.dir = get_directory_iterator_from_table({"a.txt", ".b.txt.swp", "c.txt"})
|
|
|
|
|
|
|
|
it("should exclude them from the listing", function()
|
|
|
|
local files = prevfile.ls("/testdir")
|
2023-11-18 13:00:49 +00:00
|
|
|
|
2023-11-18 17:12:57 +00:00
|
|
|
assert.are.same({"a.txt", "c.txt"}, files)
|
|
|
|
end)
|
2023-11-18 13:00:49 +00:00
|
|
|
end)
|
|
|
|
end)
|
2023-11-18 17:23:38 +00:00
|
|
|
|
|
|
|
describe("prevfile", function()
|
|
|
|
local prevfile = require "prevfile"
|
|
|
|
|
|
|
|
insulate("if ls returns nil", function()
|
|
|
|
prevfile.ls = function() return nil end
|
|
|
|
|
|
|
|
it("should return nil", function()
|
|
|
|
local file = prevfile.prevfile()
|
|
|
|
|
|
|
|
assert.are.same(nil, file)
|
|
|
|
end)
|
|
|
|
end)
|
|
|
|
|
|
|
|
insulate("if ls returns files", function()
|
|
|
|
prevfile.ls = function() return {"a.txt", "b.txt", "c.txt", "z.txt"} end
|
|
|
|
|
|
|
|
it("should call prevfile.ls to get files", function()
|
|
|
|
spy.on(prevfile, "ls")
|
|
|
|
test_directory = "/testdir"
|
|
|
|
|
|
|
|
prevfile.prevfile(test_directory)
|
|
|
|
|
|
|
|
assert.spy(prevfile.ls).was_called_with(test_directory)
|
|
|
|
end)
|
|
|
|
|
|
|
|
it("should return the last file in the list", function()
|
|
|
|
local file = prevfile.prevfile("/testdir")
|
|
|
|
|
|
|
|
assert.are.same("z.txt", file)
|
|
|
|
end)
|
|
|
|
end)
|
|
|
|
end)
|