using System; using UnityEditor.TestTools.CodeCoverage.Analytics; using UnityEngine; namespace UnityEditor.TestTools.CodeCoverage { [Serializable] internal class CoverageRunDataImplementation { [SerializeField] private bool m_IsRunning = false; [SerializeField] private int m_TestRunCount = 0; [SerializeField] private string m_LastIgnoredSuite = string.Empty; [SerializeField] private bool m_IsRecording = false; [SerializeField] private bool m_IsRecordingPaused = false; [SerializeField] private bool m_ReportWasGenerated = false; [SerializeField] private bool m_IsGeneratingReport = false; public void Start(bool setupEvents = true) { m_LastIgnoredSuite = string.Empty; m_IsRunning = true; m_TestRunCount = 0; if (setupEvents) { CoverageAnalytics.instance.CurrentCoverageEvent.actionID = ActionID.DataOnly; CoverageAnalytics.instance.CurrentCoverageEvent.coverageModeId = CoverageModeID.TestRunner; CoverageAnalytics.instance.StartTimer(); CoverageEventData.instance.StartSession(SessionMode.TestRunner); } } public void Stop() { m_LastIgnoredSuite = string.Empty; m_IsRunning = false; } public void StartRecording(bool setupEvents = true) { Start(setupEvents); IncrementTestRunCount(); m_IsRecording = true; m_IsRecordingPaused = false; if (setupEvents) { CoverageAnalytics.instance.CurrentCoverageEvent.coverageModeId = CoverageModeID.Recording; CoverageEventData.instance.StartSession(SessionMode.Recording); } } public void PauseRecording() { m_IsRecordingPaused = true; } public void UnpauseRecording() { m_IsRecordingPaused = false; } public void StopRecording() { Stop(); m_IsRecording = false; m_IsRecordingPaused = false; } public bool isRunning { get { return m_IsRunning; } } public bool isRecording { get { return m_IsRecording; } } public bool isRecordingPaused { get { return m_IsRecordingPaused; } } public bool isGeneratingReport { get { return m_IsGeneratingReport; } } public bool reportWasGenerated { get { return m_ReportWasGenerated; } } public void ReportGenerationStart() { m_IsGeneratingReport = true; m_ReportWasGenerated = false; } public void ReportGenerationEnd(bool success) { m_IsGeneratingReport = false; m_ReportWasGenerated = success; } public void IncrementTestRunCount() { m_TestRunCount++; } public bool DidTestsRun() { return m_TestRunCount > 0; } public void SetLastIgnoredSuiteID(string id) { m_LastIgnoredSuite = id; } public bool HasLastIgnoredSuiteID() { return m_LastIgnoredSuite.Length > 0; } public string GetLastIgnoredSuiteID() { return m_LastIgnoredSuite; } } [Serializable] internal class CoverageRunData : ScriptableSingleton { [SerializeField] private CoverageRunDataImplementation m_CoverageRunDataImplementation = null; protected CoverageRunData() : base() { m_CoverageRunDataImplementation = new CoverageRunDataImplementation(); } public bool isRunning { get { return m_CoverageRunDataImplementation.isRunning; } } public bool isRecording { get { return m_CoverageRunDataImplementation.isRecording; } } public bool isRecordingPaused { get { return m_CoverageRunDataImplementation.isRecordingPaused; } } public bool reportWasGenerated { get { return m_CoverageRunDataImplementation.reportWasGenerated; } } public void IncrementTestRunCount() { m_CoverageRunDataImplementation.IncrementTestRunCount(); } public bool DidTestsRun() { return m_CoverageRunDataImplementation.DidTestsRun(); } public void SetLastIgnoredSuiteID(string id) { m_CoverageRunDataImplementation.SetLastIgnoredSuiteID(id); } public bool HasLastIgnoredSuiteID() { return m_CoverageRunDataImplementation.HasLastIgnoredSuiteID(); } public string GetLastIgnoredSuiteID() { return m_CoverageRunDataImplementation.GetLastIgnoredSuiteID(); } public void Start() { m_CoverageRunDataImplementation.Start(); } public void Stop() { m_CoverageRunDataImplementation.Stop(); } public void StartRecording() { m_CoverageRunDataImplementation.StartRecording(); } public void StopRecording() { m_CoverageRunDataImplementation.StopRecording(); } public void PauseRecording() { m_CoverageRunDataImplementation.PauseRecording(); Events.InvokeOnCoverageSessionPaused(); } public void UnpauseRecording() { m_CoverageRunDataImplementation.UnpauseRecording(); Events.InvokeOnCoverageSessionUnpaused(); } public bool isGeneratingReport { get { return m_CoverageRunDataImplementation.isGeneratingReport; } } public void ReportGenerationStart() { m_CoverageRunDataImplementation.ReportGenerationStart(); } public void ReportGenerationEnd(bool success) { m_CoverageRunDataImplementation.ReportGenerationEnd(success); } } }