aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-plugin-api/src/test
diff options
context:
space:
mode:
authorJulien HENRY <julien.henry@sonarsource.com>2018-09-17 16:59:39 +0200
committerSonarTech <sonartech@sonarsource.com>2018-09-24 20:20:57 +0200
commit1241f18a7b389336ce1eb98fe024f8db0bc5c627 (patch)
treec0f533c2afbff0b6271d0ee0575eda4e4834153a /sonar-plugin-api/src/test
parent3e5ce7c6fc3ccffc09ff6cb630b641c3ce101432 (diff)
downloadsonarqube-1241f18a7b389336ce1eb98fe024f8db0bc5c627.tar.gz
sonarqube-1241f18a7b389336ce1eb98fe024f8db0bc5c627.zip
SONAR-11259 Improve source offset handling on Windows
* Trying to create a range in the middle of a \r\n sequence will now automatically be adapted to exclude the eol * Fix a few other tests on Windows
Diffstat (limited to 'sonar-plugin-api/src/test')
-rw-r--r--sonar-plugin-api/src/test/java/org/sonar/api/batch/fs/internal/DefaultInputFileTest.java25
-rw-r--r--sonar-plugin-api/src/test/java/org/sonar/api/batch/fs/internal/FileMetadataTest.java45
-rw-r--r--sonar-plugin-api/src/test/java/org/sonar/api/batch/fs/internal/MetadataTest.java8
-rw-r--r--sonar-plugin-api/src/test/java/org/sonar/api/batch/sensor/cpd/internal/DefaultCpdTokensTest.java7
-rw-r--r--sonar-plugin-api/src/test/java/org/sonar/api/batch/sensor/highlighting/internal/DefaultHighlightingTest.java5
-rw-r--r--sonar-plugin-api/src/test/java/org/sonar/api/batch/sensor/symbol/internal/DefaultSymbolTableTest.java5
6 files changed, 56 insertions, 39 deletions
diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/batch/fs/internal/DefaultInputFileTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/batch/fs/internal/DefaultInputFileTest.java
index 77b5ed2ac70..0a9bb7a8373 100644
--- a/sonar-plugin-api/src/test/java/org/sonar/api/batch/fs/internal/DefaultInputFileTest.java
+++ b/sonar-plugin-api/src/test/java/org/sonar/api/batch/fs/internal/DefaultInputFileTest.java
@@ -69,7 +69,7 @@ public class DefaultInputFileTest {
@Test
public void test() throws Exception {
- Metadata metadata = new Metadata(42, 42, "", new int[0], 0);
+ Metadata metadata = new Metadata(42, 42, "", new int[0], new int[0], 10);
DefaultInputFile inputFile = new DefaultInputFile(indexedFile, (f) -> f.setMetadata(metadata))
.setStatus(InputFile.Status.ADDED)
.setCharset(StandardCharsets.ISO_8859_1);
@@ -103,7 +103,7 @@ public class DefaultInputFileTest {
assertThat(Files.readAllLines(testFile, StandardCharsets.ISO_8859_1).get(0)).hasSize(content.length());
- Metadata metadata = new Metadata(42, 30, "", new int[0], 0);
+ Metadata metadata = new Metadata(42, 30, "", new int[0], new int[0], 10);
DefaultInputFile inputFile = new DefaultInputFile(indexedFile, f -> f.setMetadata(metadata))
.setStatus(InputFile.Status.ADDED)
@@ -129,7 +129,7 @@ public class DefaultInputFileTest {
assertThat(Files.readAllLines(testFile, StandardCharsets.UTF_8).get(0)).hasSize(content.length() + 1);
- Metadata metadata = new Metadata(42, 30, "", new int[0], 0);
+ Metadata metadata = new Metadata(42, 30, "", new int[0], new int[0], 10);
DefaultInputFile inputFile = new DefaultInputFile(indexedFile, f -> f.setMetadata(metadata))
.setStatus(InputFile.Status.ADDED)
@@ -167,7 +167,7 @@ public class DefaultInputFileTest {
@Test
public void checkValidPointer() {
- Metadata metadata = new Metadata(2, 2, "", new int[] {0, 10}, 15);
+ Metadata metadata = new Metadata(2, 2, "", new int[] {0, 10}, new int[] {9, 15}, 16);
DefaultInputFile file = new DefaultInputFile(new DefaultIndexedFile("ABCDE", Paths.get("module"), MODULE_RELATIVE_PATH, null), f -> f.setMetadata(metadata));
assertThat(file.newPointer(1, 0).line()).isEqualTo(1);
assertThat(file.newPointer(1, 0).lineOffset()).isEqualTo(0);
@@ -204,13 +204,14 @@ public class DefaultInputFileTest {
@Test
public void checkValidPointerUsingGlobalOffset() {
- Metadata metadata = new Metadata(2, 2, "", new int[] {0, 10}, 15);
+ Metadata metadata = new Metadata(2, 2, "", new int[] {0, 10}, new int[] {8, 15}, 16);
DefaultInputFile file = new DefaultInputFile(new DefaultIndexedFile("ABCDE", Paths.get("module"), MODULE_RELATIVE_PATH, null), f -> f.setMetadata(metadata));
assertThat(file.newPointer(0).line()).isEqualTo(1);
assertThat(file.newPointer(0).lineOffset()).isEqualTo(0);
assertThat(file.newPointer(9).line()).isEqualTo(1);
- assertThat(file.newPointer(9).lineOffset()).isEqualTo(9);
+ // Ignore eol characters
+ assertThat(file.newPointer(9).lineOffset()).isEqualTo(8);
assertThat(file.newPointer(10).line()).isEqualTo(2);
assertThat(file.newPointer(10).lineOffset()).isEqualTo(0);
@@ -218,6 +219,10 @@ public class DefaultInputFileTest {
assertThat(file.newPointer(15).line()).isEqualTo(2);
assertThat(file.newPointer(15).lineOffset()).isEqualTo(5);
+ assertThat(file.newPointer(16).line()).isEqualTo(2);
+ // Ignore eol characters
+ assertThat(file.newPointer(16).lineOffset()).isEqualTo(5);
+
try {
file.newPointer(-1);
fail();
@@ -226,10 +231,10 @@ public class DefaultInputFileTest {
}
try {
- file.newPointer(16);
+ file.newPointer(17);
fail();
} catch (Exception e) {
- assertThat(e).hasMessage("16 is not a valid offset for file src/Foo.php. Max offset is 15");
+ assertThat(e).hasMessage("17 is not a valid offset for file src/Foo.php. Max offset is 16");
}
}
@@ -285,7 +290,7 @@ public class DefaultInputFileTest {
@Test
public void checkValidRangeUsingGlobalOffset() {
- Metadata metadata = new Metadata(2, 2, "", new int[] {0, 10}, 15);
+ Metadata metadata = new Metadata(2, 2, "", new int[] {0, 10}, new int[] {9, 15}, 16);
DefaultInputFile file = new DefaultInputFile(new DefaultIndexedFile("ABCDE", Paths.get("module"), MODULE_RELATIVE_PATH, null), f -> f.setMetadata(metadata));
TextRange newRange = file.newRange(10, 13);
assertThat(newRange.start().line()).isEqualTo(2);
@@ -296,7 +301,7 @@ public class DefaultInputFileTest {
@Test
public void testRangeOverlap() {
- Metadata metadata = new Metadata(2, 2, "", new int[] {0, 10}, 15);
+ Metadata metadata = new Metadata(2, 2, "", new int[] {0, 10}, new int[] {9, 15}, 16);
DefaultInputFile file = new DefaultInputFile(new DefaultIndexedFile("ABCDE", Paths.get("module"), MODULE_RELATIVE_PATH, null), f -> f.setMetadata(metadata));
// Don't fail
assertThat(file.newRange(file.newPointer(1, 0), file.newPointer(1, 1)).overlap(file.newRange(file.newPointer(1, 0), file.newPointer(1, 1)))).isTrue();
diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/batch/fs/internal/FileMetadataTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/batch/fs/internal/FileMetadataTest.java
index bc3237510bb..d2934e97af5 100644
--- a/sonar-plugin-api/src/test/java/org/sonar/api/batch/fs/internal/FileMetadataTest.java
+++ b/sonar-plugin-api/src/test/java/org/sonar/api/batch/fs/internal/FileMetadataTest.java
@@ -59,8 +59,9 @@ public class FileMetadataTest {
assertThat(metadata.lines()).isEqualTo(1);
assertThat(metadata.nonBlankLines()).isEqualTo(0);
assertThat(metadata.hash()).isNotEmpty();
- assertThat(metadata.originalLineOffsets()).containsOnly(0);
- assertThat(metadata.lastValidOffset()).isEqualTo(0);
+ assertThat(metadata.originalLineStartOffsets()).containsOnly(0);
+ assertThat(metadata.originalLineEndOffsets()).containsOnly(0);
+ assertThat(metadata.isEmpty()).isTrue();
}
@Test
@@ -72,8 +73,9 @@ public class FileMetadataTest {
assertThat(metadata.lines()).isEqualTo(3);
assertThat(metadata.nonBlankLines()).isEqualTo(3);
assertThat(metadata.hash()).isEqualTo(md5Hex("foo\nbar\nbaz"));
- assertThat(metadata.originalLineOffsets()).containsOnly(0, 5, 10);
- assertThat(metadata.lastValidOffset()).isEqualTo(13);
+ assertThat(metadata.originalLineStartOffsets()).containsOnly(0, 5, 10);
+ assertThat(metadata.originalLineEndOffsets()).containsOnly(3, 8, 13);
+ assertThat(metadata.isEmpty()).isFalse();
}
@Test
@@ -84,7 +86,7 @@ public class FileMetadataTest {
Metadata metadata = new FileMetadata().readMetadata(new FileInputStream(tempFile), StandardCharsets.UTF_8, tempFile.getName());
assertThat(metadata.lines()).isEqualTo(2);
assertThat(metadata.hash()).isEqualTo(md5Hex("marker\ufffds\n"));
- assertThat(metadata.originalLineOffsets()).containsOnly(0, 9);
+ assertThat(metadata.originalLineStartOffsets()).containsOnly(0, 9);
}
@Test
@@ -96,7 +98,7 @@ public class FileMetadataTest {
assertThat(metadata.lines()).isEqualTo(4);
assertThat(metadata.nonBlankLines()).isEqualTo(3);
assertThat(metadata.hash()).isEqualTo(md5Hex("föo\nbàr\n\u1D11Ebaßz\n"));
- assertThat(metadata.originalLineOffsets()).containsOnly(0, 5, 10, 18);
+ assertThat(metadata.originalLineStartOffsets()).containsOnly(0, 5, 10, 18);
}
@Test
@@ -107,7 +109,7 @@ public class FileMetadataTest {
assertThat(metadata.lines()).isEqualTo(4);
assertThat(metadata.nonBlankLines()).isEqualTo(3);
assertThat(metadata.hash()).isEqualTo(md5Hex("föo\nbàr\n\u1D11Ebaßz\n".getBytes(StandardCharsets.UTF_8)));
- assertThat(metadata.originalLineOffsets()).containsOnly(0, 5, 10, 18);
+ assertThat(metadata.originalLineStartOffsets()).containsOnly(0, 5, 10, 18);
}
@Test
@@ -119,8 +121,9 @@ public class FileMetadataTest {
assertThat(metadata.lines()).isEqualTo(3);
assertThat(metadata.nonBlankLines()).isEqualTo(3);
assertThat(metadata.hash()).isEqualTo(md5Hex("foo\nbar\nbaz"));
- assertThat(metadata.originalLineOffsets()).containsOnly(0, 4, 8);
- assertThat(metadata.lastValidOffset()).isEqualTo(11);
+ assertThat(metadata.originalLineStartOffsets()).containsOnly(0, 4, 8);
+ assertThat(metadata.originalLineEndOffsets()).containsOnly(3, 7, 11);
+ assertThat(metadata.isEmpty()).isFalse();
}
@Test
@@ -132,8 +135,8 @@ public class FileMetadataTest {
assertThat(metadata.lines()).isEqualTo(4);
assertThat(metadata.nonBlankLines()).isEqualTo(3);
assertThat(metadata.hash()).isEqualTo(md5Hex("foo\nbar\nbaz\n"));
- assertThat(metadata.originalLineOffsets()).containsOnly(0, 4, 8, 12);
- assertThat(metadata.lastValidOffset()).isEqualTo(12);
+ assertThat(metadata.originalLineStartOffsets()).containsOnly(0, 4, 8, 12);
+ assertThat(metadata.originalLineEndOffsets()).containsOnly(3, 7, 11, 12);
}
@Test
@@ -145,8 +148,8 @@ public class FileMetadataTest {
assertThat(metadata.lines()).isEqualTo(3);
assertThat(metadata.nonBlankLines()).isEqualTo(3);
assertThat(metadata.hash()).isEqualTo(md5Hex("foo\nbar\nbaz"));
- assertThat(metadata.originalLineOffsets()).containsOnly(0, 4, 8);
- assertThat(metadata.lastValidOffset()).isEqualTo(11);
+ assertThat(metadata.originalLineStartOffsets()).containsOnly(0, 4, 8);
+ assertThat(metadata.originalLineEndOffsets()).containsOnly(3, 7, 11);
}
@Test
@@ -158,8 +161,8 @@ public class FileMetadataTest {
assertThat(metadata.lines()).isEqualTo(4);
assertThat(metadata.nonBlankLines()).isEqualTo(3);
assertThat(metadata.hash()).isEqualTo(md5Hex("foo\nbar\nbaz\n"));
- assertThat(metadata.originalLineOffsets()).containsOnly(0, 4, 8, 12);
- assertThat(metadata.lastValidOffset()).isEqualTo(12);
+ assertThat(metadata.originalLineStartOffsets()).containsOnly(0, 4, 8, 12);
+ assertThat(metadata.originalLineEndOffsets()).containsOnly(3, 7, 11, 12);
}
@Test
@@ -171,7 +174,8 @@ public class FileMetadataTest {
assertThat(metadata.lines()).isEqualTo(4);
assertThat(metadata.nonBlankLines()).isEqualTo(3);
assertThat(metadata.hash()).isEqualTo(md5Hex("foo\nbar\nbaz\n"));
- assertThat(metadata.originalLineOffsets()).containsOnly(0, 4, 9, 13);
+ assertThat(metadata.originalLineStartOffsets()).containsOnly(0, 4, 9, 13);
+ assertThat(metadata.originalLineEndOffsets()).containsOnly(3, 7, 12, 13);
}
@Test
@@ -183,7 +187,8 @@ public class FileMetadataTest {
assertThat(metadata.lines()).isEqualTo(4);
assertThat(metadata.nonBlankLines()).isEqualTo(2);
assertThat(metadata.hash()).isEqualTo(md5Hex("foo\n\n\nbar"));
- assertThat(metadata.originalLineOffsets()).containsOnly(0, 4, 5, 6);
+ assertThat(metadata.originalLineStartOffsets()).containsOnly(0, 4, 5, 6);
+ assertThat(metadata.originalLineEndOffsets()).containsOnly(3, 4, 5, 9);
}
@Test
@@ -195,7 +200,8 @@ public class FileMetadataTest {
assertThat(metadata.lines()).isEqualTo(3);
assertThat(metadata.nonBlankLines()).isEqualTo(3);
assertThat(metadata.hash()).isEqualTo(md5Hex("foo\nbar\nbaz"));
- assertThat(metadata.originalLineOffsets()).containsOnly(0, 4, 9);
+ assertThat(metadata.originalLineStartOffsets()).containsOnly(0, 4, 9);
+ assertThat(metadata.originalLineEndOffsets()).containsOnly(3, 7, 12);
}
@Test
@@ -207,7 +213,8 @@ public class FileMetadataTest {
assertThat(metadata.lines()).isEqualTo(4);
assertThat(metadata.nonBlankLines()).isEqualTo(3);
assertThat(metadata.hash()).isEqualTo(md5Hex("\nfoo\nbar\nbaz"));
- assertThat(metadata.originalLineOffsets()).containsOnly(0, 1, 5, 10);
+ assertThat(metadata.originalLineStartOffsets()).containsOnly(0, 1, 5, 10);
+ assertThat(metadata.originalLineEndOffsets()).containsOnly(0, 4, 8, 13);
}
@Test
diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/batch/fs/internal/MetadataTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/batch/fs/internal/MetadataTest.java
index adeac3af82a..981eebec98a 100644
--- a/sonar-plugin-api/src/test/java/org/sonar/api/batch/fs/internal/MetadataTest.java
+++ b/sonar-plugin-api/src/test/java/org/sonar/api/batch/fs/internal/MetadataTest.java
@@ -26,11 +26,13 @@ import org.junit.Test;
public class MetadataTest {
@Test
public void testRoundtrip() {
- Metadata metadata = new Metadata(10, 20, "hash", new int[] {1, 2}, 30);
- assertThat(metadata.lastValidOffset()).isEqualTo(30);
+ Metadata metadata = new Metadata(10, 20, "hash", new int[] {1, 3}, new int[] {2, 4}, 5);
+ assertThat(metadata.isEmpty()).isFalse();
assertThat(metadata.lines()).isEqualTo(10);
assertThat(metadata.nonBlankLines()).isEqualTo(20);
- assertThat(metadata.originalLineOffsets()).isEqualTo(new int[] {1, 2});
+ assertThat(metadata.originalLineStartOffsets()).isEqualTo(new int[] {1, 3});
+ assertThat(metadata.originalLineEndOffsets()).isEqualTo(new int[] {2, 4});
+ assertThat(metadata.lastValidOffset()).isEqualTo(5);
assertThat(metadata.hash()).isEqualTo("hash");
}
}
diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/batch/sensor/cpd/internal/DefaultCpdTokensTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/batch/sensor/cpd/internal/DefaultCpdTokensTest.java
index f6cff7aca46..19b0faa04fc 100644
--- a/sonar-plugin-api/src/test/java/org/sonar/api/batch/sensor/cpd/internal/DefaultCpdTokensTest.java
+++ b/sonar-plugin-api/src/test/java/org/sonar/api/batch/sensor/cpd/internal/DefaultCpdTokensTest.java
@@ -37,8 +37,9 @@ public class DefaultCpdTokensTest {
private static final InputFile INPUT_FILE = new TestInputFileBuilder("foo", "src/Foo.java")
.setLines(2)
- .setOriginalLineOffsets(new int[] {0, 50})
- .setLastValidOffset(100)
+ .setOriginalLineStartOffsets(new int[] {0, 50})
+ .setOriginalLineEndOffsets(new int[] {49, 100})
+ .setLastValidOffset(101)
.build();
@Test
@@ -146,7 +147,7 @@ public class DefaultCpdTokensTest {
tokens.addToken(INPUT_FILE.newRange(1, 2, 1, 5), "foo");
fail("Expected exception");
} catch (Exception e) {
- assertThat(e).hasMessage("Tokens of file src" + File.separator + "Foo.java should be provided in order.\n" +
+ assertThat(e).hasMessage("Tokens of file src/Foo.java should be provided in order.\n" +
"Previous token: Range[from [line=1, lineOffset=6] to [line=1, lineOffset=10]]\n" +
"Last token: Range[from [line=1, lineOffset=2] to [line=1, lineOffset=5]]");
}
diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/batch/sensor/highlighting/internal/DefaultHighlightingTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/batch/sensor/highlighting/internal/DefaultHighlightingTest.java
index e20c6e3050a..8b9b4755eee 100644
--- a/sonar-plugin-api/src/test/java/org/sonar/api/batch/sensor/highlighting/internal/DefaultHighlightingTest.java
+++ b/sonar-plugin-api/src/test/java/org/sonar/api/batch/sensor/highlighting/internal/DefaultHighlightingTest.java
@@ -41,8 +41,9 @@ public class DefaultHighlightingTest {
private static final InputFile INPUT_FILE = new TestInputFileBuilder("foo", "src/Foo.java")
.setLines(2)
- .setOriginalLineOffsets(new int[] {0, 50})
- .setLastValidOffset(100)
+ .setOriginalLineStartOffsets(new int[] {0, 50})
+ .setOriginalLineEndOffsets(new int[] {49, 100})
+ .setLastValidOffset(101)
.build();
private Collection<SyntaxHighlightingRule> highlightingRules;
diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/batch/sensor/symbol/internal/DefaultSymbolTableTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/batch/sensor/symbol/internal/DefaultSymbolTableTest.java
index 68e37d8a899..4d7ff101f32 100644
--- a/sonar-plugin-api/src/test/java/org/sonar/api/batch/sensor/symbol/internal/DefaultSymbolTableTest.java
+++ b/sonar-plugin-api/src/test/java/org/sonar/api/batch/sensor/symbol/internal/DefaultSymbolTableTest.java
@@ -37,8 +37,9 @@ public class DefaultSymbolTableTest {
private static final InputFile INPUT_FILE = new TestInputFileBuilder("foo", "src/Foo.java")
.setLines(2)
- .setOriginalLineOffsets(new int[] {0, 50})
- .setLastValidOffset(100)
+ .setOriginalLineStartOffsets(new int[] {0, 50})
+ .setOriginalLineEndOffsets(new int[] {49, 100})
+ .setLastValidOffset(101)
.build();
private Map<TextRange, Set<TextRange>> referencesPerSymbol;