use of org.sonar.duplications.block.Block in project sonarqube by SonarSource.
the class DetectorTestCase method problemWithNestedCloneGroups.
/**
* Given:
* <pre>
* b: 1 2 1 2 1 2 1
* a: 1 2 1 2 1 2
* </pre>
* Expected:
* <pre>
* a-b-b (1 2 1 2 1) - note that there is overlapping among parts for "b"
* a-b (1 2 1 2 1 2)
* </pre>
*/
@Test
public void problemWithNestedCloneGroups() {
CloneIndex index = createIndex(newBlocks("b", "1 2 1 2 1 2 1"));
Block[] fileBlocks = newBlocks("a", "1 2 1 2 1 2");
List<CloneGroup> result = detect(index, fileBlocks);
print(result);
assertThat(result.size(), is(2));
assertThat(result, hasCloneGroup(6, newClonePart("a", 0, 6), newClonePart("b", 0, 6)));
assertThat(result, hasCloneGroup(5, newClonePart("a", 0, 5), newClonePart("b", 0, 5), newClonePart("b", 2, 5)));
}
use of org.sonar.duplications.block.Block in project sonarqube by SonarSource.
the class DetectorTestCase method fileAlreadyInIndex.
/**
* Given:
* <pre>
* a: 1 2 3
* b: 1 2 4
* a: 1 2 5
* </pre>
* Expected:
* <pre>
* a-b (1 2) - instead of "a-a-b", which will be the case if file from index not ignored
* </pre>
*/
@Test
public void fileAlreadyInIndex() {
CloneIndex index = createIndex(newBlocks("a", "1 2 3"), newBlocks("b", "1 2 4"));
// Note about blocks with hashes "3", "4" and "5": those blocks here in order to not face another problem - with EOF (see separate test)
Block[] fileBlocks = newBlocks("a", "1 2 5");
List<CloneGroup> result = detect(index, fileBlocks);
print(result);
assertThat(result.size(), is(1));
assertThat(result, hasCloneGroup(2, newClonePart("a", 0, 2), newClonePart("b", 0, 2)));
}
use of org.sonar.duplications.block.Block 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)));
}
use of org.sonar.duplications.block.Block in project sonarqube by SonarSource.
the class DetectorTestCase method problemWithEndOfFile.
/**
* Given:
* <pre>
* b: 1 2 3 4
* a: 1 2 3
* </pre>
* Expected clone which ends at the end of file "a":
* <pre>
* a-b (1 2 3)
* </pre>
*/
@Test
public void problemWithEndOfFile() {
CloneIndex cloneIndex = createIndex(newBlocks("b", "1 2 3 4"));
Block[] fileBlocks = newBlocks("a", "1 2 3");
List<CloneGroup> clones = detect(cloneIndex, fileBlocks);
print(clones);
assertThat(clones.size(), is(1));
assertThat(clones, hasCloneGroup(3, newClonePart("a", 0, 3), newClonePart("b", 0, 3)));
}
use of org.sonar.duplications.block.Block 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)));
}
Aggregations