File: RunSettingsManager.cs
Web Access
Project: src\src\vstest\src\Microsoft.TestPlatform.Common\Microsoft.TestPlatform.Common.csproj (Microsoft.VisualStudio.TestPlatform.Common)
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.

using System;
using System.Diagnostics.CodeAnalysis;

using Microsoft.VisualStudio.TestPlatform.Common.Interfaces;

namespace Microsoft.VisualStudio.TestPlatform.Common;

/// <summary>
/// Manages the active run settings.
/// </summary>
internal class RunSettingsManager : IRunSettingsProvider
{
    private static readonly object LockObject = new();

    private static RunSettingsManager? s_runSettingsManagerInstance;

    /// <summary>
    /// Default constructor.
    /// </summary>
    private RunSettingsManager()
    {
        ActiveRunSettings = new RunSettings();
    }

    #region IRunSettingsProvider

    /// <summary>
    /// Gets the active run settings.
    /// </summary>
    public RunSettings ActiveRunSettings { get; private set; }

    #endregion

    [AllowNull]
    public static RunSettingsManager Instance
    {
        get
        {
            if (s_runSettingsManagerInstance != null)
            {
                return s_runSettingsManagerInstance;
            }

            lock (LockObject)
            {
                s_runSettingsManagerInstance ??= new RunSettingsManager();
            }

            return s_runSettingsManagerInstance;
        }
        internal set
        {
            s_runSettingsManagerInstance = value;
        }
    }

    /// <summary>
    /// Set the active run settings.
    /// </summary>
    /// <param name="runSettings">RunSettings to make the active Run Settings.</param>
    public void SetActiveRunSettings(RunSettings runSettings)
    {
        ActiveRunSettings = runSettings ?? throw new ArgumentNullException(nameof(runSettings));
    }

}