A game about forced loneliness, made by TACStudios
1using System; 2using System.Collections; 3using System.IO; 4using NUnit.Framework; 5using UnityEditor.TestTools.TestRunner.UnityTestProtocol; 6using UnityEngine; 7 8namespace UnityEditor.TestTools.TestRunner.TestRun.Tasks 9{ 10 internal class EnableTestOutLoggerTask : TestTaskBase, IDisposable 11 { 12 internal Action<Action<PlayModeStateChange>> SubscribePlayModeStateChanged = callback => 13 EditorApplication.playModeStateChanged += callback; 14 internal Action<Action<PlayModeStateChange>> UnsubscribePlayModeStateChanged = callback => 15 EditorApplication.playModeStateChanged -= callback; 16 internal Action<Application.LogCallback> SubscribeLogMessageReceivedThreaded = 17 callback => Application.logMessageReceived += callback; 18 internal Action<Application.LogCallback> UnsubscribeLogMessageReceivedThreaded = 19 callback => Application.logMessageReceived -= callback; 20 21 internal Func<TextWriter> GetCurrentContextWriter = () => TestContext.Out; 22 23 public EnableTestOutLoggerTask() 24 { 25 RerunAfterResume = true; 26 } 27 28 public override IEnumerator Execute(TestJobData testJobData) 29 { 30 SubscribePlayModeStateChanged(WaitForExitPlaymode); 31 SubscribeLogMessageReceivedThreaded(LogReceived); 32 yield break; 33 } 34 35 private void WaitForExitPlaymode(PlayModeStateChange state) 36 { 37 if (state == PlayModeStateChange.EnteredEditMode) 38 { 39 UnsubscribePlayModeStateChanged(WaitForExitPlaymode); 40 UnsubscribeLogMessageReceivedThreaded(LogReceived); 41 SubscribeLogMessageReceivedThreaded(LogReceived); 42 } 43 } 44 45 private void LogReceived(string message, string stacktrace, LogType type) 46 { 47 if (message.StartsWith(UtpDebugLogger.UtpPrefix)) 48 { 49 return; 50 } 51 52 var writer = GetCurrentContextWriter(); 53 if (writer != null) 54 { 55 writer.WriteLine(message); 56 if (type == LogType.Exception) 57 { 58 writer.WriteLine(stacktrace); 59 } 60 } 61 } 62 63 public void Dispose() 64 { 65 UnsubscribeLogMessageReceivedThreaded(LogReceived); 66 } 67 } 68}