File: DocumentationComments\FieldDocumentationCommentTests.cs
Web Access
Project: src\src\Compilers\CSharp\Test\Symbol\Microsoft.CodeAnalysis.CSharp.Symbol.UnitTests.csproj (Microsoft.CodeAnalysis.CSharp.Symbol.UnitTests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
 
#nullable disable
 
using System.Linq;
using Microsoft.CodeAnalysis.CSharp.Symbols;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.CSharp.Test.Utilities;
using Microsoft.CodeAnalysis.Text;
using Xunit;
 
namespace Microsoft.CodeAnalysis.CSharp.UnitTests
{
    public class FieldDocumentationCommentTests : CSharpTestBase
    {
        private readonly CSharpCompilation _compilation;
        private readonly NamespaceSymbol _acmeNamespace;
        private readonly NamedTypeSymbol _widgetClass;
        private readonly NamedTypeSymbol _enumSymbol;
        private readonly NamedTypeSymbol _valueType;
 
        public FieldDocumentationCommentTests()
        {
            _compilation = CreateCompilationWithMscorlib40AndDocumentationComments(@"
namespace Acme
{
	struct ValueType
	{
        /// <summary>Summary for total fields.</summary>
		private int total1, total2;
	}
	class Widget: IProcess
	{
		public class NestedClass
		{
			private int value;
		}
		private string message;
		private static Color defaultColor;
		private const double PI = 3.14159;
		protected readonly double monthlyAverage;
		private long[] array1;
		private Widget[,] array2;
		private unsafe int *pCount;
		private unsafe float **ppValues;
	}
 
    enum E
    {
        /// <summary>Enum field</summary>
        A = 1
    }
}
");
 
            _acmeNamespace = (NamespaceSymbol)_compilation.GlobalNamespace.GetMembers("Acme").Single();
            _widgetClass = _acmeNamespace.GetTypeMembers("Widget").Single();
            _enumSymbol = _acmeNamespace.GetTypeMembers("E").Single();
            _valueType = _acmeNamespace.GetTypeMembers("ValueType").Single();
        }
 
        [Fact]
        public void TestFieldInStruct()
        {
            var total1 = _valueType.GetMembers("total1").Single();
            var total2 = _valueType.GetMembers("total2").Single();
            Assert.Equal("F:Acme.ValueType.total1", total1.GetDocumentationCommentId());
            Assert.Equal(
@"<member name=""F:Acme.ValueType.total1"">
    <summary>Summary for total fields.</summary>
</member>
", total1.GetDocumentationCommentXml());
 
            Assert.Equal("F:Acme.ValueType.total2", total2.GetDocumentationCommentId());
            Assert.Equal(@"<member name=""F:Acme.ValueType.total2"">
    <summary>Summary for total fields.</summary>
</member>
", total2.GetDocumentationCommentXml());
        }
 
        [Fact]
        public void TestFieldInNestedClass()
        {
            Assert.Equal("F:Acme.Widget.NestedClass.value", _widgetClass.GetTypeMembers("NestedClass").Single()
                                                                       .GetMembers("value").Single().GetDocumentationCommentId());
        }
 
        [Fact]
        public void TestSimpleField()
        {
            Assert.Equal("F:Acme.Widget.message", _widgetClass.GetMembers("message").Single().GetDocumentationCommentId());
        }
 
        [Fact]
        public void TestStatic()
        {
            Assert.Equal("F:Acme.Widget.defaultColor", _widgetClass.GetMembers("defaultColor").Single().GetDocumentationCommentId());
        }
 
        [Fact]
        public void TestConst()
        {
            Assert.Equal("F:Acme.Widget.PI", _widgetClass.GetMembers("PI").Single().GetDocumentationCommentId());
        }
 
        [Fact]
        public void TestReadOnly()
        {
            Assert.Equal("F:Acme.Widget.monthlyAverage", _widgetClass.GetMembers("monthlyAverage").Single().GetDocumentationCommentId());
        }
 
        [Fact]
        public void TestArray1()
        {
            Assert.Equal("F:Acme.Widget.array1", _widgetClass.GetMembers("array1").Single().GetDocumentationCommentId());
        }
 
        [Fact]
        public void TestArray2()
        {
            Assert.Equal("F:Acme.Widget.array2", _widgetClass.GetMembers("array2").Single().GetDocumentationCommentId());
        }
 
        [Fact]
        public void TestUnsafePointer()
        {
            Assert.Equal("F:Acme.Widget.pCount", _widgetClass.GetMembers("pCount").Single().GetDocumentationCommentId());
        }
 
        [Fact]
        public void TestUnsafePointerToPointer()
        {
            Assert.Equal("F:Acme.Widget.ppValues", _widgetClass.GetMembers("ppValues").Single().GetDocumentationCommentId());
        }
 
        [Fact]
        public void TestEnumField()
        {
            var field = _enumSymbol.GetMembers("A").Single();
            Assert.Equal("F:Acme.E.A", field.GetDocumentationCommentId());
            Assert.Equal(
@"<member name=""F:Acme.E.A"">
    <summary>Enum field</summary>
</member>
", field.GetDocumentationCommentXml());
        }
    }
}