public void TestRaiseValueChanged()
        {
            bool  raised = false;
            Order order  = new Order();
            Differing <string> computing = new Differing <string>(new Computing <string>(() => order.Num));

            computing.PropertyChanged += (sender, args) => { if (args.PropertyName == "Value")
                                                             {
                                                                 raised = true;
                                                             }
            };

            order.Num = "1";
            Assert.IsTrue(raised);
            raised = false;

            order.Num = "1";
            Assert.IsFalse(raised);

            order.Num = "2";
            Assert.IsTrue(raised);
        }
Exemple #2
0
        public void TestRaiseValueChanged2()
        {
            bool  raised = false;
            Order order  = new Order();
            Differing <string> computing = new Differing <string>(new Computing <string>(() => order.Num), EqualityComparer <string> .Default).For(consumer);

            computing.PropertyChanged += (sender, args) => { if (args.PropertyName == "Value")
                                                             {
                                                                 raised = true;
                                                             }
            };

            order.Num = "1";
            Assert.IsTrue(raised);
            raised = false;

            order.Num = "1";
            Assert.IsFalse(raised);

            order.Num = "2";
            Assert.IsTrue(raised);

            consumer.Dispose();
        }
        public void TestComputing()
        {
            Item       item     = new Item(0, "0");
            OcConsumer consumer = new OcConsumer();

            Expression <Func <int> > valueExpression = () => item.Id;
            Computing <int>          computing       = new Computing <int>(valueExpression);

            Assert.AreEqual(computing.GetValueExpression, valueExpression);
            Differing <int> differing = computing.Differing();

            item.Computing = computing;

            bool activationInProgress   = true;
            bool inActivationInProgress = false;

            computing.PropertyChanged += (sender, args) =>
            {
                if (args.PropertyName == "ActivationInProgress" || args.PropertyName == "InactivationInProgress")
                {
                    return;
                }
                Assert.AreEqual(computing.ActivationInProgress, activationInProgress);
                Assert.AreEqual(computing.InactivationInProgress, inActivationInProgress);
            };

            differing.For(consumer);

            activationInProgress = false;
            Assert.IsTrue(computing.Consumers.Contains(consumer));

            Assert.IsTrue(((IComputingInternal)differing).Consumers.Contains(consumer));
            Assert.IsTrue(computing.UserCodeIsCalledFrom == null);

            Action <int> computingSetValueRequestHandler = i =>
            {
                item.Id = i;
            };

            computing.SetValueRequestHandler += computingSetValueRequestHandler;
            Assert.AreEqual(computing.SetValueRequestHandler, computingSetValueRequestHandler);

            bool disposing = false;

            int value = 1;

            computing.PreValueChanged += (sender, args) =>
            {
                if (disposing)
                {
                    return;
                }
                Assert.AreEqual(computing.NewValue, value);
                Assert.AreEqual(computing.NewValueObject, value);
                Assert.AreEqual(computing.HandledEventSender, item);
                Assert.AreEqual(computing.HandledEventArgs, item._lastPropertyChangedEventArgs);
            };

            computing.PostValueChanged += (sender, args) =>
            {
                if (disposing)
                {
                    return;
                }
                Assert.AreEqual(computing.NewValue, value);
                Assert.AreEqual(computing.NewValueObject, value);
                Assert.AreEqual(computing.HandledEventSender, item);
                Assert.AreEqual(computing.HandledEventArgs, item._lastPropertyChangedEventArgs);
            };

            computing.Value = 1;

            Assert.AreEqual(computing.Value, 1);
            Assert.AreEqual(computing.ValueObject, 1);

            value = 2;
            computing.ValueObject = 2;

            Assert.AreEqual(computing.Value, 2);
            Assert.AreEqual(computing.ValueObject, 2);

            Assert.AreEqual(computing.ValueType, typeof(int));

            Assert.IsNotNull(computing.ToString());

            computing.DebugTag = "DebugTag";
            Assert.AreEqual(computing.DebugTag, "DebugTag");

            computing.Tag = "Tag";
            Assert.AreEqual(computing.Tag, "Tag");

            Assert.IsTrue(computing.IsActive);

            Assert.IsTrue(computing.IsConsistent);

            Assert.IsNotNull(computing.ToString());

            if (OcConfiguration.SaveInstantiationStackTrace)
            {
                Assert.IsNotNull(computing.InstantiationStackTrace);
            }


            disposing = true;
            inActivationInProgress = true;
            consumer.Dispose();
        }