Exemplo n.º 1
0
        internal TestEventsSender(TestEventsCollector collector, UnitTestLaunch unitTestLaunch)
        {
            myUnitTestLaunch = unitTestLaunch;
            ProcessQueue(collector);
            collector.Clear();

            collector.ClearEvent();
            collector.AddEvent += (col, _) =>
            {
                ProcessQueue((TestEventsCollector)col);
            };
        }
Exemplo n.º 2
0
        private static void SubscribeToChanged(Type data, UnitTestLaunch unitTestLaunch)
        {
            var eventInfo = data.GetEvent("Changed");

            if (eventInfo != null)
            {
                var handler = new EventHandler((sender, e) => { ProcessQueue(data, unitTestLaunch); });
                eventInfo.AddEventHandler(handler.Target, handler);
                AppDomain.CurrentDomain.DomainUnload += (EventHandler)((_, __) =>
                {
                    eventInfo.RemoveEventHandler(handler.Target, handler);
                });
            }
            else
            {
                ourLogger.Error("Changed event subscription failed.");
            }
        }
Exemplo n.º 3
0
        internal TestEventsSender(UnitTestLaunch unitTestLaunch)
        {
            var assembly = RiderPackageInterop.GetAssembly();

            if (assembly == null)
            {
                ourLogger.Error("EditorPlugin assembly is null.");
                return;
            }

            var data = assembly.GetType("Packages.Rider.Editor.UnitTesting.CallbackData");

            if (data == null)
            {
                return;
            }

            ProcessQueue(data, unitTestLaunch);

            SubscribeToChanged(data, unitTestLaunch);
        }
Exemplo n.º 4
0
        private static void ProcessQueue(Type data, UnitTestLaunch unitTestLaunch)
        {
            if (!unitTestLaunch.IsBound)
            {
                return;
            }

            var baseType = data.BaseType;

            if (baseType == null)
            {
                return;
            }
            var instance = baseType.GetProperty("instance");

            if (instance == null)
            {
                return;
            }
            var instanceVal = instance.GetValue(null, new object[] {});

            var listField = data.GetField("events");

            if (listField == null)
            {
                return;
            }
            var list = listField.GetValue(instanceVal);

            var events = (IEnumerable)list;

            foreach (var ev in events)
            {
                var type         = (int)ev.GetType().GetField("type").GetValue(ev);
                var id           = (string)ev.GetType().GetField("id").GetValue(ev);
                var assemblyName = (string)ev.GetType().GetField("assemblyName").GetValue(ev);
                var output       = (string)ev.GetType().GetField("output").GetValue(ev);
                var resultState  = (int)ev.GetType().GetField("testStatus").GetValue(ev);
                var duration     = (double)ev.GetType().GetField("duration").GetValue(ev);
                var parentId     = (string)ev.GetType().GetField("parentId").GetValue(ev);

                switch (type)
                {
                case 0: // TestStarted
                {
                    var tResult = new TestResult(id, assemblyName, string.Empty, 0, Status.Running, parentId);
                    TestStarted(unitTestLaunch, tResult);
                    break;
                }

                case 1: // TestFinished
                {
                    var status = GetStatus(new ResultState((TestStatus)resultState));

                    var testResult = new TestResult(id, assemblyName, output, (int)duration,
                                                    status, parentId);
                    TestFinished(unitTestLaunch, testResult);
                    break;
                }

                case 2: // RunFinished
                {
                    var runResult = new RunResult((TestStatus)resultState == TestStatus.Passed);
                    RunFinished(unitTestLaunch, runResult);
                    break;
                }

                case 3: // RunStarted
                {
                    unitTestLaunch.RunStarted.Value = true;
                    break;
                }

                default:
                {
                    ourLogger.Error("Unexpected TestEvent type.");
                    break;
                }
                }
            }

            var clearMethod = data.GetMethod("Clear");

            clearMethod?.Invoke(instanceVal, new object[] {});
        }
Exemplo n.º 5
0
 public static void TestFinished(UnitTestLaunch launch, TestResult testResult)
 {
     launch.TestResult(testResult);
 }
Exemplo n.º 6
0
 public static void TestStarted(UnitTestLaunch launch, TestResult testResult)
 {
     launch.TestResult(testResult);
 }
Exemplo n.º 7
0
 public static void RunFinished(UnitTestLaunch launch, RunResult result)
 {
     launch.RunResult(result);
 }
Exemplo n.º 8
0
 public static void RunFinished(UnitTestLaunch launch)
 {
     launch.RunResult.Fire(new RunResult(true));
 }
Exemplo n.º 9
0
 public UnityEditorTestLauncher(UnitTestLaunch launch, Lifetime connectionLifetime)
 {
     myLaunch             = launch;
     myConnectionLifetime = connectionLifetime;
 }
Exemplo n.º 10
0
        internal static void SupportAbortNew(UnitTestLaunch launch)
        {
            try
            {
                const string assemblyName = "UnityEditor.TestRunner";
                const string typeName     = "UnityEditor.TestTools.TestRunner.Api.TestRunnerApi";
                const string methodName   = "CancelAllTestRuns";

                MethodInfo stopRunMethod = null;

                var assembly = AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault(a => a.GetName().Name.Equals(assemblyName));
                if (assembly == null)
                {
                    ourLogger.Verbose($"Could not find {assemblyName} in the AppDomain.");
                }
                else
                {
                    var apiType = assembly.GetType(typeName);
                    if (apiType == null)
                    {
                        ourLogger.Verbose($"Could not find {typeName} in the {assemblyName}.");
                    }
                    else
                    {
                        stopRunMethod = apiType.GetMethod(methodName);
                        if (stopRunMethod == null)
                        {
                            ourLogger.Verbose($"Could not find {methodName} in the {typeName}.");
                        }
                    }
                }

                launch.Abort.Set((lifetime, _) =>
                {
                    var task = new RdTask <bool>();

                    if (stopRunMethod != null)
                    {
                        ourLogger.Verbose($"Call {methodName} method via reflection.");
                        try
                        {
                            stopRunMethod.Invoke(null, null);
                            task.Set(true);
                            if (!launch.RunStarted.HasTrueValue()) // if RunStarted never happened
                            {
                                launch.RunResult(new RunResult(false));
                            }
                        }
                        catch (Exception)
                        {
                            ourLogger.Verbose($"Call {methodName} method failed.");
                            task.Set(false);
                        }
                    }
                    else
                    {
                        task.Set(false);
                    }

                    return(task);
                });
            }
            catch (Exception e)
            {
                ourLogger.Error(e, "Unexpected exception in SupportAbortNew");
            }
        }
 public UnityEditorTestLauncher(UnitTestLaunch launch)
 {
     myLaunch = launch;
 }