// Copyright (c) 2025 EFramework Innovation. All rights reserved. // Use of this source code is governed by a MIT-style // license that can be found in the LICENSE file. using NUnit.Framework; using UnityEditor; using UnityEngine; using EFramework.Unity.Utility; using EFramework.Unity.Editor; using EFramework.Unity.UIPlugin.Editor; /// /// TestUICanvasEditor 是 UICanvasEditor 的单元测试。 /// public class TestUICanvasEditor { const string TestDir = "Assets/Temp/TestCanvasEditor"; [OneTimeSetUp] public void Init() { if (!XFile.HasDirectory(TestDir)) XFile.CreateDirectory(TestDir); } [OneTimeTearDown] public void Cleanup() { if (XFile.HasDirectory(TestDir)) XFile.DeleteDirectory(TestDir); } [Test] public void OnLoad() { // Arrange UICanvasEditor.icon = null; var originCount = EditorApplication.projectWindowItemOnGUI == null ? 0 : EditorApplication.projectWindowItemOnGUI.GetInvocationList()?.Length ?? 0; // Act (new UICanvasEditor() as XEditor.Event.Internal.OnEditorLoad).Process(); // Assert Assert.That(UICanvasEditor.icon, Is.Not.Null, "icon 应当被加载到。"); var addedCount = EditorApplication.projectWindowItemOnGUI.GetInvocationList().Length; Assert.That(originCount + 1, Is.EqualTo(addedCount), "回调函数应当被注册。"); } [Test] public void OnPost() { // Arrange (new UICanvasEditor() as XEditor.Event.Internal.OnEditorLoad).Process(); var canvasObj = new GameObject("TestCanvas"); canvasObj.AddComponent(typeof(Canvas)); try { // Assert var prefabPath = XFile.PathJoin(TestDir, "TestCanvas.prefab"); PrefabUtility.SaveAsPrefabAsset(canvasObj, prefabPath); var prefab = AssetDatabase.LoadAssetAtPath(prefabPath); var actualIcon = EditorGUIUtility.GetIconForObject(prefab); Assert.That(UICanvasEditor.icon, Is.EqualTo(actualIcon), "图标设置应当正确。"); } finally { // Cleanup GameObject.DestroyImmediate(canvasObj); } } }