File: Constants.cs
Web Access
Project: src\src\vstest\src\Microsoft.TestPlatform.ObjectModel\Microsoft.TestPlatform.ObjectModel.csproj (Microsoft.VisualStudio.TestPlatform.ObjectModel)
// 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.IO;

using Microsoft.VisualStudio.TestPlatform.ObjectModel.Client;
using Microsoft.VisualStudio.TestPlatform.ObjectModel.Utilities;
using Microsoft.VisualStudio.TestPlatform.PlatformAbstractions;

namespace Microsoft.VisualStudio.TestPlatform.ObjectModel;

/// <summary>
/// Defines the defaults/constants used across different components.
/// </summary>
public static class Constants
{
    /// <summary>
    /// The in process data collection run settings name.
    /// </summary>
    public const string InProcDataCollectionRunSettingsName = "InProcDataCollectionRunSettings";

    /// <summary>
    /// The in process data collector setting name.
    /// </summary>
    public const string InProcDataCollectorSettingName = "InProcDataCollector";

    /// <summary>
    /// The in process data collectors setting name.
    /// </summary>
    public const string InProcDataCollectorsSettingName = "InProcDataCollectors";

    /// <summary>
    /// Name of collect dump option for blame.
    /// </summary>
    public const string BlameCollectDumpKey = "CollectDump";

    /// <summary>
    /// Name of collect dump option for blame.
    /// The internal visibility is because the new feature is not publicly exposed yet and so we can retire it.
    /// </summary>
    internal const string BlameCollectMonitorPostMortemDebuggerKey = "MonitorPostmortemDebugger";

    /// <summary>
    /// Name of collect dump option for blame.
    /// </summary>
    public const string BlameCollectHangDumpKey = "CollectHangDump";

    /// <summary>
    /// Name of collect hang dump option for blame.
    /// </summary>
    public const string CollectDumpOnTestSessionHang = "CollectDumpOnTestSessionHang";

    /// <summary>
    /// Name of data collection settings node in RunSettings.
    /// </summary>
    public const string DataCollectionRunSettingsName = "DataCollectionRunSettings";

    /// <summary>
    /// Name of logger run settings node in RunSettings.
    /// </summary>
    public const string LoggerRunSettingsName = "LoggerRunSettings";

    /// <summary>
    /// Name of loggers node in RunSettings.
    /// </summary>
    public const string LoggersSettingName = "Loggers";

    /// <summary>
    /// Name of logger node in RunSettings.
    /// </summary>
    public const string LoggerSettingName = "Logger";

    /// <summary>
    /// Name of friendlyName attribute of logger node.
    /// </summary>
    public const string LoggerFriendlyName = "friendlyName";

    /// <summary>
    /// Name of friendlyName attribute of logger node in lower case.
    /// </summary>
    public const string LoggerFriendlyNameLower = "friendlyname";

    /// <summary>
    /// Name of uri attribute of logger node.
    /// </summary>
    public const string LoggerUriName = "uri";

    /// <summary>
    /// Name of assemblyQualifiedName attribute of logger node.
    /// </summary>
    public const string LoggerAssemblyQualifiedName = "assemblyQualifiedName";

    /// <summary>
    /// Name of assemblyQualifiedName attribute of logger node in lower case.
    /// </summary>
    public const string LoggerAssemblyQualifiedNameLower = "assemblyqualifiedname";

    /// <summary>
    /// Name of codeBase attribute of logger node.
    /// </summary>
    public const string LoggerCodeBase = "codeBase";

    /// <summary>
    /// Name of codeBase attribute of logger node in lower case.
    /// </summary>
    public const string LoggerCodeBaseLower = "codebase";

    /// <summary>
    /// Name of enabled attribute of logger node.
    /// </summary>
    public const string LoggerEnabledName = "enabled";

    /// <summary>
    /// Name of configuration element of logger node.
    /// </summary>
    public const string LoggerConfigurationName = "Configuration";

    /// <summary>
    /// Name of configuration element of logger node in lower case.
    /// </summary>
    public const string LoggerConfigurationNameLower = "configuration";

    /// <summary>
    /// Name of TreatNoTestsAsError parameter
    /// </summary>
    public const string TreatNoTestsAsError = "TreatNoTestsAsError";

    /// <summary>
    /// Name of RunConfiguration settings node in RunSettings.
    /// </summary>
    public const string RunConfigurationSettingsName = "RunConfiguration";

