123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- using UnityEditor.TestTools.CodeCoverage.Analytics;
- using UnityEditor.TestTools.CodeCoverage.Utils;
- using UnityEngine.TestTools;
- namespace UnityEditor.TestTools.CodeCoverage
- {
- /// <summary>
- /// Utility class for the CodeCoverage API.
- /// </summary>
- /// <example>
- /// 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.
- /// <code>
- /// 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();
- /// }
- /// }
- /// </code>
- /// </example>
- public static class CodeCoverage
- {
- private static CoverageReporterManager s_CoverageReporterManager;
- /// <summary>
- /// Sets the verbosity level used in editor and console logs. The default level is <see cref="LogVerbosityLevel.Info"/>.
- /// </summary>
- /// <value>
- /// The verbosity level used in editor and console logs.
- /// </value>
- public static LogVerbosityLevel VerbosityLevel
- {
- set
- {
- ResultsLogger.VerbosityLevel = value;
- }
- get
- {
- return ResultsLogger.VerbosityLevel;
- }
- }
- /// <summary>
- /// Call this to start a new coverage recording session.
- /// </summary>
- 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);
- }
- }
- /// <summary>
- /// Call this to pause the recording on the current coverage recording session.
- /// </summary>
- public static void PauseRecording()
- {
- CoverageAnalytics.instance.CurrentCoverageEvent.useAPI_PauseRec = true;
- 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();
- }
- }
- }
- /// <summary>
- /// Call this to continue recording on the current coverage recording session, after having paused the recording.
- /// </summary>
- public static void UnpauseRecording()
- {
- CoverageAnalytics.instance.CurrentCoverageEvent.useAPI_UnpauseRec = true;
- bool isRunning = CoverageRunData.instance.isRunning;
- if (isRunning)
- {
- if (CoverageRunData.instance.isRecording && CoverageRunData.instance.isRecordingPaused)
- {
- Coverage.ResetAll();
- CoverageRunData.instance.UnpauseRecording();
- }
- }
- }
- /// <summary>
- /// Call this to end the current coverage recording session.
- /// </summary>
- 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();
- }
- }
- }
- }
- }
|