Converts FxCop report files to sarif format
FxCop project files are not supported due to loss of source location information
Inheritance: ToolFileConverterBase
        public void FxCopConverter_CreateResult_FakeContext_Resource()
        {
            var context = TestHelper.CreateProjectContext();

            context.RefineTarget(@"mybinary.dll");
            context.RefineModule("mybinary.dll");
            context.RefineResource("myresource.resx");
            context.RefineMessage("CA0000", "VeryUsefulCheck", null, null, null, null);
            context.RefineIssue("hello!", "test", null, null, @"source", "myfile.cs", 13);

            var expectedLogicalLocations = new List <LogicalLocation>
            {
                new LogicalLocation {
                    Kind = LogicalLocationKind.Module, Name = "mybinary.dll"
                },
                new LogicalLocation {
                    ParentIndex = 0, Name = "myresource.resx", FullyQualifiedName = "mybinary.dll!myresource.resx", Kind = LogicalLocationKind.Resource
                }
            };

            var    converter = new FxCopConverter();
            Result result    = converter.CreateResult(context);

            ValidateLogicalLocations(expectedLogicalLocations, converter.LogicalLocations);
        }
        public void FxCopConverter_CreateResult_FakeContext_Resource()
        {
            var context = TestHelper.CreateProjectContext();

            context.RefineTarget(@"mybinary.dll");
            context.RefineModule("mybinary.dll");
            context.RefineResource("myresource.resx");
            context.RefineMessage("CA0000", "VeryUsefulCheck", null, null, null, null);
            context.RefineIssue("hello!", "test", null, null, @"source", "myfile.cs", 13);

            var expectedLogicalLocations = new Dictionary <string, LogicalLocation>
            {
                {
                    "mybinary.dll",
                    new LogicalLocation {
                        ParentKey = null, Kind = LogicalLocationKind.Module
                    }
                },
                {
                    "mybinary.dll!myresource.resx",
                    new LogicalLocation {
                        ParentKey = "mybinary.dll", Name = "myresource.resx", Kind = LogicalLocationKind.Resource
                    }
                },
            };

            var    converter = new FxCopConverter();
            Result result    = converter.CreateResult(context);

            foreach (string key in expectedLogicalLocations.Keys)
            {
                expectedLogicalLocations[key].ValueEquals(converter.LogicalLocationsDictionary[key]).Should().BeTrue();
            }
            converter.LogicalLocationsDictionary.Count.Should().Be(expectedLogicalLocations.Count);
        }
        public void FxCopConverter_CreateResult_FakeContext_NoModule_Member()
        {
            var context = TestHelper.CreateProjectContext();

            context.RefineTarget(@"mybinary.dll");
            context.RefineNamespace("mynamespace");
            context.RefineType("mytype");
            context.RefineMember("mymember(string)");
            context.RefineMessage("CA0000", "VeryUsefulCheck", null, null, null, null);
            context.RefineIssue("hello!", null, null, null, null, null, null);

            var expectedLogicalLocations = new List <LogicalLocation>
            {
                new LogicalLocation {
                    ParentIndex = -1, Name = "mynamespace", Kind = LogicalLocationKind.Namespace
                },
                new LogicalLocation {
                    ParentIndex = 0, Name = "mytype", FullyQualifiedName = "mynamespace.mytype", Kind = LogicalLocationKind.Type
                },
                new LogicalLocation {
                    ParentIndex = 1, Name = "mymember(string)", FullyQualifiedName = "mynamespace.mytype.mymember(string)", Kind = LogicalLocationKind.Member
                }
            };

            var    converter = new FxCopConverter();
            Result result    = converter.CreateResult(context);

            ValidateLogicalLocations(expectedLogicalLocations, converter.LogicalLocations);
        }
