File: XML\Attributes.cs
Web Access
Project: src\src\vstest\src\Microsoft.TestPlatform.Extensions.TrxLogger\Microsoft.TestPlatform.Extensions.TrxLogger.csproj (Microsoft.VisualStudio.TestPlatform.Extensions.Trx.TestLogger)
// 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;

namespace Microsoft.TestPlatform.Extensions.TrxLogger.XML;

/// <summary>
/// Additional data needed to describe a field for automatic xml storage
/// </summary>
[AttributeUsage(AttributeTargets.Field, AllowMultiple = false)]
internal abstract class StoreXmlAttribute : Attribute
{
    /// <summary>
    /// simple xpath location. only element and attribute names can be used.
    /// </summary>
    public string? Location;

    /// <summary>
    /// Initializes a new instance of the <see cref="StoreXmlAttribute"/> class.
    /// </summary>
    public StoreXmlAttribute()
    {
    }

    /// <summary>
    /// Initializes a new instance of the <see cref="StoreXmlAttribute"/> class.
    /// </summary>
    /// <param name="location">
    /// The location.
    /// </param>
    public StoreXmlAttribute(string? location)
    {
        Location = location;
    }
}

/// <summary>
/// Additional info for storing simple fields with default value
/// </summary>
[AttributeUsage(AttributeTargets.Field, AllowMultiple = false)]
internal sealed class StoreXmlSimpleFieldAttribute : StoreXmlAttribute
{
    public object? DefaultValue;

    /// <summary>
    /// Initializes a new instance of the <see cref="StoreXmlSimpleFieldAttribute"/> class.
    /// </summary>
    public StoreXmlSimpleFieldAttribute()
    {
    }

    /// <summary>
    /// Initializes a new instance of the <see cref="StoreXmlSimpleFieldAttribute"/> class.
    /// </summary>
    /// <param name="location">
    /// The location.
    /// </param>
    public StoreXmlSimpleFieldAttribute(string location) : base(location)
    {
    }

    /// <summary>
    /// Initializes a new instance of the <see cref="StoreXmlSimpleFieldAttribute"/> class.
    /// </summary>
    /// <param name="defaultValue">
    /// The default value.
    /// </param>
    public StoreXmlSimpleFieldAttribute(object defaultValue) : this(null, defaultValue)
    {
    }

    /// <summary>
    /// Initializes a new instance of the <see cref="StoreXmlSimpleFieldAttribute"/> class.
    /// </summary>
    /// <param name="location">
    /// The location.
    /// </param>
    /// <param name="defaultValue">
    /// The default value.
    /// </param>
    public StoreXmlSimpleFieldAttribute(string? location, object defaultValue)
        : base(location)
    {
        DefaultValue = defaultValue;
    }
}

/// <summary>
/// Storing of fields that support IXmlTestStore
/// </summary>
[AttributeUsage(AttributeTargets.Field, AllowMultiple = false)]
internal sealed class StoreXmlFieldAttribute : StoreXmlAttribute
{
    /// <summary>
    /// If there's no xml for the field a default instance is created or not.
    /// </summary>
    public bool CreateDefaultInstance = CreateDefaultInstanceDefault;

    /// <summary>
    /// Default value
    /// </summary>
    internal static readonly bool CreateDefaultInstanceDefault = true;

    /// <summary>
    /// Initializes a new instance of the <see cref="StoreXmlFieldAttribute"/> class.
    /// </summary>
    public StoreXmlFieldAttribute()
    {
    }

    /// <summary>
    /// Initializes a new instance of the <see cref="StoreXmlFieldAttribute"/> class.
    /// </summary>
    /// <param name="location">
    /// The location.
    /// </param>
    /// <param name="createDefaultInstance">
    /// The create default instance.
    /// </param>
    public StoreXmlFieldAttribute(string location, bool createDefaultInstance) : base(location)
    {
        CreateDefaultInstance = createDefaultInstance;
    }

    /// <summary>
    /// Initializes a new instance of the <see cref="StoreXmlFieldAttribute"/> class.
    /// </summary>
    /// <param name="location">
    /// The location.
    /// </param>
    public StoreXmlFieldAttribute(string location) : this(location, true)
    {
    }
}