public void EditableObjectModelCollection_CollectionTest2()
        {
            var people = new EditablePersonCollection();
            var list   = new List <EditablePerson>();

            Assert.IsFalse(people.IsChangedLocal);
            Assert.IsFalse(people.IsChanged);

            var person1 = new EditablePerson();
            var person2 = new EditablePerson();

            //var person3 = new ChangeTrackingSimplePerson();

            people.Add(person1);
            list.Add(person1);

            CollectionAssert.AreEqual(list, people);
            Assert.IsTrue(people.IsChangedLocal);

            people.AcceptChanges();
            CollectionAssert.AreEqual(list, people);
            Assert.IsFalse(people.IsChangedLocal);

            people.Add(person2);
            list.Add(person2);

            CollectionAssert.AreEqual(list, people);
            Assert.IsTrue(people.IsChangedLocal);

            people.RejectChanges();
            list.Remove(person2);

            CollectionAssert.AreEqual(list, people);
            Assert.IsFalse(people.IsChangedLocal);

            people.Remove(person1);
            list.Remove(person1);


            CollectionAssert.AreEqual(list, people);
            Assert.IsTrue(people.IsChangedLocal);

            people.AcceptChanges();
            CollectionAssert.AreEqual(list, people);
            Assert.IsFalse(people.IsChangedLocal);
        }
        public void EditableObjectModelCollection_EditableObjectTest()
        {
            var people = new EditablePersonCollection();

            people.FirstName = "Albert";
            people.Boss.Age  = 99;
            people.AcceptChanges();

            Assert.IsFalse(people.IsChangedLocal);

            people.BeginEdit();
            Assert.IsFalse(people.IsChangedLocal);
            people.FirstName = "Bob";
            people.Age       = 10;
            Assert.IsTrue(people.IsChangedLocal);
            Assert.AreEqual("Bob", people.FirstName);
            people.CancelEdit();

            Assert.AreEqual("Albert", people.FirstName);
            Assert.AreEqual(0, people.Age);
            Assert.IsFalse(people.IsChangedLocal);

            people.BeginEdit();
            Assert.IsFalse(people.IsChangedLocal);
            people.FirstName = "Chris";
            Assert.IsTrue(people.IsChangedLocal);
            Assert.AreEqual("Chris", people.FirstName);

            people.EndEdit();
            Assert.IsTrue(people.IsChangedLocal);
            Assert.AreEqual("Chris", people.FirstName);

            people.BeginEdit();
            Assert.IsTrue(people.IsChangedLocal);
            people.FirstName = "David";
            Assert.IsTrue(people.IsChangedLocal);
            Assert.AreEqual("David", people.FirstName);

            people.EndEdit();
            Assert.IsTrue(people.IsChangedLocal);
            Assert.AreEqual("David", people.FirstName);

            people.AcceptChanges();

            people.Add(new EditablePerson());
            Assert.AreEqual(1, people.Count);

            people.BeginEdit();
            people.Add(new EditablePerson());
            Assert.AreEqual(2, people.Count);

            people.CancelEdit();
            Assert.AreEqual(1, people.Count);

            people.BeginEdit();
            people.Add(new EditablePerson());
            Assert.AreEqual(2, people.Count);
            people.EndEdit();
            Assert.AreEqual(2, people.Count);

            people.BeginEdit();
            people.BeginEdit();

            people.EndEdit();
            people.EndEdit();

            people.BeginEdit();
            people.BeginEdit();

            people.CancelEdit();
            people.CancelEdit();
        }
        public void EditableObjectModelCollection_EditableObjectTest()
        {
            var people = new EditablePersonCollection();

            people.FirstName = "Albert";
            people.Boss.Age = 99;
            people.AcceptChanges();

            Assert.IsFalse(people.IsChangedLocal);

            people.BeginEdit();
            Assert.IsFalse(people.IsChangedLocal);
            people.FirstName = "Bob";
            people.Age = 10;
            Assert.IsTrue(people.IsChangedLocal);
            Assert.AreEqual("Bob", people.FirstName);
            people.CancelEdit();

            Assert.AreEqual("Albert", people.FirstName);
            Assert.AreEqual(0, people.Age);
            Assert.IsFalse(people.IsChangedLocal);

            people.BeginEdit();
            Assert.IsFalse(people.IsChangedLocal);
            people.FirstName = "Chris";
            Assert.IsTrue(people.IsChangedLocal);
            Assert.AreEqual("Chris", people.FirstName);

            people.EndEdit();
            Assert.IsTrue(people.IsChangedLocal);
            Assert.AreEqual("Chris", people.FirstName);

            people.BeginEdit();
            Assert.IsTrue(people.IsChangedLocal);
            people.FirstName = "David";
            Assert.IsTrue(people.IsChangedLocal);
            Assert.AreEqual("David", people.FirstName);

            people.EndEdit();
            Assert.IsTrue(people.IsChangedLocal);
            Assert.AreEqual("David", people.FirstName);

            people.AcceptChanges();

            people.Add(new EditablePerson());
            Assert.AreEqual(1, people.Count);

            people.BeginEdit();
            people.Add(new EditablePerson());
            Assert.AreEqual(2, people.Count);

            people.CancelEdit();
            Assert.AreEqual(1, people.Count);

            people.BeginEdit();
            people.Add(new EditablePerson());
            Assert.AreEqual(2, people.Count);
            people.EndEdit();
            Assert.AreEqual(2, people.Count);

            people.BeginEdit();
            people.BeginEdit();

            people.EndEdit();
            people.EndEdit();

            people.BeginEdit();
            people.BeginEdit();

            people.CancelEdit();
            people.CancelEdit();
        }
        public void EditableObjectModelCollection_CollectionTest2()
        {
            var people = new EditablePersonCollection();
            var list = new List<EditablePerson>();
            Assert.IsFalse(people.IsChangedLocal);
            Assert.IsFalse(people.IsChanged);

            var person1 = new EditablePerson();
            var person2 = new EditablePerson();
            //var person3 = new ChangeTrackingSimplePerson();

            people.Add(person1);
            list.Add(person1);

            CollectionAssert.AreEqual(list, people);
            Assert.IsTrue(people.IsChangedLocal);

            people.AcceptChanges();
            CollectionAssert.AreEqual(list, people);
            Assert.IsFalse(people.IsChangedLocal);

            people.Add(person2);
            list.Add(person2);

            CollectionAssert.AreEqual(list, people);
            Assert.IsTrue(people.IsChangedLocal);

            people.RejectChanges();
            list.Remove(person2);

            CollectionAssert.AreEqual(list, people);
            Assert.IsFalse(people.IsChangedLocal);

            people.Remove(person1);
            list.Remove(person1);

            CollectionAssert.AreEqual(list, people);
            Assert.IsTrue(people.IsChangedLocal);

            people.AcceptChanges();
            CollectionAssert.AreEqual(list, people);
            Assert.IsFalse(people.IsChangedLocal);
        }