using System; using System.Collections.Generic; using System.Linq; using NUnit.Framework.Interfaces; using UnityEngine.TestTools; using UnityEngine.TestTools.NUnitExtensions; namespace UnityEditor.TestTools.TestRunner { internal class TestListProvider : ITestListProvider { private readonly EditorLoadedTestAssemblyProvider m_AssemblyProvider; private readonly UnityTestAssemblyBuilder m_AssemblyBuilder; public TestListProvider(EditorLoadedTestAssemblyProvider assemblyProvider, UnityTestAssemblyBuilder assemblyBuilder) { m_AssemblyProvider = assemblyProvider; m_AssemblyBuilder = assemblyBuilder; } public IEnumerator GetTestListAsync(TestPlatform platform) { var assembliesTask = m_AssemblyProvider.GetAssembliesGroupedByTypeAsync(platform); while (assembliesTask.MoveNext()) { yield return null; } var assemblies = assembliesTask.Current.Where(pair => platform.IsFlagIncluded(pair.Key)) .SelectMany(pair => pair.Value.Select(assemblyInfo => Tuple.Create(assemblyInfo.Assembly, pair.Key))).ToArray(); var settings = UnityTestAssemblyBuilder.GetNUnitTestBuilderSettings(platform); var test = m_AssemblyBuilder.BuildAsync(assemblies.Select(a => a.Item1).ToArray(), assemblies.Select(a => a.Item2).ToArray(), settings); while (test.MoveNext()) { yield return null; } yield return test.Current; } } }