예제 #1
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);
                    }
                }
            }
        }