code: package com.beijunyi.parallelgit.io;
  
  import java.io.IOException;
  import java.util.SortedMap;
  import java.util.TreeMap;
  
  import com.beijunyi.parallelgit.AbstractParallelGitTest;
  import com.beijunyi.parallelgit.utils.io.GitFileEntry;
  import com.beijunyi.parallelgit.utils.io.TreeSnapshot;
  import org.eclipse.jgit.lib.ObjectId;
  import org.junit.Before;
  import org.junit.Test;
  
  import static com.beijunyi.parallelgit.utils.io.GitFileEntry.newEntry;
  import static org.eclipse.jgit.lib.FileMode.*;
  import static org.junit.Assert.*;
  
  public class TreeSnapshotCaptureTest extends AbstractParallelGitTest {
  
    @Before
    public void setUp() throws IOException {
      initRepository();
    }
  
    @Test
    public void captureSnapshot_theResultShouldContainTheChildrenEntries() throws IOException {
      SortedMap<String, GitFileEntry> children = new TreeMap<>();
      children.put("file1.txt", newEntry(someObjectId(), REGULAR_FILE));
      children.put("file2.txt", newEntry(someObjectId(), REGULAR_FILE));
      TreeSnapshot snapshot = TreeSnapshot.capture(children);
      assertTrue(snapshot.hasChild("file1.txt"));
      assertTrue(snapshot.hasChild("file2.txt"));
      assertFalse(snapshot.hasChild("non_existent_file.txt"));
    }
  
    @Test
    public void captureSnapshot_theChildrenEntriesShouldHaveTheCorrectIds() throws IOException {
      ObjectId id1 = someObjectId();
      ObjectId id2 = someObjectId();
      SortedMap<String, GitFileEntry> children = new TreeMap<>();
      children.put("file1.txt", newEntry(id1, REGULAR_FILE));
      children.put("file2.txt", newEntry(id2, REGULAR_FILE));
      TreeSnapshot snapshot = TreeSnapshot.capture(children);
      assertEquals(id1, snapshot.getChild("file1.txt").getId());
      assertEquals(id2, snapshot.getChild("file2.txt").getId());
    }
  
    @Test
    public void captureSnapshot_theChildrenEntriesShouldHaveTheCorrectFileModes() throws IOException {
      SortedMap<String, GitFileEntry> children = new TreeMap<>();
      children.put("file1.txt", newEntry(someObjectId(), REGULAR_FILE));
      children.put("file2.txt", newEntry(someObjectId(), EXECUTABLE_FILE));
      TreeSnapshot snapshot = TreeSnapshot.capture(children);
      assertEquals(REGULAR_FILE, snapshot.getChild("file1.txt").getMode());
      assertEquals(EXECUTABLE_FILE, snapshot.getChild("file2.txt").getMode());
    }
  
  
  }
  