code: package com.beijunyi.parallelgit.utils;
  
  import java.io.IOException;
  import java.util.Arrays;
  import java.util.List;
  
  import com.beijunyi.parallelgit.AbstractParallelGitTest;
  import org.eclipse.jgit.revwalk.RevCommit;
  import org.junit.Before;
  import org.junit.Test;
  
  import static org.junit.Assert.assertEquals;
  
  public class CommitUtilsGetHistoryTest extends AbstractParallelGitTest {
  
    @Before
    public void setUp() throws IOException {
      initRepository();
    }
  
    @Test
    public void getCommitHistory_shouldReturnTheCommitsInReverseOrder() throws IOException {
      String branch = "orphan_branch";
      writeSomethingToCache();
      RevCommit commit1 = commitToBranch(branch);
      writeSomethingToCache();
      RevCommit commit2 = commitToBranch(branch);
      writeSomethingToCache();
      RevCommit commit3 = commitToBranch(branch);
  
      List<RevCommit> expected = Arrays.asList(commit3, commit2, commit1);
      List<RevCommit> actual = CommitUtils.getHistory(commit3, repo);
      assertEquals(expected, actual);
    }
  
    @Test
    public void getCommitHistoryWithSkipAndLimit_shouldReturnTheCommitsInTheSelectedRange() throws IOException {
      String branch = "orphan_branch";
      writeSomethingToCache();
      /*RevCommit commit1 = */commitToBranch(branch);
      writeSomethingToCache();
      RevCommit commit2 = commitToBranch(branch);
      writeSomethingToCache();
      RevCommit commit3 = commitToBranch(branch);
      writeSomethingToCache();
      RevCommit commit4 = commitToBranch(branch);
  
      List<RevCommit> expected = Arrays.asList(commit3, commit2);
      List<RevCommit> actual = CommitUtils.getHistory(commit4, 1, 2, repo.newObjectReader());
      assertEquals(expected, actual);
    }
  
    @Test
    public void getCommitHistoryWhenSkipIsNotZeroAndLimitIsIntegerMax_shouldReturnTailCommits() throws IOException {
      String branch = "orphan_branch";
      writeSomethingToCache();
      RevCommit commit1 = commitToBranch(branch);
      writeSomethingToCache();
      RevCommit commit2 = commitToBranch(branch);
      writeSomethingToCache();
      RevCommit commit3 = commitToBranch(branch);
      writeSomethingToCache();
      RevCommit commit4 = commitToBranch(branch);
  
      List<RevCommit> expected = Arrays.asList(commit3, commit2, commit1);
      List<RevCommit> actual = CommitUtils.getHistory(commit4, 1, Integer.MAX_VALUE, repo.newObjectReader());
      assertEquals(expected, actual);
    }
  
  
  }
  