/
TON618OFF
/
Unity-Project-RTU
Обзор
Документация
Войти
/
TON618OFF
/
Unity-Project-RTU
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
Library/PackageCache/com.unity.test-framework@1.1.33/UnityEngine.TestRunner/NUnitExtensions/ActionDelegator.cs
73 строки
2 KB
TON618OFF
release
03 окт 2024, 22:20
03 окт 2024, 22:20
7c70e9f
Код
Авторство
О чём код?
using System; using System.Linq; using UnityEngine.TestRunner.NUnitExtensions.Runner; using UnityEngine.TestTools.Logging; using UnityEngine.TestTools.TestRunner; namespace UnityEngine.TestTools.NUnitExtensions { /// <summary> /// This class delegates actions from the NUnit thread that should be executed on the main thread. /// NUnit thread calls Delegate which blocks the execution on the thread until the action is executed. /// The main thread will poll for awaiting actions (HasAction) and invoke them (Execute). /// Once the action is executed, the main thread releases the lock and executino on the NUnit thread is continued. /// </summary> internal class ActionDelegator : BaseDelegator { private Func<object> m_Action; public object Delegate(Action action) { return Delegate(() => { action(); return null; }); } public object Delegate(Func<object> action) { if (m_Aborted) { return null; } AssertState(); m_Context = UnityTestExecutionContext.CurrentContext; m_Signal.Reset(); m_Action = action; WaitForSignal(); return HandleResult(); } private void AssertState() { if (m_Action != null) { throw new Exception("Action not executed yet"); } } public bool HasAction() { return m_Action != null; } public void Execute(LogScope logScope) { try { SetCurrentTestContext(); m_Result = m_Action(); logScope.EvaluateLogScope(true); } catch (Exception e) { m_Exception = e; } finally { m_Action = null; m_Signal.Set(); } } } }