public void testReadIndex_DirCacheTree()
        {
            List <CGitIndexRecord>  cList = ReadLsFiles();
            List <CGitLsTreeRecord> cTree = ReadLsTree();
            var dc = new DirCache(_index);

            Assert.AreEqual(0, dc.getEntryCount());
            dc.read();
            Assert.AreEqual(cList.Count, dc.getEntryCount());

            DirCacheTree jTree = dc.getCacheTree(false);

            Assert.IsNotNull(jTree);
            Assert.AreEqual(string.Empty, jTree.getNameString());
            Assert.AreEqual(string.Empty, jTree.getPathString());
            Assert.IsTrue(jTree.isValid());
            Assert.AreEqual(ObjectId
                            .FromString("698dd0b8d0c299f080559a1cffc7fe029479a408"), jTree
                            .getObjectId());
            Assert.AreEqual(cList.Count, jTree.getEntrySpan());

            var subtrees = new List <CGitLsTreeRecord>();

            foreach (CGitLsTreeRecord r in cTree)
            {
                if (FileMode.Tree.Equals(r.Mode))
                {
                    subtrees.Add(r);
                }
            }
            Assert.AreEqual(subtrees.Count, jTree.getChildCount());

            for (int i = 0; i < jTree.getChildCount(); i++)
            {
                DirCacheTree     sj = jTree.getChild(i);
                CGitLsTreeRecord sc = subtrees[i];
                Assert.AreEqual(sc.Path, sj.getNameString());
                Assert.AreEqual(sc.Path + "/", sj.getPathString());
                Assert.IsTrue(sj.isValid());
                Assert.AreEqual(sc.Id, sj.getObjectId());
            }
        }
 private static Dictionary<string, CGitLsTreeRecord> ReadLsTree()
 {
     var r = new Dictionary<string, CGitLsTreeRecord>();
     using (var br = new StreamReader(new FileStream("Resources/gitgit.lstree", System.IO.FileMode.Open, System.IO.FileAccess.Read), Constants.CHARSET))
     {
         string line;
         while ((line = br.ReadLine()) != null)
         {
             var cr = new CGitLsTreeRecord(line);
             r[cr.Path] = cr;
         }
     }
     return r;
 }