public void OFPChangingTheHostPropertyShouldFireAChildChangeNotificationOnlyIfThePreviousChildIsDifferent() { (new TestScheduler()).With(sched => { var fixture = new HostTestFixture() { Child = new TestFixture() }; var changes = fixture.ObservableForProperty(x => x.Child.IsOnlyOneWord).CreateCollection(); fixture.Child.IsOnlyOneWord = "Foo"; sched.Start(); Assert.Equal(1, changes.Count); fixture.Child.IsOnlyOneWord = "Bar"; sched.Start(); Assert.Equal(2, changes.Count); fixture.Child = new TestFixture() { IsOnlyOneWord = "Bar" }; sched.Start(); Assert.Equal(2, changes.Count); }); }
public void OFPReplacingTheHostWithNullThenSettingItBackShouldResubscribeTheObservable() { (new TestScheduler()).With(sched => { var fixture = new HostTestFixture() { Child = new TestFixture() }; var changes = fixture.ObservableForProperty(x => x.Child.IsOnlyOneWord).CreateCollection(); fixture.Child.IsOnlyOneWord = "Foo"; sched.Start(); Assert.Equal(1, changes.Count); fixture.Child.IsOnlyOneWord = "Bar"; sched.Start(); Assert.Equal(2, changes.Count); // Oops, now the child is Null, we may now blow up fixture.Child = null; sched.Start(); Assert.Equal(2, changes.Count); // Tricky! This is a change too, because from the perspective // of the binding, we've went from "Bar" to null fixture.Child = new TestFixture(); sched.Start(); Assert.Equal(3, changes.Count); Assert.True(changes.All(x => x.Sender == fixture)); Assert.True(changes.All(x => x.PropertyName == "Child.IsOnlyOneWord")); changes.Select(x => x.Value).AssertAreEqual(new[] { "Foo", "Bar", null }); }); }
public void OFPSimpleChildPropertyTest() { (new TestScheduler()).With(sched => { var fixture = new HostTestFixture() { Child = new TestFixture() }; var changes = fixture.ObservableForProperty(x => x.Child.IsOnlyOneWord).CreateCollection(); fixture.Child.IsOnlyOneWord = "Foo"; sched.Start(); Assert.Equal(1, changes.Count); fixture.Child.IsOnlyOneWord = "Bar"; sched.Start(); Assert.Equal(2, changes.Count); fixture.Child.IsOnlyOneWord = "Baz"; sched.Start(); Assert.Equal(3, changes.Count); fixture.Child.IsOnlyOneWord = "Baz"; sched.Start(); Assert.Equal(3, changes.Count); Assert.True(changes.All(x => x.Sender == fixture)); Assert.True(changes.All(x => x.PropertyName == "Child.IsOnlyOneWord")); changes.Select(x => x.Value).AssertAreEqual(new[] { "Foo", "Bar", "Baz" }); }); }
public void SubscriptionToWhenAnyShouldReturnCurrentValue() { var obj = new HostTestFixture(); int observedValue = 1; obj.WhenAny(x => x.SomeOtherParam, x => x.Value) .Subscribe(x => observedValue = x); obj.SomeOtherParam = 42; Assert.True(observedValue == obj.SomeOtherParam); }
public void RaisePropertyChangedTest() { var fixture = new HostTestFixture(); string propChanged = null; fixture.PropertyChanged += (o, e) => propChanged = e.PropertyName; fixture.SomeParam = "Foo"; Assert.AreEqual("SomeParam", propChanged); fixture.SomeOtherParam = 4; Assert.AreEqual("SomeOtherParam", propChanged); }
public void FromPropertyTest() { var input = new[] { 1, 2, 3 }; var fixture = new HostTestFixture(); IList<IObservedChange<HostTestFixture, int>> result = null; fixture.FromProperty(x => x.SomeOtherParam) .Take(input.Length) .ToList() .Subscribe(x => result = x); foreach (var v in input) { fixture.SomeOtherParam = v; } Assert.IsNotNull(result); Assert.AreEqual(input.Length, result.Count); foreach (var v in input.Zip(result.Select(x => x.Value), (expected, actual) => new { expected, actual })) { Assert.AreEqual(v.expected, v.actual); } }
public void WhenAnySmokeTest() { (new TestScheduler()).With(sched => { var fixture = new HostTestFixture() { Child = new TestFixture() }; fixture.SomeOtherParam = 5; fixture.Child.IsNotNullString = "Foo"; var output1 = new List <IObservedChange <HostTestFixture, int> >(); var output2 = new List <IObservedChange <HostTestFixture, string> >(); fixture.WhenAny(x => x.SomeOtherParam, x => x.Child.IsNotNullString, (sop, nns) => new { sop, nns }).Subscribe(x => { output1.Add(x.sop); output2.Add(x.nns); }); sched.Start(); Assert.Equal(1, output1.Count); Assert.Equal(1, output2.Count); Assert.Equal(fixture, output1[0].Sender); Assert.Equal(fixture, output2[0].Sender); Assert.Equal(5, output1[0].Value); Assert.Equal("Foo", output2[0].Value); fixture.SomeOtherParam = 10; sched.Start(); Assert.Equal(2, output1.Count); Assert.Equal(2, output2.Count); Assert.Equal(fixture, output1[1].Sender); Assert.Equal(fixture, output2[1].Sender); Assert.Equal(10, output1[1].Value); Assert.Equal("Foo", output2[1].Value); fixture.Child.IsNotNullString = "Bar"; sched.Start(); Assert.Equal(3, output1.Count); Assert.Equal(3, output2.Count); Assert.Equal(fixture, output1[2].Sender); Assert.Equal(fixture, output2[2].Sender); Assert.Equal(10, output1[2].Value); Assert.Equal("Bar", output2[2].Value); }); }
public void FromPropertyTest() { var input = new[] { 1, 2, 3 }; var fixture = new HostTestFixture(); IList <IObservedChange <HostTestFixture, int> > result = null; fixture.FromProperty(x => x.SomeOtherParam) .Take(input.Length) .ToList() .Subscribe(x => result = x); foreach (var v in input) { fixture.SomeOtherParam = v; } Assert.IsNotNull(result); Assert.AreEqual(input.Length, result.Count); foreach (var v in input.Zip(result.Select(x => x.Value), (expected, actual) => new { expected, actual })) { Assert.AreEqual(v.expected, v.actual); } }
public void WhenAnySmokeTest() { (new TestScheduler()).With(sched => { var fixture = new HostTestFixture() {Child = new TestFixture()}; fixture.SomeOtherParam = 5; fixture.Child.IsNotNullString = "Foo"; var output1 = new List<IObservedChange<HostTestFixture, int>>(); var output2 = new List<IObservedChange<HostTestFixture, string>>(); fixture.WhenAny(x => x.SomeOtherParam, x => x.Child.IsNotNullString, (sop, nns) => new {sop, nns}).Subscribe(x => { output1.Add(x.sop); output2.Add(x.nns); }); sched.Start(); Assert.Equal(1, output1.Count); Assert.Equal(1, output2.Count); Assert.Equal(fixture, output1[0].Sender); Assert.Equal(fixture, output2[0].Sender); Assert.Equal(5, output1[0].Value); Assert.Equal("Foo", output2[0].Value); fixture.SomeOtherParam = 10; sched.Start(); Assert.Equal(2, output1.Count); Assert.Equal(2, output2.Count); Assert.Equal(fixture, output1[1].Sender); Assert.Equal(fixture, output2[1].Sender); Assert.Equal(10, output1[1].Value); Assert.Equal("Foo", output2[1].Value); fixture.Child.IsNotNullString = "Bar"; sched.Start(); Assert.Equal(3, output1.Count); Assert.Equal(3, output2.Count); Assert.Equal(fixture, output1[2].Sender); Assert.Equal(fixture, output2[2].Sender); Assert.Equal(10, output1[2].Value); Assert.Equal("Bar", output2[2].Value); }); }
public void OFPSimpleChildPropertyTest() { (new TestScheduler()).With(sched => { var fixture = new HostTestFixture() {Child = new TestFixture()}; var changes = fixture.ObservableForProperty(x => x.Child.IsOnlyOneWord).CreateCollection(); fixture.Child.IsOnlyOneWord = "Foo"; sched.Start(); Assert.Equal(1, changes.Count); fixture.Child.IsOnlyOneWord = "Bar"; sched.Start(); Assert.Equal(2, changes.Count); fixture.Child.IsOnlyOneWord = "Baz"; sched.Start(); Assert.Equal(3, changes.Count); fixture.Child.IsOnlyOneWord = "Baz"; sched.Start(); Assert.Equal(3, changes.Count); Assert.True(changes.All(x => x.Sender == fixture)); Assert.True(changes.All(x => x.PropertyName == "Child.IsOnlyOneWord")); changes.Select(x => x.Value).AssertAreEqual(new[] {"Foo", "Bar", "Baz"}); }); }
public void OFPReplacingTheHostWithNullThenSettingItBackShouldResubscribeTheObservable() { (new TestScheduler()).With(sched => { var fixture = new HostTestFixture() {Child = new TestFixture()}; var changes = fixture.ObservableForProperty(x => x.Child.IsOnlyOneWord).CreateCollection(); fixture.Child.IsOnlyOneWord = "Foo"; sched.Start(); Assert.Equal(1, changes.Count); fixture.Child.IsOnlyOneWord = "Bar"; sched.Start(); Assert.Equal(2, changes.Count); // Oops, now the child is Null, we may now blow up fixture.Child = null; sched.Start(); Assert.Equal(2, changes.Count); // Tricky! This is a change too, because from the perspective // of the binding, we've went from "Bar" to null fixture.Child = new TestFixture(); sched.Start(); Assert.Equal(3, changes.Count); Assert.True(changes.All(x => x.Sender == fixture)); Assert.True(changes.All(x => x.PropertyName == "Child.IsOnlyOneWord")); changes.Select(x => x.Value).AssertAreEqual(new[] {"Foo", "Bar", null}); }); }
public void OFPChangingTheHostPropertyShouldFireAChildChangeNotificationOnlyIfThePreviousChildIsDifferent() { (new TestScheduler()).With(sched => { var fixture = new HostTestFixture() {Child = new TestFixture()}; var changes = fixture.ObservableForProperty(x => x.Child.IsOnlyOneWord).CreateCollection(); fixture.Child.IsOnlyOneWord = "Foo"; sched.Start(); Assert.Equal(1, changes.Count); fixture.Child.IsOnlyOneWord = "Bar"; sched.Start(); Assert.Equal(2, changes.Count); fixture.Child = new TestFixture() {IsOnlyOneWord = "Bar"}; sched.Start(); Assert.Equal(2, changes.Count); }); }