public void ShouldAcceptComplexPropertyChanged()
        {
            var newAddress = new TestFriendAddress {
                City = "CityNew"
            };

            _testFriendWrapper.TestFriendAddress = new TestFriendAddressWrapper(newAddress);
            Assert.AreSame(newAddress, _testFriendWrapper.Model.TestFriendAddress);
        }
        public void ShouldAcceptChangesOfComplexProperties()
        {
            var wrapper = new TestFriendWrapper(_testFriend);
            var address = new TestFriendAddress();

            wrapper.TestFriendAddress = new TestFriendAddressWrapper(address);
            wrapper.AcceptChanges();
            Assert.AreEqual(wrapper.Model.TestFriendAddress, address);
        }
        public void ShouldRiseEventIfComplexPropertyChanged()
        {
            Assert.IsFalse(_testFriendWrapper.IsChanged);

            var oldAddress = _testFriendWrapper.TestFriendAddress;
            var newAddress = new TestFriendAddress {
                City = "CityNew"
            };

            Assert.IsTrue(_testFriendWrapper.PropertyChangedEventRised(nameof(_testFriendWrapper.TestFriendAddress),
                                                                       () => _testFriendWrapper.TestFriendAddress = new TestFriendAddressWrapper(newAddress)));

            Assert.IsTrue(_testFriendWrapper.IsChanged);

            Assert.IsTrue(_testFriendWrapper.PropertyChangedEventRised(nameof(_testFriendWrapper.TestFriendAddress),
                                                                       () => _testFriendWrapper.TestFriendAddress = oldAddress));
            Assert.IsFalse(_testFriendWrapper.IsChanged);

            Assert.IsFalse(_testFriendWrapper.PropertyChangedEventRised(nameof(_testFriendWrapper.TestFriendAddress),
                                                                        () => _testFriendWrapper.TestFriendAddress = new TestFriendAddressWrapper(oldAddress.Model)));
            Assert.IsFalse(_testFriendWrapper.IsChanged);
        }