224 lines
5.2 KiB
Lua
224 lines
5.2 KiB
Lua
-- Sandbox Test App
|
|
-- Tests: timers, JSON, crypto, storage
|
|
|
|
local results = {}
|
|
local logCounter = 0
|
|
|
|
-- Helper to get document (use global set by C++)
|
|
local function getDocument()
|
|
-- The C++ code sets 'document' global after loading
|
|
return document
|
|
end
|
|
|
|
local function log(msg)
|
|
logCounter = logCounter + 1
|
|
table.insert(results, string.format("[%03d] %s", logCounter, msg))
|
|
local doc = getDocument()
|
|
if doc then
|
|
local el = doc:GetElementById("results")
|
|
if el then
|
|
el.inner_rml = table.concat(results, "\n")
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Navigation helper
|
|
function goBack()
|
|
if navigation and navigation.back then
|
|
navigation.back()
|
|
else
|
|
log("Navigation not available")
|
|
end
|
|
end
|
|
|
|
local function setStatus(id, status, success)
|
|
local doc = getDocument()
|
|
if not doc then
|
|
print("[LUA] ERROR: document not available!")
|
|
return
|
|
end
|
|
local el = doc:GetElementById(id)
|
|
if el then
|
|
if success then
|
|
el.inner_rml = "✓ " .. status
|
|
else
|
|
el.inner_rml = "✗ " .. status
|
|
end
|
|
else
|
|
print("[LUA] ERROR: element not found: " .. id)
|
|
end
|
|
end
|
|
|
|
-- Timer test
|
|
function testTimer()
|
|
print("[LUA] testTimer called!")
|
|
setStatus("timer-status", "Running...", true)
|
|
log("Starting timer test...")
|
|
|
|
local count = 0
|
|
local timerId = nil
|
|
|
|
timerId = setInterval(function()
|
|
count = count + 1
|
|
log("Timer tick: " .. count)
|
|
|
|
if count >= 3 then
|
|
clearInterval(timerId)
|
|
setStatus("timer-status", "Passed (3 ticks)", true)
|
|
log("Timer test complete!")
|
|
end
|
|
end, 1000)
|
|
|
|
log("Timer started with ID: " .. tostring(timerId))
|
|
end
|
|
|
|
-- JSON test
|
|
function testJSON()
|
|
log("Starting JSON test...")
|
|
|
|
local success = true
|
|
local msg = ""
|
|
|
|
-- Test encode
|
|
local data = {
|
|
name = "test",
|
|
value = 42,
|
|
nested = { a = 1, b = 2 }
|
|
}
|
|
|
|
local encoded = json.encode(data)
|
|
if encoded then
|
|
log("Encoded: " .. encoded)
|
|
else
|
|
success = false
|
|
msg = "encode failed"
|
|
end
|
|
|
|
-- Test decode
|
|
if success then
|
|
local decoded = json.decode(encoded)
|
|
if decoded and decoded.name == "test" and decoded.value == 42 then
|
|
log("Decoded successfully, name=" .. decoded.name)
|
|
else
|
|
success = false
|
|
msg = "decode failed"
|
|
end
|
|
end
|
|
|
|
if success then
|
|
setStatus("json-status", "Passed", true)
|
|
log("JSON test complete!")
|
|
else
|
|
setStatus("json-status", "Failed: " .. msg, false)
|
|
end
|
|
end
|
|
|
|
-- Crypto test
|
|
function testCrypto()
|
|
log("Starting crypto test...")
|
|
|
|
local success = true
|
|
local msg = ""
|
|
|
|
-- Test random bytes
|
|
local bytes = crypto.randomBytes(16)
|
|
if bytes and #bytes == 16 then
|
|
log("Random bytes (hex): " .. bytes:gsub(".", function(c)
|
|
return string.format("%02x", c:byte())
|
|
end))
|
|
else
|
|
success = false
|
|
msg = "randomBytes failed"
|
|
end
|
|
|
|
-- Test SHA256
|
|
if success then
|
|
local hash = crypto.hash("sha256", "hello world")
|
|
if hash then
|
|
log("SHA256: " .. hash:sub(1, 32) .. "...")
|
|
else
|
|
success = false
|
|
msg = "sha256 failed"
|
|
end
|
|
end
|
|
|
|
-- Test HMAC
|
|
if success then
|
|
local hmac = crypto.hmac("sha256", "secret", "message")
|
|
if hmac then
|
|
log("HMAC: " .. hmac:sub(1, 32) .. "...")
|
|
else
|
|
success = false
|
|
msg = "hmac failed"
|
|
end
|
|
end
|
|
|
|
if success then
|
|
setStatus("crypto-status", "Passed", true)
|
|
log("Crypto test complete!")
|
|
else
|
|
setStatus("crypto-status", "Failed: " .. msg, false)
|
|
end
|
|
end
|
|
|
|
-- Storage test
|
|
function testStorage()
|
|
log("Starting storage test...")
|
|
|
|
local success = true
|
|
local msg = ""
|
|
|
|
-- Test write (VirtualFS requires /data/, /cache/, /temp/, or /shared/ prefix)
|
|
local writeOk = fs.write("/data/test.txt", "Hello from sandbox!")
|
|
if writeOk then
|
|
log("Write successful")
|
|
else
|
|
success = false
|
|
msg = "write failed"
|
|
end
|
|
|
|
-- Test read
|
|
if success then
|
|
local content = fs.read("/data/test.txt")
|
|
if content == "Hello from sandbox!" then
|
|
log("Read successful: " .. content)
|
|
else
|
|
success = false
|
|
msg = "read mismatch"
|
|
end
|
|
end
|
|
|
|
-- Test list
|
|
if success then
|
|
local files = fs.list("/data")
|
|
if files then
|
|
log("Files in /data: " .. #files)
|
|
for _, f in ipairs(files) do
|
|
log(" - " .. f)
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Test delete
|
|
if success then
|
|
local deleteOk = fs.delete("/data/test.txt")
|
|
if deleteOk then
|
|
log("Delete successful")
|
|
else
|
|
success = false
|
|
msg = "delete failed"
|
|
end
|
|
end
|
|
|
|
if success then
|
|
setStatus("storage-status", "Passed", true)
|
|
log("Storage test complete!")
|
|
else
|
|
setStatus("storage-status", "Failed: " .. msg, false)
|
|
end
|
|
end
|
|
|
|
-- Initialize
|
|
log("Sandbox Test App loaded")
|
|
log("Lua version: " .. (_VERSION or "unknown"))
|