public void Root_Of_Scoped_Expression_Is_The_Scoped_Item() { var bindable = ObservedPropertyModels.CreateFirst(""); MemberAccessor <string> ae; { var item = bindable; ae = MemberAccessor.Create(() => item.Second.Third.Value); } Assert.Same(ae.Target, bindable); }
public void Reduced_To_Constant_Accessor_Is_ReadOnly() { var bindable = ObservedPropertyModels.CreateFirst(""); MemberAccessor <FirstBindable> ae; { var item = bindable; ae = MemberAccessor.Create(() => item); } Assert.True(ae.IsReadOnly); }
public void Reduced_To_Constant_Accessor_Has_Constant_Type() { var bindable = ObservedPropertyModels.CreateFirst(""); MemberAccessor <FirstBindable> ae; { var item = bindable; ae = MemberAccessor.Create(() => item); } Assert.Equal(MemberAccessorType.Constant, ae.Type); }
public void Callback_Is_Called_On_Direct_Property_Change() { bool isCallbackCalled = false; var first = ObservedPropertyModels.CreateFirst("text"); Action callback = () => isCallbackCalled = true; var property = ObservedProperty.Create(() => first.Second.Third.Value, callback); first.Second.Third.Value = "new"; Assert.True(isCallbackCalled); }
public void ObservedProperty_Dispose_Works() { bool isCallbackCalled = false; var first = ObservedPropertyModels.CreateFirst("text"); Action callback = () => isCallbackCalled = true; var property = ObservedProperty.Create(() => first.Second.Third.Value, callback); property.Dispose(); first.Second = ObservedPropertyModels.CreateSecond("new1"); Assert.False(isCallbackCalled); }
public void Same_Scoped_Expressions_With_Different_ToStrings_Are_Equal() { var bindable = ObservedPropertyModels.CreateFirst(""); MemberAccessor <string> ae1, ae2; { var item1 = bindable.Second; ae1 = MemberAccessor.Create(() => item1.Third.Value); } { var item2 = bindable.Second; ae2 = MemberAccessor.Create(() => item2.Third.Value); } Assert.Equal(ae1, ae2); }
public void ObservedProperty_Suppress_Works() { bool isCallbackCalled = false; var first = ObservedPropertyModels.CreateFirst("text"); Action callback = () => isCallbackCalled = true; var property = ObservedProperty.Create(() => first.Second.Third.Value, callback); using (property.Suppress()) first.Second = ObservedPropertyModels.CreateSecond("new"); Assert.False(isCallbackCalled); first.Second = ObservedPropertyModels.CreateSecond("new1"); Assert.True(isCallbackCalled); }
public void Different_Scoped_Expressions_With_Similar_ToStrings_Are_Not_Equal() { var bindable1 = ObservedPropertyModels.CreateFirst(""); var bindable2 = ObservedPropertyModels.CreateFirst(""); MemberAccessor <string> ae1, ae2; { var item = bindable1; ae1 = MemberAccessor.Create(() => item.Second.Third.Value); } { var item = bindable2; ae2 = MemberAccessor.Create(() => item.Second.Third.Value); } // ae1.ToString() == ae2.ToString() Assert.NotEqual(ae1, ae2); }
public void Generated_Root_Reduction_Works() { var bindable = ObservedPropertyModels.CreateFirst(""); MemberAccessor <ThirdBindable> ae; { var item = bindable; ae = MemberAccessor.Create(() => item.Second.Third); } var reduced = ae.Expression; if (reduced.Body is not MemberExpression member1) { throw new XunitException(); } if (member1.Member is not PropertyInfo property1 || property1.Name != nameof(SecondBindable.Third)) { throw new XunitException(); } if (member1.Expression is not MemberExpression member2) { throw new XunitException(); } if (member2.Member is not PropertyInfo property2 || property2.Name != nameof(FirstBindable.Second)) { throw new XunitException(); } if (member2.Expression is not ConstantExpression constant1 || constant1.Value != bindable) { throw new XunitException(); } }