Beispiel #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());
        }
Beispiel #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());
        }
Beispiel #3
0
        public void LRT001_TypeInExemptedNamespace_NoDiagnostic()
        {
            var test = new TestFile(@"
namespace MyApp
{
    class MyClass
    {
    }
}");

            var exemptionFile = new TestAdditionalDocument(
                ExampleExemptNamespacesFileName,
                "<ExemptNamespaces><Entry>MyApp</Entry></ExemptNamespaces>");

            VerifyDiagnostics(test, new[] { exemptionFile });
        }
Beispiel #4
0
        public void AdditionalFileService_ReportAnyConfigParseDiagnostics_Diagnostic()
        {
            VerifyCSharp(
                string.Empty,
                (tree, compilation) =>
            {
                var additionalFile           = new TestAdditionalDocument(ExampleXmlFileName, InvalidXml);
                var compilationWithAnalyzers = compilation.WithAnalyzers(
                    ImmutableArray.Create <DiagnosticAnalyzer>(new TestAnalyzer()),
                    new AnalyzerOptions(ImmutableArray.Create <AdditionalText>(additionalFile)));

                var context = new JoinableTaskContext();
                ImmutableArray <Diagnostic> diagnostics = new JoinableTaskFactory(context).Run(async() =>
                                                                                               await compilationWithAnalyzers.GetAnalyzerDiagnosticsAsync());

                Assert.Single(diagnostics);
                Assert.Equal(FileParseRuleId, diagnostics[0].Id);
            });
        }
            public TestAdditionalDocument[] GetApprovedNamespaces()
            {
                if (_approvedNamespacesDocument == null)
                {
                    _approvedNamespacesDocument = GetApprovedNamespacesFromString(ApprovedNamespacesFilePath, ApprovedNamespaces);
                }

                if (_approvedTestNamespacesDocument == null)
                {
                    _approvedTestNamespacesDocument = GetApprovedNamespacesFromString(ApprovedTestNamespacesFilePath, ApprovedTestNamespaces);
                }

                return(new[] { _approvedNamespacesDocument, _approvedTestNamespacesDocument });

                TestAdditionalDocument GetApprovedNamespacesFromString(string filePath, string namespaces)
                {
                    File.WriteAllText(filePath, namespaces);
                    return(new TestApprovedNamespaceDocument(filePath, Path.GetFileName(filePath), namespaces));
                }
            }
        public void MalformedXmlDictionary_Verify_EmitsDiagnostic()
        {
            var contents   = @"<?xml version=""1.0"" encoding=""utf-8""?>
<Dictionary>
    <Words>
        <Recognized>
            <Word>okay</Word>
            <word>bad</Word> <!-- xml tags are case-sensitive -->
        </Recognized>
    </Words>
</Dictionary>";
            var dictionary = new TestAdditionalDocument("CodeAnalysisDictionary.xml", contents);

            VerifyDiagnostics(
                new TestFile("class Program { }"),
                dictionary,
                GetFileParseResult(
                    "CodeAnalysisDictionary.xml",
                    "The 'word' start tag on line 6 position 14 does not match the end tag of 'Word'. Line 6, position 24."));
        }
        public void NI1006_BannedMethodsFileHasXmlWithWrongRootElement_Diagnostic()
        {
            var test = new TestFile(@"
class Program
{
    static void Main(string[] args)
    {
    }
}");

            var invalidBannedMethodsFile = new TestAdditionalDocument(
                ExampleBannedMethodsFileName,
                @"<WrongRootTag><Entry>System.Console</Entry></WrongRootTag>");

            VerifyDiagnostics(
                test,
                new[] { invalidBannedMethodsFile },
                expectedDiagnostics: GetNI1006XmlErrorResult(
                    ExampleBannedMethodsFileName,
                    "BannedMethods.xml must have a root element of <BannedMethods>"));
        }
        public void NI1006_BannedMethodsFileHasXmlWithWrongChildElement_Diagnostic()
        {
            var test = new TestFile(@"
class Program
{
    static void Main(string[] args)
    {
    }
}");

            var invalidBannedMethodsFile = new TestAdditionalDocument(
                ExampleBannedMethodsFileName,
                @"<BannedMethods><Entry>System.Console</Entry><WrongElement>System.Diagnostics</WrongElement></BannedMethods>");

            VerifyDiagnostics(
                test,
                new[] { invalidBannedMethodsFile },
                expectedDiagnostics: GetNI1006XmlErrorResult(
                    ExampleBannedMethodsFileName,
                    "Unsupported element in BannedMethods.xml: WrongElement"));
        }
Beispiel #9
0
        public void LRT001_ExemptNamespacesFileHasInvalidXml_Diagnostic()
        {
            var test = new TestFile(@"
namespace MyApp
{
    class MyClass
    {
    }
}");

            var invalidExemptionFile = new TestAdditionalDocument(
                ExampleExemptNamespacesFileName,
                "<ExemptNamespaces><Entry>MyApp<Entry><ExemptNamespaces>");

            VerifyDiagnostics(
                test,
                new[] { invalidExemptionFile },
                GetLRT001FileParseErrorResultAt(
                    ExampleExemptNamespacesFileName,
                    "Unexpected end of file has occurred. The following elements are not closed: ExemptNamespaces, Entry, Entry, ExemptNamespaces. Line 1, position 56."),
                GetLRT001ResultAt(4, 5, "MyClass"));
        }
        public void NI1006_BannedMethodsFileHasInvalidXml_Diagnostic()
        {
            var test = new TestFile(@"
class Program
{
    static void Main(string[] args)
    {
    }
}");

            var invalidBannedMethodsFileSource = @"
<BannedMethods>
    <Entry>System.Console</Entry>";
            var invalidBannedMethodsFile       = new TestAdditionalDocument(ExampleBannedMethodsFileName, invalidBannedMethodsFileSource);

            VerifyDiagnostics(
                test,
                new[] { invalidBannedMethodsFile },
                expectedDiagnostics: GetNI1006XmlErrorResult(
                    ExampleBannedMethodsFileName,
                    "Unexpected end of file has occurred. The following elements are not closed: BannedMethods. Line 3, position 34."));
        }
Beispiel #11
0
        public void LRT001_TypeNearExemptedNamespace_Diagnostic()
        {
            var test = new TestFile(@"
namespace Foo
{
    namespace Bar
    {
        class BarsClass
        {
        }    
    }
    
    class FoosClass
    {
    }
}");

            var exemptionFile = new TestAdditionalDocument(
                ExampleExemptNamespacesFileName,
                "<ExemptNamespaces><Entry>Foo.Bar</Entry></ExemptNamespaces>");

            VerifyDiagnostics(test, additionalFiles: new[] { exemptionFile }, expectedDiagnostics: GetLRT001ResultAt(11, 5, "FoosClass"));
        }