# test_messenger_parity.gd —— 40250 好友/行会/家族联络人系统回归测试 extends SceneTree const SystemClass = preload("res://messenger_system.gd") var _passed: int = 0 var _failed: int = 0 func _assert(cond: bool, msg: String) -> void: if cond: _passed += 1 print(" [PASS] %s" % msg) else: _failed += 1 printerr(" [FAIL] %s" % msg) func _init() -> void: print("\n=== Running test_messenger_parity (Batch 27 Direction 1) ===") _test_friend_addition_and_validation() _test_friend_status_transitions() _test_guild_member_management() _test_family_partner_mechanics() _test_filtering_and_counts() print("\n=== Result: %d Passed, %d Failed ===" % [_passed, _failed]) if _failed == 0: print("ALL TESTS PASSED!\n") else: printerr("SOME TESTS FAILED!\n") quit(0 if _failed == 0 else 1) func _test_friend_addition_and_validation() -> void: print("\n--- Test 1: Friend Addition & Constraints ---") var m = SystemClass.new("Hero") # Reject empty name var r_empty = m.add_friend("") _assert(r_empty["error_code"] == "EMPTY_NAME", "Reject empty friend name") # Reject adding self var r_self = m.add_friend("Hero") _assert(r_self["error_code"] == "CANNOT_ADD_SELF", "Reject adding self as friend") # Add friend successfully var r_ok = m.add_friend("Alice", SystemClass.STATE_ONLINE) _assert(r_ok["success"] == true, "Add Alice as friend successfully") _assert(m.is_friend("Alice") == true, "Alice is recognized as friend") _assert(m.get_friend_state("Alice") == SystemClass.STATE_ONLINE, "Alice initial state is ONLINE") # Reject duplicate friend var r_dup = m.add_friend("Alice") _assert(r_dup["error_code"] == "ALREADY_FRIEND", "Reject duplicate friend addition") # Remove friend var rm_ok = m.remove_friend("Alice") _assert(rm_ok == true, "Alice removed from friends") _assert(m.is_friend("Alice") == false, "Alice is no longer friend") func _test_friend_status_transitions() -> void: print("\n--- Test 2: Friend Status Transitions (Online/Offline/Mobile) ---") var m = SystemClass.new("Hero") m.add_friend("Bob", SystemClass.STATE_OFFLINE) # Transition to ONLINE m.set_friend_state("Bob", SystemClass.STATE_ONLINE) _assert(m.get_friend_state("Bob") == SystemClass.STATE_ONLINE, "Bob transitioned to ONLINE") var last_event = m.event_logs[m.event_logs.size() - 1] _assert(last_event["type"] == "FRIEND_LOGIN", "Emitted FRIEND_LOGIN event") # Transition to MOBILE m.set_friend_state("Bob", SystemClass.STATE_MOBILE) _assert(m.get_friend_state("Bob") == SystemClass.STATE_MOBILE, "Bob transitioned to MOBILE") last_event = m.event_logs[m.event_logs.size() - 1] _assert(last_event["type"] == "FRIEND_MOBILE", "Emitted FRIEND_MOBILE event") # Transition to OFFLINE m.set_friend_state("Bob", SystemClass.STATE_OFFLINE) _assert(m.get_friend_state("Bob") == SystemClass.STATE_OFFLINE, "Bob transitioned to OFFLINE") last_event = m.event_logs[m.event_logs.size() - 1] _assert(last_event["type"] == "FRIEND_LOGOUT", "Emitted FRIEND_LOGOUT event") func _test_guild_member_management() -> void: print("\n--- Test 3: Guild Member Synchronization ---") var m = SystemClass.new("Hero") m.append_guild_member("Leader", "Guild Master", SystemClass.STATE_ONLINE) m.append_guild_member("Knight", "General", SystemClass.STATE_ONLINE) m.append_guild_member("Novice", "Member", SystemClass.STATE_OFFLINE) _assert(m.guild_members.size() == 3, "Guild has 3 members") _assert(m.guild_members["Leader"].rank == "Guild Master", "Leader rank is Guild Master") # Remove single member var rm_ok = m.remove_guild_member("Novice") _assert(rm_ok == true, "Novice removed from guild list") _assert(m.guild_members.size() == 2, "Guild has 2 members remaining") # Clear all guild members m.clear_all_guild_members() _assert(m.guild_members.is_empty(), "All guild members cleared on guild leave") func _test_family_partner_mechanics() -> void: print("\n--- Test 4: Family / Spouse Partner Mechanics ---") var m = SystemClass.new("Hero") # Bind partner m.set_family_partner("Eva", 100, SystemClass.STATE_ONLINE) _assert(m.family_partner != null, "Family partner bound") _assert(m.family_partner.name == "Eva", "Partner name is Eva") _assert(m.family_partner.love_point == 100, "Initial Love Points is 100") # Update love points m.update_partner_love_points(85) _assert(m.family_partner.love_point == 85, "Love Points updated to 85") # Remove partner (Divorce) m.remove_family_partner() _assert(m.family_partner == null, "Partner cleared on divorce") func _test_filtering_and_counts() -> void: print("\n--- Test 5: Filtering and Online Counts ---") var m = SystemClass.new("Hero") m.add_friend("User1", SystemClass.STATE_ONLINE) m.add_friend("User2", SystemClass.STATE_MOBILE) m.add_friend("User3", SystemClass.STATE_OFFLINE) var friend_list = m.get_group_members(SystemClass.GROUP_FRIEND) _assert(friend_list.size() == 3, "Total 3 friends in group") _assert(m.get_online_count(SystemClass.GROUP_FRIEND) == 2, "2 friends currently online (ONLINE + MOBILE)") m.append_guild_member("Guildie1", "Member", SystemClass.STATE_ONLINE) m.append_guild_member("Guildie2", "Member", SystemClass.STATE_OFFLINE) _assert(m.get_online_count(SystemClass.GROUP_GUILD) == 1, "1 guild member online")