Пример #1
0
        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);
                            }
                        }
                    }
                }
            }
        }
Пример #2
0
        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);
                    }
                }
            }
        }