public void RaisePropertyChanged_WithExpressionAndMessage_ShouldCallRaisePropertyChangedWithStringAndWithExpression()
        {
            var testObject = new TestViewModelForPropertyChanged();

            var eventWasRaised = false;
            var messageWasReceived = false;

            testObject.PropertyChanged += (s, e) =>
            {
                if (e.PropertyName == "BoolPropertyWithExpressionAndMessage")
                {
                    eventWasRaised = true;
                }
            };

            Messenger.Default.Register<PropertyChangedMessage<bool>>(
                this,
                message =>
                {
                    if (message.PropertyName == "BoolPropertyWithExpressionAndMessage"
                        && message.Sender == testObject)
                    {
                        messageWasReceived = true;
                    }
                });

            Assert.IsFalse(testObject.BoolPropertyWithExpressionAndMessage);
            testObject.BoolPropertyWithExpressionAndMessage = true;
            Assert.IsTrue(testObject.BoolPropertyWithExpressionAndMessage);
            Assert.IsTrue(eventWasRaised);
            Assert.IsTrue(messageWasReceived);
            Assert.IsTrue(testObject.RaisePropertyChangedWithPropertyNameWasCalled);
            Assert.IsTrue(testObject.RaisePropertyChangedWithExpressionWasCalled);
        }
        public void RaisePropertyChanged_WithExpressionAndMessage_ShouldCallRaisePropertyChangedWithStringAndWithExpression()
        {
            var testObject = new TestViewModelForPropertyChanged();

            var eventWasRaised     = false;
            var messageWasReceived = false;

            testObject.PropertyChanged += (s, e) =>
            {
                if (e.PropertyName == "BoolPropertyWithExpressionAndMessage")
                {
                    eventWasRaised = true;
                }
            };

            Messenger.Default.Register <PropertyChangedMessage <bool> >(
                this,
                message =>
            {
                if (message.PropertyName == "BoolPropertyWithExpressionAndMessage" &&
                    message.Sender == testObject)
                {
                    messageWasReceived = true;
                }
            });

            Assert.IsFalse(testObject.BoolPropertyWithExpressionAndMessage);
            testObject.BoolPropertyWithExpressionAndMessage = true;
            Assert.IsTrue(testObject.BoolPropertyWithExpressionAndMessage);
            Assert.IsTrue(eventWasRaised);
            Assert.IsTrue(messageWasReceived);
            Assert.IsTrue(testObject.RaisePropertyChangedWithPropertyNameWasCalled);
            Assert.IsTrue(testObject.RaisePropertyChangedWithExpressionWasCalled);
        }
        public void RaisePropertyChanged_WithExpression_ShouldCallRaisePropertyChangedWithStringAndWithExpression()
        {
            var testObject = new TestViewModelForPropertyChanged();

            var eventWasRaised = false;
            testObject.PropertyChanged += (s, e) =>
            {
                if (e.PropertyName == "BoolPropertyWithExpression")
                {
                    eventWasRaised = true;
                }
            };

            Assert.IsFalse(testObject.BoolPropertyWithExpression);
            testObject.BoolPropertyWithExpression = true;
            Assert.IsTrue(testObject.BoolPropertyWithExpression);
            Assert.IsTrue(eventWasRaised);
            Assert.IsTrue(testObject.RaisePropertyChangedWithPropertyNameWasCalled);
            Assert.IsTrue(testObject.RaisePropertyChangedWithExpressionWasCalled);
        }
        public void RaisePropertyChanged_WithSetAndExpression_ShouldCallRaisePropertyChangedWithStringAndWithExpression()
        {
            var testObject = new TestViewModelForPropertyChanged();

            var eventWasRaised = false;

            testObject.PropertyChanged += (s, e) =>
            {
                if (e.PropertyName == "BoolPropertyWithSetAndExpression")
                {
                    eventWasRaised = true;
                }
            };

            Assert.IsFalse(testObject.BoolPropertyWithSetAndExpression);
            testObject.BoolPropertyWithSetAndExpression = true;
            Assert.IsTrue(testObject.BoolPropertyWithSetAndExpression);
            Assert.IsTrue(eventWasRaised);
            Assert.IsTrue(testObject.RaisePropertyChangedWithPropertyNameWasCalled);
            Assert.IsTrue(testObject.RaisePropertyChangedWithExpressionWasCalled);
        }