Exemple #4
0
        public void FxCopConverter_CreateIssue_FakeContext_NoModule_Member()
        {
            var context = TestHelper.CreateProjectContext();

            context.RefineTarget(@"mybinary.dll");
            context.RefineNamespace("mynamespace");
            context.RefineType("mytype");
            context.RefineMember("mymember(string)");
            context.RefineMessage("CA0000", "VeryUsefulCheck", null, null, null, null);
            context.RefineIssue("hello!", null, null, null, null, null, null);

            var expectedLogicalLocation = "mynamespace.mytype.mymember(string)";

            var expectedLocations = new[]
            {
                new Location
                {
                    AnalysisTarget = new PhysicalLocation
                    {
                        Uri = new Uri("mybinary.dll", UriKind.RelativeOrAbsolute),
                    },

                    FullyQualifiedLogicalName = expectedLogicalLocation
                }
            };

            var expectedLogicalLocations = new Dictionary <string, LogicalLocation>
            {
                {
                    "mynamespace",
                    new LogicalLocation {
                        ParentKey = null, Name = "mynamespace", Kind = LogicalLocationKind.Namespace
                    }
                },
                {
                    "mynamespace.mytype",
                    new LogicalLocation {
                        ParentKey = "mynamespace", Name = "mytype", Kind = LogicalLocationKind.Type
                    }
                },
                {
                    "mynamespace.mytype.mymember(string)",
                    new LogicalLocation {
                        ParentKey = "mynamespace.mytype", Name = "mymember(string)", Kind = LogicalLocationKind.Member
                    }
                }
            };

            var    converter = new FxCopConverter();
            Result result    = converter.CreateResult(context);

            foreach (string key in expectedLogicalLocations.Keys)
            {
                expectedLogicalLocations[key].ValueEquals(converter.LogicalLocationsDictionary[key]).Should().BeTrue();
            }
            converter.LogicalLocationsDictionary.Count.Should().Be(expectedLogicalLocations.Count);
        }
