using System; using System.Linq; using UnityEditor.Compilation; using UnityEditor.TestTools.TestRunner.Api; using UnityEngine; using UnityEngine.TestTools; namespace UnityEditor.TestTools.TestRunner.UnityTestProtocol { [InitializeOnLoad] internal static class UnityTestProtocolStarter { static UnityTestProtocolStarter() { var commandLineArgs = Environment.GetCommandLineArgs(); if (commandLineArgs.Contains("-automated") && commandLineArgs.Contains("-runTests")) // wanna have it only for utr run { var api = ScriptableObject.CreateInstance(); var listener = ScriptableObject.CreateInstance(); api.RegisterCallbacks(listener); CompilationPipeline.assemblyCompilationFinished += OnAssemblyCompilationFinished; } } public static void OnAssemblyCompilationFinished(string assembly, CompilerMessage[] messages) { bool checkCompileErrors = RecompileScripts.Current == null || RecompileScripts.Current.ExpectScriptCompilationSuccess; if (checkCompileErrors && messages.Any(x => x.type == CompilerMessageType.Error)) { var compilerErrorMessages = messages.Where(x => x.type == CompilerMessageType.Error); var utpMessageReporter = new UtpMessageReporter(new UtpDebugLogger()); utpMessageReporter.ReportAssemblyCompilationErrors(assembly, compilerErrorMessages); } } } }