Files
.vs
Assets
Library
APIUpdater
Artifacts
Bee
BuildPlayerData
PackageCache
com.unity.collab-proxy@2.5.2
com.unity.editorcoroutines@1.0.0
com.unity.ext.nunit@1.0.6
com.unity.feature.development@1.0.1
com.unity.ide.rider@3.0.31
com.unity.ide.visualstudio@2.0.22
com.unity.ide.vscode@1.2.5
com.unity.modules.ai@1.0.0
com.unity.modules.androidjni@1.0.0
com.unity.modules.animation@1.0.0
com.unity.modules.assetbundle@1.0.0
com.unity.modules.audio@1.0.0
com.unity.modules.cloth@1.0.0
com.unity.modules.director@1.0.0
com.unity.modules.imageconversion@1.0.0
com.unity.modules.imgui@1.0.0
com.unity.modules.jsonserialize@1.0.0
com.unity.modules.particlesystem@1.0.0
com.unity.modules.physics2d@1.0.0
com.unity.modules.physics@1.0.0
com.unity.modules.screencapture@1.0.0
com.unity.modules.subsystems@1.0.0
com.unity.modules.terrain@1.0.0
com.unity.modules.terrainphysics@1.0.0
com.unity.modules.tilemap@1.0.0
com.unity.modules.ui@1.0.0
com.unity.modules.uielements@1.0.0
com.unity.modules.umbra@1.0.0
com.unity.modules.unityanalytics@1.0.0
com.unity.modules.unitywebrequest@1.0.0
com.unity.modules.unitywebrequestassetbundle@1.0.0
com.unity.modules.unitywebrequestaudio@1.0.0
com.unity.modules.unitywebrequesttexture@1.0.0
com.unity.modules.unitywebrequestwww@1.0.0
com.unity.modules.vehicles@1.0.0
com.unity.modules.video@1.0.0
com.unity.modules.vr@1.0.0
com.unity.modules.wind@1.0.0
com.unity.modules.xr@1.0.0
com.unity.performance.profile-analyzer@1.2.2
com.unity.settings-manager@2.0.1
com.unity.test-framework@1.1.33
Documentation~
UnityEditor.TestRunner
UnityEngine.TestRunner
Assertions
NUnitExtensions
Attributes
Commands
Filters
Runner
ActionDelegator.cs
ActionDelegator.cs.meta
Attributes.meta
BaseDelegator.cs
BaseDelegator.cs.meta
Commands.meta
ConstructDelegator.cs
ConstructDelegator.cs.meta
Filters.meta
IAsyncTestAssemblyBuilder.cs
IAsyncTestAssemblyBuilder.cs.meta
IStateSerializer.cs
IStateSerializer.cs.meta
ITestSuiteModifier.cs
ITestSuiteModifier.cs.meta
OrderedTestSuiteModifier.cs
OrderedTestSuiteModifier.cs.meta
Runner.meta
TestExtensions.cs
TestExtensions.cs.meta
TestResultExtensions.cs
TestResultExtensions.cs.meta
UnityTestAssemblyBuilder.cs
UnityTestAssemblyBuilder.cs.meta
TestRunner
Utils
AssemblyInfo.cs
AssemblyInfo.cs.meta
Assertions.meta
NUnitExtensions.meta
TestRunner.meta
UnityEngine.TestRunner.asmdef
UnityEngine.TestRunner.asmdef.meta
Utils.meta
.signature
CHANGELOG.md
CHANGELOG.md.meta
CONTRIBUTING.md
CONTRIBUTING.md.meta
LICENSE.md
LICENSE.md.meta
UnityEditor.TestRunner.meta
UnityEngine.TestRunner.meta
package.json
package.json.meta
com.unity.testtools.codecoverage@1.2.6
com.unity.textmeshpro@3.0.6
com.unity.timeline@1.7.6
com.unity.ugui@1.0.0
com.unity.visualscripting@1.9.4
PackageManager
PlayModeViewStates
PlayerDataCache
ScriptAssemblies
Search
ShaderCache
SplashScreenCache
StateCache
UIElements
AnnotationManager
ArtifactDB
ArtifactDB-lock
BuildPlayer.prefs
BuildSettings.asset
EditorOnlyScriptingSettings.json
EditorOnlyVirtualTextureState.json
EditorSnapSettings.asset
EditorUserBuildSettings.asset
InspectorExpandedItems.asset
LastBuild.buildreport
LastSceneManagerSetup.txt
LibraryFormatVersion.txt
MonoManager.asset
SceneVisibilityState.asset
ScriptMapper
ShaderCache.db
SourceAssetDB
SourceAssetDB-lock
SpriteAtlasDatabase.asset
Style.catalog
expandedItems
ilpp.pid
Logs
Packages
ProjectSettings
UserSettings
obj
.vsconfig
Assembly-CSharp.Player.csproj
Assembly-CSharp.csproj
TM1.sln
Unity.CollabProxy.Editor.csproj
Unity.EditorCoroutines.Editor.csproj
Unity.Performance.Profile-Analyzer.Editor.csproj
Unity.PlasticSCM.Editor.csproj
Unity.Rider.Editor.csproj
Unity.Settings.Editor.csproj
Unity.TestTools.CodeCoverage.Editor.OpenCover.Model.csproj
Unity.TestTools.CodeCoverage.Editor.OpenCover.Mono.Reflection.csproj
Unity.TestTools.CodeCoverage.Editor.csproj
Unity.TextMeshPro.Editor.csproj
Unity.TextMeshPro.Player.csproj
Unity.TextMeshPro.csproj
Unity.Timeline.Editor.csproj
Unity.Timeline.Player.csproj
Unity.Timeline.csproj
Unity.VSCode.Editor.csproj
Unity.VisualScripting.Core.Editor.csproj
Unity.VisualScripting.Core.Player.csproj
Unity.VisualScripting.Core.csproj
Unity.VisualScripting.Flow.Editor.csproj
Unity.VisualScripting.Flow.Player.csproj
Unity.VisualScripting.Flow.csproj
Unity.VisualScripting.SettingsProvider.Editor.csproj
Unity.VisualScripting.Shared.Editor.csproj
Unity.VisualScripting.State.Editor.csproj
Unity.VisualScripting.State.Player.csproj
Unity.VisualScripting.State.csproj
Unity.VisualStudio.Editor.csproj
UnityEditor.TestRunner.csproj
UnityEditor.UI.csproj
UnityEngine.TestRunner.Player.csproj
UnityEngine.TestRunner.csproj
UnityEngine.UI.Player.csproj
UnityEngine.UI.csproj
SimonSayeBabu bd1057cec0 first commit
2025-01-17 13:10:20 +01:00

