extends "res://addons/gut/test.gd" const Ids = preload("res://scripts/ids.gd") const LogPlayer = preload("res://scripts/canon_log/log_player.gd") const LogLocation = preload("res://scripts/canon_log/log_location.gd") const PartyMember = preload("res://scripts/canon_log/party_member.gd") const Quest = preload("res://scripts/canon_log/quest.gd") const Humiliation = preload("res://scripts/canon_log/humiliation.gd") func test_ids_regex(): assert_true(Ids.is_valid("greywater_docks")) assert_false(Ids.is_valid("Bad Id")) assert_false(Ids.is_valid("has-hyphen")) func test_player_dict_has_only_three_keys(): var p = LogPlayer.new("Aldric", "sellsword", "Fortune spits on you") var d = p.to_dict() assert_eq(d.keys().size(), 3) assert_false("luck" in d) assert_eq(d["class_id"], "sellsword") func test_player_rejects_unknown_class(): var p = LogPlayer.new("Aldric", "sellsword", "x") assert_false(p.set_class_id("bard")) assert_eq(p.class_id, "sellsword") func test_party_member_clamps_disposition(): var m = PartyMember.new("brannoc_thane", "Brannoc Thane", 200) assert_eq(m.disposition, 100) m.set_disposition(-200) assert_eq(m.disposition, -100) func test_quest_status_enum(): var q = Quest.new("find_the_ledger", "The Missing Ledger", "active", "Find it") assert_false(q.set_status("abandoned")) assert_eq(q.status, "active") assert_true(q.set_status("complete")) func test_humiliation_clamps_weight_and_turn(): var h = Humiliation.new("h_1", "vomited on a shrine", 11, -3) assert_eq(h.weight, 10) assert_eq(h.turn, 0) func test_round_trip_each_entity(): var loc = LogLocation.new("greywater_docks", "the Greywater docks") assert_eq(LogLocation.from_dict(loc.to_dict()).to_dict(), loc.to_dict()) var m = PartyMember.new("cadwyn_vell", "Cadwyn Vell", 15) assert_eq(PartyMember.from_dict(m.to_dict()).to_dict(), m.to_dict())