Maze / Library /PackageCache /com.unity.ide.rider@3.0.21 /Rider /Editor /UnitTesting /TestsCallback.cs
| using System; | |
| using System.Linq; | |
| using System.Text; | |
| using UnityEditor.TestTools.TestRunner.Api; | |
| using UnityEngine; | |
| namespace Packages.Rider.Editor.UnitTesting | |
| { | |
| internal class TestsCallback : ScriptableObject, IErrorCallbacks | |
| { | |
| public void RunFinished(ITestResultAdaptor result) | |
| { | |
| CallbackData.instance.isRider = false; | |
| CallbackData.instance.events.Add( | |
| new TestEvent(EventType.RunFinished, "", "","", 0, ParseTestStatus(result.TestStatus), "")); | |
| CallbackData.instance.RaiseChangedEvent(); | |
| } | |
| public void RunStarted(ITestAdaptor testsToRun) | |
| { | |
| CallbackData.instance.events.Add( | |
| new TestEvent(EventType.RunStarted, "", "","", 0, NUnit.Framework.Interfaces.TestStatus.Passed, "")); | |
| CallbackData.instance.RaiseChangedEvent(); | |
| } | |
| public void TestStarted(ITestAdaptor result) | |
| { | |
| // RIDER-69927 "Test not run" status is shown for the test suite when running unit tests for Unity project | |
| var method = result.Method ?? result.Children.Select(a=>a.Method).FirstOrDefault(b => b != null); | |
| if (method == null) return; | |
| CallbackData.instance.events.Add( | |
| new TestEvent(EventType.TestStarted, GenerateId(result), method.TypeInfo.Assembly.GetName().Name, "", 0, NUnit.Framework.Interfaces.TestStatus.Passed, GenerateId(result.Parent))); | |
| CallbackData.instance.RaiseChangedEvent(); | |
| } | |
| public void TestFinished(ITestResultAdaptor result) | |
| { | |
| var method = result.Test.Method ?? result.Children.Select(a=>a.Test.Method).FirstOrDefault(b => b != null); | |
| if (method == null) return; | |
| CallbackData.instance.events.Add( | |
| new TestEvent(EventType.TestFinished, GenerateId(result.Test), method.TypeInfo.Assembly.GetName().Name, ExtractOutput(result), (result.EndTime-result.StartTime).Milliseconds, ParseTestStatus(result.TestStatus), GenerateId(result.Test.Parent))); | |
| CallbackData.instance.RaiseChangedEvent(); | |
| } | |
| public void OnError(string message) | |
| { | |
| CallbackData.instance.isRider = false; | |
| CallbackData.instance.events.Add( | |
| new TestEvent(EventType.RunFinished, "", "",message, 0, NUnit.Framework.Interfaces.TestStatus.Failed, "")); | |
| CallbackData.instance.RaiseChangedEvent(); | |
| } | |
| // see explanation in https://jetbrains.team/p/net/code/dotnet-libs/files/f04cde7d1dd70ee13bf5532e30f929b9b5ed08a4/ReSharperTestRunner/src/Adapters/TestRunner.Adapters.NUnit3/RemoteTaskDepot.cs?tab=source&line=129 | |
| private static string GenerateId(ITestAdaptor node) | |
| { | |
| // ES: Parameterized tests defined in a parametrized test fixture, though | |
| // constructed for a particular test fixture with the given parameter, have identical fullname that does | |
| // not include parameters of parent testfixture (name of the without parameters is used instead). | |
| // This leads to 'Test with {id} id is already running' message. | |
| if (node.TypeInfo == null) | |
| return $"{node.Parent.FullName}.{node.Name}"; | |
| return node.FullName; | |
| } | |
| private static NUnit.Framework.Interfaces.TestStatus ParseTestStatus(TestStatus testStatus) | |
| { | |
| return (NUnit.Framework.Interfaces.TestStatus)Enum.Parse(typeof(NUnit.Framework.Interfaces.TestStatus), testStatus.ToString()); | |
| } | |
| private static string ExtractOutput(ITestResultAdaptor testResult) | |
| { | |
| var stringBuilder = new StringBuilder(); | |
| if (testResult.Message != null) | |
| { | |
| stringBuilder.AppendLine("Message: "); | |
| stringBuilder.AppendLine(testResult.Message); | |
| } | |
| if (!string.IsNullOrEmpty(testResult.Output)) | |
| { | |
| stringBuilder.AppendLine("Output: "); | |
| stringBuilder.AppendLine(testResult.Output); | |
| } | |
| if (!string.IsNullOrEmpty(testResult.StackTrace)) | |
| { | |
| stringBuilder.AppendLine("Stacktrace: "); | |
| stringBuilder.AppendLine(testResult.StackTrace); | |
| } | |
| var result = stringBuilder.ToString(); | |
| if (result.Length > 0) | |
| return result; | |
| return testResult.Output ?? string.Empty; | |
| } | |
| } | |
| } | |