public virtual void TestEmpty_NoPrefix2()
        {
            RefMap map = new RefMap();

            NUnit.Framework.Assert.IsTrue(map.IsEmpty());
            // before size was computed
            NUnit.Framework.Assert.AreEqual(0, map.Count);
            NUnit.Framework.Assert.IsTrue(map.IsEmpty());
            // after size was computed
            NUnit.Framework.Assert.IsFalse(map.EntrySet().Iterator().HasNext());
            NUnit.Framework.Assert.IsFalse(map.Keys.Iterator().HasNext());
            NUnit.Framework.Assert.IsFalse(map.ContainsKey("a"));
            NUnit.Framework.Assert.IsNull(map.Get("a"));
        }
        public virtual void TestNotEmpty_WithPrefix()
        {
            Ref master = NewRef("refs/heads/master", ID_ONE);

            packed = ToList(master);
            RefMap map = new RefMap("refs/heads/", packed, loose, resolved);

            NUnit.Framework.Assert.IsFalse(map.IsEmpty());
            // before size was computed
            NUnit.Framework.Assert.AreEqual(1, map.Count);
            NUnit.Framework.Assert.IsFalse(map.IsEmpty());
            // after size was computed
            NUnit.Framework.Assert.AreSame(master, map.Values.Iterator().Next());
        }
        public virtual void TestMerge_PackedLooseLoose()
        {
            Ref refA     = NewRef("A", ID_ONE);
            Ref refB_ONE = NewRef("B", ID_ONE);
            Ref refB_TWO = NewRef("B", ID_TWO);
            Ref refc     = NewRef("c", ID_ONE);

            packed = ToList(refA, refB_ONE);
            loose  = ToList(refB_TWO, refc);
            RefMap map = new RefMap(string.Empty, packed, loose, resolved);

            NUnit.Framework.Assert.AreEqual(3, map.Count);
            NUnit.Framework.Assert.IsFalse(map.IsEmpty());
            NUnit.Framework.Assert.IsTrue(map.ContainsKey(refA.GetName()));
            NUnit.Framework.Assert.AreSame(refA, map.Get(refA.GetName()));
            // loose overrides packed given same name
            NUnit.Framework.Assert.AreSame(refB_TWO, map.Get(refB_ONE.GetName()));
            Iterator <Ref> itr = map.Values.Iterator();

            NUnit.Framework.Assert.IsTrue(itr.HasNext());
            NUnit.Framework.Assert.AreSame(refA, itr.Next());
            NUnit.Framework.Assert.IsTrue(itr.HasNext());
            NUnit.Framework.Assert.AreSame(refB_TWO, itr.Next());
            NUnit.Framework.Assert.IsTrue(itr.HasNext());
            NUnit.Framework.Assert.AreSame(refc, itr.Next());
            NUnit.Framework.Assert.IsFalse(itr.HasNext());
        }
        public virtual void TestClear()
        {
            Ref master = NewRef("refs/heads/master", ID_ONE);

            loose = ToList(master);
            RefMap map = new RefMap(string.Empty, packed, loose, resolved);

            NUnit.Framework.Assert.AreSame(master, map.Get("refs/heads/master"));
            map.Clear();
            NUnit.Framework.Assert.IsNull(map.Get("refs/heads/master"));
            NUnit.Framework.Assert.IsTrue(map.IsEmpty());
            NUnit.Framework.Assert.AreEqual(0, map.Count);
        }
        public virtual void TestRemove()
        {
            Ref master = NewRef("refs/heads/master", ID_ONE);
            Ref headU  = NewRef("HEAD", "refs/heads/master");
            Ref headR  = NewRef("HEAD", master);

            packed   = ToList(master);
            loose    = ToList(headU, master);
            resolved = ToList(headR);
            RefMap map = new RefMap(string.Empty, packed, loose, resolved);

            NUnit.Framework.Assert.IsNull(Sharpen.Collections.Remove(map, "not.a.reference"));
            NUnit.Framework.Assert.AreSame(master, Sharpen.Collections.Remove(map, "refs/heads/master"
                                                                              ));
            NUnit.Framework.Assert.IsNull(map.Get("refs/heads/master"));
            NUnit.Framework.Assert.AreSame(headR, Sharpen.Collections.Remove(map, "HEAD"));
            NUnit.Framework.Assert.IsNull(map.Get("HEAD"));
            NUnit.Framework.Assert.IsTrue(map.IsEmpty());
        }
        public virtual void TestMerge_HeadMaster()
        {
            Ref master = NewRef("refs/heads/master", ID_ONE);
            Ref headU  = NewRef("HEAD", "refs/heads/master");
            Ref headR  = NewRef("HEAD", master);

            loose    = ToList(headU, master);
            resolved = ToList(headR);
            RefMap map = new RefMap(string.Empty, packed, loose, resolved);

            NUnit.Framework.Assert.AreEqual(2, map.Count);
            NUnit.Framework.Assert.IsFalse(map.IsEmpty());
            NUnit.Framework.Assert.IsTrue(map.ContainsKey("refs/heads/master"));
            NUnit.Framework.Assert.AreSame(master, map.Get("refs/heads/master"));
            // resolved overrides loose given same name
            NUnit.Framework.Assert.AreSame(headR, map.Get("HEAD"));
            Iterator <Ref> itr = map.Values.Iterator();

            NUnit.Framework.Assert.IsTrue(itr.HasNext());
            NUnit.Framework.Assert.AreSame(headR, itr.Next());
            NUnit.Framework.Assert.IsTrue(itr.HasNext());
            NUnit.Framework.Assert.AreSame(master, itr.Next());
            NUnit.Framework.Assert.IsFalse(itr.HasNext());
        }