public TestInputFileBuilder setMetadata(Metadata metadata) { this.setLines(metadata.lines()); this.setLastValidOffset(metadata.lastValidOffset()); this.setNonBlankLines(metadata.nonBlankLines()); this.setHash(metadata.hash()); this.setOriginalLineStartOffsets(metadata.originalLineStartOffsets()); this.setOriginalLineEndOffsets(metadata.originalLineEndOffsets()); return this; }
@Test public void testRoundtrip() { 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.originalLineStartOffsets()).isEqualTo(new int[] {1, 3}); assertThat(metadata.originalLineEndOffsets()).isEqualTo(new int[] {2, 4}); assertThat(metadata.lastValidOffset()).isEqualTo(5); assertThat(metadata.hash()).isEqualTo("hash"); } }
public int[] originalLineStartOffsets() { checkMetadata(); Preconditions.checkState(metadata.originalLineStartOffsets() != null, "InputFile is not properly initialized."); Preconditions.checkState(metadata.originalLineStartOffsets().length == metadata.lines(), "InputFile is not properly initialized. 'originalLineStartOffsets' property length should be equal to 'lines'"); return metadata.originalLineStartOffsets(); }
public int[] originalLineEndOffsets() { checkMetadata(); Preconditions.checkState(metadata.originalLineEndOffsets() != null, "InputFile is not properly initialized."); Preconditions.checkState(metadata.originalLineEndOffsets().length == metadata.lines(), "InputFile is not properly initialized. 'originalLineEndOffsets' property length should be equal to 'lines'"); return metadata.originalLineEndOffsets(); }
/** * Digest hash of the file. */ public String hash() { checkMetadata(); return metadata.hash(); }
@Test public void binary_file_with_unmappable_character() throws Exception { File woff = new File(this.getClass().getResource("glyphicons-halflings-regular.woff").toURI()); Metadata metadata = new FileMetadata().readMetadata(new FileInputStream(woff), StandardCharsets.UTF_8, woff.getAbsolutePath()); assertThat(metadata.lines()).isEqualTo(135); assertThat(metadata.nonBlankLines()).isEqualTo(133); assertThat(metadata.hash()).isNotEmpty(); assertThat(logTester.logs(LoggerLevel.WARN).get(0)).contains("Invalid character encountered in file"); assertThat(logTester.logs(LoggerLevel.WARN).get(0)).contains( "glyphicons-halflings-regular.woff at line 1 for encoding UTF-8. Please fix file content or configure the encoding to be used using property 'sonar.sourceEncoding'."); }
@Test public void read_with_wrong_encoding() throws Exception { File tempFile = temp.newFile(); FileUtils.write(tempFile, "marker´s\n", Charset.forName("cp1252")); 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.originalLineStartOffsets()).containsOnly(0, 9); }
public DefaultInputFile build() { Path absolutePath = moduleBaseDir.resolve(relativePath); if (projectBaseDir == null) { projectBaseDir = moduleBaseDir; } String projectRelativePath = projectBaseDir.relativize(absolutePath).toString(); DefaultIndexedFile indexedFile = new DefaultIndexedFile(absolutePath, projectKey, projectRelativePath, relativePath, type, language, id, new SensorStrategy()); DefaultInputFile inputFile = new DefaultInputFile(indexedFile, f -> f.setMetadata(new Metadata(lines, nonBlankLines, hash, originalLineStartOffsets, originalLineEndOffsets, lastValidOffset)), contents); inputFile.setStatus(status); inputFile.setCharset(charset); inputFile.setPublished(publish); return inputFile; }
@Override public int lines() { checkMetadata(); return metadata.lines(); }
@Override public boolean isEmpty() { checkMetadata(); return metadata.isEmpty(); }
public int lastValidOffset() { checkMetadata(); return metadata.lastValidOffset(); }
public int nonBlankLines() { checkMetadata(); return metadata.nonBlankLines(); }
@Test public void line_feed_is_included_into_hash() throws Exception { File file1 = temp.newFile(); FileUtils.write(file1, "foo\nbar\n", StandardCharsets.UTF_8, true); // same as file1, except an additional return carriage File file1a = temp.newFile(); FileUtils.write(file1a, "foo\r\nbar\n", StandardCharsets.UTF_8, true); File file2 = temp.newFile(); FileUtils.write(file2, "foo\nbar", StandardCharsets.UTF_8, true); String hash1 = new FileMetadata().readMetadata(new FileInputStream(file1), StandardCharsets.UTF_8, file1.getName()).hash(); String hash1a = new FileMetadata().readMetadata(new FileInputStream(file1a), StandardCharsets.UTF_8, file1a.getName()).hash(); String hash2 = new FileMetadata().readMetadata(new FileInputStream(file2), StandardCharsets.UTF_8, file2.getName()).hash(); assertThat(hash1).isEqualTo(hash1a); assertThat(hash1).isNotEqualTo(hash2); }
@Test public void test_content() throws IOException { Path testFile = baseDir.resolve(PROJECT_RELATIVE_PATH); Files.createDirectories(testFile.getParent()); String content = "test é string"; Files.write(testFile, content.getBytes(StandardCharsets.ISO_8859_1)); assertThat(Files.readAllLines(testFile, StandardCharsets.ISO_8859_1).get(0)).hasSize(content.length()); 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) .setCharset(StandardCharsets.ISO_8859_1); assertThat(inputFile.contents()).isEqualTo(content); try (InputStream inputStream = inputFile.inputStream()) { String result = new BufferedReader(new InputStreamReader(inputStream, inputFile.charset())).lines().collect(Collectors.joining()); assertThat(result).isEqualTo(content); } }
public int[] originalLineStartOffsets() { checkMetadata(); Preconditions.checkState(metadata.originalLineStartOffsets() != null, "InputFile is not properly initialized."); Preconditions.checkState(metadata.originalLineStartOffsets().length == metadata.lines(), "InputFile is not properly initialized. 'originalLineStartOffsets' property length should be equal to 'lines'"); return metadata.originalLineStartOffsets(); }
public int[] originalLineEndOffsets() { checkMetadata(); Preconditions.checkState(metadata.originalLineEndOffsets() != null, "InputFile is not properly initialized."); Preconditions.checkState(metadata.originalLineEndOffsets().length == metadata.lines(), "InputFile is not properly initialized. 'originalLineEndOffsets' property length should be equal to 'lines'"); return metadata.originalLineEndOffsets(); }
private void checkValid(TextPointer pointer, String owner) { Preconditions.checkArgument(pointer.line() >= 1, "%s is not a valid line for a file", pointer.line()); Preconditions.checkArgument(pointer.line() <= this.metadata.lines(), "%s is not a valid line for %s. File %s has %s line(s)", pointer.line(), owner, this, metadata.lines()); Preconditions.checkArgument(pointer.lineOffset() >= 0, "%s is not a valid line offset for a file", pointer.lineOffset()); int lineLength = lineLength(pointer.line()); Preconditions.checkArgument(pointer.lineOffset() <= lineLength, "%s is not a valid line offset for %s. File %s has %s character(s) at line %s", pointer.lineOffset(), owner, this, lineLength, pointer.line()); }
@Override public boolean isEmpty() { checkMetadata(); return metadata.isEmpty(); }
public int lastValidOffset() { checkMetadata(); return metadata.lastValidOffset(); }
public int nonBlankLines() { checkMetadata(); return metadata.nonBlankLines(); }