197 lines
6.5 KiB
C#
197 lines
6.5 KiB
C#
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;
|
|
|
|
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();
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <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;
|
|
|
|
UnpauseRecordingInternal();
|
|
}
|
|
|
|
internal static void UnpauseRecordingInternal()
|
|
{
|
|
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();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|