using UnityEditor.TestTools.CodeCoverage.Analytics; using UnityEditor.TestTools.CodeCoverage.Utils; using UnityEngine.TestTools; namespace UnityEditor.TestTools.CodeCoverage { /// /// Utility class for the CodeCoverage API. /// /// /// The following example loads a scene, starts coverage recording, initializes a number of instances of a prefab, then pauses the recording to load another scene, unpauses the recording, initializes a number of instances of a different prefab and finally stops the recording. /// It also sets the verbosity level to Verbose, so all logs are printed to the editor log. /// /// using UnityEngine; /// using UnityEditor; /// using UnityEditor.TestTools.CodeCoverage; /// using UnityEditor.SceneManagement; /// /// public class CoverageApiTest : MonoBehaviour /// { /// [MenuItem("CodeCoverage/Run Recording")] /// static void RunRecording() /// { /// CodeCoverage.VerbosityLevel = LogVerbosityLevel.Verbose; /// /// int i; /// /// EditorSceneManager.OpenScene("Assets/Scenes/Scene1.unity"); /// /// CodeCoverage.StartRecording(); /// /// for (i = 0; i < 1000; ++i) /// { /// Instantiate(Resources.Load("ComplexPrefab1")); /// } /// /// CodeCoverage.PauseRecording(); /// /// EditorSceneManager.OpenScene("Assets/Scenes/Scene2.unity"); /// /// CodeCoverage.UnpauseRecording(); /// /// for (i = 0; i < 1000; ++i) /// { /// Instantiate(Resources.Load("ComplexPrefab2")); /// } /// /// CodeCoverage.StopRecording(); /// } /// } /// /// public static class CodeCoverage { private static CoverageReporterManager s_CoverageReporterManager; /// /// Sets the verbosity level used in editor and console logs. The default level is . /// /// /// The verbosity level used in editor and console logs. /// public static LogVerbosityLevel VerbosityLevel { set { ResultsLogger.VerbosityLevel = value; } get { return ResultsLogger.VerbosityLevel; } } /// /// Call this to start a new coverage recording session. /// public static void StartRecording() { CoverageAnalytics.instance.CurrentCoverageEvent.useAPI_StartRec = true; StartRecordingInternal(); } internal static void StartRecordingInternal() { bool isRunning = CoverageRunData.instance.isRunning; if (!isRunning) { Coverage.ResetAll(); CoverageRunData.instance.StartRecording(); if (s_CoverageReporterManager == null) s_CoverageReporterManager = CoverageReporterStarter.CoverageReporterManager; s_CoverageReporterManager.CreateCoverageReporter(); ICoverageReporter coverageReporter = s_CoverageReporterManager.CoverageReporter; if (coverageReporter != null) coverageReporter.OnRunStarted(null); } } /// /// Call this to pause the recording on the current coverage recording session. /// public static void PauseRecording() { CoverageAnalytics.instance.CurrentCoverageEvent.useAPI_PauseRec = true; PauseRecordingInternal(); } internal static void PauseRecordingInternal() { bool isRunning = CoverageRunData.instance.isRunning; if (isRunning) { if (CoverageRunData.instance.isRecording && !CoverageRunData.instance.isRecordingPaused) { if (s_CoverageReporterManager == null) s_CoverageReporterManager = CoverageReporterStarter.CoverageReporterManager; ICoverageReporter coverageReporter = s_CoverageReporterManager.CoverageReporter; if (coverageReporter != null) coverageReporter.OnCoverageRecordingPaused(); CoverageRunData.instance.PauseRecording(); } } } /// /// Call this to continue recording on the current coverage recording session, after having paused the recording. /// public static void UnpauseRecording() { CoverageAnalytics.instance.CurrentCoverageEvent.useAPI_UnpauseRec = true; UnpauseRecordingInternal(); } internal static void UnpauseRecordingInternal() { bool isRunning = CoverageRunData.instance.isRunning; if (isRunning) { if (CoverageRunData.instance.isRecording && CoverageRunData.instance.isRecordingPaused) { Coverage.ResetAll(); CoverageRunData.instance.UnpauseRecording(); } } } /// /// Call this to end the current coverage recording session. /// public static void StopRecording() { CoverageAnalytics.instance.CurrentCoverageEvent.useAPI_StopRec = true; StopRecordingInternal(); } internal static void StopRecordingInternal() { bool isRunning = CoverageRunData.instance.isRunning; if (isRunning) { if (CoverageRunData.instance.isRecording) { if (CoverageRunData.instance.isRecordingPaused) Coverage.ResetAll(); if (s_CoverageReporterManager == null) s_CoverageReporterManager = CoverageReporterStarter.CoverageReporterManager; ICoverageReporter coverageReporter = s_CoverageReporterManager.CoverageReporter; if (coverageReporter != null) coverageReporter.OnRunFinished(null); CoverageRunData.instance.StopRecording(); s_CoverageReporterManager.GenerateReport(); } } } } }