diff options
author | Julien HENRY <julien.henry@sonarsource.com> | 2018-09-17 16:59:39 +0200 |
---|---|---|
committer | SonarTech <sonartech@sonarsource.com> | 2018-09-24 20:20:57 +0200 |
commit | 1241f18a7b389336ce1eb98fe024f8db0bc5c627 (patch) | |
tree | c0f533c2afbff0b6271d0ee0575eda4e4834153a /sonar-plugin-api/src/test | |
parent | 3e5ce7c6fc3ccffc09ff6cb630b641c3ce101432 (diff) | |
download | sonarqube-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')
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; |