mirror of
https://github.com/PHIDIAS0303/ExpCluster.git
synced 2026-09-21 17:04:00 +00:00
69 lines
2.9 KiB
Lua
69 lines
2.9 KiB
Lua
--- Tests for listing and printing to the players who hold a role
|
|
local Suite = ... --- @type Suite The suite this file adds its tests to, see test/lua/framework.lua
|
|
local test, check, eq = Suite.test, Suite.check, Suite.eq
|
|
|
|
--- alice and dave are moderators with dave offline, zed has never joined
|
|
local function setup(env)
|
|
local players = {
|
|
alice = env.add_player("alice"),
|
|
bob = env.add_player("bob"),
|
|
dave = env.add_player("dave", false),
|
|
}
|
|
env.initialise{
|
|
env.assignment("alice", { "Moderator" }),
|
|
env.assignment("bob", { "Regular" }),
|
|
env.assignment("dave", { "Moderator" }),
|
|
env.assignment("zed", { "Moderator" }),
|
|
}
|
|
env.Roles.set_emit_events(true)
|
|
return players
|
|
end
|
|
|
|
test(".get_player_names() includes players not on this map", function(env)
|
|
setup(env)
|
|
eq(Suite.sorted(env.R("Moderator"):get_player_names()), { "alice", "dave", "zed" },
|
|
"every player given the role is listed")
|
|
end)
|
|
|
|
test(".get_player_names() counts a player in both lists once", function(env)
|
|
local players = setup(env)
|
|
env.R("Regular"):assign(players.alice, { silent = true, local_only = true })
|
|
env.Roles.receive_assignment_updates{ env.assignment("alice", { "Moderator", "Regular" }) }
|
|
|
|
local sd = env.Roles._script_data()
|
|
check(sd.local_players.alice ~= nil and sd.synced_players.alice ~= nil, "the role is held in both lists")
|
|
eq(Suite.sorted(env.R("Regular"):get_player_names()), { "alice", "bob" }, "the player is counted once")
|
|
end)
|
|
|
|
test(".get_players() is limited to this map and can be filtered", function(env)
|
|
setup(env)
|
|
local moderator = env.R("Moderator")
|
|
eq(Suite.sorted(Suite.names(moderator:get_players())), { "alice", "dave" }, "players are limited to this map")
|
|
eq(Suite.names(moderator:get_players(true)), { "alice" }, "filtered to connected players")
|
|
eq(Suite.names(moderator:get_players(false)), { "dave" }, "filtered to offline players")
|
|
end)
|
|
|
|
test(".print() reaches online holders", function(env)
|
|
setup(env)
|
|
env.reset_log()
|
|
eq(env.R("Moderator"):print("hello"), 1, "print returns the number of players reached")
|
|
eq(env.printed, { { "hello", to = "alice" } }, "only online holders receive the message")
|
|
eq(env.R("Jail"):print("hello"), 0, "a role with no online holders reaches nobody")
|
|
end)
|
|
|
|
test(".print() over get_higher_roles() can repeat", function(env)
|
|
local players = setup(env)
|
|
env.R("Regular"):assign(players.alice, { silent = true, local_only = true })
|
|
env.reset_log()
|
|
for _, role in ipairs(env.Roles.get_higher_roles(env.R("Regular"))) do
|
|
role:print("hello")
|
|
end
|
|
|
|
local got = {}
|
|
for _, entry in ipairs(env.printed) do got[#got + 1] = entry.to end
|
|
-- alice holds two of the roles, so like the legacy system the message can repeat
|
|
eq(Suite.sorted(got), { "alice", "alice", "bob" }, "the online holders of each role are reached")
|
|
end)
|
|
|
|
return Suite.run()
|