File: Microsoft.CodeQuality.Analyzers\ApiDesignGuidelines\DeclareTypesInNamespacesTests.cs
Web Access
Project: ..\..\..\src\Microsoft.CodeAnalysis.NetAnalyzers\tests\Microsoft.CodeAnalysis.NetAnalyzers.UnitTests\Microsoft.CodeAnalysis.NetAnalyzers.UnitTests.csproj (Microsoft.CodeAnalysis.NetAnalyzers.UnitTests)
// Copyright (c) Microsoft.  All Rights Reserved.  Licensed under the MIT license.  See License.txt in the project root for license information.
 
using System.Threading.Tasks;
using Microsoft.CodeAnalysis;
using Xunit;
using VerifyCS = Test.Utilities.CSharpCodeFixVerifier<
    Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines.DeclareTypesInNamespacesAnalyzer,
    Microsoft.CodeQuality.CSharp.Analyzers.ApiDesignGuidelines.CSharpDeclareTypesInNamespacesFixer>;
using VerifyVB = Test.Utilities.VisualBasicCodeFixVerifier<
    Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines.DeclareTypesInNamespacesAnalyzer,
    Microsoft.CodeQuality.VisualBasic.Analyzers.ApiDesignGuidelines.BasicDeclareTypesInNamespacesFixer>;
 
namespace Microsoft.CodeQuality.Analyzers.ApiDesignGuidelines.UnitTests
{
    public class DeclareTypesInNamespacesTests
    {
        [Fact]
        public async Task OuterTypeInGlobalNamespace_Warns()
        {
            var csCode = @"
public class [|Class|]
{
}
";
            await VerifyCS.VerifyCodeFixAsync(csCode, csCode);
 
            var vbCode = @"
Public Class [|[MyClass]|]
End Class";
            await VerifyVB.VerifyCodeFixAsync(vbCode, vbCode);
        }
 
        [Fact]
        public async Task NestedTypeInGlobalNamespace_WarnsOnlyOnce()
        {
            var csCode = @"
public class [|Class|]
{
    public class Nested {}
}
";
            await VerifyCS.VerifyCodeFixAsync(csCode, csCode);
 
            var vbCode = @"
Public Class [|[MyClass]|]
    Public Class Nested
    End Class
End Class
";
            await VerifyVB.VerifyCodeFixAsync(vbCode, vbCode);
        }
 
        [Fact]
        public async Task InternalClassInGlobalNamespace_DoesNotWarn()
        {
            var csCode = @"
internal class Class
{
    public class Nested {}
}";
            await VerifyCS.VerifyCodeFixAsync(csCode, csCode);
 
            var vbCode = @"
Friend Class [MyClass]
    Public Class Nested
    End Class
End Class";
            await VerifyVB.VerifyCodeFixAsync(vbCode, vbCode);
        }
 
        [Fact]
        public async Task PublicClassInNonGlobalNamespace_DoesNotWarn()
        {
            var csCode = @"
namespace NS
{
    public class Class
    {
        public class Nested {}
    }
}";
            await VerifyCS.VerifyCodeFixAsync(csCode, csCode);
 
            var vbCode = @"
Namespace NS
    Public Class [MyClass]
        Public Class Nested
        End Class
    End Class
End Namespace";
            await VerifyVB.VerifyCodeFixAsync(vbCode, vbCode);
        }
 
        [Fact]
        public async Task TopLevelProgramClass_DoesNotWarn()
        {
            var csCode = @"
System.Console.WriteLine();
 
public partial class Program
{
}
";
            await new VerifyCS.Test
            {
                TestState =
                {
                    OutputKind = OutputKind.ConsoleApplication,
                    Sources = { csCode, },
                },
                FixedCode = csCode,
                LanguageVersion = CodeAnalysis.CSharp.LanguageVersion.CSharp10,
            }.RunAsync();
        }
    }
}