summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/EditTest.java25
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/diff/Edit.java41
2 files changed, 65 insertions, 1 deletions
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/EditTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/EditTest.java
index 6f3d21e558..598e6d2b67 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/EditTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/EditTest.java
@@ -61,6 +61,8 @@ public class EditTest extends TestCase {
assertEquals(1, e.getEndA());
assertEquals(3, e.getBeginB());
assertEquals(3, e.getEndB());
+ assertTrue("is empty", e.isEmpty());
+ assertSame(Edit.Type.EMPTY, e.getType());
}
public void testSwap() {
@@ -75,21 +77,34 @@ public class EditTest extends TestCase {
public void testType_Insert() {
final Edit e = new Edit(1, 1, 1, 2);
assertSame(Edit.Type.INSERT, e.getType());
+ assertFalse("not empty", e.isEmpty());
+ assertEquals(0, e.getLengthA());
+ assertEquals(1, e.getLengthB());
}
public void testType_Delete() {
final Edit e = new Edit(1, 2, 1, 1);
assertSame(Edit.Type.DELETE, e.getType());
+ assertFalse("not empty", e.isEmpty());
+ assertEquals(1, e.getLengthA());
+ assertEquals(0, e.getLengthB());
}
public void testType_Replace() {
final Edit e = new Edit(1, 2, 1, 4);
assertSame(Edit.Type.REPLACE, e.getType());
+ assertFalse("not empty", e.isEmpty());
+ assertEquals(1, e.getLengthA());
+ assertEquals(3, e.getLengthB());
}
public void testType_Empty() {
- assertSame(Edit.Type.EMPTY, new Edit(1, 1, 2, 2).getType());
+ final Edit e = new Edit(1, 1, 2, 2);
+ assertSame(Edit.Type.EMPTY, e.getType());
assertSame(Edit.Type.EMPTY, new Edit(1, 2).getType());
+ assertTrue("is empty", e.isEmpty());
+ assertEquals(0, e.getLengthA());
+ assertEquals(0, e.getLengthB());
}
public void testToString() {
@@ -143,4 +158,12 @@ public class EditTest extends TestCase {
e.extendB();
assertEquals(new Edit(1, 2, 1, 3), e);
}
+
+ public void testBeforeAfterCuts() {
+ final Edit whole = new Edit(1, 8, 2, 9);
+ final Edit mid = new Edit(4, 5, 3, 6);
+
+ assertEquals(new Edit(1, 4, 2, 3), whole.before(mid));
+ assertEquals(new Edit(5, 8, 6, 9), whole.after(mid));
+ }
}
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/diff/Edit.java b/org.eclipse.jgit/src/org/eclipse/jgit/diff/Edit.java
index 109c049ccd..4a5de57b07 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/diff/Edit.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/diff/Edit.java
@@ -130,6 +130,11 @@ public class Edit {
return Type.REPLACE;
}
+ /** @return true if the edit is empty (lengths of both a and b is zero). */
+ public final boolean isEmpty() {
+ return beginA == endA && beginB == endB;
+ }
+
/** @return start point in sequence A. */
public final int getBeginA() {
return beginA;
@@ -150,6 +155,42 @@ public class Edit {
return endB;
}
+ /** @return length of the region in A. */
+ public final int getLengthA() {
+ return endA - beginA;
+ }
+
+ /** @return length of the region in B. */
+ public final int getLengthB() {
+ return endB - beginB;
+ }
+
+ /**
+ * Construct a new edit representing the region before cut.
+ *
+ * @param cut
+ * the cut point. The beginning A and B points are used as the
+ * end points of the returned edit.
+ * @return an edit representing the slice of {@code this} edit that occurs
+ * before {@code cut} starts.
+ */
+ public final Edit before(Edit cut) {
+ return new Edit(beginA, cut.beginA, beginB, cut.beginB);
+ }
+
+ /**
+ * Construct a new edit representing the region after cut.
+ *
+ * @param cut
+ * the cut point. The ending A and B points are used as the
+ * starting points of the returned edit.
+ * @return an edit representing the slice of {@code this} edit that occurs
+ * after {@code cut} ends.
+ */
+ public final Edit after(Edit cut) {
+ return new Edit(cut.endA, endA, cut.endB, endB);
+ }
+
/** Increase {@link #getEndA()} by 1. */
public void extendA() {
endA++;