private void RebuildTestList() { m_TestLines = null; if (!TestComponent.AnyTestsOnScene() && !TestComponent.AnyDynamicTestForCurrentScene()) { return; } if (!EditorApplication.isPlayingOrWillChangePlaymode) { var dynamicTestsOnScene = TestComponent.FindAllDynamicTestsOnScene(); var dynamicTestTypes = TestComponent.GetTypesWithHelpAttribute(SceneManager.GetActiveScene().path); foreach (var dynamicTestType in dynamicTestTypes) { var existingTests = dynamicTestsOnScene.Where(component => component.dynamicTypeName == dynamicTestType.AssemblyQualifiedName); if (existingTests.Any()) { var testComponent = existingTests.Single(); foreach (var c in testComponent.gameObject.GetComponents <Component>()) { var type = Type.GetType(testComponent.dynamicTypeName); if (c is TestComponent || c is Transform || type.IsInstanceOfType(c)) { continue; } DestroyImmediate(c); } dynamicTestsOnScene.Remove(existingTests.Single()); continue; } TestComponent.CreateDynamicTest(dynamicTestType); } foreach (var testComponent in dynamicTestsOnScene) { DestroyImmediate(testComponent.gameObject); } } var topTestList = TestComponent.FindAllTopTestsOnScene(); var newResultList = new List <TestResult>(); m_TestLines = ParseTestList(topTestList, newResultList); var oldDynamicResults = m_ResultList.Where(result => result.dynamicTest); foreach (var oldResult in m_ResultList) { var result = newResultList.Find(r => r.Id == oldResult.Id); if (result == null) { continue; } result.Update(oldResult); } newResultList.AddRange(oldDynamicResults.Where(r => !newResultList.Contains(r))); m_ResultList = newResultList; IntegrationTestRendererBase.RunTest = RunTests; IntegrationTestGroupLine.FoldMarkers = m_FoldMarkers; IntegrationTestLine.Results = m_ResultList; m_FilterSettings.UpdateCounters(m_ResultList.Cast <ITestResult>()); m_FoldMarkers.RemoveAll(o => o == null); selectedInHierarchy = true; Repaint(); }