Exemple #5
0
        public void FxCopConverter_CreateResult_FakeContext_Resource()
        {
            var context = TestHelper.CreateProjectContext();

            context.RefineTarget(@"mybinary.dll");
            context.RefineModule("mybinary.dll");
            context.RefineResource("myresource.resx");
            context.RefineMessage("CA0000", "VeryUsefulCheck", null, null, null, null);
            context.RefineIssue("hello!", "test", null, null, @"source", "myfile.cs", 13);

            var expectedLogicalLocation = "myresource.resx";

            var expectedLocations = new[]
            {
                new Location
                {
                    AnalysisTarget = new PhysicalLocation
                    {
                        Uri = new Uri("mybinary.dll", UriKind.RelativeOrAbsolute),
                    },
                    ResultFile = new PhysicalLocation
                    {
                        Uri    = new Uri("source\\myfile.cs", UriKind.RelativeOrAbsolute),
                        Region = new Region {
                            StartLine = 13
                        }
                    },
                    FullyQualifiedLogicalName = expectedLogicalLocation,
                }
            };

            var expectedLogicalLocations = new Dictionary <string, LogicalLocation>
            {
                {
                    "mybinary.dll",
                    new LogicalLocation {
                        ParentKey = null, Name = "mybinary.dll", Kind = LogicalLocationKind.Module
                    }
                },
                {
                    "mybinary.dll!myresource.resx",
                    new LogicalLocation {
                        ParentKey = "mybinary.dll", Name = "myresource.resx", Kind = LogicalLocationKind.Resource
                    }
                },
            };

            var    converter = new FxCopConverter();
            Result result    = converter.CreateResult(context);

            foreach (string key in expectedLogicalLocations.Keys)
            {
                expectedLogicalLocations[key].ValueEquals(converter.LogicalLocationsDictionary[key]).Should().BeTrue();
            }
            converter.LogicalLocationsDictionary.Count.Should().Be(expectedLogicalLocations.Count);
        }
        public void FxCopConverter_CreateResult_FakeContext_Resource()
        {
            var context = TestHelper.CreateProjectContext();

            context.RefineTarget(@"mybinary.dll");
            context.RefineModule("mybinary.dll");
            context.RefineResource("myresource.resx");
            context.RefineMessage("CA0000", "VeryUsefulCheck", null, null, null);
            context.RefineIssue("hello!", "test", null, null, @"source", "myfile.cs", 13);

            var expectedLogicalLocation = "myresource.resx";

            var expectedLocations = new[]
            {
                new Location
                {
                    AnalysisTarget = new PhysicalLocation
                    {
                        Uri = new Uri("mybinary.dll", UriKind.RelativeOrAbsolute),
                    },
                    ResultFile = new PhysicalLocation
                    {
                        Uri    = new Uri("source\\myfile.cs", UriKind.RelativeOrAbsolute),
                        Region = new Region {
                            StartLine = 13
                        }
                    },
                    FullyQualifiedLogicalName = expectedLogicalLocation,
                }
            };

            var expectedLogicalLocationComponents = new[]
            {
                new LogicalLocationComponent
                {
                    Name = "mybinary.dll",
                    Kind = LogicalLocationKind.Module
                },
                new LogicalLocationComponent
                {
                    Name = "myresource.resx",
                    Kind = LogicalLocationKind.Resource
                }
            };

            var    converter = new FxCopConverter();
            Result result    = converter.CreateResult(context);

            result.Locations.Should().Equal(expectedLocations);

            converter.LogicalLocationsDictionary.Keys.Should().ContainSingle(expectedLogicalLocation);
            var actualLogicalLocationComponents = converter.LogicalLocationsDictionary[expectedLogicalLocation];

            actualLogicalLocationComponents.Should().Equal(expectedLogicalLocationComponents);
        }
        public void FxCopConverter_CreateIssue_FakeContext_NoModule_Member()
        {
            var context = TestHelper.CreateProjectContext();

            context.RefineTarget(@"mybinary.dll");
            context.RefineNamespace("mynamespace");
            context.RefineType("mytype");
            context.RefineMember("mymember(string)");
            context.RefineMessage("CA0000", "VeryUsefulCheck", null, null, null);
            context.RefineIssue("hello!", null, null, null, null, null, null);

            var expectedLogicalLocation = "mynamespace.mytype.mymember(string)";

            var expectedLocations = new[]
            {
                new Location
                {
                    AnalysisTarget = new PhysicalLocation
                    {
                        Uri = new Uri("mybinary.dll", UriKind.RelativeOrAbsolute),
                    },

                    FullyQualifiedLogicalName = expectedLogicalLocation
                }
            };

            var expectedLogicalLocationComponents = new[]
            {
                new LogicalLocationComponent
                {
                    Name = "mynamespace",
                    Kind = LogicalLocationKind.Namespace
                },
                new LogicalLocationComponent
                {
                    Name = "mytype",
                    Kind = LogicalLocationKind.Type
                },
                new LogicalLocationComponent
                {
                    Name = "mymember(string)",
                    Kind = LogicalLocationKind.Member
                }
            };

            var    converter = new FxCopConverter();
            Result result    = converter.CreateResult(context);

            result.Locations.Should().Equal(expectedLocations);

            converter.LogicalLocationsDictionary.Keys.Should().ContainSingle(expectedLogicalLocation);
            var actualLogicalLocationComponents = converter.LogicalLocationsDictionary[expectedLogicalLocation];

            actualLogicalLocationComponents.Should().Equal(expectedLogicalLocationComponents);
        }
        public void FxCopConverter_CreateIssue_FakeContext_NoModule_Resource()
        {
            var context = TestHelper.CreateProjectContext();

            context.RefineTarget(@"mybinary.dll");
            context.RefineResource("myresource.resx");
            context.RefineMessage("CA0000", "VeryUsefulCheck", null, null, null);
            context.RefineIssue("hello!", "test", null, null, null, null, null);

            Assert.AreEqual(@"myresource.resx", FxCopConverter.CreateIssue(context).Locations[0].FullyQualifiedLogicalName);
        }
        public void FxCopConverter_CreateIssue_FakeContext_Resource()
        {
            var context = TestHelper.CreateProjectContext();

            context.RefineTarget(@"mybinary.dll");
            context.RefineModule("mybinary.dll");
            context.RefineResource("myresource.resx");
            context.RefineMessage("CA0000", "VeryUsefulCheck", null, null, null);
            context.RefineIssue("hello!", "test", null, null, @"source", "myfile.cs", 13);

            FxCopConverter.CreateIssue(context).Locations.Should().Equal(new[]
            {
                new Location
                {
                    AnalysisTarget = new[]
                    {
                        new PhysicalLocationComponent
                        {
                            Uri      = new Uri("mybinary.dll", UriKind.RelativeOrAbsolute),
                            MimeType = MimeType.Binary
                        }
                    },
                    ResultFile = new[]
                    {
                        new PhysicalLocationComponent
                        {
                            Uri      = new Uri("source\\myfile.cs", UriKind.RelativeOrAbsolute),
                            MimeType = MimeType.CSharp,
                            Region   = new Region {
                                StartLine = 13
                            }
                        }
                    },
                    FullyQualifiedLogicalName = "myresource.resx",
                    LogicalLocation           = new[]
                    {
                        new LogicalLocationComponent
                        {
                            Name = "mybinary.dll",
                            Kind = LogicalLocationKind.ClrModule
                        },
                        new LogicalLocationComponent
                        {
                            Name = "myresource.resx",
                            Kind = LogicalLocationKind.ClrResource
                        }
                    }
                }
            });
        }
        public void FxCopConverter_CreateResult_FakeContext_NoModule_Resource()
        {
            var context = TestHelper.CreateProjectContext();

            context.RefineTarget(@"mybinary.dll");
            context.RefineResource("myresource.resx");
            context.RefineMessage("CA0000", "VeryUsefulCheck", null, null, null, null);
            context.RefineIssue("hello!", "test", null, null, null, null, null);

            var    converter = new FxCopConverter();
            Result result    = converter.CreateResult(context);

            result.Locations.First().LogicalLocation.FullyQualifiedName.Should().Be(@"myresource.resx");
        }
        public void FxCopConverter_CreateIssue_FakeContext_NoModule_Member()
        {
            var context = TestHelper.CreateProjectContext();

            context.RefineTarget(@"mybinary.dll");
            context.RefineNamespace("mynamespace");
            context.RefineType("mytype");
            context.RefineMember("mymember(string)");
            context.RefineMessage("CA0000", "VeryUsefulCheck", null, null, null);
            context.RefineIssue("hello!", null, null, null, null, null, null);

            FxCopConverter.CreateIssue(context).Locations.Should().Equal(
                new[] {
                new Location
                {
                    AnalysisTarget = new[]
                    {
                        new PhysicalLocationComponent
                        {
                            Uri      = new Uri("mybinary.dll", UriKind.RelativeOrAbsolute),
                            MimeType = MimeType.Binary
                        }
                    },
                    FullyQualifiedLogicalName = "mynamespace.mytype.mymember(string)",
                    LogicalLocation           = new[]
                    {
                        new LogicalLocationComponent
                        {
                            Name = "mynamespace",
                            Kind = LogicalLocationKind.ClrNamespace
                        },
                        new LogicalLocationComponent
                        {
                            Name = "mytype",
                            Kind = LogicalLocationKind.ClrType
                        },
                        new LogicalLocationComponent
                        {
                            Name = "mymember(string)",
                            Kind = LogicalLocationKind.ClrFunction
                        }
                    }
                }
            });
        }
        public void FxCopConverter_Convert_NullOutput()
        {
            var converter = new FxCopConverter();

            Assert.Throws <ArgumentNullException>(() => converter.Convert(new MemoryStream(), null, OptionallyEmittedData.None));
        }
        public void FxCopConverter_Convert_InvalidInput()
        {
            var converter = new FxCopConverter();

            Assert.Throws <XmlException>(() => Utilities.GetConverterJson(converter, FxCopTestData.FxCopReportInvalid));
        }
 public void FxCopConverter_Convert_NullOutput()
 {
     var converter = new FxCopConverter();
     converter.Convert(new MemoryStream(), null);
 }
        public void FxCopConverter_CreateIssue_FakeContext_NoModule_Member()
        {
            var context = TestHelper.CreateProjectContext();

            context.RefineTarget(@"mybinary.dll");
            context.RefineNamespace("mynamespace");
            context.RefineType("mytype");
            context.RefineMember("mymember(string)");
            context.RefineMessage("CA0000", "VeryUsefulCheck", null, null, null, null);
            context.RefineIssue("hello!", null, null, null, null, null, null);

            var expectedLogicalLocation = "mynamespace.mytype.mymember(string)";

            var expectedLocations = new[]
            {
                new Location
                {
                    AnalysisTarget = new PhysicalLocation
                    {
                        Uri = new Uri("mybinary.dll", UriKind.RelativeOrAbsolute),
                    },

                    FullyQualifiedLogicalName = expectedLogicalLocation
                }
            };

            var expectedLogicalLocations = new Dictionary<string, LogicalLocation>
            {
                {
                    "mynamespace",
                    new LogicalLocation { ParentKey = null, Name = "mynamespace", Kind = LogicalLocationKind.Namespace }
                },
                {
                    "mynamespace.mytype",
                    new LogicalLocation { ParentKey = "mynamespace", Name = "mytype", Kind = LogicalLocationKind.Type }
                },
                {
                    "mynamespace.mytype.mymember(string)",
                    new LogicalLocation { ParentKey = "mynamespace.mytype", Name = "mymember(string)", Kind = LogicalLocationKind.Member }
                }
            };

            var converter = new FxCopConverter();
            Result result = converter.CreateResult(context);

            foreach (string key in expectedLogicalLocations.Keys)
            {
                expectedLogicalLocations[key].ValueEquals(converter.LogicalLocationsDictionary[key]).Should().BeTrue();
            }
            converter.LogicalLocationsDictionary.Count.Should().Be(expectedLogicalLocations.Count);
        }
 public void FxCopConverter_Convert_InvalidInput()
 {
     var converter = new FxCopConverter();
     Utilities.GetConverterJson(converter, FxCopTestData.FxCopReportInvalid);
 }
 public void FxCopConverter_Convert_NullInput()
 {
     var converter = new FxCopConverter();
     converter.Convert(null, null);
 }
        public void FxCopConverter_CreateResult_FakeContext_NoModule_Resource()
        {
            var context = TestHelper.CreateProjectContext();

            context.RefineTarget(@"mybinary.dll");
            context.RefineResource("myresource.resx");
            context.RefineMessage("CA0000", "VeryUsefulCheck", null, null, null, null);
            context.RefineIssue("hello!", "test", null, null, null, null, null);

            var converter = new FxCopConverter();
            Result result = converter.CreateResult(context);

            result.Locations.First().FullyQualifiedLogicalName.Should().Be(@"myresource.resx");
        }
        public void FxCopConverter_CreateResult_FakeContext_Member()
        {
            var context = TestHelper.CreateProjectContext();

            context.RefineTarget(@"mybinary.dll");
            context.RefineModule("mybinary.dll");
            context.RefineNamespace("mynamespace");
            context.RefineType("mytype");
            context.RefineMember("mymember(string)");
            context.RefineMessage("CA0000", "VeryUsefulCheck", "1", "FakeCategory", "Breaking");
            context.RefineIssue("hello!", "test", "uncertain", "error", @"source", "myfile.cs", 13);

            string expectedLogicalLocation = "mynamespace.mytype.mymember(string)";

            var expectedResult = new Result
            {
                RuleId          = "CA0000",
                Message         = "hello!",
                ToolFingerprint = "1#test",
                Locations       = new HashSet <Location>
                {
                    new Location
                    {
                        AnalysisTarget = new PhysicalLocation
                        {
                            Uri = new Uri("mybinary.dll", UriKind.RelativeOrAbsolute),
                        },
                        ResultFile = new PhysicalLocation
                        {
                            Uri    = new Uri("source\\myfile.cs", UriKind.RelativeOrAbsolute),
                            Region = new Region {
                                StartLine = 13
                            }
                        },
                        FullyQualifiedLogicalName = expectedLogicalLocation,
                    }
                },
                Properties = new Dictionary <string, string>
                {
                    { "Level", "error" },
                    { "Category", "FakeCategory" },
                    { "FixCategory", "Breaking" }
                }
            };

            var expectedLogicalLocationComponents = new[]
            {
                new LogicalLocationComponent
                {
                    Name = "mybinary.dll",
                    Kind = LogicalLocationKind.Module
                },
                new LogicalLocationComponent
                {
                    Name = "mynamespace",
                    Kind = LogicalLocationKind.Namespace
                },
                new LogicalLocationComponent
                {
                    Name = "mytype",
                    Kind = LogicalLocationKind.Type
                },
                new LogicalLocationComponent
                {
                    Name = "mymember(string)",
                    Kind = LogicalLocationKind.Member
                }
            };

            var    converter = new FxCopConverter();
            Result result    = converter.CreateResult(context);

            result.Should().Be(expectedResult);

            converter.LogicalLocationsDictionary.Keys.Should().ContainSingle(expectedLogicalLocation);
            var actualLogicalLocationComponents = converter.LogicalLocationsDictionary[expectedLogicalLocation];

            actualLogicalLocationComponents.Should().Equal(expectedLogicalLocationComponents);
        }
