public void TestGetEmptyListOfContacts()
        {
            IContactManager cd = new MockContactManager
            {
                GetContactsImpl = () => { return new List<IContact>(); }

            };
            IEnumerable<IContact> contacts = cd.GetContacts();
            Assert.IsFalse(contacts.GetEnumerator().MoveNext());
        }
        public void TestGetListOfOneContact()
        {
            IContactManager cd = new MockContactManager
            {
                GetContactsImpl = () => {
                    var l = new List<IContact>();
                    l.Add(new GContactSync.Contact("John Doe"));
                    return l;
                }

            };
            IEnumerable<IContact> contacts = cd.GetContacts();
            var it = contacts.GetEnumerator();
            Assert.IsTrue(it.MoveNext());
            Assert.IsTrue(it.Current.FullName.Equals("John Doe"));
        }
        public void testMergeWithGoogle()
        {
            try
            {
                GoogleContactDownloader gcd = new GoogleContactDownloader(GoogleContactDownloader.TestUser, GoogleContactDownloader.TestPass);

                IContact c1 = new GContactSync.Contact("John Doe", "*****@*****.**");
                IContactManager m1 = new MockContactManager
                {
                    GetContactsImpl = () =>
                    {
                        var l = new List<IContact>();
                        l.Add(c1);
                        return l;
                    }

                };
                IEnumerable<IContact> googleContacts = gcd.GetContacts();
                googleContacts = googleContacts.Where(c => c.FullName != null && c.FullName.Contains("Doe"));

                ContactMerger.Merge(gcd, m1, googleContacts, m1.GetContacts());
            }
            catch (System.Exception ex)
            {
                throw ex;
            }
        }
        public void TestMergeBothWays()
        {
            Contact c1 = new Contact("John Doe", "*****@*****.**");
            IContactManager m1 = new MockContactManager
            {
                GetContactsImpl = () =>
                {
                    var l = new List<IContact>();
                    l.Add(c1);
                    return l;
                }

            };
            Contact c2 = new Contact("John Doe", "*****@*****.**");
            IContactManager m2 = new MockContactManager
            {
                GetContactsImpl = () =>
                {
                    var l = new List<IContact>();
                    l.Add(c2);
                    return l;
                }

            };
            Assert.IsTrue (c1.Emails.Contains("*****@*****.**"));
            Assert.IsFalse(c2.Emails.Contains("*****@*****.**"));
            Assert.IsFalse(c1.Emails.Contains("*****@*****.**"));
            Assert.IsTrue (c2.Emails.Contains("*****@*****.**"));
            ContactMerger.Merge(m1, m2, m1.GetContacts(), m2.GetContacts());
            Assert.IsTrue(c1.Emails.Contains("*****@*****.**"));
            Assert.IsTrue(c2.Emails.Contains("*****@*****.**"));
            Assert.IsTrue(c1.Emails.Contains("*****@*****.**"));
            Assert.IsTrue(c2.Emails.Contains("*****@*****.**"));
        }
        public void TestMergeTheOtherWay()
        {
            List<IContact> l1 = new List<IContact>();
            List<IContact> l2 = new List<IContact>();
            Contact c2 = new Contact("John Doe", "*****@*****.**");
            l2.Add(c2);

            IContactManager m1 = new MockContactManager
            {
                GetContactsImpl = () => { return l1; }
            };
            IContactManager m2 = new MockContactManager
            {
                GetContactsImpl = () => { return l2; }
            };
            ContactMerger.Merge(m1, m2, m1.GetContacts(), m2.GetContacts());

            Assert.AreEqual(l1.Count(), 1);
            IContact c1 = l1.ElementAt(0);
            Assert.AreEqual(c1.FullName, "John Doe");
            Assert.IsTrue(c1.Emails.Contains("*****@*****.**"));
        }
 public void TestMergerPerformance()
 {
     // Runtime should be pretty negligible, around 0.1s
     const int nb = 5000;
     List<IContact> l1 = new List<IContact>();
     List<IContact> l2 = new List<IContact>();
     for (int i = 0; i < nb; ++i)
     {
         string s1 = Guid.NewGuid().ToString();
         string s2 = Guid.NewGuid().ToString();
         string s3 = Guid.NewGuid().ToString();
         IContact c1 = new Contact(s1);
         c1.addMail(s2);
         c1.addMail(s3);
         l1.Add(c1);
         IContact c2 = new Contact(s1);
         c2.addMail(s2);
         c2.addMail(s3);
         l2.Add(c2);
     }
     IContactManager m1 = new MockContactManager
     {
         GetContactsImpl = () => { return l1; }
     };
     IContactManager m2 = new MockContactManager
     {
         GetContactsImpl = () => { return l2; }
     };
     ContactMerger.Merge(m1, m2, m1.GetContacts(), m2.GetContacts());
 }