using System; using System.IO; namespace UnityEditor.TestTools.TestRunner.GUI.TestAssets { /// internal class TestScriptAssetsCreator : ITestScriptAssetsCreator { private const string k_AssemblyDefinitionEditModeTestTemplate = "92-Assembly Definition-NewEditModeTestAssembly.asmdef.txt"; internal const string assemblyDefinitionTestTemplate = "92-Assembly Definition-NewTestAssembly.asmdef.txt"; internal const string resourcesTemplatePath = "Resources/ScriptTemplates"; internal const string testScriptTemplate = "83-C# Script-NewTestScript.cs.txt"; internal const string defaultNewTestAssemblyFolderName = "Tests"; internal const string defaultNewTestScriptName = "NewTestScript.cs"; private static IFolderPathTestCompilationContextProvider s_FolderPathCompilationContext; private static IActiveFolderTemplateAssetCreator s_ActiveFolderTemplateAssetCreator; private static ITestScriptAssetsCreator s_Instance; internal static IFolderPathTestCompilationContextProvider FolderPathContext { private get => s_FolderPathCompilationContext ?? (s_FolderPathCompilationContext = new FolderPathTestCompilationContextProvider()); set => s_FolderPathCompilationContext = value; } internal static IActiveFolderTemplateAssetCreator ActiveFolderTemplateAssetCreator { private get => s_ActiveFolderTemplateAssetCreator ?? (s_ActiveFolderTemplateAssetCreator = new ActiveFolderTemplateAssetCreator()); set => s_ActiveFolderTemplateAssetCreator = value; } internal static ITestScriptAssetsCreator Instance => s_Instance ?? (s_Instance = new TestScriptAssetsCreator()); private static string ActiveFolderPath => ActiveFolderTemplateAssetCreator.GetActiveFolderPath(); private static string ScriptTemplatesResourcesPath => Path.Combine(EditorApplication.applicationContentsPath, resourcesTemplatePath); #if UNITY_2023_3_OR_NEWER private static string ScriptTemplatePath => Path.Combine(ScriptTemplatesResourcesPath, AssetsMenuUtility.GetScriptTemplatePath(ScriptTemplate.CSharp_NewTestScript)); #else private static string ScriptTemplatePath => Path.Combine(ScriptTemplatesResourcesPath, testScriptTemplate); #endif /// public void AddNewFolderWithTestAssemblyDefinition(bool isEditorOnly = false) { #if UNITY_2023_3_OR_NEWER var assemblyDefinitionTemplate = AssetsMenuUtility.GetScriptTemplatePath(isEditorOnly ? ScriptTemplate.AsmDef_NewEditModeTestAssembly : ScriptTemplate.AsmDef_NewTestAssembly); #else var assemblyDefinitionTemplate = isEditorOnly ? k_AssemblyDefinitionEditModeTestTemplate : assemblyDefinitionTestTemplate; #endif ActiveFolderTemplateAssetCreator.CreateFolderWithTemplates(defaultNewTestAssemblyFolderName, assemblyDefinitionTemplate); } /// public void AddNewTestScript() { var destPath = Path.Combine(ActiveFolderTemplateAssetCreator.GetActiveFolderPath(), defaultNewTestScriptName); ActiveFolderTemplateAssetCreator.CreateScriptAssetFromTemplateFile(destPath, ScriptTemplatePath); } /// public bool ActiveFolderContainsTestAssemblyDefinition() { return FolderPathContext.FolderPathBelongsToCustomTestAssembly(ActiveFolderPath); } /// public bool TestScriptWillCompileInActiveFolder() { return FolderPathContext.TestScriptWillCompileInFolderPath(ActiveFolderPath); } } }