blob: bfda36db7629e4c4355b3e48b908f4bb23cff179 [file] [log] [blame]
/*
* Copyright (C) 2022, Simeon Andreev and others
*
* 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 static org.junit.Assert.assertSame;
import java.util.Arrays;
import java.util.List;
import org.eclipse.jgit.internal.diff.FilteredRenameDetector;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.treewalk.filter.PathFilter;
import org.junit.Before;
import org.junit.Test;
public class FilteredRenameDetectorTest extends AbstractRenameDetectionTestCase {
private FilteredRenameDetector frd;
@Override
@Before
public void setUp() throws Exception {
super.setUp();
frd = new FilteredRenameDetector(db);
}
@Test
public void testExactRename() throws Exception {
ObjectId foo = blob("foo");
ObjectId bar = blob("bar");
DiffEntry a = DiffEntry.add(PATH_A, foo);
DiffEntry b = DiffEntry.delete(PATH_Q, foo);
DiffEntry c = DiffEntry.add(PATH_H, bar);
DiffEntry d = DiffEntry.delete(PATH_B, bar);
List<DiffEntry> changes = Arrays.asList(a, b, c, d);
PathFilter filter = PathFilter.create(PATH_A);
List<DiffEntry> entries = frd.compute(changes, filter);
assertEquals("Unexpected entries in: " + entries, 1, entries.size());
assertRename(b, a, 100, entries.get(0));
}
@Test
public void testExactRename_multipleFilters() throws Exception {
ObjectId foo = blob("foo");
ObjectId bar = blob("bar");
DiffEntry a = DiffEntry.add(PATH_A, foo);
DiffEntry b = DiffEntry.delete(PATH_Q, foo);
DiffEntry c = DiffEntry.add(PATH_H, bar);
DiffEntry d = DiffEntry.delete(PATH_B, bar);
List<DiffEntry> changes = Arrays.asList(a, b, c, d);
List<PathFilter> filters = Arrays.asList(PathFilter.create(PATH_A),
PathFilter.create(PATH_H));
List<DiffEntry> entries = frd.compute(changes, filters);
assertEquals("Unexpected entries in: " + entries, 2, entries.size());
assertRename(b, a, 100, entries.get(0));
assertRename(d, c, 100, entries.get(1));
}
@Test
public void testInexactRename() throws Exception {
ObjectId aId = blob("foo\nbar\nbaz\nblarg\n");
ObjectId bId = blob("foo\nbar\nbaz\nblah\n");
DiffEntry a = DiffEntry.add(PATH_A, aId);
DiffEntry b = DiffEntry.delete(PATH_Q, bId);
ObjectId cId = blob("some\nsort\nof\ntext\n");
ObjectId dId = blob("completely\nunrelated\ntext\n");
DiffEntry c = DiffEntry.add(PATH_B, cId);
DiffEntry d = DiffEntry.delete(PATH_H, dId);
List<DiffEntry> changes = Arrays.asList(a, b, c, d);
PathFilter filter = PathFilter.create(PATH_A);
List<DiffEntry> entries = frd.compute(changes, filter);
assertEquals("Unexpected entries: " + entries, 1, entries.size());
assertRename(b, a, 66, entries.get(0));
}
@Test
public void testInexactRename_multipleFilters() throws Exception {
ObjectId aId = blob("foo\nbar\nbaz\nblarg\n");
ObjectId bId = blob("foo\nbar\nbaz\nblah\n");
DiffEntry a = DiffEntry.add(PATH_A, aId);
DiffEntry b = DiffEntry.delete(PATH_Q, bId);
ObjectId cId = blob("some\nsort\nof\ntext\n");
ObjectId dId = blob("completely\nunrelated\ntext\n");
DiffEntry c = DiffEntry.add(PATH_B, cId);
DiffEntry d = DiffEntry.delete(PATH_H, dId);
List<DiffEntry> changes = Arrays.asList(a, b, c, d);
List<PathFilter> filters = Arrays.asList(PathFilter.create(PATH_A),
PathFilter.create(PATH_H));
List<DiffEntry> entries = frd.compute(changes, filters);
assertEquals("Unexpected entries: " + entries, 2, entries.size());
assertRename(b, a, 66, entries.get(0));
assertSame(d, entries.get(1));
}
@Test
public void testNoRenames() throws Exception {
ObjectId aId = blob("");
ObjectId bId = blob("blah1");
ObjectId cId = blob("");
ObjectId dId = blob("blah2");
DiffEntry a = DiffEntry.add(PATH_A, aId);
DiffEntry b = DiffEntry.delete(PATH_Q, bId);
DiffEntry c = DiffEntry.add(PATH_H, cId);
DiffEntry d = DiffEntry.delete(PATH_B, dId);
List<DiffEntry> changes = Arrays.asList(a, b, c, d);
PathFilter filter = PathFilter.create(PATH_A);
List<DiffEntry> entries = frd.compute(changes, filter);
assertEquals("Unexpected entries in: " + entries, 1, entries.size());
assertSame(a, entries.get(0));
}
@Test
public void testNoRenames_multipleFilters() throws Exception {
ObjectId aId = blob("");
ObjectId bId = blob("blah1");
ObjectId cId = blob("");
ObjectId dId = blob("blah2");
DiffEntry a = DiffEntry.add(PATH_A, aId);
DiffEntry b = DiffEntry.delete(PATH_Q, bId);
DiffEntry c = DiffEntry.add(PATH_H, cId);
DiffEntry d = DiffEntry.delete(PATH_B, dId);
List<DiffEntry> changes = Arrays.asList(a, b, c, d);
List<PathFilter> filters = Arrays.asList(PathFilter.create(PATH_A),
PathFilter.create(PATH_H));
List<DiffEntry> entries = frd.compute(changes, filters);
assertEquals("Unexpected entries in: " + entries, 2, entries.size());
assertSame(a, entries.get(0));
assertSame(c, entries.get(1));
}
}