blob: 13528719833f42ce6877f52dacf3a127506ad3cc [file] [log] [blame]
/*
* Copyright (c) 2024 Qualcomm Innovation Center, Inc.
* and other copyright owners as documented in the project's IP log.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Distribution License v. 1.0 which is available at
* https://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
package org.eclipse.jgit.diff;
import static org.junit.Assert.assertEquals;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Arrays;
import java.util.stream.Collectors;
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.errors.GitAPIException;
import org.eclipse.jgit.junit.JGitTestUtil;
import org.eclipse.jgit.junit.RepositoryTestCase;
import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.jgit.treewalk.CanonicalTreeParser;
import org.junit.Test;
public class DiffFormatterBuiltInDriverTest extends RepositoryTestCase {
@Test
public void testCppDriver() throws Exception {
String fileName = "greeting.c";
String body = Files.readString(
Path.of(JGitTestUtil.getTestResourceFile(fileName)
.getAbsolutePath()));
RevCommit c1;
RevCommit c2;
try (Git git = new Git(db)) {
createCommit(git, ".gitattributes", "*.c diff=cpp");
c1 = createCommit(git, fileName, body);
c2 = createCommit(git, fileName,
body.replace("Good day", "Greetings")
.replace("baz", "qux"));
}
try (ByteArrayOutputStream os = new ByteArrayOutputStream();
DiffFormatter diffFormatter = new DiffFormatter(os)) {
String actual = getHunkHeaders(c1, c2, os, diffFormatter);
String expected =
"@@ -27,7 +27,7 @@ void getPersonalizedGreeting(char *result, const char *name, const char *timeOfD\n"
+ "@@ -37,7 +37,7 @@ int main() {";
assertEquals(expected, actual);
}
}
@Test
public void testDtsDriver() throws Exception {
String fileName = "sample.dtsi";
String body = Files.readString(
Path.of(JGitTestUtil.getTestResourceFile(fileName)
.getAbsolutePath()));
RevCommit c1;
RevCommit c2;
try (Git git = new Git(db)) {
createCommit(git, ".gitattributes", "*.dtsi diff=dts");
c1 = createCommit(git, fileName, body);
c2 = createCommit(git, fileName,
body.replace("clock-frequency = <24000000>",
"clock-frequency = <48000000>"));
}
try (ByteArrayOutputStream os = new ByteArrayOutputStream();
DiffFormatter diffFormatter = new DiffFormatter(os)) {
String actual = getHunkHeaders(c1, c2, os, diffFormatter);
String expected = "@@ -20,6 +20,6 @@ uart0: uart@101f1000 {";
assertEquals(expected, actual);
}
}
@Test
public void testJavaDriver() throws Exception {
String resourceName = "greeting.javasource";
String body = Files.readString(
Path.of(JGitTestUtil.getTestResourceFile(resourceName)
.getAbsolutePath()));
RevCommit c1;
RevCommit c2;
try (Git git = new Git(db)) {
createCommit(git, ".gitattributes", "*.java diff=java");
String fileName = "Greeting.java";
c1 = createCommit(git, fileName, body);
c2 = createCommit(git, fileName,
body.replace("Good day", "Greetings")
.replace("baz", "qux"));
}
try (ByteArrayOutputStream os = new ByteArrayOutputStream();
DiffFormatter diffFormatter = new DiffFormatter(os)) {
String actual = getHunkHeaders(c1, c2, os, diffFormatter);
String expected =
"@@ -22,7 +22,7 @@ public String getPersonalizedGreeting(String name, String timeOfDay) {\n"
+ "@@ -32,6 +32,6 @@ public static void main(String[] args) {";
assertEquals(expected, actual);
}
}
@Test
public void testPythonDriver() throws Exception {
String fileName = "greeting.py";
String body = Files.readString(
Path.of(JGitTestUtil.getTestResourceFile(fileName)
.getAbsolutePath()));
RevCommit c1;
RevCommit c2;
try (Git git = new Git(db)) {
createCommit(git, ".gitattributes", "*.py diff=python");
c1 = createCommit(git, fileName, body);
c2 = createCommit(git, fileName,
body.replace("Good day", "Greetings"));
}
try (ByteArrayOutputStream os = new ByteArrayOutputStream();
DiffFormatter diffFormatter = new DiffFormatter(os)) {
String actual = getHunkHeaders(c1, c2, os, diffFormatter);
String expected = "@@ -16,7 +16,7 @@ def get_personalized_greeting(self, name, time_of_day):";
assertEquals(expected, actual);
}
}
@Test
public void testRustDriver() throws Exception {
String fileName = "greeting.rs";
String body = Files.readString(
Path.of(JGitTestUtil.getTestResourceFile(fileName)
.getAbsolutePath()));
RevCommit c1;
RevCommit c2;
try (Git git = new Git(db)) {
createCommit(git, ".gitattributes", "*.rs diff=rust");
c1 = createCommit(git, fileName, body);
c2 = createCommit(git, fileName,
body.replace("Good day", "Greetings")
.replace("baz", "qux"));
}
try (ByteArrayOutputStream os = new ByteArrayOutputStream();
DiffFormatter diffFormatter = new DiffFormatter(os)) {
String actual = getHunkHeaders(c1, c2, os, diffFormatter);
String expected =
"@@ -14,7 +14,7 @@ fn get_personalized_greeting(&self, name: &str, time_of_day: &str) -> String {\n"
+ "@@ -23,5 +23,5 @@ fn main() {";
assertEquals(expected, actual);
}
}
private String getHunkHeaders(RevCommit c1, RevCommit c2,
ByteArrayOutputStream os, DiffFormatter diffFormatter)
throws IOException {
diffFormatter.setRepository(db);
diffFormatter.format(new CanonicalTreeParser(null, db.newObjectReader(),
c1.getTree()),
new CanonicalTreeParser(null, db.newObjectReader(),
c2.getTree()));
diffFormatter.flush();
return Arrays.stream(os.toString(StandardCharsets.UTF_8).split("\n"))
.filter(line -> line.startsWith("@@"))
.collect(Collectors.joining("\n"));
}
private RevCommit createCommit(Git git, String fileName, String body)
throws IOException, GitAPIException {
writeTrashFile(fileName, body);
git.add().addFilepattern(".").call();
return git.commit().setMessage("message").call();
}
}