Exemple #20
0
        public void FxCopConverter_Convert_NullOutput()
        {
            var converter = new FxCopConverter();

            converter.Convert(new MemoryStream(), null, LoggingOptions.None);
        }
        public void FxCopConverter_Convert_NullInput()
        {
            var converter = new FxCopConverter();

            converter.Convert(null, null);
        }
Exemple #22
0
        public void FxCopConverter_Convert_NullInput()
        {
            var converter = new FxCopConverter();

            converter.Convert(null, null, LoggingOptions.None);
        }
        public void FxCopConverter_CreateIssue_FakeContext_Member()
        {
            var context = TestHelper.CreateProjectContext();

            context.RefineTarget(@"mybinary.dll");
            context.RefineModule("mybinary.dll");
            context.RefineNamespace("mynamespace");
            context.RefineType("mytype");
            context.RefineMember("mymember(string)");
            context.RefineMessage("CA0000", "VeryUsefulCheck", "1", "FakeCategory", "Breaking");
            context.RefineIssue("hello!", "test", "uncertain", "error", @"source", "myfile.cs", 13);

            Assert.AreEqual(new Result
            {
                RuleId          = "CA0000",
                ShortMessage    = "VeryUsefulCheck",
                FullMessage     = "hello!",
                ToolFingerprint = "1#test",
                Locations       = new[]
                {
                    new Location
                    {
                        AnalysisTarget = new[]
                        {
                            new PhysicalLocationComponent
                            {
                                Uri      = new Uri("mybinary.dll", UriKind.RelativeOrAbsolute),
                                MimeType = MimeType.Binary
                            }
                        },
                        ResultFile = new[]
                        {
                            new PhysicalLocationComponent
                            {
                                Uri      = new Uri("source\\myfile.cs", UriKind.RelativeOrAbsolute),
                                MimeType = MimeType.CSharp,
                                Region   = new Region {
                                    StartLine = 13
                                }
                            }
                        },
                        FullyQualifiedLogicalName = "mynamespace.mytype.mymember(string)",
                        LogicalLocation           = new[]
                        {
                            new LogicalLocationComponent
                            {
                                Name = "mybinary.dll",
                                Kind = LogicalLocationKind.ClrModule
                            },
                            new LogicalLocationComponent
                            {
                                Name = "mynamespace",
                                Kind = LogicalLocationKind.ClrNamespace
                            },
                            new LogicalLocationComponent
                            {
                                Name = "mytype",
                                Kind = LogicalLocationKind.ClrType
                            },
                            new LogicalLocationComponent
                            {
                                Name = "mymember(string)",
                                Kind = LogicalLocationKind.ClrFunction
                            }
                        }
                    }
                },
                Properties = new Dictionary <string, string>
                {
                    { "Level", "error" },
                    { "Category", "FakeCategory" },
                    { "FixCategory", "Breaking" }
                }
            }, FxCopConverter.CreateIssue(context));
        }
        public void FxCopConverter_Convert_NullOutput()
        {
            var converter = new FxCopConverter();

            converter.Convert(new MemoryStream(), null);
        }
        public void FxCopConverter_CreateResult_FakeContext_Member()
        {
            var context = TestHelper.CreateProjectContext();

            context.RefineTarget(@"mybinary.dll");
            context.RefineModule("mybinary.dll");
            context.RefineNamespace("mynamespace");
            context.RefineType("mytype");
            context.RefineMember("mymember(string)");
            context.RefineMessage("CA0000", "VeryUsefulCheck", "1", "FakeCategory", "Breaking", "ExcludedInSource");
            context.RefineIssue(null, "test", "uncertain", "error", @"source", "myfile.cs", 13);
            context.RefineItem("hello!");

            string expectedLogicalLocation = "mynamespace.mytype.mymember(string)";

            var expectedResult = new Result
            {
                RuleId  = "CA0000",
                Message = new Message {
                    Arguments = new List <string>(new string[] { "hello!" })
                },
                Suppressions = new List <Suppression> {
                    new Suppression {
                        Kind = SuppressionKind.InSource
                    }
                },
                PartialFingerprints = new Dictionary <string, string>(),
                AnalysisTarget      = new ArtifactLocation
                {
                    Uri = new Uri("mybinary.dll", UriKind.RelativeOrAbsolute),
                },
                Locations = new List <Location>
                {
                    new Location
                    {
                        PhysicalLocation = new PhysicalLocation
                        {
                            ArtifactLocation = new ArtifactLocation
                            {
                                Uri = new Uri("source\\myfile.cs", UriKind.RelativeOrAbsolute)
                            },
                            Region = new Region {
                                StartLine = 13
                            }
                        },
                        LogicalLocation = new LogicalLocation
                        {
                            FullyQualifiedName = expectedLogicalLocation,
                            Index = 3
                        }
                    }
                }
            };

            expectedResult.PartialFingerprints.Add("UniqueId", "1#test");
            expectedResult.SetProperty("Level", "error");
            expectedResult.SetProperty("Category", "FakeCategory");
            expectedResult.SetProperty("FixCategory", "Breaking");

            var expectedLogicalLocations = new List <LogicalLocation>
            {
                new LogicalLocation {
                    ParentIndex = -1, Name = "mybinary.dll", Kind = LogicalLocationKind.Module
                },
                new LogicalLocation {
                    ParentIndex = 0, Name = "mynamespace", FullyQualifiedName = "mybinary.dll!mynamespace", Kind = LogicalLocationKind.Namespace
                },
                new LogicalLocation {
                    ParentIndex = 1, Name = "mytype", FullyQualifiedName = "mybinary.dll!mynamespace.mytype", Kind = LogicalLocationKind.Type
                },
                new LogicalLocation {
                    ParentIndex = 2, Name = "mymember(string)", FullyQualifiedName = "mybinary.dll!mynamespace.mytype.mymember(string)", Kind = LogicalLocationKind.Member
                }
            };
            var    converter = new FxCopConverter();
            Result result    = converter.CreateResult(context);

            ValidateLogicalLocations(expectedLogicalLocations, converter.LogicalLocations);
        }
        public void FxCopConverter_CreateResult_FakeContext_Resource()
        {
            var context = TestHelper.CreateProjectContext();

            context.RefineTarget(@"mybinary.dll");
            context.RefineModule("mybinary.dll");
            context.RefineResource("myresource.resx");
            context.RefineMessage("CA0000", "VeryUsefulCheck", null, null, null, null);
            context.RefineIssue("hello!", "test", null, null, @"source", "myfile.cs", 13);

            var expectedLogicalLocation = "myresource.resx";

            var expectedLocations = new[]
            {
                new Location
                {
                    AnalysisTarget = new PhysicalLocation
                    {
                        Uri = new Uri("mybinary.dll", UriKind.RelativeOrAbsolute),
                    },
                    ResultFile = new PhysicalLocation
                    {
                            Uri = new Uri("source\\myfile.cs", UriKind.RelativeOrAbsolute),
                            Region = new Region { StartLine = 13 }
                    },
                    FullyQualifiedLogicalName = expectedLogicalLocation,
                }
            };

            var expectedLogicalLocations = new Dictionary<string, LogicalLocation>
            {
                {
                    "mybinary.dll",
                    new LogicalLocation { ParentKey = null, Name = "mybinary.dll", Kind = LogicalLocationKind.Module }
                },
                {
                    "mybinary.dll!myresource.resx",
                    new LogicalLocation { ParentKey = "mybinary.dll", Name = "myresource.resx",Kind = LogicalLocationKind.Resource }
                },
            };

            var converter = new FxCopConverter();
            Result result = converter.CreateResult(context);

            foreach (string key in expectedLogicalLocations.Keys)
            {
                expectedLogicalLocations[key].ValueEquals(converter.LogicalLocationsDictionary[key]).Should().BeTrue();
            }
            converter.LogicalLocationsDictionary.Count.Should().Be(expectedLogicalLocations.Count);
        }
        public void FxCopConverter_CreateResult_FakeContext_Member()
        {
            var context = TestHelper.CreateProjectContext();

            context.RefineTarget(@"mybinary.dll");
            context.RefineModule("mybinary.dll");
            context.RefineNamespace("mynamespace");
            context.RefineType("mytype");
            context.RefineMember("mymember(string)");
            context.RefineMessage("CA0000", "VeryUsefulCheck", "1", "FakeCategory", "Breaking", "ExcludedInSource");
            context.RefineIssue("hello!", "test", "uncertain", "error", @"source", "myfile.cs", 13);

            string expectedLogicalLocation = "mynamespace.mytype.mymember(string)";

            var expectedResult = new Result
            {
                RuleId = "CA0000",
                Message = "hello!",
                ToolFingerprintContribution = "1#test",
                SuppressionStates = SuppressionStates.SuppressedInSource,
                Locations = new List<Location>
                {
                    new Location
                    {
                        AnalysisTarget = new PhysicalLocation
                        {
                            Uri = new Uri("mybinary.dll", UriKind.RelativeOrAbsolute),
                        },
                        ResultFile = new PhysicalLocation
                        {
                            Uri = new Uri("source\\myfile.cs", UriKind.RelativeOrAbsolute),
                            Region = new Region { StartLine = 13 }
                        },
                        FullyQualifiedLogicalName = expectedLogicalLocation,
                    }
                }
            };

            expectedResult.SetProperty("Level", "error");
            expectedResult.SetProperty("Category", "FakeCategory");
            expectedResult.SetProperty("FixCategory", "Breaking");

            var expectedLogicalLocations = new Dictionary<string, LogicalLocation>
            {
                {
                    "mybinary.dll", new LogicalLocation { ParentKey = null, Name = "mybinary.dll", Kind = LogicalLocationKind.Module }
                },
                {
                    "mybinary.dll!mynamespace",
                    new LogicalLocation { ParentKey = "mybinary.dll", Name = "mynamespace", Kind = LogicalLocationKind.Namespace }
                },
                {
                    "mybinary.dll!mynamespace.mytype",
                    new LogicalLocation { ParentKey = "mybinary.dll!mynamespace", Name = "mytype", Kind = LogicalLocationKind.Type }
                },
                {
                    "mybinary.dll!mynamespace.mytype.mymember(string)",
                    new LogicalLocation { ParentKey = "mybinary.dll!mynamespace.mytype", Name = "mymember(string)", Kind = LogicalLocationKind.Member }
                }            };

            var converter = new FxCopConverter();
            Result result = converter.CreateResult(context);

            foreach (string key in expectedLogicalLocations.Keys)
            {
                expectedLogicalLocations[key].ValueEquals(converter.LogicalLocationsDictionary[key]).Should().BeTrue();
            }
            converter.LogicalLocationsDictionary.Count.Should().Be(expectedLogicalLocations.Count);
        }
        public void FxCopConverter_Convert_InvalidInput()
        {
            var converter = new FxCopConverter();

            Utilities.GetConverterJson(converter, FxCopTestData.FxCopReportInvalid);
        }
        public void FxCopConverter_CreateResult_FakeContext_Member()
        {
            var context = TestHelper.CreateProjectContext();

            context.RefineTarget(@"mybinary.dll");
            context.RefineModule("mybinary.dll");
            context.RefineNamespace("mynamespace");
            context.RefineType("mytype");
            context.RefineMember("mymember(string)");
            context.RefineMessage("CA0000", "VeryUsefulCheck", "1", "FakeCategory", "Breaking", "ExcludedInSource");
            context.RefineIssue(null, "test", "uncertain", "error", @"source", "myfile.cs", 13);
            context.RefineItem("hello!");

            string expectedLogicalLocation = "mynamespace.mytype.mymember(string)";

            var expectedResult = new Result
            {
                RuleId  = "CA0000",
                Message = new Message {
                    Arguments = new List <string>(new string[] { "hello!" })
                },
                SuppressionStates   = SuppressionStates.SuppressedInSource,
                PartialFingerprints = new Dictionary <string, string>(),
                AnalysisTarget      = new FileLocation
                {
                    Uri = new Uri("mybinary.dll", UriKind.RelativeOrAbsolute),
                },
                Locations = new List <Location>
                {
                    new Location
                    {
                        PhysicalLocation = new PhysicalLocation
                        {
                            FileLocation = new FileLocation
                            {
                                Uri = new Uri("source\\myfile.cs", UriKind.RelativeOrAbsolute)
                            },
                            Region = new Region {
                                StartLine = 13
                            }
                        },
                        FullyQualifiedLogicalName = expectedLogicalLocation,
                    }
                }
            };

            expectedResult.PartialFingerprints.Add("UniqueId", "1#test");
            expectedResult.SetProperty("Level", "error");
            expectedResult.SetProperty("Category", "FakeCategory");
            expectedResult.SetProperty("FixCategory", "Breaking");

            var expectedLogicalLocations = new Dictionary <string, LogicalLocation>
            {
                {
                    "mybinary.dll", new LogicalLocation {
                        ParentKey = null, Kind = LogicalLocationKind.Module
                    }
                },
                {
                    "mybinary.dll!mynamespace",
                    new LogicalLocation {
                        ParentKey = "mybinary.dll", Name = "mynamespace", Kind = LogicalLocationKind.Namespace
                    }
                },
                {
                    "mybinary.dll!mynamespace.mytype",
                    new LogicalLocation {
                        ParentKey = "mybinary.dll!mynamespace", Name = "mytype", Kind = LogicalLocationKind.Type
                    }
                },
                {
                    "mybinary.dll!mynamespace.mytype.mymember(string)",
                    new LogicalLocation {
                        ParentKey = "mybinary.dll!mynamespace.mytype", Name = "mymember(string)", Kind = LogicalLocationKind.Member
                    }
                }
            };

            var    converter = new FxCopConverter();
            Result result    = converter.CreateResult(context);

            foreach (string key in expectedLogicalLocations.Keys)
            {
                expectedLogicalLocations[key].ValueEquals(converter.LogicalLocationsDictionary[key]).Should().BeTrue();
            }
            converter.LogicalLocationsDictionary.Count.Should().Be(expectedLogicalLocations.Count);
        }
        public void FxCopConverter_Convert_NullInput()
        {
            var converter = new FxCopConverter();

            Assert.Throws <ArgumentNullException>(() => converter.Convert(null, null, LoggingOptions.None));
        }