public void SarifFixer_ShouldChange_EscapeQuotes()
        {
            // Arrange
            var logger  = new TestLogger();
            var testDir = TestUtils.CreateTestSpecificFolder(TestContext);

            var testSarifString = @"{
  ""version"": ""0.1"",
  ""toolInfo"": {
                ""toolName"": ""Microsoft (R) Visual C# Compiler"",
    ""productVersion"": ""1.0.0"",
    ""fileVersion"": ""1.0.0""
  },
  ""issues"": [
    {
      ""ruleId"": ""DD001"",
      ""shortMessage"": ""Test shortMessage. It features ""quoted text""."",
      ""properties"": {
        ""severity"": ""Info"",
        ""helpLink"": ""https://github.com/SonarSource/sonar-msbuild-runner"",
      }
    }
  ]
}";
            var testSarifPath   = Path.Combine(testDir, "testSarif.json");

            File.WriteAllText(testSarifPath, testSarifString);
            var originalWriteTime = new FileInfo(testSarifPath).LastWriteTime;

            // Act
            var returnedSarifPath = new RoslynV1SarifFixer(logger).LoadAndFixFile(testSarifPath, RoslynV1SarifFixer.CSharpLanguage);

            // Assert
            // fixable -> no change to file, file path in return value, file contents as expected
            AssertFileUnchanged(testSarifPath, originalWriteTime);
            returnedSarifPath.Should().NotBeNull();

            var returnedSarifString = File.ReadAllText(returnedSarifPath);

            returnedSarifString.Should().Be(@"{
  ""version"": ""0.1"",
  ""toolInfo"": {
                ""toolName"": ""Microsoft (R) Visual C# Compiler"",
    ""productVersion"": ""1.0.0"",
    ""fileVersion"": ""1.0.0""
  },
  ""issues"": [
    {
      ""ruleId"": ""DD001"",
      ""shortMessage"": ""Test shortMessage. It features \""quoted text\""."",
      ""properties"": {
        ""severity"": ""Info"",
        ""helpLink"": ""https://github.com/SonarSource/sonar-msbuild-runner"",
      }
    }
  ]
}");
        }
        public void SarifFixer_ShouldNotChange_Unfixable()
        {
            // Arrange
            var logger  = new TestLogger();
            var testDir = TestUtils.CreateTestSpecificFolder(TestContext);

            var testSarifString = @"{
  ""version"": ""0.1"",
  ""toolInfo"": {
                ""toolName"": ""Microsoft (R) Visual C# Compiler"",
    ""productVersion"": ""1.0.0"",
    ""fileVersion"": ""1.0.0""
  },
  ""issues"": [
    {
}}}}}}}}}}}}}}}}}}}}}}}}}

      ""ruleId"": ""DD001"",
      ""locations"": [
        {
          ""analysisTarget"": [
            {
              ""uri"": ""C:\\agent\\_work\\2\\s\\MyTestProj\\Program.cs"",
}
          ]
        }
      ],
      ""shortMessage"": ""Test shortMessage. It features \""quoted text\""."",
      ""properties"": {
        ""severity"": ""Info"",
        ""helpLink"": ""https://github.com/SonarSource/sonar-msbuild-runner"",
      }
    }
  ]
}";
            var testSarifPath   = Path.Combine(testDir, "testSarif.json");

            File.WriteAllText(testSarifPath, testSarifString);
            var originalWriteTime = new FileInfo(testSarifPath).LastWriteTime;

            // Act
            var returnedSarifPath = new RoslynV1SarifFixer(logger).LoadAndFixFile(testSarifPath, RoslynV1SarifFixer.CSharpLanguage);

            // Assert
            // unfixable -> no change to file, null return
            AssertFileUnchanged(testSarifPath, originalWriteTime);
            returnedSarifPath.Should().BeNull();
        }
        public void SarifFixer_ShouldNotFixInvalid()
        {
            // Arrange
            var logger  = new TestLogger();
            var testDir = TestUtils.CreateTestSpecificFolder(TestContext);

            var testSarifString = @"{
  ""version"": ""0.1"",
  ""toolInfo"": {
                ""toolName"": ""Microsoft (R) Visual C# Compiler"",
    ""productVersion"": ""1.0.0"",
    ""fileVersion"": ""1.0.0""
  },
  ""issues"": [
    {
      ""ruleId"": ""DD001"",
      ""locations"": [
        {
          ""analysisTarget"": [
            {
              ""uri"": ""C:\agent\_work\2\s\MyTestProj\Program.cs"",
}
          ]
        }
      ],
    }
  ]
}";
            var testSarifPath   = Path.Combine(testDir, "testSarif.json");

            File.WriteAllText(testSarifPath, testSarifString);
            var originalWriteTime = new FileInfo(testSarifPath).LastWriteTime;

            // Act
            var returnedSarifPath = new RoslynV1SarifFixer(logger).LoadAndFixFile(testSarifPath, RoslynV1SarifFixer.VBNetLanguage);

            returnedSarifPath.Should().BeNull();
        }
        public void SarifFixer_VBNet()
        {
            // Arrange
            var logger  = new TestLogger();
            var testDir = TestUtils.CreateTestSpecificFolder(TestContext);

            var testSarifString = @"{
  ""version"": ""0.1"",
  ""toolInfo"": {
                ""toolName"": ""Microsoft (R) Visual Basic Compiler"",
    ""productVersion"": ""1.0.0"",
    ""fileVersion"": ""1.0.0""
  },
  ""issues"": [
    {
      ""ruleId"": ""DD001"",
      ""locations"": [
        {
          ""analysisTarget"": [
            {
              ""uri"": ""C:\agent\_work\2\s\MyTestProj\Program.cs"",
}
          ]
        }
      ],
    }
  ]
}";
            var testSarifPath   = Path.Combine(testDir, "testSarif.json");

            File.WriteAllText(testSarifPath, testSarifString);
            var originalWriteTime = new FileInfo(testSarifPath).LastWriteTime;

            // Act
            var returnedSarifPath = new RoslynV1SarifFixer(logger).LoadAndFixFile(testSarifPath, RoslynV1SarifFixer.VBNetLanguage);

            // Assert
            // fixable -> no change to file, file path in return value, file contents as expected
            AssertFileUnchanged(testSarifPath, originalWriteTime);
            returnedSarifPath.Should().NotBeNull();

            var returnedSarifString = File.ReadAllText(returnedSarifPath);

            returnedSarifString.Should().Be(@"{
  ""version"": ""0.1"",
  ""toolInfo"": {
                ""toolName"": ""Microsoft (R) Visual Basic Compiler"",
    ""productVersion"": ""1.0.0"",
    ""fileVersion"": ""1.0.0""
  },
  ""issues"": [
    {
      ""ruleId"": ""DD001"",
      ""locations"": [
        {
          ""analysisTarget"": [
            {
              ""uri"": ""C:\\agent\\_work\\2\\s\\MyTestProj\\Program.cs"",
}
          ]
        }
      ],
    }
  ]
}");
        }