public void RemoveEventRaised()
        {
            BindableCollection<SimpleBusinessObject> lBindableCollection = new BindableCollection<SimpleBusinessObject>();
            bool removingRaised = false;
            lBindableCollection.ItemRemovedEvent += delegate(object sender, ItemRemovedEventArgs ea)
                {
                    removingRaised = true;
                };

            Assert.IsFalse(removingRaised);

            lBindableCollection.Add(new SimpleBusinessObject());

            Assert.IsFalse(removingRaised);

            lBindableCollection.RemoveAt(0);

            Assert.IsTrue(removingRaised);

            SimpleBusinessObject sbo = new SimpleBusinessObject();
            lBindableCollection.Add(sbo);
            removingRaised = false;

            lBindableCollection.Remove(sbo);

            Assert.IsTrue(removingRaised);
        }
        public void UndoNestedChanges()
        {
            BindableWrapper<ComplexBusinessObject> bindableObj =
            new BindableWrapper<ComplexBusinessObject>(new ComplexBusinessObject());

            SimpleBusinessObject sbo1 = new SimpleBusinessObject();
            sbo1.Name = "sbo1";
            SimpleBusinessObject sbo2 = new SimpleBusinessObject();
            sbo2.Name = "sbo2";

            bindableObj.Data.BusinessObj.NestedObject = sbo1;
            Assert.AreEqual(bindableObj.Data.BusinessObj.NestedObject.Name, sbo1.Name);

            bindableObj.Data.BusinessObj.NestedObject = sbo2;
            Assert.AreEqual(bindableObj.Data.BusinessObj.NestedObject.Name, sbo2.Name);

            bindableObj.Undo();

            // As the nested object is not intercepted undo does not have any effect
            Assert.AreEqual(bindableObj.Data.BusinessObj.NestedObject.Name, sbo2.Name);

            // the nested object is not IBindableWrapper so changes on its internal properties are not intercepted
            bindableObj.Data.BusinessObj.NestedObject.Name = "whatever";
            bindableObj.Data.BusinessObj.NestedObject.Name = "somethingelse";
        }
 private ComplexBusinessObject(bool flag, SimpleBusinessObject nested)
 {
     _someFlag = flag;
     _nestedObject = nested;
 }
        public void UndoRedoNestedChanges()
        {
            BindableWrapper<ComplexBusinessObject> bindableObj =
            new BindableWrapper<ComplexBusinessObject>(new ComplexBusinessObject());

            SimpleBusinessObject sbo1 = new SimpleBusinessObject();
            sbo1.Name = "sbo1";
            SimpleBusinessObject sbo2 = new SimpleBusinessObject();
            sbo2.Name = "sbo2";

            bindableObj.Data.BusinessObj.NestedObject = sbo1;
            Assert.AreEqual(bindableObj.Data.BusinessObj.NestedObject.Name, sbo1.Name);

            bindableObj.Data.BusinessObj.NestedObject = sbo2;
            Assert.AreEqual(bindableObj.Data.BusinessObj.NestedObject.Name, sbo2.Name);

            bindableObj.Undo();

            Assert.AreEqual(bindableObj.Data.BusinessObj.NestedObject.Name, sbo2.Name);

            bindableObj.Redo();
            Assert.AreEqual(bindableObj.Data.BusinessObj.NestedObject.Name, sbo2.Name);
        }
        public void ObjectReferencesOnUndo()
        {
            BindableWrapper<SimpleBusinessObject> bindableReference;
            SimpleBusinessObject businessObjReference;

            SimpleBusinessObject businessObj = new SimpleBusinessObject();
            businessObjReference = businessObj;

            BindableWrapper<SimpleBusinessObject> bindableObj =
            new BindableWrapper<SimpleBusinessObject>(businessObj);
            bindableReference = bindableObj;

            bindableObj.Data.BusinessObj.Name = "asdf";
            bindableObj.Data.BusinessObj.Description = "asdfsdf";
            bindableObj.Data.BusinessObj.Age = 25;

            bindableObj.Data.BusinessObj.Name = "qwerty";

            Assert.AreEqual(bindableObj.Data.BusinessObj.Name, "qwerty");
            Assert.AreEqual(bindableReference.Data.BusinessObj.Name, "qwerty");
            Assert.IsNull(businessObjReference.Name);

            bindableObj.Undo();

            Assert.AreEqual(bindableObj.Data.BusinessObj.Name, "asdf");
            Assert.AreEqual(bindableReference.Data.BusinessObj.Name, "asdf");
            Assert.IsNull(businessObjReference.Name);
        }