using System; using System.Collections.Generic; using System.IO; using System.Text.RegularExpressions; using NUnit.Framework; using UnityEngine; namespace UnityEditor.PackageManager { public class PackageInfo { public string resolvedPath; public static PackageInfo FindForAssembly(System.Reflection.Assembly assembly) { var directory = new DirectoryInfo(AppContext.BaseDirectory); while (directory != null && !File.Exists(Path.Combine(directory.FullName, "package.json"))) directory = directory.Parent; return new PackageInfo { resolvedPath = directory?.FullName ?? throw new DirectoryNotFoundException("Package root") }; } } } namespace UnityEditor { public static class AssetDatabase { public static string[] FindAssets(string query) => Array.Empty(); public static string GUIDToAssetPath(string guid) => guid; } } namespace UnityEngine.TestTools { public static class LogAssert { internal static readonly Queue<(LogType type, Regex text)> Expected = new(); public static void Expect(LogType type, Regex text) => Expected.Enqueue((type, text)); public static void Expect(LogType type, string text) => Expect(type, new Regex(Regex.Escape(text))); } } [SetUpFixture] public class LogVerification { private readonly List _unexpected = new(); [OneTimeSetUp] public void Start() => Debug.Logged += Observe; private void Observe(LogType type, string text) { var expected = UnityEngine.TestTools.LogAssert.Expected; if (expected.Count > 0 && expected.Peek().type == type && expected.Peek().text.IsMatch(text)) expected.Dequeue(); else if (type == LogType.Error || type == LogType.Exception) _unexpected.Add(text); } [OneTimeTearDown] public void Finish() { Debug.Logged -= Observe; Assert.IsEmpty(_unexpected, "Unexpected Unity-style errors"); Assert.IsEmpty(UnityEngine.TestTools.LogAssert.Expected, "Expected log was not emitted"); } }