[DataRow("Windows Form Designer GeNeRaTed code")] // legacy Windows Forms used to include generated code in dev files, surrounded by such a region
        public void Issues_Raised_On_Partially_Generated_Legacy_WinForms_File(string regionName)
        {
            var content =
                $@"namespace PartiallyGenerated
{{
    class MyClass
    {{
        void HandWrittenEventHandler()
        {{
            ; // Noncompliant
        }}

#region {regionName}
        void GeneratedStuff()
        {{
            ; // Noncompliant
        }}
#endregion
    }}
}}";
            var compilation = SolutionBuilder
                              .Create()
                              .AddProject(AnalyzerLanguage.CSharp, createExtraEmptyFile: false)
                              .AddSnippet(content, "Foo.cs")
                              .GetCompilation();

            DiagnosticVerifier.Verify(compilation, new CS.EmptyStatement(), CompilationErrorBehavior.FailTest, compilation.SyntaxTrees.First().GetText());
        }
Esempio n. 2
0
        public void MethodsShouldUseBaseTypes_Internals()
        {
            var solution = SolutionBuilder.Create()
                           .AddProject(AnalyzerLanguage.CSharp)
                           .AddSnippet(@"
internal interface IFoo
{
    bool IsFoo { get; }
}

public class Foo : IFoo
{
    public bool IsFoo { get; set; }
}
").GetSolution()
                           .AddProject(AnalyzerLanguage.CSharp)
                           .AddProjectReference(sln => sln.ProjectIds[0])
                           .AddSnippet(@"
internal class Bar
{
    public void MethodOne(Foo foo)
    {
        var x = foo.IsFoo;
    }
}
").GetSolution();

            foreach (var compilation in solution.Compile())
            {
                DiagnosticVerifier.Verify(compilation, new MethodsShouldUseBaseTypes());
            }
        }
Esempio n. 3
0
        public static void VerifyUtilityAnalyzer <TMessage>(IEnumerable <string> paths, UtilityAnalyzerBase diagnosticAnalyzer,
                                                            string protobufPath, Action <IList <TMessage> > verifyProtobuf, CompilationErrorBehavior checkMode = CompilationErrorBehavior.Default)
            where TMessage : IMessage <TMessage>, new()
        {
            var solutionBuilder = SolutionBuilder.CreateSolutionFromPaths(paths);

            foreach (var compilation in solutionBuilder.Compile())
            {
                DiagnosticVerifier.Verify(compilation, diagnosticAnalyzer, checkMode);

                verifyProtobuf(ReadProtobuf(protobufPath).ToList());
            }

            IEnumerable <TMessage> ReadProtobuf(string path)
            {
                using (var input = File.OpenRead(path))
                {
                    var parser = new MessageParser <TMessage>(() => new TMessage());
                    while (input.Position < input.Length)
                    {
                        yield return(parser.ParseDelimitedFrom(input));
                    }
                }
            }
        }
        private static void VerifyAnalyzer(string snippit, OptionStrict optionStrict)
        {
            var project     = SolutionBuilder.Create().AddProject(AnalyzerLanguage.VisualBasic).AddSnippet(snippit);
            var options     = new VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary, optionStrict: optionStrict);
            var compilation = project.GetCompilation(null, options);

            DiagnosticVerifier.Verify(compilation, new OptionStrictOn(), CompilationErrorBehavior.Default);
        }
        public void OptionExplicitOn_IsOffForProject()
        {
            var project     = SolutionBuilder.Create().AddProject(AnalyzerLanguage.VisualBasic).AddSnippet("' Noncompliant ^1#0 {{Configure 'Option Explicit On' for assembly 'project0'.}}");
            var options     = new VisualBasicCompilationOptions(OutputKind.DynamicallyLinkedLibrary, optionExplicit: false); // optionExplicit is true by default => tested in other tests
            var compilation = project.GetCompilation(null, options);

            DiagnosticVerifier.Verify(compilation, new OptionExplicitOn(), CompilationErrorBehavior.Default);
        }
Esempio n. 6
0
        public static void VerifyAnalyzer(IEnumerable <string> paths, SonarDiagnosticAnalyzer diagnosticAnalyzer,
                                          IEnumerable <ParseOptions> options = null, params MetadataReference[] additionalReferences)
        {
            var solutionBuilder = SolutionBuilder.CreateSolutionFromPaths(paths, additionalReferences);

            foreach (var compilation in solutionBuilder.Compile(options?.ToArray()))
            {
                DiagnosticVerifier.Verify(compilation, diagnosticAnalyzer);
            }
        }
Esempio n. 7
0
        public static void VerifyAnalyzer(IEnumerable <string> paths, SonarDiagnosticAnalyzer diagnosticAnalyzer,
                                          IEnumerable <ParseOptions> options = null, CompilationErrorBehavior checkMode = CompilationErrorBehavior.Default,
                                          IEnumerable <MetadataReference> additionalReferences = null)
        {
            var solutionBuilder = SolutionBuilder.CreateSolutionFromPaths(paths, additionalReferences);

            foreach (var compilation in solutionBuilder.Compile(options?.ToArray()))
            {
                DiagnosticVerifier.Verify(compilation, diagnosticAnalyzer, checkMode);
            }
        }
Esempio n. 8
0
        public void TaskConfigureAwait_ConsoleApp()
        {
            const string code               = @"
using System.Threading.Tasks;

public static class EntryPoint
{
    public async static Task Main() => await Task.Delay(1000); // Compliant
}";
            var          projectBuilder     = SolutionBuilder.Create().AddProject(AnalyzerLanguage.CSharp).AddSnippet(code);
            var          compilationOptions = new CSharpCompilationOptions(OutputKind.ConsoleApplication);
            var          analyzer           = new TaskConfigureAwait();
            var          compilation        = projectBuilder.GetCompilation(null, compilationOptions);

            DiagnosticVerifier.Verify(compilation, analyzer, CompilationErrorBehavior.Default);
        }
Esempio n. 9
0
        public static void VerifyVisualBasicAnalyzer(string snippet, SonarDiagnosticAnalyzer diagnosticAnalyzer,
                                                     CompilationErrorBehavior checkMode = CompilationErrorBehavior.Default, IEnumerable <MetadataReference> additionalReferences = null)
        {
            var solution = SolutionBuilder
                           .Create()
                           .AddProject(AnalyzerLanguage.VisualBasic)
                           .AddSnippet(snippet)
                           .AddReferences(additionalReferences)
                           .GetSolution();

            // ToDo: add [CallerLineNumber]int lineNumber = 0
            // then add ability to shift result reports with this line number
            foreach (var compilation in solution.Compile())
            {
                DiagnosticVerifier.Verify(compilation, diagnosticAnalyzer, checkMode);
            }
        }
Esempio n. 10
0
        public static void VerifyVisualBasicAnalyzer(string snippet, SonarDiagnosticAnalyzer diagnosticAnalyzer,
                                                     params MetadataReference[] additionalReferences)
        {
            var solution = SolutionBuilder
                           .Create()
                           .AddProject(AnalyzerLanguage.VisualBasic)
                           .AddSnippet(snippet)
                           .AddReferences(additionalReferences)
                           .GetSolution();

            // TODO: add [CallerLineNumber]int lineNumber = 0
            // then add ability to shift result reports with this line number
            foreach (var compilation in solution.Compile())
            {
                DiagnosticVerifier.Verify(compilation, diagnosticAnalyzer);
            }
        }
        public void UsingCommandLineArguments_VB_Partial()
        {
            var compilation = SolutionBuilder.Create()
                              .AddProject(AnalyzerLanguage.VisualBasic)
                              .AddSnippet(@"
Partial Class Program1
    Private Shared Sub Main(ParamArray args As String()) ' Noncompliant
        System.Console.WriteLine(args)
    End Sub
End Class
")
                              .AddSnippet(@"
Partial Class Program1
    Private Shared Partial Sub Main(ParamArray args As String()) ' Compliant, we raise only on methods with implementation
    End Sub
End Class
")
                              .GetCompilation();

            DiagnosticVerifier.Verify(
                compilation,
                new VB.UsingCommandLineArguments(AnalyzerConfiguration.AlwaysEnabled),
                CompilationErrorBehavior.Default);
        }
        public void UsingCommandLineArguments_CS_Partial()
        {
            var compilation = SolutionBuilder.Create()
                              .AddProject(AnalyzerLanguage.CSharp)
                              .AddSnippet(@"
partial class Program1
{
    static partial void Main(params string[] args) // Noncompliant
    {
        System.Console.WriteLine(args);
    }
}")
                              .AddSnippet(@"
partial class Program1
{
    static partial void Main(params string[] args); // Compliant, we raise only on methods with implementation
}")
                              .GetCompilation();

            DiagnosticVerifier.Verify(
                compilation,
                new CS.UsingCommandLineArguments(AnalyzerConfiguration.AlwaysEnabled),
                CompilationErrorBehavior.Default);
        }