mirror of
https://github.com/Dingo-Shenanigans/ReSkate.git
synced 2026-10-24 10:26:13 +02:00
- contrib/plugins/reskate-test calls every plugin API and says what worked: ptest all, ptest <module>, ptest list. Its 45 checks cover the base set, timers, the level, package files, JSON, require, the console, storage and the sandbox. It is the example to copy for a plugin. - contrib/plugins/reskate-hostile attacks the sandbox, one attack per command (hostile list): loops, memory and buffer bombs, caught errors, error and log floods, timers, recursion, an unload that never ends, and 17 ways out. Each must end stopped or refused. - dingosdk_plugin_tests runs both from the repository: every reskate-test check passes, and every hostile attack is stopped or refused with nothing escaping. - Taken from Domination (PR 279) for the plugin API to use: the trick watch (when a trick starts, lands and what it scored, or a slam breaks it; Domination's spots left out) in Extension/Skater/trick_watch.h with its tests, the score HUD reader in score_hud.h, and teleport_local_skater_heading, whose hunks are the PR's own. Neither is wired to anything yet.
29 lines
1.1 KiB
Lua
29 lines
1.1 KiB
Lua
local h = require("harness")
|
|
local t = h.module("sandbox")
|
|
|
|
t.check("no files, programs or code loading", function()
|
|
assert(io == nil and package == nil and dofile == nil and loadfile == nil, "a file library")
|
|
assert(loadstring == nil and load == nil, "code loading")
|
|
assert(os.execute == nil and os.remove == nil and os.rename == nil and os.getenv == nil and os.exit == nil, "os")
|
|
end)
|
|
t.check("the reskate table cannot be changed", function()
|
|
h.refused(function() reskate.log = nil end)
|
|
h.refused(function() reskate.storage.get = print end)
|
|
h.refused(rawset, reskate, "x", 1)
|
|
h.refused(setmetatable, reskate, {})
|
|
end)
|
|
t.check("the libraries cannot be changed", function()
|
|
h.refused(function() string.rep = nil end)
|
|
h.refused(function() table.insert = nil end)
|
|
h.refused(function() getmetatable("").__index = {} end)
|
|
end)
|
|
t.check("its own globals work", function()
|
|
ptest_global = 1
|
|
assert(ptest_global == 1)
|
|
ptest_global = nil
|
|
end)
|
|
t.check("endless recursion is an error, not a crash", function()
|
|
local function deep(n) return deep(n + 1) + 1 end
|
|
h.refused(deep, 1)
|
|
end)
|