using System; using System.Collections.Generic; using System.IO; using System.Linq; using UnityEngine; using UnityEngine.Rendering; using UnityEngine.TestTools; namespace UnityEditor.TestTools.Graphics { /// /// Test framework prebuild step to collect reference images for the current test run and prepare them for use in the /// player. /// public class SetupGraphicsTestCases : IPrebuildSetup { private static bool IsBuildingForEditorPlaymode { get { var playmodeLauncher = typeof(UnityEditor.TestTools.RequirePlatformSupportAttribute).Assembly.GetType( "UnityEditor.TestTools.TestRunner.PlaymodeLauncher"); var isRunningField = playmodeLauncher.GetField("IsRunning"); return (bool)isRunningField.GetValue(null); } } public void Setup() { ColorSpace colorSpace; BuildTarget buildPlatform; RuntimePlatform runtimePlatform; GraphicsDeviceType[] graphicsDevices; // Figure out if we're preparing to run in Editor playmode, or if we're building to run outside the Editor if (IsBuildingForEditorPlaymode) { colorSpace = QualitySettings.activeColorSpace; buildPlatform = BuildTarget.NoTarget; runtimePlatform = Application.platform; graphicsDevices = new[] {SystemInfo.graphicsDeviceType}; } else { buildPlatform = EditorUserBuildSettings.activeBuildTarget; runtimePlatform = Utils.BuildTargetToRuntimePlatform(buildPlatform); colorSpace = PlayerSettings.colorSpace; graphicsDevices = PlayerSettings.GetGraphicsAPIs(buildPlatform); } var bundleBuilds = new List(); foreach (var api in graphicsDevices) { var images = EditorGraphicsTestCaseProvider.CollectReferenceImagePathsFor(colorSpace, runtimePlatform, api); Utils.SetupReferenceImageImportSettings(images.Values); if (buildPlatform == BuildTarget.NoTarget) continue; bundleBuilds.Add(new AssetBundleBuild { assetBundleName = string.Format("referenceimages-{0}-{1}-{2}", colorSpace, runtimePlatform, api), addressableNames = images.Keys.ToArray(), assetNames = images.Values.ToArray() }); } if (bundleBuilds.Count > 0) { if (!Directory.Exists("Assets/StreamingAssets")) Directory.CreateDirectory("Assets/StreamingAssets"); foreach (var bundle in bundleBuilds) { BuildPipeline.BuildAssetBundles("Assets/StreamingAssets", new [] { bundle }, BuildAssetBundleOptions.None, buildPlatform); } } if (!IsBuildingForEditorPlaymode) new CreateSceneListFileFromBuildSettings().Setup(); } } }