private void RebuildTestList()
{
m_TestLines = null;
if (!TestComponent.AnyTestsOnScene()
&& !TestComponent.AnyDynamicTestForCurrentScene()) return;
if (!EditorApplication.isPlayingOrWillChangePlaymode)
{
var dynamicTestsOnScene = TestComponent.FindAllDynamicTestsOnScene();
#if UNITY_5_3_OR_NEWER
var dynamicTestTypes = TestComponent.GetTypesWithHelpAttribute(SceneManager.GetActiveScene().path);
#else
var dynamicTestTypes = TestComponent.GetTypesWithHelpAttribute(Application.loadedLevelName);
#endif
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();
}