code: package com.beijunyi.parallelgit.utils;
  
  import java.io.IOException;
  
  import com.beijunyi.parallelgit.AbstractParallelGitTest;
  import org.eclipse.jgit.revwalk.RevTree;
  import org.eclipse.jgit.treewalk.TreeWalk;
  import org.junit.Before;
  import org.junit.Test;
  
  import static org.junit.Assert.*;
  
  public class TreeUtilsNewTreeWalkTest extends AbstractParallelGitTest {
  
    @Before
    public void setUp() throws Exception {
      initRepository();
    }
  
    @Test
    public void createTreeWalkForTree_shouldReturnNonRecursiveTreeWalk() throws IOException {
      writeMultipleToCache("/a.txt", "/b.txt", "/c/d.txt", "/c/e.txt", "/f/g.txt");
      RevTree tree = commitToMaster().getTree();
      TreeWalk treeWalk = TreeUtils.newTreeWalk(tree, repo);
  
      assertNextEntry(treeWalk, "a.txt");
      assertNextEntry(treeWalk, "b.txt");
      assertNextEntry(treeWalk, "c");
      assertNextEntry(treeWalk, "f");
      assertFalse(treeWalk.next());
    }
  
    @Test
    public void createTreeWalkForTreeAndPath_shouldReturnTreeWalkPointingToTheSpecifiedNode() throws IOException {
      writeMultipleToCache("/a.txt", "/b.txt", "/c/d.txt", "/c/e.txt", "/f/g.txt");
      RevTree tree = commitToMaster().getTree();
      TreeWalk treeWalk = TreeUtils.forPath("/c/d.txt", tree, repo);
  
      assertNotNull(treeWalk);
      assertEquals("d.txt", treeWalk.getNameString());
    }
  
    @Test
    public void createTreeWalkForTreeAndNonExistentPath_shouldReturnNull() throws IOException {
      writeMultipleToCache("/a.txt", "/b.txt", "/c/d.txt", "/c/e.txt", "/f/g.txt");
      RevTree tree = commitToMaster().getTree();
      TreeWalk treeWalk = TreeUtils.forPath("/non_existent_file.txt", tree, repo);
  
      assertNull(treeWalk);
    }
  
    private static void assertNextEntry(TreeWalk treeWalk, String path) throws IOException {
      assertTrue(treeWalk.next());
      assertEquals(path, treeWalk.getPathString());
    }
  
  }
  