// 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 System.Text.RegularExpressions; using UnityEngine; using UnityEngine.TestTools; using UnityEngine.Networking; using EFramework.Unity.Editor; using EFramework.Unity.Utility; using EFramework.Unity.Asset; using static EFramework.Unity.Asset.Editor.XAsset; /// /// TestXAssetPublisher 是 XAsset.Publisher 的单元测试。 /// [PrebuildSetup(typeof(TestXAssetBuilder))] public class TestXAssetPublisher { [Test] public void Process() { // 设置测试环境 XPrefs.Asset.Set(Publisher.Preferences.Endpoint, "http://localhost:9000"); XPrefs.Asset.Set(Publisher.Preferences.Bucket, "default"); XPrefs.Asset.Set(Publisher.Preferences.Access, "admin"); XPrefs.Asset.Set(Publisher.Preferences.Secret, "adminadmin"); XPrefs.Asset.Set(XAsset.Preferences.LocalUri, "Assets"); XPrefs.Asset.Set(XAsset.Preferences.RemoteUri, $"TestXAssetPublisher/Builds-{XTime.GetMillisecond()}/Assets"); // 创建处理器 var handler = new Publisher() { ID = "Test/TestXAssetPublisher" }; // 执行发布 LogAssert.Expect(LogType.Error, new Regex(@" Object does not exist.*")); LogAssert.Expect(LogType.Error, new Regex(@"XEditor\.Command\.Run: finish mc.*")); var report = XEditor.Tasks.Execute(handler); // 验证发布结果 Assert.That(report.Result == XEditor.Tasks.Result.Succeeded, "资源发布应当成功。"); var manifestUrl = $"{XPrefs.Asset.GetString(Publisher.Preferences.Endpoint)}/{XPrefs.Asset.GetString(Publisher.Preferences.Bucket)}/{XPrefs.Asset.GetString(XAsset.Preferences.RemoteUri)}/{XMani.Default}"; var request = UnityWebRequest.Get(manifestUrl); request.timeout = 10; request.SendWebRequest(); while (!request.isDone) { } Assert.That(request.responseCode == 200, Is.True, "资源清单应当请求成功"); var manifest = new XMani.Manifest(); Assert.That(manifest.Parse(request.downloadHandler.text, out _), Is.True, "资源清单应当读取成功"); } }