using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Linq; using UnityEngine; using UnityEngine.TestRunner.NUnitExtensions.Runner; namespace UnityEditor.TestTools.TestRunner.TestRun.Tasks { internal class CleanupVerificationTask : FileCleanupVerifierTaskBase { private const string k_Indent = " "; internal Action logWarning = Debug.LogWarning; internal Action logError = Debug.LogError; public override IEnumerator Execute(TestJobData testJobData) { var currentFiles = GetAllFilesInAssetsDirectory(); var existingFiles = testJobData.existingFiles; if (currentFiles.Length != existingFiles.Length) { var existingFilesHashSet = new HashSet(existingFiles); var newFiles = currentFiles.Where(file => !existingFilesHashSet.Contains(file)).ToArray(); LogWarningForFilesIfAny(newFiles, testJobData.executionSettings.featureFlags.fileCleanUpCheck); } yield return null; } private void LogWarningForFilesIfAny(string[] filePaths, bool fileCleanUpCheck) { if (filePaths.Length == 0) { return; } var stringWriter = new StringWriter(); stringWriter.WriteLine("Files generated by test without cleanup."); stringWriter.WriteLine(k_Indent + "Found {0} new files.", filePaths.Length); foreach (var filePath in filePaths) { stringWriter.WriteLine(k_Indent + filePath); } if (fileCleanUpCheck) { logError(stringWriter.ToString()); } else { logWarning(stringWriter.ToString()); } } } }