[7.x.x] Backport test filters by tomzig16 · Pull Request #448 · Unity-Technologies/Graphics · GitHub
Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -106,14 +106,52 @@ public void Setup(string rootImageTemplatePath)

var sceneIndex = 0;
var totalScenes = EditorBuildSettings.scenes.Length;

foreach( EditorBuildSettingsScene scene in EditorBuildSettings.scenes)

string[] filterGUIDs = AssetDatabase.FindAssets("t:TestFilters");

List<TestFilters> filters = new List<TestFilters>();
foreach (var filterGUID in filterGUIDs)
{
string filterPath = AssetDatabase.GUIDToAssetPath(filterGUID);
filters.Add(AssetDatabase.LoadAssetAtPath(filterPath, typeof(TestFilters)) as TestFilters);
}
// Disabling scenes directly in EditorBuildSettings.scenes does not work
// As a solution - disabling scenes in temporary variable and then assigning it back to EditorBuildSettings.scenes
EditorBuildSettingsScene[] scenes = EditorBuildSettings.scenes;

foreach( EditorBuildSettingsScene scene in scenes)
{
if (!scene.enabled) continue;

if (filters.Count > 0)
{
// Right now leaving only single filter available per project.
var filtersForScene = filters.First().filters.Where(f => AssetDatabase.GetAssetPath(f.FilteredScene) == scene.path);
bool enableScene = true;
string filterReasons = "";

foreach (var filter in filtersForScene)
{
if ((filter.BuildPlatform == buildPlatform || filter.BuildPlatform == BuildTarget.NoTarget) &&
(filter.GraphicsDevice == graphicsDevices.First() || filter.GraphicsDevice == GraphicsDeviceType.Null) &&
(filter.ColorSpace == colorSpace || filter.ColorSpace == ColorSpace.Uninitialized))
{
// Adding reasons in case when same test is ignored several times
filterReasons += filter.Reason + "\n";
enableScene = false;
}
}
scene.enabled = enableScene;
if (!enableScene)
{
Debug.Log(string.Format("Removed scene {0} from build settings because {1}", Path.GetFileNameWithoutExtension(scene.path), filterReasons));
continue;
}
}

SceneAsset sceneAsset = AssetDatabase.LoadAssetAtPath<SceneAsset>(scene.path);
var labels = new System.Collections.Generic.List<string>(AssetDatabase.GetLabels(sceneAsset));

// if we successfully retrieved the names of the selected scenes, we filter using this list
if (selectedScenes.Length > 0 && !selectedScenes.Contains(sceneAsset.name))
continue;
Expand Down Expand Up @@ -141,8 +179,9 @@ public void Setup(string rootImageTemplatePath)

sceneIndex++;
}

EditorUtility.ClearProgressBar();
EditorBuildSettings.scenes = scenes;

if (!IsBuildingForEditorPlaymode)
new CreateSceneListFileFromBuildSettings().Setup();
Expand All @@ -169,7 +208,7 @@ string[] GetSelectedScenes()
);

dynamic testRunnerFilterArray = getSelectedTestsAsFilterMethod.Invoke(playModeListGUIValue, new object[] { selectedItems });

var testNamesField = testRunnerFilterArray[0].GetType().GetField("testNames", BindingFlags.Instance | BindingFlags.Public);

List< string > testNames = new List<string>();
Expand Down
8 changes: 8 additions & 0 deletions com.unity.testframework.graphics/Editor/TestFilters.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
using UnityEngine;
using UnityEngine.Rendering;
using UnityEditor;

[System.Serializable]
public class TestFilterConfig
{
public SceneAsset FilteredScene;
public ColorSpace ColorSpace = ColorSpace.Uninitialized;
public BuildTarget BuildPlatform = BuildTarget.NoTarget;
public GraphicsDeviceType GraphicsDevice = GraphicsDeviceType.Null;
public string Reason;
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#if UNITY_EDITOR
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;

[System.Serializable]
[CreateAssetMenu(fileName = "TestCaseFilters", menuName = "Test Filter ScriptableObject", order = 1)]
public class TestFilters : ScriptableObject
{
public TestFilterConfig[] filters;

public TestFilters()
{
filters = new TestFilterConfig[1];
}

public void SortBySceneName()
{
Array.Sort(filters,
(a, b) => a.FilteredScene == null ? 1 : b.FilteredScene == null ? -1 : a.FilteredScene.name.CompareTo(b.FilteredScene.name));
}
}
#endif

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.