Files
security-game/src/test/tests/test_wand_screening.gd
T

51 lines
2.4 KiB
GDScript

extends RefCounted
## Headless tests for the handheld wand screening logic (PLAN.md: The Joke Shop).
const WandScreener := preload("res://src/core/wand_screener.gd")
func test_wand_detects_prohibited_item() -> bool:
var screener := WandScreener.new()
var result: Dictionary = screener.screen(["keys", "weapon"])
var a := TestUtils.check(result["alert"], "alert raised")
var b := TestUtils.check(result["prohibited"], "prohibited flagged")
var c := TestUtils.check_eq(result["item"], "weapon", "weapon identified")
return a and b and c
func test_wand_false_alarm() -> bool:
var screener := WandScreener.new()
var result: Dictionary = screener.screen(["keys", "phone"])
var a := TestUtils.check(result["alert"], "alert raised")
var b := TestUtils.check(result["false_alarm"], "false alarm flagged")
var c := TestUtils.check(not result["prohibited"], "not prohibited")
return a and b and c
func test_wand_clear() -> bool:
var screener := WandScreener.new()
var result: Dictionary = screener.screen([])
var a := TestUtils.check(not result["alert"], "no alert")
var b := TestUtils.check(not result["prohibited"], "not prohibited")
var c := TestUtils.check(not result["false_alarm"], "not false alarm")
return a and b and c
func test_wand_prohibited_takes_priority() -> bool:
var screener := WandScreener.new()
# A weapon plus a harmless item: prohibited wins.
var result: Dictionary = screener.screen(["keys", "knife"])
return TestUtils.check(result["prohibited"], "prohibited wins over false alarm")
func test_wand_decision_correctness() -> bool:
var screener := WandScreener.new()
var prohibited := screener.screen(["weapon"])
var a := TestUtils.check(not screener.decide(prohibited, true)["correct"], "admitting prohibited item is wrong")
var b := TestUtils.check(screener.decide(prohibited, false)["correct"], "refusing prohibited item is correct")
var clean := screener.screen([])
var c := TestUtils.check(screener.decide(clean, true)["correct"], "admitting clean guest is correct")
var d := TestUtils.check(not screener.decide(clean, false)["correct"], "refusing clean guest is wrong")
return a and b and c and d
func test_classify_item() -> bool:
var a := TestUtils.check_eq(WandScreener.classify_item("gun"), "prohibited", "gun prohibited")
var b := TestUtils.check_eq(WandScreener.classify_item("belt"), "false_alarm", "belt false alarm")
var c := TestUtils.check_eq(WandScreener.classify_item("wallet"), "clear", "wallet clear")
return a and b and c