public void Notifies() { var count = 0; var fake1 = new Fake { IsTrue = false }; var fake2 = new Fake { IsTrue = false }; var fake3 = new Fake { IsTrue = false }; using (var condition1 = new Condition(fake1.ObservePropertyChanged(x => x.IsTrue), () => fake1.IsTrue)) { using (var condition2 = new Condition(fake2.ObservePropertyChanged(x => x.IsTrue), () => fake2.IsTrue)) { using (var condition3 = new Condition(fake3.ObservePropertyChanged(x => x.IsTrue), () => fake3.IsTrue)) { using (var collection = new OrCondition(condition1, condition2, condition3)) { using (collection.ObserveIsSatisfiedChanged() .Subscribe(_ => count++)) { Assert.AreEqual(false, collection.IsSatisfied); fake1.IsTrue = !fake1.IsTrue; Assert.AreEqual(true, collection.IsSatisfied); Assert.AreEqual(1, count); fake2.IsTrue = !fake2.IsTrue; Assert.AreEqual(true, collection.IsSatisfied); Assert.AreEqual(1, count); fake3.IsTrue = !fake3.IsTrue; Assert.AreEqual(true, collection.IsSatisfied); Assert.AreEqual(1, count); fake1.IsTrue = !fake1.IsTrue; Assert.AreEqual(true, collection.IsSatisfied); Assert.AreEqual(1, count); fake2.IsTrue = !fake2.IsTrue; Assert.AreEqual(true, collection.IsSatisfied); Assert.AreEqual(1, count); fake3.IsTrue = !fake3.IsTrue; Assert.AreEqual(false, collection.IsSatisfied); Assert.AreEqual(2, count); } } } } } }
public void DynamicList() { var conditions = new ObservableCollection <ICondition>(); using (var condition = new OrCondition(conditions, leaveOpen: true)) { var actuals = new List <bool?>(); using (condition.ObserveIsSatisfiedChanged() .Subscribe(c => actuals.Add(c.IsSatisfied))) { var preRequisiteChanges = 0; using (condition.ObservePropertyChangedSlim(x => x.Prerequisites, signalInitial: false) .Subscribe(x => preRequisiteChanges++)) { Assert.AreEqual(0, preRequisiteChanges); CollectionAssert.IsEmpty(condition.Prerequisites); Assert.AreSame(condition.Prerequisites, condition.Prerequisites); Assert.AreEqual(null, condition.IsSatisfied); CollectionAssert.IsEmpty(actuals); Assert.AreEqual(null, condition.IsSatisfied); conditions.Add(Mock.Of <ICondition>(x => x.IsSatisfied == true)); Assert.AreEqual(true, condition.IsSatisfied); CollectionAssert.AreEqual(new[] { true }, actuals); Assert.AreEqual(1, preRequisiteChanges); CollectionAssert.AreEqual(conditions, condition.Prerequisites); Assert.AreSame(condition.Prerequisites, condition.Prerequisites); Mock.Get(conditions[0]).SetupGet(x => x.IsSatisfied).Returns(false); Mock.Get(conditions[0]).Raise(x => x.PropertyChanged += null, new PropertyChangedEventArgs("IsSatisfied")); Assert.AreEqual(false, condition.IsSatisfied); CollectionAssert.AreEqual(new[] { true, false }, actuals); Assert.AreEqual(1, preRequisiteChanges); CollectionAssert.AreEqual(conditions, condition.Prerequisites); Assert.AreSame(condition.Prerequisites, condition.Prerequisites); } } } }