    /// <summary>
    /// Default testrunner if testrunner is not specified
    /// </summary>
    public const string UnspecifiedAdapterPath = "_none_";

    public const string DataCollectorsSettingName = "DataCollectors";

    public const string RunSettingsName = "RunSettings";

    public const string DataCollectorSettingName = "DataCollector";

    /// <summary>
    /// Pattern used to find test run parameter node.
    /// </summary>
    public const string TestRunParametersName = "TestRunParameters";

    /// <summary>
    /// Type of the unit test extension. (Extension author will use this name while authoring their Vsix)
    /// </summary>
    public const string UnitTestExtensionType = "UnitTestExtension";

    /// <summary>
    /// Maximum size of the trace log file (in kilobytes).
    /// </summary>
    public const string TraceLogMaxFileSizeInKB = "TraceLogMaxFileSizeInKb";

    public const string EmptyRunSettings = @"<RunSettings></RunSettings>";

    public static readonly Architecture DefaultPlatform = XmlRunSettingsUtilities.OSArchitecture;

    /// <summary>
    /// Adding this for compatibility
    /// </summary>
    public const FrameworkVersion DefaultFramework = FrameworkVersion.Framework40;

    /// <summary>
    /// Default option for parallel execution
    /// </summary>
    public const int DefaultCpuCount = 1;

    /// <summary>
    /// The default batch size.
    /// </summary>
    public const long DefaultBatchSize = 10;

    /// <summary>
    /// The default protocol version
    /// </summary>
    // TODO: COMPAT: This is not great because it is not a constant, and so an external dll tells us what
    // capabilities we have in the implementer (e.g. client), instead we should move this closer to communication
    // utilities where protocol version actually makes sense. And review all the usages of this, because there are few
    // ways that the default version is determined.
    public static readonly ProtocolConfig DefaultProtocolConfig = new() { Version = 7 };

    /// <summary>
    /// The minimum protocol version that has debug support
    /// </summary>
    public const int MinimumProtocolVersionWithDebugSupport = 3;

    /// <summary>
    /// The minimum protocol version that has debug support
    /// </summary>
    public const int MinimumProtocolVersionWithCancelDiscoveryEventHandlerSupport = 6;

    /// <summary>
    /// Name of the results directory
    /// </summary>
    public const string ResultsDirectoryName = "TestResults";

    /// <summary>
    /// Default results directory.
    /// </summary>
    public static readonly string DefaultResultsDirectory = Path.Combine(Directory.GetCurrentDirectory(), ResultsDirectoryName);

    /// <summary>
    /// Default treatment of error from test adapters.
    /// </summary>
    public const bool DefaultTreatTestAdapterErrorsAsWarnings = false;

    /// <summary>
    /// The default execution thread apartment state.
    /// </summary>
    [CLSCompliant(false)]
#if NETFRAMEWORK
    // Keeping default STA thread for desktop tests for UI/Functional test scenarios
    public static readonly PlatformApartmentState DefaultExecutionThreadApartmentState = PlatformApartmentState.STA;
#else
    // STA threads are not supported for net core, default to MTA
    public static readonly PlatformApartmentState DefaultExecutionThreadApartmentState = PlatformApartmentState.MTA;
#endif

    /// <summary>
    ///  Constants for detecting .net framework.
    /// </summary>
    public const string TargetFrameworkAttributeFullName = "System.Runtime.Versioning.TargetFrameworkAttribute";

    public const string DotNetFrameWorkStringPrefix = ".NETFramework,Version=";

    public const string DotNetFramework35 = ".NETFramework,Version=v3.5";

    public const string DotNetFramework40 = ".NETFramework,Version=v4.0";

    public const string DotNetFramework45 = ".NETFramework,Version=v4.5";

    public const string DotNetFramework451 = ".NETFramework,Version=v4.5.1";

    public const string DotNetFramework46 = ".NETFramework,Version=v4.6";

    public const string DotNetFrameworkCore10 = ".NETCoreApp,Version=v1.0";

    public const string DotNetFrameworkUap10 = "UAP,Version=v10.0";

    public const string TargetFrameworkName = "TargetFrameworkName";
}

/// <summary>
/// Default parameters to be passed onto all loggers.
/// </summary>
public static class DefaultLoggerParameterNames
{
    // Denotes target location for test run results
    // For ex. TrxLogger saves test run results at this target
    public const string TestRunDirectory = "TestRunDirectory";

    // Denotes target framework for the tests.
    public const string TargetFramework = "TargetFramework";
}