-- Sandbox Test App -- Tests: timers, JSON, crypto, storage local results = {} local function log(msg) table.insert(results, os.date("%H:%M:%S") .. " " .. msg) local el = document:GetElementById("results") if el then el.inner_rml = table.concat(results, "\n") end end local function setStatus(id, status, success) local el = document:GetElementById(id) if el then if success then el.inner_rml = "✓ " .. status else el.inner_rml = "✗ " .. status end end end -- Timer test function testTimer() 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.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 local writeOk = fs.write("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("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("/") if files then log("Files in root: " .. #files) for _, f in ipairs(files) do log(" - " .. f) end end end -- Test delete if success then local deleteOk = fs.delete("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"))