135 lines
4.1 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using NUnit.Framework.Interfaces;
using NUnit.Framework.Internal;
namespace UnityEngine.TestRunner.NUnitExtensions
{
internal class OrderedTestSuiteModifier : ITestSuiteModifier
{
internal const string suiteIsReorderedProperty = "suiteIsReordered";
private string[] m_OrderedTestNames;
public OrderedTestSuiteModifier(string[] orderedTestNames)
{
m_OrderedTestNames = orderedTestNames;
}
public TestSuite ModifySuite(TestSuite root)
{
var suite = new TestSuite(root.Name);
suite.Properties.Set(suiteIsReorderedProperty, true);
var workingStack = new List<ITest> { suite };
foreach (var fullName in m_OrderedTestNames)
{
var test = FindTest(root, fullName);
if (test == null)
{
continue;
}
var ancestorList = GetAncestorList(test);
for (int i = 0; i < ancestorList.Count; i++)
{
if (i >= workingStack.Count || ancestorList[i].Name != workingStack[i].Name || !ancestorList[i].HasChildren)
{
// The ancestor list diverges from the current working set. We need to insert a new element
var commonParent = workingStack[i - 1];
var nodeToClone = ancestorList[i];
var newNode = CloneNode(nodeToClone);
CloneProperties(newNode, nodeToClone);
newNode.Properties.Set(suiteIsReorderedProperty, true);
(commonParent as TestSuite).Add(newNode);
if (i < workingStack.Count)
{
workingStack = workingStack.Take(i).ToList();
}
workingStack.Add(newNode);
}
}
}
return suite;
}
private static void CloneProperties(ITest target, ITest source)
{
if (target == source)
{
return;
}
foreach (var key in source.Properties.Keys)
{
foreach (var value in source.Properties[key])
{
target.Properties.Set(key, value);
}
}
}
private static Test CloneNode(ITest test)
{
var type = test.GetType();
if (type == typeof(TestSuite))
{
return new TestSuite(test.Name);
}
if (type == typeof(TestAssembly))
{
var testAssembly = test as TestAssembly;
return new TestAssembly(testAssembly.Assembly, testAssembly.Name);
}
if (type == typeof(TestFixture))
{
return new TestFixture(test.TypeInfo);
}
if (type == typeof(TestMethod))
{
return test as Test;
}
if (type == typeof(ParameterizedMethodSuite))
{
return new ParameterizedMethodSuite(test.Method);
}
throw new NotImplementedException(type.FullName);
}
private static List<ITest> GetAncestorList(ITest test)
{
var list = new List<ITest>();
while (test != null)
{
list.Insert(0, test);
test = test.Parent;
}
return list;
}
private static ITest FindTest(ITest node, string fullName)
{
if (node.HasChildren)
{
return node.Tests
.Select(test => FindTest(test, fullName))
.FirstOrDefault(match => match != null);
}
return TestExtensions.GetFullName(node.FullName, node.HasChildIndex() ? node.GetChildIndex() : -1) == fullName ? node : null;
}
}
}