123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Reflection;
- using NUnit;
- using NUnit.Framework.Api;
- using NUnit.Framework.Interfaces;
- using NUnit.Framework.Internal;
- using Unity.Profiling;
- using UnityEngine.TestRunner.NUnitExtensions;
- using UnityEngine.TestRunner.NUnitExtensions.Filters;
-
- namespace UnityEngine.TestTools.NUnitExtensions
- {
- internal class UnityTestAssemblyBuilder : DefaultTestAssemblyBuilder, IAsyncTestAssemblyBuilder
- {
- private readonly string m_ProductName;
- private readonly ITestSuiteModifier[] m_TestSuiteModifiers;
-
- public UnityTestAssemblyBuilder(string[] orderedTestNames, int randomSeed)
- {
- m_TestSuiteModifiers = (orderedTestNames != null && orderedTestNames.Length > 0) || randomSeed != 0
- ? new ITestSuiteModifier[] {new OrderedTestSuiteModifier(orderedTestNames, randomSeed)}
- : new ITestSuiteModifier[0];
- m_ProductName = Application.productName;
- }
-
- public ITest Build(Assembly[] assemblies, TestPlatform[] testPlatforms, IDictionary<string, object> options)
- {
- var test = BuildAsync(assemblies, testPlatforms, options);
- while (test.MoveNext())
- {
- }
-
- return test.Current;
- }
-
- struct PlatformAssembly : IEquatable<PlatformAssembly>
- {
- public System.Reflection.Assembly Assembly;
- public TestPlatform Platform;
-
- public bool Equals(PlatformAssembly other)
- {
- return Equals(Assembly, other.Assembly) && Platform == other.Platform;
- }
-
- public override bool Equals(object obj)
- {
- return obj is PlatformAssembly other && Equals(other);
- }
-
- public override int GetHashCode()
- {
- unchecked
- {
- return ((Assembly != null ? Assembly.GetHashCode() : 0) * 397) ^ (int) Platform;
- }
- }
- }
-
- private static Dictionary<PlatformAssembly, TestSuite> CachedAssemblies = new Dictionary<PlatformAssembly, TestSuite>();
-
- public IEnumerator<ITest> BuildAsync(Assembly[] assemblies, TestPlatform[] testPlatforms, IDictionary<string, object> options)
- {
- var productName = string.Join("_", m_ProductName.Split(Path.GetInvalidFileNameChars()));
- var suite = new TestSuite(productName);
- for (var index = 0; index < assemblies.Length; index++)
- {
- var assembly = assemblies[index];
- var platform = testPlatforms[index];
-
- using (new ProfilerMarker(nameof(UnityTestAssemblyBuilder) + "." + assembly.GetName().Name).Auto())
- {
- var key = new PlatformAssembly {Assembly = assembly, Platform = platform};
- if (!CachedAssemblies.TryGetValue(key, out var assemblySuite))
- {
- assemblySuite = Build(assembly, GetNUnitTestBuilderSettings(platform)) as TestSuite;
- if (assemblySuite != null)
- {
- assemblySuite.Properties.Set("platform", platform);
- EditorOnlyFilter.ApplyPropertyToTest(assemblySuite, platform == TestPlatform.EditMode);
- }
- CachedAssemblies.Add(key, assemblySuite);
- }
-
- if (assemblySuite != null && assemblySuite.HasChildren)
- {
- suite.Add(assemblySuite);
- }
- }
-
- yield return null;
- }
-
- suite.ParseForNameDuplicates();
- suite.Properties.Set("platform", testPlatforms.MergeFlags());
-
- foreach (var testSuiteModifier in m_TestSuiteModifiers)
- {
- suite = testSuiteModifier.ModifySuite(suite);
- }
-
- yield return suite;
- }
-
- public static Dictionary<string, object> GetNUnitTestBuilderSettings(TestPlatform testPlatform)
- {
- var emptySettings = new Dictionary<string, object>();
- emptySettings.Add(FrameworkPackageSettings.TestParameters, "platform=" + testPlatform);
- return emptySettings;
- }
- }
- }
|