File: Client\FilterOptions.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.Globalization;
using System.Runtime.Serialization;
using System.Text;

namespace Microsoft.VisualStudio.TestPlatform.ObjectModel.Client;

/// <summary>
/// Filter options to be passed into the Test Platform during Discovery/Execution.
/// </summary>
[DataContract]
public class FilterOptions
{
    /// <summary>
    /// Gets or sets the regular expression that will be applied on the property before matching.
    /// </summary>
    [DataMember]
    public string? FilterRegEx { get; set; }

    /// <summary>
    /// Gets or sets the optional regular expression replacement string. When this property is set, <see cref="System.Text.RegularExpressions.Regex.Replace(string, string, string)"/>
    /// will be called upon property value instead of <see cref="System.Text.RegularExpressions.Regex.Match(string)"/> before matching.
    /// </summary>
    [DataMember]
    public string? FilterRegExReplacement { get; set; }

    /// <inheritdoc/>
    public override string ToString()
    {
        StringBuilder sb = new();
        sb.AppendLine(string.Format(CultureInfo.CurrentCulture, "FilterOptions:"));
        sb.AppendLine(string.Format(CultureInfo.CurrentCulture,
            "   FilterRegEx={0}   FilterRegExReplacement={1}",
            FilterRegEx ?? string.Empty,
            FilterRegExReplacement ?? string.Empty));
        return sb.ToString();
    }

    protected bool Equals(FilterOptions? other) =>
        other != null &&
        string.Equals(FilterRegEx, other.FilterRegEx) &&
        string.Equals(FilterRegExReplacement, other.FilterRegExReplacement);

    /// <inheritdoc/>
    public override bool Equals(object? obj) => Equals(obj as FilterOptions);

    /// <inheritdoc/>
    public override int GetHashCode()
    {
        unchecked
        {
            var hashCode = FilterRegEx?.GetHashCode() ?? 0;
            return (hashCode * 397) ^ (FilterRegExReplacement != null ? FilterRegExReplacement.GetHashCode() : 0);
        }
    }
}