From bf517dcaadcc223bb8af3c0b7960c483e06ea00c Mon Sep 17 00:00:00 2001 From: Nietod <119692307+Nietod@users.noreply.github.com> Date: Fri, 24 Apr 2026 09:41:16 +0200 Subject: [PATCH] test(NetworkManagerHUD): add unit test Added unit test for the NetworkManagersHUDs lifecycle and attributes. Not sure about the OnGUI Methods. Found some workaround by using delegates but could be overengineered and not suitable. --- Assets/Mirror/Core/NetworkManagerHUD.cs | 6 +- .../Tests/Editor/NetworkManagerHUD.meta | 8 +++ .../NetworkManagerHUDTest.cs | 55 +++++++++++++++++++ .../NetworkManagerHUDTest.cs.meta | 11 ++++ 4 files changed, 78 insertions(+), 2 deletions(-) create mode 100644 Assets/Mirror/Tests/Editor/NetworkManagerHUD.meta create mode 100644 Assets/Mirror/Tests/Editor/NetworkManagerHUD/NetworkManagerHUDTest.cs create mode 100644 Assets/Mirror/Tests/Editor/NetworkManagerHUD/NetworkManagerHUDTest.cs.meta diff --git a/Assets/Mirror/Core/NetworkManagerHUD.cs b/Assets/Mirror/Core/NetworkManagerHUD.cs index 1989d582b54..61915a6f3c6 100644 --- a/Assets/Mirror/Core/NetworkManagerHUD.cs +++ b/Assets/Mirror/Core/NetworkManagerHUD.cs @@ -9,12 +9,14 @@ namespace Mirror [HelpURL("https://mirror-networking.gitbook.io/docs/components/network-manager-hud")] public class NetworkManagerHUD : MonoBehaviour { - NetworkManager manager; + // internal so we can access it during unit tests + internal NetworkManager manager; public int offsetX; public int offsetY; - void Awake() + // internal so we can access it during unit tests + internal void Awake() { manager = GetComponent(); } diff --git a/Assets/Mirror/Tests/Editor/NetworkManagerHUD.meta b/Assets/Mirror/Tests/Editor/NetworkManagerHUD.meta new file mode 100644 index 00000000000..1cb645b9e6f --- /dev/null +++ b/Assets/Mirror/Tests/Editor/NetworkManagerHUD.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8de871a6df7b61d439459e87909cb1f3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mirror/Tests/Editor/NetworkManagerHUD/NetworkManagerHUDTest.cs b/Assets/Mirror/Tests/Editor/NetworkManagerHUD/NetworkManagerHUDTest.cs new file mode 100644 index 00000000000..8604caf4a01 --- /dev/null +++ b/Assets/Mirror/Tests/Editor/NetworkManagerHUD/NetworkManagerHUDTest.cs @@ -0,0 +1,55 @@ +using NUnit.Framework; +using UnityEngine; + +namespace Mirror.Tests +{ + public class NetworkManagerHUDTest : MirrorEditModeTest + { + [SetUp] + public override void SetUp() + { + base.SetUp(); + } + + [TearDown] + public override void TearDown() + { + base.TearDown(); + } + + [Test] + public void NetworkManagerHUDAttributesTest() + { + CreateGameObject(out GameObject manager, out NetworkManagerHUD managerHUD); + + NetworkManagerHUD[] allHUDs = manager.GetComponents(); + + // Check if [RequireComponent(typeof(NetworkManager))] works + Assert.That(manager.GetComponent(), Is.Not.Null); + Assert.That(allHUDs.Length, Is.EqualTo(1)); + + manager.AddComponent(); + allHUDs = manager.GetComponents(); + + // Check if [DisallowMultipleComponent] works + Assert.That(allHUDs.Length, Is.EqualTo(1)); + Assert.That(allHUDs[0], Is.SameAs(managerHUD)); + } + + [Test] + public void NetworkManagerHUDLifecycleTest() + { + CreateGameObject(out GameObject managerGO, out NetworkManager networkManager); + + NetworkManagerHUD managerHUD = managerGO.AddComponent(); + + Assert.That(managerHUD.manager, Is.Null, "manager should be null before Awake()"); + + // Must call Unity lifecycle methods manually in edit mode tests + managerHUD.Awake(); + + Assert.That(managerHUD.manager, Is.Not.Null, "manager should be set after Awake()"); + //Assert.That(managerHUD.manager, Is.Not.Null, "manager should be set after Awake()"); + } + } +} diff --git a/Assets/Mirror/Tests/Editor/NetworkManagerHUD/NetworkManagerHUDTest.cs.meta b/Assets/Mirror/Tests/Editor/NetworkManagerHUD/NetworkManagerHUDTest.cs.meta new file mode 100644 index 00000000000..aded2d93ddc --- /dev/null +++ b/Assets/Mirror/Tests/Editor/NetworkManagerHUD/NetworkManagerHUDTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ef1828fc2602ce340b164912fe75647d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: