use of org.sonar.duplications.index.CloneGroup in project sonarqube by SonarSource.
the class SuffixTreeCloneDetectionAlgorithmTest method huge.
/**
* See SONAR-3060
* <p>
* In case when file contains a lot of duplicated blocks suffix-tree works better than original algorithm,
* which works more than 5 minutes for this example.
* </p><p>
* However should be noted that current implementation with suffix-tree also is not optimal,
* even if it works for this example couple of seconds,
* because duplications should be filtered in order to remove fully-covered.
* But such cases nearly never appear in real-world, so current implementation is acceptable for the moment.
* </p>
*/
@Test
public void huge() {
CloneIndex index = createIndex();
Block[] fileBlocks = new Block[5000];
for (int i = 0; i < 5000; i++) {
fileBlocks[i] = newBlock("x", new ByteArray("01"), i);
}
List<CloneGroup> result = detect(index, fileBlocks);
assertEquals(1, result.size());
}
use of org.sonar.duplications.index.CloneGroup in project sonarqube by SonarSource.
the class SuffixTreeCloneDetectionAlgorithmTest method noDuplications.
/**
* Given: file without duplications
* Expected: {@link Collections#EMPTY_LIST} (no need to construct suffix-tree)
*/
@Test
public void noDuplications() {
CloneIndex index = createIndex();
Block[] fileBlocks = newBlocks("a", "1 2 3");
List<CloneGroup> result = detect(index, fileBlocks);
assertThat(result, sameInstance(Collections.EMPTY_LIST));
}
use of org.sonar.duplications.index.CloneGroup in project sonarqube by SonarSource.
the class SuffixTreeCloneDetectionAlgorithmTest method myTest2.
/**
* This test and associated with it suffix-tree demonstrates that without filtering in {@link DuplicationsCollector#endOfGroup()}
* possible to construct {@link CloneGroup}, which is fully covered by another {@link CloneGroup}.
*
* Given:
* <pre>
* x: a 2 3 b 2 3 c 2 3 d 2 3 2 3 2 3
* </pre>
* Expected:
* <pre>
* x-x (2 3 2 3)
* x-x-x-x-x-x (2 3)
* <pre>
* TODO Godin: however would be better to receive only (2 3)
*/
@Test
public void myTest2() {
CloneIndex index = createIndex();
Block[] fileBlocks = newBlocks("x", "a 2 3 b 2 3 c 2 3 d 2 3 2 3 2 3");
List<CloneGroup> result = detect(index, fileBlocks);
print(result);
assertEquals(2, result.size());
assertThat(result, hasCloneGroup(4, newClonePart("x", 10, 4), newClonePart("x", 12, 4)));
assertThat(result, hasCloneGroup(2, newClonePart("x", 1, 2), newClonePart("x", 4, 2), newClonePart("x", 7, 2), newClonePart("x", 10, 2), newClonePart("x", 12, 2), newClonePart("x", 14, 2)));
}
use of org.sonar.duplications.index.CloneGroup in project sonarqube by SonarSource.
the class PmdBridgeTest method testDuplicationBetweenTwoFiles.
@Test
public void testDuplicationBetweenTwoFiles() {
File file1 = new File("test-resources/org/sonar/duplications/cpd/CPDTest/CPDFile1.java");
File file2 = new File("test-resources/org/sonar/duplications/cpd/CPDTest/CPDFile2.java");
addToIndex(file1);
addToIndex(file2);
List<CloneGroup> duplications = detect(file1);
assertThat(duplications.size()).isEqualTo(1);
CloneGroup duplication = duplications.get(0);
assertThat(duplication.getOriginPart().getResourceId()).isEqualTo(file1.getAbsolutePath());
ClonePart part1 = new ClonePart(file1.getAbsolutePath(), 1, 18, 41);
ClonePart part2 = new ClonePart(file2.getAbsolutePath(), 1, 18, 41);
assertThat(duplication.getCloneParts()).containsOnly(part1, part2);
assertThat(duplication.getLengthInUnits()).as("length in tokens").isEqualTo(115);
}
use of org.sonar.duplications.index.CloneGroup in project sonarqube by SonarSource.
the class DetectorTestCase method covered.
/**
* Given:
* <pre>
* b: 1 2 1 2
* a: 1 2 1
* </pre>
* Expected:
* <pre>
* a-b-b (1 2)
* a-b (1 2 1)
* </pre>
* "a-a-b-b (1)" should not be reported, because fully covered by "a-b (1 2 1)"
*/
@Test
public void covered() {
CloneIndex index = createIndex(newBlocks("b", "1 2 1 2"));
Block[] fileBlocks = newBlocks("a", "1 2 1");
List<CloneGroup> result = detect(index, fileBlocks);
print(result);
assertThat(result.size(), is(2));
assertThat(result, hasCloneGroup(3, newClonePart("a", 0, 3), newClonePart("b", 0, 3)));
assertThat(result, hasCloneGroup(2, newClonePart("a", 0, 2), newClonePart("b", 0, 2), newClonePart("b", 2, 2)));
}
Aggregations