Net-Game/Library/PackageCache/com.unity.test-framework@5ac417e07314/UnityEditor.TestRunner/TestRun/TestJobDataHolder.cs
2025-03-28 08:33:16 -04:00

67 lines
1.9 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
namespace UnityEditor.TestTools.TestRunner.TestRun
{
internal class TestJobDataHolder : ScriptableSingleton<TestJobDataHolder>, ITestJobDataHolder
{
[SerializeField]
public List<TestJobData> TestRuns = new List<TestJobData>();
[NonSerialized]
private readonly Dictionary<string, ITestJobRunner> m_Runners = new Dictionary<string, ITestJobRunner>();
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();
}
}
}
}