nodemcu-firmware/tests/NTest_file_lfs.lua

103 lines
2.6 KiB
Lua

-- luacheck: globals file
-- luacheck: new read globals node.LFS.resource
file = require("file_lfs")
local Nt = ...
Nt = (Nt or require "NTest")
-- check standard SPIFFS file functions
loadfile("NTest_file.lua")(Nt)
local N = Nt("file_lfs")
N.test('resource.lua in LFS', function()
ok(node.LFS.resource~=nil, "resource.lua embedded in LFS")
end)
local testfile = "index.html"
if node.LFS.resource("index.html") then
testfile = "index.html"
elseif node.LFS.resource("favicon.ico") then
testfile = "favicon.ico"
elseif node.LFS.resource("test.txt") then
testfile = "test.txt"
else
error "No 'index.html' nor 'favicon.ico' nor 'text.txt' file stored in LFS resource module. Can't run LFS file tests."
end
N.test('exist file LFS', function()
ok(file.exists(testfile), "existing file")
end)
N.test('getcontents file LFS', function()
local testcontent = node.LFS.resource(testfile)
local content = file.getcontents(testfile)
ok(eq(testcontent, content),"contents")
end)
N.test('read more than 1K file LFS', function()
local f = file.open(testfile,"r")
local size = #node.LFS.resource(testfile)
local buffer = f:read()
print(#buffer)
ok(eq(#buffer < 1024 and size or 1024, 1024), "first block")
buffer = f:read()
f:close()
ok(eq(#buffer, size-1024 > 1024 and 1024 or size-1024), "second block")
end)
N.test('open existing file LFS', function()
file.remove(testfile)
local function testopen(mode, position)
file.putcontents(testfile, "testcontent")
ok(file.open(testfile, mode), mode)
file.write("")
ok(eq(file.seek(), position), "seek check")
file.close()
end
testopen("r", 0)
testopen("w", 0)
file.remove(testfile)
testopen("a", 11)
file.remove(testfile)
testopen("r+", 0)
file.remove(testfile)
testopen("w+", 0)
file.remove(testfile)
testopen("a+", 11)
file.remove(testfile)
end)
N.test('seek file LFS', function()
local testcontent = node.LFS.resource(testfile)
local content
local f = file.open(testfile)
f:seek("set", 0)
content = f:read(10)
ok(eq(testcontent:sub(1,10), content),"set 0")
f:seek("set", 99)
content = f:read(10)
ok(eq(testcontent:sub(100,109), content),"set 100")
f:seek("cur", 10)
content = f:read(10)
ok(eq(testcontent:sub(120,129), content),"cur 10")
f:seek("cur", -50)
content = f:read(10)
ok(eq(testcontent:sub(80,89), content),"cur -50")
f:seek("end", -50)
content = f:read(10)
ok(eq(testcontent:sub(#testcontent+1-50,#testcontent+1-41), content),"end -50")
end)
N.test('rename file LFS', function()
nok(file.rename(testfile, "testfile"), "cannot rename LFS file")
end)