cybermax / studwright /tests.json
CyberMax-tools's picture
Deploy studwright to the hub
5e00f68 verified
Raw History Blame Contribute Delete
6.37 kB
{
"pass": 66,
"fail": 0,
"runtime": "luau-web 1.4.0 (Luau compiled to WASM)",
"tests": [
{
"name": "core: Signal: Connect/Fire passes all arguments",
"ok": true
},
{
"name": "core: Signal: Once fires a single time",
"ok": true
},
{
"name": "core: Signal: Disconnect during Fire does not skip other handlers",
"ok": true
},
{
"name": "core: Signal: Wait yields until Fire and returns its values",
"ok": true
},
{
"name": "core: Signal: an erroring handler does not stop the others",
"ok": true
},
{
"name": "core: Signal: DisconnectAll",
"ok": true
},
{
"name": "core: Cleanup: cleans functions, connections, instances and tables in reverse order",
"ok": true
},
{
"name": "core: Cleanup: cancels a waiting thread",
"ok": true
},
{
"name": "core: Cleanup: AttachTo cleans when the instance is destroyed",
"ok": true
},
{
"name": "core: Format.abbreviate: suffixes and no false round-up",
"ok": true
},
{
"name": "core: Format.commas",
"ok": true
},
{
"name": "core: Format.clock and duration",
"ok": true
},
{
"name": "core: Format.ordinal and percent",
"ok": true
},
{
"name": "example: Example server: join, click, codes, daily, purchase, rebirth, leave, rejoin",
"ok": true
},
{
"name": "savedata: SaveData: new player gets a copy of the template",
"ok": true
},
{
"name": "savedata: SaveData: data survives leave and rejoin",
"ok": true
},
{
"name": "savedata: SaveData: session lock blocks a second server until the first releases",
"ok": true
},
{
"name": "savedata: SaveData: a stale lock from a crashed server is taken over",
"ok": true
},
{
"name": "savedata: SaveData: a server that lost its lock stops writing (no item duplication)",
"ok": true
},
{
"name": "savedata: SaveData: retries through DataStore outages",
"ok": true
},
{
"name": "savedata: SaveData: template reconcile adds new keys to old saves",
"ok": true
},
{
"name": "savedata: SaveData: migrations run in order once",
"ok": true
},
{
"name": "savedata: SaveData: autosave writes on the interval",
"ok": true
},
{
"name": "savedata: SaveData: shutdown releases every profile",
"ok": true
},
{
"name": "savedata: SaveData: player who leaves mid-load does not keep the lock",
"ok": true
},
{
"name": "savedata: SaveData: Erase and Peek",
"ok": true
},
{
"name": "savedata: SaveData: saves are DataStore-safe (JSON round trip)",
"ok": true
},
{
"name": "savedata: Receipts: grants once and saves before acknowledging",
"ok": true
},
{
"name": "savedata: Receipts: player not in this server -> NotProcessedYet",
"ok": true
},
{
"name": "savedata: Receipts: failed save -> NotProcessedYet, retry grants nothing extra",
"ok": true
},
{
"name": "savedata: Receipts: grant that errors does not consume the purchase",
"ok": true
},
{
"name": "savedata: Receipts: keeps only the last 100 purchase ids",
"ok": true
},
{
"name": "systems: Codes: case/space-insensitive, once per player",
"ok": true
},
{
"name": "systems: Codes: unknown, expired, level-gated and over-long codes",
"ok": true
},
{
"name": "systems: Codes: brute-force throttle (5 tries / 30 s)",
"ok": true
},
{
"name": "systems: Codes: a failing reward is not marked used",
"ok": true
},
{
"name": "systems: DailyRewards: streak grows day by day and cycles",
"ok": true
},
{
"name": "systems: DailyRewards: missing a day resets the streak, grace keeps it",
"ok": true
},
{
"name": "systems: DailyRewards: reset hour",
"ok": true
},
{
"name": "systems: PlaytimeRewards: gifts unlock on server time only",
"ok": true
},
{
"name": "systems: PlaytimeRewards: persist mode carries progress through a rejoin the same day",
"ok": true
},
{
"name": "systems: Leaderboard: global top list, throttled submits, names",
"ok": true
},
{
"name": "systems: Leaderboard: log encoding keeps huge values sortable",
"ok": true
},
{
"name": "systems: Leaderboard: leaderstats folder mirrors profile data",
"ok": true
},
{
"name": "systems: LootTable: odds add up and match the weights",
"ok": true
},
{
"name": "systems: LootTable: 100,000 seeded rolls land within 1% of the odds",
"ok": true
},
{
"name": "systems: LootTable: luck boosts rare entries and Odds shows it",
"ok": true
},
{
"name": "systems: LootTable: pity guarantees the rarity after N misses",
"ok": true
},
{
"name": "systems: Inventory: stacks, capacity and leftovers",
"ok": true
},
{
"name": "systems: Inventory: remove is all-or-nothing and unequips at zero",
"ok": true
},
{
"name": "systems: Inventory: saved shape survives a DataStore round trip",
"ok": true
},
{
"name": "systems: Inventory: Changed fires with the new count",
"ok": true
},
{
"name": "systems: Currency: multipliers, spend and cap",
"ok": true
},
{
"name": "systems: Currency: rebirth cost grows, resets wallet and boosts earnings",
"ok": true
},
{
"name": "systems: Currency: Changed signal reports delta",
"ok": true
},
{
"name": "tools: RemoteGuard: numbers reject NaN, inf and out-of-range",
"ok": true
},
{
"name": "tools: RemoteGuard: strings, enums, optional and booleans",
"ok": true
},
{
"name": "tools: RemoteGuard: arrays and shapes",
"ok": true
},
{
"name": "tools: RemoteGuard: token bucket rate limit per player",
"ok": true
},
{
"name": "tools: Cooldown: per player and action",
"ok": true
},
{
"name": "tools: Cooldown: export / import for long cooldowns",
"ok": true
},
{
"name": "tools: StateMachine: enter/exit order, allowed transitions, timers",
"ok": true
},
{
"name": "tools: StateMachine: a pending timer is cancelled by a manual change",
"ok": true
},
{
"name": "tools: Spring: critically damped settles without overshoot",
"ok": true
},
{
"name": "tools: Spring: underdamped overshoots, then settles; frame-rate independent",
"ok": true
},
{
"name": "tools: Spring: overdamped is stable with huge steps",
"ok": true
}
]
}