public void AndroidStudioConverter_ConvertSarifResult_GeneratesLocationWithMethodEntryPointAndPackage()
        {
            AndroidStudioProblem.Builder builder = AndroidStudioProblemTests.GetDefaultProblemBuilder();
            builder.File           = null;
            builder.Package        = "FancyPackageName";
            builder.Module         = null;
            builder.EntryPointType = "method";
            builder.EntryPointName = "my_method";

            var expectedLocation = new Location
            {
                LogicalLocation = new LogicalLocation
                {
                    FullyQualifiedName = "FancyPackageName\\my_method",
                    Index = 1
                }
            };

            var expectedLogicalLocations = new List <LogicalLocation>
            {
                new LogicalLocation {
                    ParentIndex = -1, FullyQualifiedName = "FancyPackageName", Kind = LogicalLocationKind.Package
                },
                new LogicalLocation {
                    ParentIndex = 0, Name = "my_method", FullyQualifiedName = @"FancyPackageName\my_method", Kind = LogicalLocationKind.Member
                }
            };

            var    converter = new AndroidStudioConverter();
            Result result    = converter.ConvertProblemToSarifResult(new AndroidStudioProblem(builder));

            result.Locations[0].ValueEquals(expectedLocation).Should().BeTrue();

            ValidateLogicalLocations(expectedLogicalLocations, converter.LogicalLocations);
        }
        public void AndroidStudioConverter_ConvertSarifResult_CanRecordSourceFileAndModule()
        {
            var builder = AndroidStudioProblemTests.GetDefaultProblemBuilder();

            builder.File           = "File Goes Here";
            builder.Package        = null;
            builder.Module         = "LastResortModule";
            builder.EntryPointName = null;

            var expectedLocation = new Location
            {
                ResultFile = new PhysicalLocation
                {
                    Uri = new Uri("File Goes Here", UriKind.RelativeOrAbsolute),
                },
                FullyQualifiedLogicalName = "LastResortModule"
            };

            var expectedLogicalLocationComponents = new[]
            {
                new LogicalLocationComponent
                {
                    Name = "LastResortModule",
                    Kind = LogicalLocationKind.Module
                }
            };

            LocationInfo locationInfo = GetLocationInfoForBuilder(builder);

            locationInfo.Location.Should().Be(expectedLocation);
            locationInfo.LogicalLocationComponents.SequenceEqual(expectedLogicalLocationComponents).Should().BeTrue();
        }
        public void AndroidStudioConverter_ConvertSarifResult_RecordsModuleAsTopLevelIfPresent()
        {
            var builder = AndroidStudioProblemTests.GetDefaultProblemBuilder();

            builder.File           = null;
            builder.Module         = "my_fancy_binary";
            builder.EntryPointType = "method";
            builder.EntryPointName = "my_method";

            var expectedLocation = new Location
            {
                FullyQualifiedLogicalName = "my_fancy_binary\\my_method",
            };

            var expectedLogicalLocationComponents = new[]
            {
                new LogicalLocationComponent
                {
                    Name = "my_fancy_binary",
                    Kind = LogicalLocationKind.Module
                },
                new LogicalLocationComponent
                {
                    Name = "my_method",
                    Kind = LogicalLocationKind.Member
                }
            };

            LocationInfo locationInfo = GetLocationInfoForBuilder(builder);

            locationInfo.Location.Should().Be(expectedLocation);
            locationInfo.LogicalLocationComponents.SequenceEqual(expectedLogicalLocationComponents).Should().BeTrue();
        }
        public void AndroidStudioConverter_ConvertSarifResult_GeneratesLocationWithOnlyPackage()
        {
            var builder = AndroidStudioProblemTests.GetDefaultProblemBuilder();

            builder.File           = null;
            builder.Package        = "FancyPackageName";
            builder.Module         = null;
            builder.EntryPointName = null;

            var expectedLocation = new Location
            {
                FullyQualifiedLogicalName = "FancyPackageName"
            };

            var expectedLogicalLocationComponents = new[]
            {
                new LogicalLocationComponent
                {
                    Name = "FancyPackageName",
                    Kind = LogicalLocationKind.Package
                }
            };

            LocationInfo locationInfo = GetLocationInfoForBuilder(builder);

            locationInfo.Location.Should().Be(expectedLocation);
            locationInfo.LogicalLocationComponents.SequenceEqual(expectedLogicalLocationComponents).Should().BeTrue();
        }
        public void AndroidStudioConverter_ConvertSarifResult_GeneratesLocationWithOnlyPackage()
        {
            var builder = AndroidStudioProblemTests.GetDefaultProblemBuilder();

            builder.File           = null;
            builder.Package        = "FancyPackageName";
            builder.Module         = null;
            builder.EntryPointName = null;

            var expectedLocation = new Location
            {
                LogicalLocation = new LogicalLocation
                {
                    FullyQualifiedName = "FancyPackageName",
                    Index = 0
                }
            };

            var expectedLogicalLocations = new List <LogicalLocation>
            {
                new LogicalLocation {
                    Kind = LogicalLocationKind.Package, FullyQualifiedName = "FancyPackageName"
                }
            };

            var    converter = new AndroidStudioConverter();
            Result result    = converter.ConvertProblemToSarifResult(new AndroidStudioProblem(builder));

            result.Locations[0].ValueEquals(expectedLocation).Should().BeTrue();

            ValidateLogicalLocations(expectedLogicalLocations, converter.LogicalLocations);
        }
        public void AndroidStudioConverter_ConvertSarifResult_RecordsModuleAsTopLevelIfPresent()
        {
            var builder = AndroidStudioProblemTests.GetDefaultProblemBuilder();

            builder.File           = null;
            builder.Module         = "my_fancy_binary";
            builder.EntryPointType = "method";
            builder.EntryPointName = "my_method";

            var expectedLocation = new Location
            {
                LogicalLocation = new LogicalLocation
                {
                    FullyQualifiedName = "my_fancy_binary\\my_method",
                    Index = 1
                }
            };

            var expectedLogicalLocations = new List <LogicalLocation>
            {
                new LogicalLocation {
                    ParentIndex = -1, FullyQualifiedName = "my_fancy_binary", Kind = LogicalLocationKind.Module
                },
                new LogicalLocation {
                    ParentIndex = 0, Name = "my_method", FullyQualifiedName = @"my_fancy_binary\my_method", Kind = LogicalLocationKind.Member
                }
            };

            var    converter = new AndroidStudioConverter();
            Result result    = converter.ConvertProblemToSarifResult(new AndroidStudioProblem(builder));

            result.Locations[0].ValueEquals(expectedLocation).Should().BeTrue();

            ValidateLogicalLocations(expectedLogicalLocations, converter.LogicalLocations);
        }
        public void AndroidStudioConverter_ConvertToSarifResult_HasNoPropertiesIfAttributeKeyAndSeverity()
        {
            var    uut    = AndroidStudioProblemTests.GetDefaultProblem();
            Result result = new AndroidStudioConverter().ConvertProblemToSarifResult(uut);

            Assert.IsNull(result.Properties);
        }
        public void AndroidStudioConverter_ConvertSarifResult_GeneratesLocationWithOnlyPackage()
        {
            var builder = AndroidStudioProblemTests.GetDefaultProblemBuilder();

            builder.File           = null;
            builder.Package        = "FancyPackageName";
            builder.Module         = null;
            builder.EntryPointName = null;

            var expectedLocation = new Location
            {
                FullyQualifiedLogicalName = "FancyPackageName"
            };

            var expectedLogicalLocations = new Dictionary <string, LogicalLocation>
            {
                {
                    "FancyPackageName", new LogicalLocation {
                        ParentKey = null, Kind = LogicalLocationKind.Package
                    }
                }
            };

            var    converter = new AndroidStudioConverter();
            Result result    = converter.ConvertProblemToSarifResult(new AndroidStudioProblem(builder));

            result.Locations[0].ValueEquals(expectedLocation).Should().BeTrue();

            foreach (string key in expectedLogicalLocations.Keys)
            {
                expectedLogicalLocations[key].ValueEquals(converter.LogicalLocationsDictionary[key]).Should().BeTrue();
            }
            converter.LogicalLocationsDictionary.Count.Should().Be(expectedLogicalLocations.Count);
        }
        public void AndroidStudioConverter_ConvertSarifIssue_CanRecordSourceFileAndModule()
        {
            var builder = AndroidStudioProblemTests.GetDefaultProblemBuilder();

            builder.File           = "File Goes Here";
            builder.Package        = null;
            builder.Module         = "LastResortModule";
            builder.EntryPointName = null;
            Assert.AreEqual(new Location
            {
                ResultFile = new PhysicalLocation
                {
                    Uri = new Uri("File Goes Here", UriKind.RelativeOrAbsolute),
                },
                FullyQualifiedLogicalName = "LastResortModule",
                LogicalLocation           = new[]
                {
                    new LogicalLocationComponent
                    {
                        Name = "LastResortModule",
                        Kind = LogicalLocationKind.AndroidModule
                    }
                }
            }, GetLocationForBuilder(builder));
        }
        public void AndroidStudioConverter_ConvertSarifIssue_GeneratesLocationWithMethodEntryPointAndPackage()
        {
            var builder = AndroidStudioProblemTests.GetDefaultProblemBuilder();

            builder.File           = null;
            builder.Package        = "FancyPackageName";
            builder.Module         = null;
            builder.EntryPointType = "method";
            builder.EntryPointName = "my_method";
            Assert.AreEqual(new Location
            {
                FullyQualifiedLogicalName = "FancyPackageName\\my_method",
                LogicalLocation           = new[]
                {
                    new LogicalLocationComponent
                    {
                        Name = "FancyPackageName",
                        Kind = LogicalLocationKind.JvmPackage
                    },
                    new LogicalLocationComponent
                    {
                        Name = "my_method",
                        Kind = LogicalLocationKind.JvmFunction
                    }
                }
            }, GetLocationForBuilder(builder));
        }
        public void AndroidStudioConverter_ConvertSarifIssue_RecordsModuleAsTopLevelIfPresent()
        {
            var builder = AndroidStudioProblemTests.GetDefaultProblemBuilder();

            builder.File           = null;
            builder.Module         = "my_fancy_binary";
            builder.EntryPointType = "method";
            builder.EntryPointName = "my_method";
            Assert.AreEqual(
                new Location
            {
                FullyQualifiedLogicalName = "my_fancy_binary\\my_method",
                LogicalLocation           = new[]
                {
                    new LogicalLocationComponent
                    {
                        Name = "my_fancy_binary",
                        Kind = LogicalLocationKind.AndroidModule
                    },
                    new LogicalLocationComponent
                    {
                        Name = "my_method",
                        Kind = LogicalLocationKind.JvmFunction
                    }
                }
            }
                , GetLocationForBuilder(builder));
        }
        public void AndroidStudioConverter_ConvertToSarifResult_UsesProblemClassForRuleId()
        {
            var    uut    = AndroidStudioProblemTests.GetDefaultProblem();
            Result result = new AndroidStudioConverter().ConvertProblemToSarifResult(uut);

            Assert.AreEqual("A Problematic Problem", result.RuleId);
        }
        public void AndroidStudioConverter_GetShortDescription_UsesProblemClassIfDescriptionNotPresent()
        {
            var    uut    = AndroidStudioProblemTests.GetDefaultProblem();
            string result = AndroidStudioConverter.GetShortDescriptionForProblem(uut);

            result.Should().Contain("A Problematic Problem");
        }
        public void AndroidStudioConverter_ConvertSarifResult_RemovesProjectDirPrefix()
        {
            AndroidStudioProblem.Builder builder = AndroidStudioProblemTests.GetDefaultProblemBuilder();
            builder.File = "file://$PROJECT_DIR$/mydir/myfile.xml";
            LocationInfo locationInfo = GetLocationInfoForBuilder(builder);

            locationInfo.Location.PhysicalLocation.ArtifactLocation.Uri.ToString().Should().Be("mydir/myfile.xml");
        }
        public void AndroidStudioConverter_ConvertSarifResult_PersistsSourceLineInfo()
        {
            AndroidStudioProblem.Builder builder = AndroidStudioProblemTests.GetDefaultProblemBuilder();
            builder.Line = 42;
            LocationInfo locationInfo = GetLocationInfoForBuilder(builder);

            locationInfo.Location.PhysicalLocation.Region.StartLine.Should().Be(42);
        }
        public void AndroidStudioConverter_ConvertSarifIssue_RemovesProjectDirPrefix()
        {
            var builder = AndroidStudioProblemTests.GetDefaultProblemBuilder();

            builder.File = "file://$PROJECT_DIR$/mydir/myfile.xml";
            Location loc = GetLocationForBuilder(builder);

            Assert.AreEqual("mydir/myfile.xml", loc.ResultFile.Uri.ToString());
        }
        public void AndroidStudioConverter_ConvertSarifIssue_PersistsSourceLineInfo()
        {
            var builder = AndroidStudioProblemTests.GetDefaultProblemBuilder();

            builder.Line = 42;
            Location loc = GetLocationForBuilder(builder);

            Assert.AreEqual(42, loc.ResultFile.Region.StartLine);
        }
        public void AndroidStudioConverter_GetShortDescription_UsesDescriptionIfPresent()
        {
            AndroidStudioProblem.Builder builder = AndroidStudioProblemTests.GetDefaultProblemBuilder();
            builder.Description = "Cute fluffy kittens";
            var    uut    = new AndroidStudioProblem(builder);
            string result = AndroidStudioConverter.GetShortDescriptionForProblem(uut);

            Assert.Equal("Cute fluffy kittens", result);
        }
        public void AndroidStudioConverter_ConvertSarifResult_RecordsTopLevelFileAsSourceFile()
        {
            AndroidStudioProblem.Builder builder = AndroidStudioProblemTests.GetDefaultProblemBuilder();
            builder.File           = "expected_file.java";
            builder.EntryPointType = "file";
            builder.EntryPointName = "bad_file.java";
            Location loc = GetLocationInfoForBuilder(builder).Location;

            loc.PhysicalLocation.ArtifactLocation.Uri.ToString().Should().Be("expected_file.java");
        }
        public void AndroidStudioConverter_ConvertToSarifResult_EmptyHintsDoNotAffectDescription()
        {
            AndroidStudioProblem.Builder builder = AndroidStudioProblemTests.GetDefaultProblemBuilder();
            builder.Description = "hungry EVIL zombies";
            var uut = new AndroidStudioProblem(builder);

            Result result = new AndroidStudioConverter().ConvertProblemToSarifResult(uut);

            Assert.Equal("hungry EVIL zombies", result.Message.Text);
        }
        public void AndroidStudioConverter_ConvertToSarifResult_AttributeKeyIsPersistedInProperties()
        {
            AndroidStudioProblem.Builder builder = AndroidStudioProblemTests.GetDefaultProblemBuilder();
            builder.AttributeKey = "key";
            var    uut    = new AndroidStudioProblem(builder);
            Result result = new AndroidStudioConverter().ConvertProblemToSarifResult(uut);

            result.PropertyNames.Count.Should().Be(1);
            result.GetProperty("attributeKey").Should().Be("key");
        }
        public void AndroidStudioConverter_ConvertToSarifResult_SeverityIsPersistedInProperties()
        {
            AndroidStudioProblem.Builder builder = AndroidStudioProblemTests.GetDefaultProblemBuilder();
            builder.Severity = "warning";
            var    uut    = new AndroidStudioProblem(builder);
            Result result = new AndroidStudioConverter().ConvertProblemToSarifResult(uut);

            result.PropertyNames.Count.Should().Be(1);
            result.GetProperty("severity").Should().Be("warning");
        }
        public void AndroidStudioConverter_ConvertSarifResult_DoesNotRecordTopLevelEntryPointAsSourceFile()
        {
            AndroidStudioProblem.Builder builder = AndroidStudioProblemTests.GetDefaultProblemBuilder();
            builder.File           = null;
            builder.EntryPointType = "file";
            builder.EntryPointName = "expected_file.java";
            Location loc = GetLocationInfoForBuilder(builder).Location;

            loc.PhysicalLocation.Should().BeNull();
        }
        public void AndroidStudioConverter_ConvertSarifIssue_DoesNotRecordTopLevelEntryPointAsSourceFile()
        {
            var builder = AndroidStudioProblemTests.GetDefaultProblemBuilder();

            builder.File           = null;
            builder.EntryPointType = "file";
            builder.EntryPointName = "expected_file.java";
            Location loc = GetLocationForBuilder(builder);

            Assert.IsNull(loc.ResultFile);
        }
        public void AndroidStudioConverter_ConvertToSarifIssue_EmptyHintsDoNotAffectDescription()
        {
            var builder = AndroidStudioProblemTests.GetDefaultProblemBuilder();

            builder.Description = "hungry EVIL zombies";
            var    uut    = new AndroidStudioProblem(builder);
            Result result = AndroidStudioConverter.ConvertProblemToSarifIssue(uut);

            Assert.IsNull(result.ShortMessage);
            Assert.AreEqual("hungry EVIL zombies", result.FullMessage);
        }
        public void AndroidStudioConverter_ConvertSarifIssue_RecordsTopLevelFileAsSourceFile()
        {
            var builder = AndroidStudioProblemTests.GetDefaultProblemBuilder();

            builder.File           = "expected_file.java";
            builder.EntryPointType = "file";
            builder.EntryPointName = "bad_file.java";
            Location loc = GetLocationForBuilder(builder);

            Assert.AreEqual("expected_file.java", loc.ResultFile.Uri.ToString());
        }
        public void AndroidStudioConverter_ConvertToSarifResult_MultiplePropertiesArePersisted()
        {
            AndroidStudioProblem.Builder builder = AndroidStudioProblemTests.GetDefaultProblemBuilder();
            builder.AttributeKey = "key";
            builder.Severity     = "warning";
            var    uut    = new AndroidStudioProblem(builder);
            Result result = new AndroidStudioConverter().ConvertProblemToSarifResult(uut);

            result.PropertyNames.Count.Should().Be(2);
            result.GetProperty("severity").Should().Be("warning");
            result.GetProperty("attributeKey").Should().Be("key");
        }
        public void AndroidStudioConverter_ConvertToSarifResult_SeverityIsPersistedInProperties()
        {
            var builder = AndroidStudioProblemTests.GetDefaultProblemBuilder();

            builder.Severity = "warning";
            var    uut    = new AndroidStudioProblem(builder);
            Result result = new AndroidStudioConverter().ConvertProblemToSarifResult(uut);

            result.Properties.Should().Equal(new Dictionary <string, string> {
                { "severity", "warning" }
            });
        }
        public void AndroidStudioConverter_ConvertToSarifIssue_AttributeKeyIsPersistedInProperties()
        {
            var builder = AndroidStudioProblemTests.GetDefaultProblemBuilder();

            builder.AttributeKey = "key";
            var    uut    = new AndroidStudioProblem(builder);
            Result result = AndroidStudioConverter.ConvertProblemToSarifIssue(uut);

            result.Properties.Should().Equal(new Dictionary <string, string> {
                { "attributeKey", "key" }
            });
        }
        public void AndroidStudioConverter_ConvertSarifResult_CanRecordSourceFileAndModule()
        {
            var builder = AndroidStudioProblemTests.GetDefaultProblemBuilder();

            builder.File           = "File Goes Here";
            builder.Package        = null;
            builder.Module         = "LastResortModule";
            builder.EntryPointName = null;

            var expectedLocation = new Location
            {
                PhysicalLocation = new PhysicalLocation
                {
                    FileLocation = new FileLocation
                    {
                        Uri = new Uri("File Goes Here", UriKind.RelativeOrAbsolute)
                    },
                },
                FullyQualifiedLogicalName = "LastResortModule"
            };

            var expectedLogicalLocations = new Dictionary <string, LogicalLocation>
            {
                {
                    "LastResortModule", new LogicalLocation {
                        ParentKey = null, Kind = LogicalLocationKind.Module
                    }
                }
            };

            var    converter = new AndroidStudioConverter();
            Result result    = converter.ConvertProblemToSarifResult(new AndroidStudioProblem(builder));

            result.Locations[0].ValueEquals(expectedLocation).Should().BeTrue();

            foreach (string key in expectedLogicalLocations.Keys)
            {
                expectedLogicalLocations[key].ValueEquals(converter.LogicalLocationsDictionary[key]).Should().BeTrue();
            }
            converter.LogicalLocationsDictionary.Count.Should().Be(expectedLogicalLocations.Count);
        }