SW 중심대학 OSS GIT 서버
박건태, 이승준, 고기완, 이준호
새로운 배포
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
using System;using System.Collections;using System.Collections.Generic;using System.Linq;using UnityEditor.TestTools.TestRunner.Api;using UnityEditor.TestTools.TestRunner.TestRun.Tasks;using UnityEngine;using UnityEngine.TestTools;
namespace UnityEditor.TestTools.TestRunner.TestRun{ internal class TestJobRunner { private static IEnumerable<TestTaskBase> GetTaskList(ExecutionSettings settings) { if (settings == null) { yield break; }
if (settings.EditModeIncluded() || (PlayerSettings.runPlayModeTestAsEditModeTest && settings.PlayModeInEditorIncluded())) { yield return new SaveModiedSceneTask(); yield return new RegisterFilesForCleanupVerificationTask(); yield return new SaveUndoIndexTask(); yield return new BuildTestTreeTask(TestPlatform.EditMode); yield return new PrebuildSetupTask(); yield return new LegacyEditModeRunTask(); yield return new PerformUndoTask(); yield return new CleanupVerificationTask(); yield break; }
if (settings.PlayModeInEditorIncluded() && !PlayerSettings.runPlayModeTestAsEditModeTest) { yield return new SaveModiedSceneTask(); yield return new LegacyPlayModeRunTask(); yield break; }
if (settings.PlayerIncluded()) { yield return new LegacyPlayerRunTask(); yield break; } }
internal List<TestJobData> SavedTestJobData = TestJobDataHolder.instance.TestRuns; internal Action<EditorApplication.CallbackFunction> SubscribeCallback = (callback) => EditorApplication.update += callback; // ReSharper disable once DelegateSubtraction
internal Action<EditorApplication.CallbackFunction> UnsubscribeCallback = (callback) => EditorApplication.update -= callback; internal TestCommandPcHelper PcHelper = new EditModePcHelper(); internal Func<ExecutionSettings, IEnumerable<TestTaskBase>> GetTasks = GetTaskList; internal Action<Exception> LogException = Debug.LogException; internal Action<string> LogError = Debug.LogError; internal Action<string> ReportRunFailed = CallbacksDelegator.instance.RunFailed;
private TestJobData m_JobData; private TestTaskBase[] Tasks; private IEnumerator m_Enumerator = null;
public string RunJob(TestJobData data) { if (data == null) { throw new ArgumentException(null, nameof(data)); } if (m_JobData != null && m_JobData.isRunning) { throw new Exception("TestJobRunner is already running a job."); }
if (data.isHandledByRunner) { throw new Exception("Test job is already being handled."); } m_JobData = data; m_JobData.isHandledByRunner = true;
if (!m_JobData.isRunning) { m_JobData.isRunning = true; SavedTestJobData.Add(m_JobData); } Tasks = GetTasks(data.executionSettings).ToArray(); if (!data.executionSettings.runSynchronously) { SubscribeCallback(ExecuteStep); } else { while (data.isRunning) { ExecuteStep(); } }
return data.guid; }
private void ExecuteStep() { try { if (m_JobData.taskIndex >= Tasks.Length) { StopRun(); return; }
if (m_Enumerator == null) { var task = Tasks[m_JobData.taskIndex]; m_Enumerator = task.Execute(m_JobData); if (task.SupportsResumingEnumerator) { PcHelper.SetEnumeratorPC(m_Enumerator, m_JobData.taskPC); } }
if (!m_Enumerator.MoveNext()) { m_JobData.taskIndex++; m_JobData.taskPC = 0; m_Enumerator = null; return; } if (Tasks[m_JobData.taskIndex].SupportsResumingEnumerator) { m_JobData.taskPC = PcHelper.GetEnumeratorPC(m_Enumerator); } } catch (TestRunCanceledException) { StopRun(); } catch (AggregateException ex) { StopRun(); LogError(ex.Message); foreach (var innerException in ex.InnerExceptions) { LogException(innerException); } ReportRunFailed("Multiple unexpected errors happened while running tests."); } catch (Exception ex) { StopRun(); LogException(ex); ReportRunFailed("An unexpected error happened while running tests."); } }
private void StopRun() { m_JobData.isRunning = false; UnsubscribeCallback(ExecuteStep); SavedTestJobData.Remove(m_JobData); } }}
|