private static Flow newFlow(Location... locations) { Flow.Builder builder = Flow.newBuilder(); Arrays.stream(locations).forEach(builder::addLocation); return builder.build(); }
private static DefaultIssue newIssueOnLines(int... lines) { DefaultIssue issue = new DefaultIssue(); issue.setComponentUuid(FILE.getUuid()); DbIssues.Locations.Builder locations = DbIssues.Locations.newBuilder(); DbIssues.Flow.Builder flow = DbIssues.Flow.newBuilder(); Arrays.stream(lines).forEach(line -> flow.addLocation(newLocation(line))); locations.addFlow(flow.build()); issue.setLocations(locations.build()); return issue; }
@Test public void allLinesFor_filters_lines_for_specified_component() { DbIssues.Locations.Builder locations = DbIssues.Locations.newBuilder(); locations.addFlowBuilder() .addLocation(newLocation("file1", 5, 5)) .addLocation(newLocation("file1", 10, 12)) .addLocation(newLocation("file1", 15, 15)) .addLocation(newLocation("file2", 10, 11)) .build(); DefaultIssue issue = new DefaultIssue().setLocations(locations.build()); assertThat(IssueLocations.allLinesFor(issue, "file1")).containsExactlyInAnyOrder(5, 10, 11, 12, 15); assertThat(IssueLocations.allLinesFor(issue, "file2")).containsExactlyInAnyOrder(10, 11); assertThat(IssueLocations.allLinesFor(issue, "file3")).isEmpty(); }
/** * <code>repeated .sonarqube.db.issues.Flow flow = 2;</code> */ public Builder setFlow( int index, org.sonar.db.protobuf.DbIssues.Flow.Builder builderForValue) { if (flowBuilder_ == null) { ensureFlowIsMutable(); flow_.set(index, builderForValue.build()); onChanged(); } else { flowBuilder_.setMessage(index, builderForValue.build()); } return this; } /**
/** * <code>repeated .sonarqube.db.issues.Flow flow = 2;</code> */ public Builder addFlow( int index, org.sonar.db.protobuf.DbIssues.Flow.Builder builderForValue) { if (flowBuilder_ == null) { ensureFlowIsMutable(); flow_.add(index, builderForValue.build()); onChanged(); } else { flowBuilder_.addMessage(index, builderForValue.build()); } return this; } /**
/** * <code>repeated .sonarqube.db.issues.Flow flow = 2;</code> */ public Builder addFlow( org.sonar.db.protobuf.DbIssues.Flow.Builder builderForValue) { if (flowBuilder_ == null) { ensureFlowIsMutable(); flow_.add(builderForValue.build()); onChanged(); } else { flowBuilder_.addMessage(builderForValue.build()); } return this; } /**
@Test public void allLinesFor_default_component_of_location_is_the_issue_component() { DbIssues.Locations.Builder locations = DbIssues.Locations.newBuilder(); locations.addFlowBuilder() .addLocation(newLocation("", 5, 5)) .addLocation(newLocation(null, 7, 7)) .addLocation(newLocation("file2", 9, 9)) .build(); DefaultIssue issue = new DefaultIssue() .setComponentUuid("file1") .setLocations(locations.build()); assertThat(IssueLocations.allLinesFor(issue, "file1")).containsExactlyInAnyOrder(5, 7); assertThat(IssueLocations.allLinesFor(issue, "file2")).containsExactlyInAnyOrder(9); assertThat(IssueLocations.allLinesFor(issue, "file3")).isEmpty(); }
@Test public void allLinesFor_traverses_all_flows() { DbIssues.Locations.Builder locations = DbIssues.Locations.newBuilder(); locations.addFlowBuilder() .addLocation(newLocation("file1", 5, 5)) .addLocation(newLocation("file2", 10, 11)) .build(); locations.addFlowBuilder() .addLocation(newLocation("file1", 7, 9)) .addLocation(newLocation("file2", 12, 12)) .build(); DefaultIssue issue = new DefaultIssue().setLocations(locations.build()); assertThat(IssueLocations.allLinesFor(issue, "file1")).containsExactlyInAnyOrder(5, 7, 8, 9); assertThat(IssueLocations.allLinesFor(issue, "file2")).containsExactlyInAnyOrder(10, 11, 12); }
@Test public void allLinesFor_keeps_duplicated_lines() { DbIssues.Locations.Builder locations = DbIssues.Locations.newBuilder(); locations.addFlowBuilder() .addLocation(newLocation("file1", 5, 5)) .addLocation(newLocation("file1", 4, 6)) .build(); DefaultIssue issue = new DefaultIssue().setLocations(locations.build()); assertThat(IssueLocations.allLinesFor(issue, "file1")).containsExactlyInAnyOrder(4, 5, 5, 6); }