@Test public void read_one_syntax_highlighting_on_many_lines() { // This highlighting begin on line 1 and finish on line 3 TextRange textRange = newTextRange(LINE_1, LINE_3); when(rangeOffsetConverter.offsetToString(textRange, LINE_1, DEFAULT_LINE_LENGTH)).thenReturn(RANGE_LABEL_1); when(rangeOffsetConverter.offsetToString(textRange, LINE_2, 6)).thenReturn(RANGE_LABEL_2); when(rangeOffsetConverter.offsetToString(textRange, LINE_3, DEFAULT_LINE_LENGTH)).thenReturn(RANGE_LABEL_3); HighlightingLineReader highlightingLineReader = newReader(of(textRange, ANNOTATION)); assertThat(highlightingLineReader.read(line1)).isEmpty(); DbFileSources.Line.Builder line2 = sourceData.addLinesBuilder().setSource("line 2").setLine(2); assertThat(highlightingLineReader.read(line2)).isEmpty(); assertThat(highlightingLineReader.read(line3)).isEmpty(); assertThat(line1.getHighlighting()).isEqualTo(RANGE_LABEL_1 + ",a"); assertThat(line2.getHighlighting()).isEqualTo(RANGE_LABEL_2 + ",a"); assertThat(line3.getHighlighting()).isEqualTo(RANGE_LABEL_3 + ",a"); }
@Test public void persist_sources() { List<String> lineHashes = Arrays.asList("137f72c3708c6bd0de00a0e5a69c699b", "e6251bcf1a7dc3ba5e7933e325bbe605"); String sourceHash = "ee5a58024a155466b43bc559d953e018"; DbFileSources.Data fileSourceData = DbFileSources.Data.newBuilder() .addAllLines(Arrays.asList( DbFileSources.Line.newBuilder().setSource("line1").setLine(1).build(), DbFileSources.Line.newBuilder().setSource("line2").setLine(2).build())) .build(); when(fileSourceDataComputer.compute(fileComponent().build(), fileSourceDataWarnings)) .thenReturn(new FileSourceDataComputer.Data(fileSourceData, lineHashes, sourceHash, null)); underTest.execute(new TestComputationStepContext()); assertThat(dbTester.countRowsOfTable("file_sources")).isEqualTo(1); FileSourceDto fileSourceDto = dbClient.fileSourceDao().selectByFileUuid(session, FILE1_UUID); assertThat(fileSourceDto.getProjectUuid()).isEqualTo(PROJECT_UUID); assertThat(fileSourceDto.getFileUuid()).isEqualTo(FILE1_UUID); assertThat(fileSourceDto.getBinaryData()).isNotEmpty(); assertThat(fileSourceDto.getDataHash()).isNotEmpty(); assertThat(fileSourceDto.getLineHashesVersion()).isEqualTo(LineHashVersion.WITHOUT_SIGNIFICANT_CODE.getDbValue()); assertThat(fileSourceDto.getLineHashes()).isNotEmpty(); assertThat(fileSourceDto.getCreatedAt()).isEqualTo(NOW); assertThat(fileSourceDto.getUpdatedAt()).isEqualTo(NOW); DbFileSources.Data data = fileSourceDto.getSourceData(); assertThat(data.getLinesCount()).isEqualTo(2); assertThat(data.getLines(0).getLine()).isEqualTo(1); assertThat(data.getLines(0).getSource()).isEqualTo("line1"); assertThat(data.getLines(1).getLine()).isEqualTo(2); assertThat(data.getLines(1).getSource()).isEqualTo("line2"); verify(fileSourceDataWarnings).commitWarnings(); }
@Test public void update_sources_when_revision_is_missing() { DbFileSources.Data sourceData = DbFileSources.Data.newBuilder() .addLines(DbFileSources.Line.newBuilder() .setLine(1) .setSource("line") .build()) .build(); dbClient.fileSourceDao().insert(dbTester.getSession(), createDto(dto -> dto.setRevision(null))); dbTester.getSession().commit(); Changeset changeset = Changeset.newChangesetBuilder().setDate(1L).setRevision("revision").build(); setComputedData(sourceData, Collections.singletonList("137f72c3708c6bd0de00a0e5a69c699b"), "29f25900140c94db38035128cb6de6a2", changeset); underTest.execute(new TestComputationStepContext()); assertThat(dbTester.countRowsOfTable("file_sources")).isEqualTo(1); FileSourceDto fileSourceDto = dbClient.fileSourceDao().selectByFileUuid(session, FILE1_UUID); assertThat(fileSourceDto.getCreatedAt()).isEqualTo(PAST); assertThat(fileSourceDto.getUpdatedAt()).isEqualTo(NOW); assertThat(fileSourceDto.getRevision()).isEqualTo("revision"); verify(fileSourceDataWarnings).commitWarnings(); }
private void read(DbFileSources.Data.Builder fileSourceBuilder, int currentLine, String lineSource, boolean hasNextLine) { sourceHashComputer.addLine(lineSource, hasNextLine); lineHashesComputer.addLine(lineSource); DbFileSources.Line.Builder lineBuilder = fileSourceBuilder .addLinesBuilder() .setSource(lineSource) .setLine(currentLine); for (LineReader lineReader : lineReaders) { lineReader.read(lineBuilder); } }
public Data compute(Component file, FileSourceDataWarnings fileSourceDataWarnings) { try (CloseableIterator<String> linesIterator = sourceLinesRepository.readLines(file); SourceLineReadersFactory.LineReaders lineReaders = sourceLineReadersFactory.getLineReaders(file)) { SourceLinesHashRepositoryImpl.LineHashesComputer lineHashesComputer = sourceLinesHash.getLineHashesComputerToPersist(file); DbFileSources.Data.Builder fileSourceBuilder = DbFileSources.Data.newBuilder(); int currentLine = 0; while (linesIterator.hasNext()) { currentLine++; String lineSource = linesIterator.next(); boolean hasNextLine = linesIterator.hasNext(); sourceHashComputer.addLine(lineSource, hasNextLine); lineHashesComputer.addLine(lineSource); DbFileSources.Line.Builder lineBuilder = fileSourceBuilder .addLinesBuilder() .setSource(lineSource) .setLine(currentLine); lineReaders.read(lineBuilder, readError -> fileSourceDataWarnings.addWarning(file, readError)); } Changeset latestChangeWithRevision = lineReaders.getLatestChangeWithRevision(); return new Data(fileSourceBuilder.build(), lineHashesComputer.getResult(), sourceHashComputer.getHash(), latestChangeWithRevision); } }
private static DbFileSources.Data.Builder newRandomData(int numberOfLines) { DbFileSources.Data.Builder dataBuilder = DbFileSources.Data.newBuilder(); for (int i = 1; i <= numberOfLines; i++) { dataBuilder.addLinesBuilder() .setLine(i) .setScmRevision(randomAlphanumeric(15)) .setScmAuthor(randomAlphanumeric(10)) .setScmDate(RandomUtils.nextLong()) .setSource(randomAlphanumeric(20)) .setLineHits(RandomUtils.nextInt(4)) .setConditions(RandomUtils.nextInt(4)) .setCoveredConditions(RandomUtils.nextInt(4)) .setHighlighting(randomAlphanumeric(40)) .setSymbols(randomAlphanumeric(30)) .addAllDuplication(Arrays.asList(RandomUtils.nextInt(200), RandomUtils.nextInt(200))) .build(); } return dataBuilder; } }
@Test public void raw_from_branch_file() { ComponentDto project = db.components().insertMainBranch(); userSession.addProjectPermission(UserRole.CODEVIEWER, project); ComponentDto branch = db.components().insertProjectBranch(project); ComponentDto file = db.components().insertComponent(newFileDto(branch)); db.fileSources().insertFileSource(file, s -> s.setSourceData( Data.newBuilder() .addLines(Line.newBuilder().setLine(1).setSource("public class HelloWorld {").build()) .addLines(Line.newBuilder().setLine(2).setSource("}").build()) .build())); String result = ws.newRequest() .setParam("key", file.getKey()) .setParam("branch", file.getBranch()) .execute().getInput(); assertThat(result).isEqualTo("public class HelloWorld {\n}\n"); }
@Test public void raw_from_file() { ComponentDto project = db.components().insertPrivateProject(); userSession.addProjectPermission(UserRole.CODEVIEWER, project); ComponentDto file = db.components().insertComponent(newFileDto(project)); db.fileSources().insertFileSource(file, s -> s.setSourceData( Data.newBuilder() .addLines(Line.newBuilder().setLine(1).setSource("public class HelloWorld {").build()) .addLines(Line.newBuilder().setLine(2).setSource("}").build()) .build())); String result = ws.newRequest() .setParam("key", file.getKey()) .execute().getInput(); assertThat(result).isEqualTo("public class HelloWorld {\n}\n"); }
private static DbFileSources.Data createOver64MBDataStructure() { DbFileSources.Data.Builder dataBuilder = DbFileSources.Data.newBuilder(); DbFileSources.Line.Builder lineBuilder = DbFileSources.Line.newBuilder(); for (int i = 0; i < 199999; i++) { dataBuilder.addLines( lineBuilder.setSource(LOREM_IPSUM) .setLine(i) .build()); } return dataBuilder.build(); }
private static DbFileSources.Data newData(String... lines) { DbFileSources.Data.Builder dataBuilder = DbFileSources.Data.newBuilder(); for (int i = 1; i <= lines.length; i++) { dataBuilder.addLinesBuilder() .setLine(i) .setSource(lines[i - 1]) .build(); } return dataBuilder.build(); }
private DbFileSources.Line.Builder addSourceLine(HighlightingLineReader highlightingLineReader, int line, String source) { DbFileSources.Line.Builder lineBuilder = sourceData.addLinesBuilder().setSource(source).setLine(line); assertThat(highlightingLineReader.read(lineBuilder)).isEmpty(); return lineBuilder; }