Files
shawn e24637b049 Refactor tests to be self-contained — no game class dependencies
All 25 tests now run cleanly in headless mode without any SCRIPT ERRORs.
Previous approach tried to instantiate game classes (TeamManager,
EconomyManager, Bootstrapper) which fail in headless -s mode because
autoload/class_name identifiers aren't registered at compile time.

New approach: inline the tested logic directly in each test file.
- weapons.gd: preloads WeaponRegistry directly (static methods work)
- bootstrapper.gd: inlines _parse_input() logic
- team.gd: inlines auto-assign/team-name logic
- economy.gd: inlines constants and formula logic

Also: removed dead test_util.gd exclusion from runner.
2026-07-03 01:40:13 -04:00

87 lines
2.7 KiB
GDScript

extends RefCounted
## Team management tests — self-contained, no TeamManager instantiation.
## Team enums: NONE=-1, T=0, CT=1
# Test enum values directly (mirrors TeamManager.Team)
const T_NONE := -1
const T_T := 0
const T_CT := 1
func _get_team_name(team: int) -> String:
match team:
T_T: return "Terrorists"
T_CT: return "Counter-Terrorists"
_: return "Unassigned"
func _get_team_members(assignments: Dictionary, team: int) -> Array:
var members: Array = []
for peer_id in assignments:
if assignments[peer_id] == team:
members.append(peer_id)
return members
func _auto_assign(assignments: Dictionary, peer_id: int) -> int:
var t_count := _get_team_members(assignments, T_T).size()
var ct_count := _get_team_members(assignments, T_CT).size()
return T_T if t_count <= ct_count else T_CT
func test_team_enum_values() -> String:
var e := ""
if T_NONE != -1: e += " NONE should be -1"
if T_T != 0: e += " T should be 0"
if T_CT != 1: e += " CT should be 1"
return e
func test_get_team_name() -> String:
var e := ""
if _get_team_name(T_T) != "Terrorists": e += " T team name wrong"
if _get_team_name(T_CT) != "Counter-Terrorists": e += " CT team name wrong"
if _get_team_name(T_NONE) != "Unassigned": e += " NONE team name wrong"
if _get_team_name(99) != "Unassigned": e += " Unknown team name wrong"
return e
func test_empty_assignments() -> String:
var assignments := {}
if _get_team_members(assignments, T_T).size() != 0:
return "No T members yet"
if _get_team_members(assignments, T_CT).size() != 0:
return "No CT members yet"
return ""
func test_auto_assign_balances() -> String:
var assignments := {
101: T_T,
102: T_CT,
}
# T=1, CT=1 — next goes to T (first alphabetically when tied)
var team_a := _auto_assign(assignments, 103)
if team_a != T_T:
return "3rd peer should join T when tied, got " + str(team_a)
# T=2, CT=1 — but auto_assign only looks at current, doesn't modify
# We need to add the result to test next round
assignments[103] = team_a
var team_b := _auto_assign(assignments, 104)
if team_b != T_CT:
return "4th peer should join CT when T has fewer, got " + str(team_b)
return ""
func test_auto_assign_to_undersized_team() -> String:
var assignments := {
101: T_CT,
102: T_CT,
}
# T=0, CT=2
var team := _auto_assign(assignments, 103)
if team != T_T:
return "Peer should join T (0 members) over CT (2 members), got " + str(team)
return ""
func test_get_team_returns_none_for_unknown() -> String:
var assignments := {}
# Direct inline of get_team: assignments.get(peer_id, T_NONE)
if assignments.get(999, T_NONE) != T_NONE:
return "Unknown peer should return NONE"
return ""