예제 #1
0
        public static bool AreEquivalent <T>(string actualSarif, string expectedSarif, IContractResolver contractResolver = null)
        {
            expectedSarif = expectedSarif ?? "{}";
            var expectedToken = SarifUtilities.DeserializeObject <JToken>(expectedSarif);

            var actualToken = SarifUtilities.DeserializeObject <JToken>(actualSarif);

            if (!JToken.DeepEquals(actualToken, expectedToken))
            {
                return(false);
            }

            // Make sure we can successfully roundtrip what was just generated.
            JsonSerializerSettings settings = new JsonSerializerSettings()
            {
                ContractResolver  = contractResolver,
                Formatting        = Formatting.Indented,
                DateParseHandling = DateParseHandling.None
            };

            T      actualSarifObject = JsonConvert.DeserializeObject <T>(actualSarif, settings);
            string roundTrippedSarif = JsonConvert.SerializeObject(actualSarifObject, settings);

            var roundTrippedToken = SarifUtilities.DeserializeObject <JToken>(roundTrippedSarif);

            if (!JToken.DeepEquals(actualToken, roundTrippedToken))
            {
                return(false);
            }

            return(true);
        }
예제 #2
0
        public void GetEncodingFromNameProducesExpectedEncoding()
        {
            var sb = new StringBuilder();

            foreach (GetEncodingFromNameTestCase testCase in s_getEncodingFromNameTestCases)
            {
                Encoding actualEncoding = SarifUtilities.GetEncodingFromName(testCase.EncodingName);
                if (actualEncoding != testCase.ExpectedEncoding)
                {
                    sb.AppendLine($"    {testCase.TestCaseName}");
                }
            }

            sb.Length.Should().Be(0,
                                  $"expected all test cases to pass, but the following test cases failed:\n{sb}");
        }
예제 #3
0
        private void PopulateCharLength(NewLineIndex lineIndex, Region region)
        {
            // Populated at this point: StartLine, EndLine, StartColumn, EndColumn, CharOffset
            Debug.Assert(region.StartLine > 0);
            Debug.Assert(region.EndLine > 0);
            Debug.Assert(region.StartColumn > 0);
            Debug.Assert(region.EndColumn > 0);
            Debug.Assert(region.CharOffset > 0 || (region.StartLine == 1 && region.StartColumn == 1));

            LineInfo lineInfo   = lineIndex.GetLineInfoForLine(region.EndLine);
            int      charLength = lineInfo.StartOffset;

            charLength -= region.CharOffset;
            charLength += region.EndColumn - 1;

            if (region.CharLength == 0)
            {
                region.CharLength = charLength;
            }
            SarifUtilities.DebugAssert(region.CharLength == charLength);
        }
예제 #4
0
        private static void PopulateCharOffset(NewLineIndex lineIndex, Region region)
        {
            // Populated at this point: StartLine, EndLine, StartColumn, EndColumn
            Debug.Assert(region.StartLine > 0);
            Debug.Assert(region.EndLine > 0);
            Debug.Assert(region.StartColumn > 0);
            Debug.Assert(region.EndColumn > 0);

            LineInfo lineInfo = lineIndex.GetLineInfoForLine(region.StartLine);

            // Now we have the offset of the starting line. Populate region.CharOffset.
            int offset = lineInfo.StartOffset;

            offset += region.StartColumn - 1;

            if (region.CharOffset == 0 || region.CharOffset == -1)
            {
                region.CharOffset = offset;
            }

            SarifUtilities.DebugAssert(region.CharOffset == offset);
        }