using System; using System.Collections.Generic; using System.Linq; using UnityEngine; namespace UnityEditor.TestTools.TestRunner.TestRun { internal class TestJobDataHolder : ScriptableSingleton, ITestJobDataHolder { [SerializeField] public List TestRuns = new List(); [NonSerialized] private readonly Dictionary m_Runners = new Dictionary(); public void RegisterRun(ITestJobRunner runner, TestJobData data) { TestRuns.Add(data); m_Runners.Add(data.guid, runner); } public void UnregisterRun(ITestJobRunner runner, TestJobData data) { TestRuns.Remove(data); m_Runners.Remove(data.guid); } public ITestJobRunner GetRunner(string guid) { return m_Runners.ContainsKey(guid) ? m_Runners[guid] : null; } public ITestJobRunner[] GetAllRunners() { return m_Runners.Values.ToArray(); } [InitializeOnLoadMethod] private static void ResumeRunningJobs() { try { foreach (var testRun in instance.TestRuns.ToArray()) { if (testRun.isRunning) { var runner = new TestJobRunner(); runner.RunJob(testRun); instance.m_Runners[testRun.guid] = runner; } else { instance.TestRuns.Remove(testRun); } } } catch (Exception ex) { Debug.LogException(ex); EditorUtility.ClearProgressBar(); EditorApplication.UnlockReloadAssemblies(); instance.TestRuns.Clear(); } } } }