use of com.contrastsecurity.sarif.PhysicalLocation in project bsl-language-server by 1c-syntax.
the class SarifReporterTest method report.
@Test
void report() throws IOException {
// given
configuration.getDiagnosticsOptions().getParameters().put("Typo", Either.forLeft(false));
configuration.getDiagnosticsOptions().getParameters().put("test", Either.forLeft(true));
configuration.getDiagnosticsOptions().getParameters().put("some", Either.forRight(Map.of("test", 1)));
Diagnostic diagnostic = new Diagnostic(Ranges.create(0, 1, 2, 3), "message", DiagnosticSeverity.Error, "test-source", "test");
DocumentContext documentContext = TestUtils.getDocumentContext("");
String sourceDir = ".";
FileInfo fileInfo = new FileInfo(sourceDir, documentContext, Collections.singletonList(diagnostic));
AnalysisInfo analysisInfo = new AnalysisInfo(LocalDateTime.now(), Collections.singletonList(fileInfo), sourceDir);
// when
reporter.report(analysisInfo, Path.of(sourceDir));
// then
ObjectMapper mapper = new ObjectMapper();
var report = mapper.readValue(file, SarifSchema210.class);
assertThat(report).isNotNull();
var run = report.getRuns().get(0);
assertThat(run.getTool().getDriver().getName()).isEqualTo("BSL Language Server");
assertThat(run.getTool().getDriver().getRules()).hasSize(diagnosticInfos.size());
var invocation = run.getInvocations().get(0);
assertThat(invocation.getRuleConfigurationOverrides()).hasSizeGreaterThan(0).anyMatch(configurationOverride -> configurationOverride.getDescriptor().getId().equals("Typo") && !configurationOverride.getConfiguration().getEnabled()).anyMatch(configurationOverride -> configurationOverride.getDescriptor().getId().equals("test") && configurationOverride.getConfiguration().getEnabled()).anyMatch(configurationOverride -> configurationOverride.getDescriptor().getId().equals("some") && configurationOverride.getConfiguration().getParameters().getAdditionalProperties().get("test").equals(1));
assertThat(run.getResults()).hasSize(1).element(0).matches(result -> result.getRuleId().equals("test")).matches(result -> result.getLevel() == Result.Level.ERROR).matches(result -> result.getMessage().getText().equals("message")).matches(result -> result.getAnalysisTarget().getUri().equals(documentContext.getUri().toString())).extracting(Result::getLocations).extracting(locations -> locations.get(0)).extracting(Location::getPhysicalLocation).extracting(PhysicalLocation::getRegion).matches(region -> region.getStartLine().equals(diagnostic.getRange().getStart().getLine() + 1)).matches(region -> region.getStartColumn().equals(diagnostic.getRange().getStart().getCharacter() + 1)).matches(region -> region.getEndLine().equals(diagnostic.getRange().getEnd().getLine() + 1)).matches(region -> region.getEndColumn().equals(diagnostic.getRange().getEnd().getCharacter() + 1));
}
use of com.contrastsecurity.sarif.PhysicalLocation in project bsl-language-server by 1c-syntax.
the class SarifReporter method createLocation.
private static Location createLocation(String messageString, String uri, Range range) {
var message = new Message().withText(messageString);
var artifactLocation = new ArtifactLocation().withUri(uri);
var region = new Region().withStartLine(range.getStart().getLine() + 1).withStartColumn(range.getStart().getCharacter() + 1).withEndLine(range.getEnd().getLine() + 1).withEndColumn(range.getEnd().getCharacter() + 1);
var physicalLocation = new PhysicalLocation().withArtifactLocation(artifactLocation).withRegion(region);
return new Location().withMessage(message).withPhysicalLocation(physicalLocation);
}
Aggregations