File: ExtensionFramework\Utilities\TestSettingsProviderPluginInformation.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.Collections.Generic;
using System.Linq;

using Microsoft.VisualStudio.TestPlatform.ObjectModel;

namespace Microsoft.VisualStudio.TestPlatform.Common.ExtensionFramework.Utilities;

/// <summary>
/// The test settings provider plugin information.
/// </summary>
internal class TestSettingsProviderPluginInformation : TestPluginInformation
{
    /// <summary>
    /// Default constructor
    /// </summary>
    /// <param name="testSettingsProviderType"> The test Settings Provider Type. </param>
    public TestSettingsProviderPluginInformation(Type? testSettingsProviderType)
        : base(testSettingsProviderType)
    {
        if (testSettingsProviderType != null)
        {
            SettingsName = GetTestSettingsName(testSettingsProviderType);
        }
    }

    /// <summary>
    /// Gets data value identifying the test plugin
    /// </summary>
    public override string? IdentifierData
    {
        get
        {
            return SettingsName;
        }
    }

    /// <summary>
    /// Metadata for the test plugin
    /// </summary>
    public override ICollection<object?> Metadata
    {
        get
        {
            return new object?[] { SettingsName };
        }
    }

    /// <summary>
    /// Gets name of test settings supported by plugin.
    /// </summary>
    public string? SettingsName
    {
        get;
        private set;
    }

    /// <summary>
    /// Helper to get the test settings name from SettingsNameAttribute on test setting provider plugin.
    /// </summary>
    /// <param name="testSettingsProviderType">Data type of test setting provider</param>
    /// <returns>Test settings name supported by plugin</returns>
    private static string GetTestSettingsName(Type testSettingsProviderType)
    {
        string settingName = string.Empty;

        object[] attributes = testSettingsProviderType.GetCustomAttributes(typeof(SettingsNameAttribute), false).ToArray();
        if (attributes != null && attributes.Length > 0)
        {
            SettingsNameAttribute settingsNameAttribute = (SettingsNameAttribute)attributes[0];

            if (!settingsNameAttribute.SettingsName.IsNullOrEmpty())
            {
                settingName = settingsNameAttribute.SettingsName;
            }
        }

        return settingName;
    }
}