Exemplo n.º 1
0
        public void AdditionalFileService_ParseXmlFile_ValidXml_Parsed()
        {
            var additionalFile = new TestAdditionalDocument(
                ExampleXmlFileName,
                ValidXml);

            var additionalFileService = new AdditionalFileService(ImmutableArray.Create <AdditionalText>(additionalFile), FileParseRule);

            var parsedFile = additionalFileService.ParseXmlFile(additionalFile);

            Assert.Empty(additionalFileService.ParsingDiagnostics);
            Assert.Equal(3, parsedFile.Elements("Entry").Count());
        }
Exemplo n.º 2
0
        public void AdditionalFileService_ParseXmlFile_InvalidXml_ParsingDiagnostic()
        {
            const string ExpectedExceptionMessage =
                "The 'Entry' start tag on line 1 position 8 does not match the end tag of 'Root'. Line 1, position 17.";

            var additionalFile        = new TestAdditionalDocument(ExampleXmlFileName, InvalidXml);
            var additionalFileService = new AdditionalFileService(ImmutableArray.Create <AdditionalText>(additionalFile), FileParseRule);

            additionalFileService.ParseXmlFile(additionalFile);

            Assert.Equal(1, additionalFileService.ParsingDiagnostics.Count);
            Assert.Equal(FileParseRuleId, additionalFileService.ParsingDiagnostics[0].Id);
            Assert.Equal(ExpectedExceptionMessage, additionalFileService.ParsingDiagnostics[0].GetMessage());
        }
Exemplo n.º 3
0
        public void AdditionalFileService_GetFilesMatchingPattern_MatchesFound()
        {
            var additionalFiles = ImmutableArray.Create <AdditionalText>(
                new TestAdditionalDocument("a1.txt", string.Empty),
                new TestAdditionalDocument("aa.xml", string.Empty),
                new TestAdditionalDocument("a2.txt", string.Empty));

            var additionalFileService = new AdditionalFileService(additionalFiles, FileParseRule);
            var matchingFiles         = additionalFileService.GetFilesMatchingPattern(@"a\d.txt").Select(x => x.Path).ToList();

            Assert.Equal(2, matchingFiles.Count);
            Assert.Contains("a1.txt", matchingFiles);
            Assert.Contains("a2.txt", matchingFiles);
        }
Exemplo n.º 4
0
        public void AdditionalFileService_ParseXmlFile_MultipleFilesWithInvalidXml_ParsingDiagnostics()
        {
            var additionalFiles = ImmutableArray.Create <AdditionalText>(
                new TestAdditionalDocument("a.xml", InvalidXml),
                new TestAdditionalDocument("b.xml", InvalidXml));

            var additionalFileService = new AdditionalFileService(additionalFiles, FileParseRule);

            foreach (var file in additionalFiles)
            {
                additionalFileService.ParseXmlFile(file);
            }

            Assert.Equal(2, additionalFileService.ParsingDiagnostics.Count);
        }
Exemplo n.º 5
0
        public override void Initialize(AnalysisContext context)
        {
            context.EnableConcurrentExecutionIf(IsRunningInProduction);
            context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None);

            context.RegisterCompilationStartAction(compilationStartContext =>
            {
                var additionalFileService = new AdditionalFileService(compilationStartContext.Options.AdditionalFiles, FileParseRule);
                var analyzer = new StringLiteralAnalyzer(additionalFileService, compilationStartContext.Compilation, compilationStartContext.CancellationToken);
                analyzer.LoadConfigurations("LiteralExemptions");

                compilationStartContext.RegisterSyntaxTreeAction(analyzer.AnalyzeSyntaxTree);
                compilationStartContext.RegisterCompilationEndAction(additionalFileService.ReportAnyParsingDiagnostics);
            });
        }
        public void LoadConfigurations_MultipleFiles_ConfigurationsLoad()
        {
            string[] expectedEntries = { "A", "B" };

            var configurationFiles = ImmutableArray.Create<AdditionalText>(
                new TestAdditionalDocument("first.xml", $"<Data><Entry>{expectedEntries[0]}</Entry></Data>"),
                new TestAdditionalDocument("second.xml", $"<Data><Entry>{expectedEntries[1]}</Entry></Data>"),
                new TestAdditionalDocument("third.txt", "<Data><Entry>C</Entry></Data>"));

            var additionalFileService = new AdditionalFileService(configurationFiles, FileParseRule);
            var testAnalyzer = new TestAnalyzer(additionalFileService, CancellationToken.None);

            testAnalyzer.LoadConfigurations(@".+\.xml");

            Assert.Equal(expectedEntries, testAnalyzer.Entries);
        }
Exemplo n.º 7
0
            public override void Initialize(AnalysisContext context)
            {
                context.RegisterCompilationStartAction(compilationStartContext =>
                {
                    var additionalFileService = new AdditionalFileService(compilationStartContext.Options.AdditionalFiles, FileParseRule);

                    foreach (AdditionalText file in additionalFileService.GetFilesMatchingPattern(ExampleXmlFileName))
                    {
                        additionalFileService.ParseXmlFile(file);
                    }

                    // Register a random SyntaxNodeAction to avoid error RS1013: Start action has no registered non-end actions
                    compilationStartContext.RegisterSyntaxNodeAction(_ => { }, SyntaxKind.ClassDeclaration);
                    compilationStartContext.RegisterCompilationEndAction(additionalFileService.ReportAnyParsingDiagnostics);
                });
            }
        public override void Initialize(AnalysisContext context)
        {
            context.EnableConcurrentExecutionIf(IsRunningInProduction);
            context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None);

            context.RegisterCompilationStartAction(compilationStartContext =>
            {
                var additionalFileService = new AdditionalFileService(compilationStartContext.Options.AdditionalFiles, FileParseRule);
                var analyzer = new BannedMethodsAnalyzer(additionalFileService, compilationStartContext.CancellationToken);
                analyzer.LoadConfigurations("BannedMethods");

                compilationStartContext.RegisterSyntaxNodeAction(
                    analyzer.AnalyzeMethodInvocation,
                    SyntaxKind.InvocationExpression,
                    SyntaxKind.ObjectCreationExpression);

                compilationStartContext.RegisterCompilationEndAction(additionalFileService.ReportAnyParsingDiagnostics);
            });
        }