Example #1
0
        public void ReversableDivide_Double_CorrectResult()
        {
            var dummy = new ObservableDummy <double>();

            SetValue(() => dummy.Item / 7, 6.0);
            Assert.AreEqual(42, dummy.Item);
        }
Example #2
0
        public void OrderByDescending_ObservableItemChanges_Update()
        {
            var update = false;
            var dummy1 = new ObservableDummy <int>(1);
            var dummy2 = new Dummy <int>(3);
            var dummy3 = new Dummy <int>(5);
            var coll   = new List <Dummy <int> >()
            {
                dummy1, dummy2, dummy3
            };

            var test = coll.WithUpdates().OrderByDescending(d => d.Item);

            test.CollectionChanged += (o, e) =>
            {
                Assert.AreSame(dummy1, e.NewItems[0]);
                Assert.AreSame(dummy1, e.OldItems[0]);
                update = true;
            };

            test.AssertSequence(dummy3, dummy2, dummy1);
            Assert.AreEqual(3, test.Sequences.Count());
            Assert.IsFalse(update);

            dummy1.Item = 4;

            Assert.IsTrue(update);
            test.AssertSequence(dummy3, dummy1, dummy2);
        }
Example #3
0
        public void Select_ObservableItem_Update()
        {
            var update = false;
            ICollection <Dummy <string> > coll = new List <Dummy <string> >();
            var dummy = new ObservableDummy <string>()
            {
                Item = "23"
            };

            coll.Add(dummy);

            var test = coll.WithUpdates().Select(d => d.Item);

            test.CollectionChanged += (o, e) =>
            {
                update = true;
                Assert.AreEqual("23", e.OldItems[0]);
            };

            Assert.IsTrue(Sys.Contains(test, "23"));
            Assert.IsFalse(update);

            dummy.Item = "42";

            Assert.IsTrue(update);
            Assert.IsTrue(Sys.Contains(test, "42"));
        }
Example #4
0
        public void OrderByTransaction_ChangeReplace_Update()
        {
            ExecutionEngine.Current = new SequentialExecutionEngine();

            var update = false;
            var dummy1 = new ObservableDummy <int>(1);
            var dummy2 = new Dummy <int>(3);
            var dummy3 = new Dummy <int>(5);
            var coll   = new NotifyCollection <Dummy <int> >()
            {
                dummy1, dummy2, dummy3
            };
            var collCasted = (INotifyCollection <Dummy <int> >)coll;
            var newDummy   = new Dummy <int>(2);

            var test = collCasted.OrderBy(d => d.Item);

            test.CollectionChanged += (o, e) => update = true;

            test.AssertSequence(dummy1, dummy2, dummy3);
            Assert.AreEqual(3, test.Sequences.Count());
            Assert.IsFalse(update);

            ExecutionEngine.Current.BeginTransaction();

            dummy1.Item = 0;
            coll[0]     = newDummy;
            Assert.IsFalse(update);

            ExecutionEngine.Current.CommitTransaction();

            test.AssertSequence(newDummy, dummy2, dummy3);
            Assert.AreEqual(3, test.Sequences.Count());
            Assert.IsTrue(update);
        }
Example #5
0
        public void ReversableDivide_UInt_CorrectResult()
        {
            var dummy = new ObservableDummy <uint>();

            SetValue(() => dummy.Item / 7, 6u);
            Assert.AreEqual(42u, dummy.Item);
        }
        public void ReversableSubtract_ULong_CorrectResult()
        {
            var dummy = new ObservableDummy <ulong>();

            SetValue(() => dummy.Item - 8, 34ul);
            Assert.AreEqual(42ul, dummy.Item);
        }
Example #7
0
        public void ReversableDivide_Float_CorrectResult()
        {
            var dummy = new ObservableDummy <float>();

            SetValue(() => dummy.Item / 7, 6f);
            Assert.AreEqual(42, dummy.Item);
        }
Example #8
0
        public void ReversableDivide_Decimal_CorrectResult()
        {
            var dummy = new ObservableDummy <decimal>();

            SetValue(() => dummy.Item / 7, 6m);
            Assert.AreEqual(42m, dummy.Item);
        }
Example #9
0
        public void GroupBy_ObservableKeyChangesEraseGroup_Update()
        {
            var update = false;

            ICollection <Dummy <string> > coll = new ObservableCollection <Dummy <string> >();
            var dummy1 = new Dummy <string>("A");
            var dummy2 = new ObservableDummy <string>("B");

            coll.Add(dummy1);
            coll.Add(dummy2);

            var test = coll.WithUpdates().GroupBy(d => d.Item);

            test.CollectionChanged += (o, e) =>
            {
                Assert.IsTrue(ContainsGroup(e.OldItems, "B"));
                update = true;
            };

            Assert.IsTrue(Sys.Contains(Sys.Single(test, group => group.Key == "A"), dummy1));
            Assert.IsTrue(Sys.Contains(Sys.Single(test, group => group.Key == "B"), dummy2));
            Assert.IsFalse(update);

            dummy2.Item = "A";

            Assert.IsTrue(update);
            Assert.AreEqual(1, test.Count());
            Assert.IsTrue(Sys.Contains(Sys.Single(test, group => group.Key == "A"), dummy2));
        }
        public void ReversableSubtractMinuend_Long_CorrectResult()
        {
            var dummy = new ObservableDummy <long>();

            SetValue(() => 76 - dummy.Item, 34L);
            Assert.AreEqual(42, dummy.Item);
        }
Example #11
0
        public void ParameterDependency_WrongMemberWorks()
        {
            var semaphore = new Semaphore {
                Id = 42
            };
            var dummy   = new ObservableDummy <Semaphore>(semaphore);
            var changed = false;
            var test    = Observable.Expression(() => WrongMember(dummy.Item));

            test.ValueChanged += (o, e) => changed = true;

            Assert.IsTrue(test.Value);
            Assert.IsFalse(changed);

            semaphore.Id = 23;

            Assert.IsTrue(test.Value);
            Assert.IsFalse(changed);

            dummy.Item = new Semaphore {
                Id = 23
            };

            Assert.IsTrue(changed);
            Assert.IsFalse(test.Value);
        }
        public void ReversableSubtract_UInt_CorrectResult()
        {
            var dummy = new ObservableDummy <uint>();

            SetValue(() => dummy.Item - 8, 34u);
            Assert.AreEqual(42u, dummy.Item);
        }
        public void ReversableSubtract_Decimal_CorrectResult()
        {
            var dummy = new ObservableDummy <decimal>();

            SetValue(() => dummy.Item - 8, 34m);
            Assert.AreEqual(42, dummy.Item);
        }
Example #14
0
        public void MultiplyChecked_Int_Observable_Update()
        {
            checked
            {
                var updated = false;
                var dummy = new ObservableDummy<int>() { Item = 3 };

                var test = new ObservingFunc<Dummy<int>, int>(d => d.Item * 7);

                var result = test.Observe(dummy);

                result.ValueChanged += (o, e) =>
                {
                    Assert.AreEqual(21, e.OldValue);
                    updated = true;
                };

                Assert.AreEqual(21, result.Value);
                Assert.IsFalse(updated);

                dummy.Item = 6;

                Assert.IsTrue(updated);
                Assert.AreEqual(42, result.Value);
            }
        }
        public void ReversableSubtract_Float_CorrectResult()
        {
            var dummy = new ObservableDummy <float>();

            SetValue(() => dummy.Item - 8, 34f);
            Assert.AreEqual(42, dummy.Item);
        }
Example #16
0
        public void WhereOrderByTransaction_ChangeRemove_Update() // Works without Transaction
        {
            ExecutionEngine.Current = new SequentialExecutionEngine();

            var update = false;
            var dummy1 = new ObservableDummy <int>(1);
            var dummy2 = new Dummy <int>(3);
            var dummy3 = new Dummy <int>(5);
            var coll   = new NotifyCollection <Dummy <int> >()
            {
                dummy1, dummy2, dummy3
            };

            var test = coll.Where(d => d.Item > 0).OrderBy(d => d.Item);

            test.CollectionChanged += (o, e) => update = true;

            test.AssertSequence(dummy1, dummy2, dummy3);
            Assert.AreEqual(3, test.Sequences.Count());
            Assert.IsFalse(update);

            ExecutionEngine.Current.BeginTransaction();

            dummy1.Item = 0;
            Assert.IsFalse(update);

            ExecutionEngine.Current.CommitTransaction();

            test.AssertSequence(dummy2, dummy3);
            Assert.AreEqual(2, test.Sequences.Count());
            Assert.IsTrue(update);
        }
Example #17
0
        public void ReversableDivide2_Int_CorrectResult()
        {
            var dummy = new ObservableDummy <int>(1);

            SetValue(() => 252 / dummy.Item, 6);
            Assert.AreEqual(42, dummy.Item);
        }
Example #18
0
        public void ReversableDivide_Long_CorrectResult()
        {
            var dummy = new ObservableDummy <long>();

            SetValue(() => dummy.Item / 7, 6L);
            Assert.AreEqual(42, dummy.Item);
        }
        public void ReversableMultiply_ULong_CorrectResult()
        {
            var dummy = new ObservableDummy <ulong>();

            SetValue(() => dummy.Item * 2, 84ul);
            Assert.AreEqual(42ul, dummy.Item);
        }
Example #20
0
        public void SelectMany_ObservableSubSourceItemChanges_Updates()
        {
            var update = false;
            ICollection <Dummy <ICollection <Dummy <string> > > > coll = new List <Dummy <ICollection <Dummy <string> > > >();
            var dummy = new ObservableDummy <string>()
            {
                Item = "23"
            };
            var dummy2 = new Dummy <ICollection <Dummy <string> > >()
            {
                Item = new List <Dummy <string> >()
                {
                    dummy
                }
            };

            coll.Add(dummy2);

            var test = coll.WithUpdates().SelectMany(d => d.Item, (d1, d2) => d2.Item);

            test.CollectionChanged += (o, e) =>
            {
                update = true;
                Assert.AreEqual("23", e.OldItems[0]);
                Assert.AreEqual("42", e.NewItems[0]);
            };

            Assert.IsTrue(Sys.Contains(test, "23"));
            Assert.IsFalse(update);

            dummy.Item = "42";

            Assert.IsTrue(update);
            Assert.IsTrue(Sys.Contains(test, "42"));
        }
Example #21
0
        public void ListInit_Observable_NoUpdateWhenDetached()
        {
            var update = false;
            var dummy = new ObservableDummy<string>("foo");

            var test = Observable.Expression(() => new List<string>() { dummy.Item });

            test.ValueChanged += (o, e) => update = true;

            Assert.IsTrue(test.Value.Contains("foo"));
            Assert.IsFalse(update);

            test.Detach();

            dummy.Item = "bar";

            Assert.IsFalse(update);
            Assert.AreEqual(0, test.Value.Count);

            test.Attach();

            Assert.AreEqual(1, test.Value.Count);
            Assert.IsTrue(test.Value.Contains("bar"));

            dummy.Item = "42";

            Assert.AreEqual(1, test.Value.Count);
            Assert.IsTrue(test.Value.Contains("42"));
        }
        public void ReversableMultiply_Decimal_CorrectResult()
        {
            var dummy = new ObservableDummy <decimal>();

            SetValue(() => dummy.Item * 2, 84m);
            Assert.AreEqual(42, dummy.Item);
        }
Example #23
0
        public void AddChecked_Int_Observable_NoUpdateWhenDetached()
        {
            checked
            {
                var updated = false;
                var dummy = new ObservableDummy<int>() { Item = 5 };

                var result = Observable.Expression(() => dummy.Item + 7);

                result.ValueChanged += (o, e) => updated = true;

                Assert.AreEqual(12, result.Value);
                Assert.IsFalse(updated);

                result.Detach();

                dummy.Item = 35;

                Assert.AreEqual(12, result.Value);
                Assert.IsFalse(updated);

                result.Attach();

                Assert.IsTrue(updated);
                Assert.AreEqual(42, result.Value);

                updated = false;
                dummy.Item = 5;

                Assert.IsTrue(updated);
            }
        }
Example #24
0
        public void New_Observable_NoUpdatesWhenDetached()
        {
            var update = false;
            var dummy = new ObservableDummy<int>() { Item = 23 };

            var test = new NotifyValue<Dummy<int>>(() => new Dummy<int>(dummy.Item));

            test.ValueChanged += (o, e) => update = true;

            Assert.AreEqual(23, (test.Value as Dummy<int>).Item);
            Assert.IsFalse(update);

            test.Detach();

            dummy.Item = 42;

            Assert.IsFalse(update);

            test.Attach();

            Assert.IsTrue(update);
            Assert.AreEqual(42, test.Value.Item);
            update = false;

            dummy.Item = 1;

            Assert.IsTrue(update);
        }
Example #25
0
        public void WhereSelectOrderByTransaction_RemoveCausingChange_Update() // Works without Transaction
        {
            ExecutionEngine.Current = new SequentialExecutionEngine();

            var update = false;
            var dummy1 = new ObservableDummy <int>(1);
            var dummy2 = new Dummy <int>(3);
            var dummy3 = new Dummy <int>(5);
            var coll   = new NotifyCollection <Dummy <int> >()
            {
                dummy1, dummy2, dummy3
            };

            var test = coll.Where(d => d.Item > 0).Select(d => new Dummy <int>(d.Item * 2)).OrderBy(d => d.Item);

            test.CollectionChanged += (o, e) => update = true;

            ((IEnumerable <Dummy <int> >)test).Select(d => d.Item).AssertSequence(dummy1.Item * 2, dummy2.Item * 2, dummy3.Item * 2);
            Assert.AreEqual(3, test.Sequences.Count());
            Assert.IsFalse(update);

            ExecutionEngine.Current.BeginTransaction();

            dummy1.Item = 0;
            Assert.IsFalse(update);

            ExecutionEngine.Current.CommitTransaction();

            // Calling Select directly on test leads to quadrupling of the entries in test
            ((IEnumerable <Dummy <int> >)test).Select(d => d.Item).AssertSequence(dummy2.Item * 2, dummy3.Item * 2);
            Assert.AreEqual(2, test.Sequences.Count());
            Assert.IsTrue(update);
        }
Example #26
0
        public void Where_ObservableItem_Updates()
        {
            var update = false;
            ICollection <Dummy <bool> > coll = new List <Dummy <bool> >();
            var dummy = new ObservableDummy <bool>()
            {
                Item = true
            };

            coll.Add(dummy);

            var test = coll.WithUpdates().Where(d => d.Item);

            test.CollectionChanged += (o, e) =>
            {
                update = true;
                Assert.AreEqual(dummy, e.OldItems[0]);
            };

            Assert.IsTrue(Sys.Contains(test, dummy));
            Assert.IsFalse(update);

            dummy.Item = false;

            Assert.IsFalse(test.Any());
            Assert.IsTrue(update);
        }
        public void ReversableMultiply_Float_CorrectResult()
        {
            var dummy = new ObservableDummy <float>();

            SetValue(() => dummy.Item * 2, 84f);
            Assert.AreEqual(42, dummy.Item);
        }
        public void ConditionalExpression_ObservableTest_NoUpdatesWhenDetached()
        {
            var update = false;
            var dummy = new ObservableDummy<bool>() { Item = false };

            var test = new ObservingFunc<Dummy<bool>, string>(d => d.Item ? "42" : "23");

            var result = test.Observe(dummy);

            result.ValueChanged += (o, e) => update = true;

            Assert.AreEqual("23", result.Value);
            Assert.IsFalse(update);

            result.Detach();

            dummy.Item = true;

            Assert.IsFalse(update);

            result.Attach();

            Assert.IsTrue(update);
            Assert.AreEqual("42", result.Value);

            update = false;

            dummy.Item = false;

            Assert.IsTrue(update);
        }
Example #29
0
        public void ArrayCreation_Observable_NoUpdatesWhenDetached()
        {
            var update = false;
            var dummy = new ObservableDummy<int>() { Item = 23 };

            var test = new NotifyValue<int[]>(() => new int[dummy.Item]);

            test.ValueChanged += (o, e) => update = true;

            Assert.AreEqual(23, (test.Value as int[]).Length);
            Assert.IsFalse(update);

            test.Detach();

            dummy.Item = 42;

            Assert.IsFalse(update);

            test.Attach();

            Assert.IsTrue(update);
            Assert.AreEqual(42, test.Value.Length);
            update = false;

            dummy.Item = 2;

            Assert.IsTrue(update);
        }
Example #30
0
        public void OrderBy_ObservableItemChanges_NoUpdateWhenDetached()
        {
            var update = false;
            var dummy1 = new ObservableDummy<int>(1);
            var dummy2 = new ObservableDummy<int>(3);
            var dummy3 = new ObservableDummy<int>(5);
            var coll = new List<Dummy<int>>() { dummy1, dummy2, dummy3 };

            var test = coll.WithUpdates().OrderBy(d => d.Item);

            test.CollectionChanged += (o, e) => update = true;

            test.AssertSequence(dummy1, dummy2, dummy3);
            Assert.AreEqual(3, test.Sequences.Count());
            Assert.IsFalse(update);

            test.Detach();
            update = false;

            dummy1.Item = 4;

            Assert.IsFalse(update);

            test.Attach();

            Assert.IsTrue(update);
            test.AssertSequence(dummy2, dummy1, dummy3);
            update = true;

            dummy1.Item = 2;

            Assert.IsTrue(update);
        }
Example #31
0
        public void All_ObservableItem_Update()
        {
            var update = false;

            var dummy = new ObservableDummy <bool>(true);
            var coll  = new List <Dummy <bool> >()
            {
                dummy
            };

            var test = Observable.Expression(() => coll.WithUpdates().All(d => d.Item));

            test.ValueChanged += (o, e) =>
            {
                Assert.IsTrue((bool)e.OldValue);
                Assert.IsFalse((bool)e.NewValue);
                update = true;
            };

            Assert.IsTrue(test.Value);
            Assert.IsFalse(update);

            dummy.Item = false;

            Assert.IsTrue(update);
        }
        public void ReversableAdd_Int_CorrectResult()
        {
            var dummy = new ObservableDummy <int>();

            SetValue(() => dummy.Item + 2, 44);
            Assert.AreEqual(42, dummy.Item);
        }
        public void MemberInitialization_Observable_NoUpdatesWhenDetached()
        {
            var update = false;
            var dummy = new ObservableDummy<int>(23);

            var test = Observable.Expression(() => new Dummy<int>() { Item = dummy.Item });

            test.ValueChanged += (o, e) => update = true;

            Assert.AreEqual(23, (test.Value as Dummy<int>).Item);
            Assert.IsFalse(update);

            test.Detach();

            dummy.Item = 42;

            Assert.IsFalse(update);
            Assert.AreNotSame(dummy, test.Value);
            Assert.AreEqual(23, test.Value.Item);

            test.Attach();

            Assert.AreEqual(42, test.Value.Item);

            dummy.Item = 1;

            Assert.AreEqual(1, test.Value.Item);
        }
        public void ReversableMultiply_UInt_CorrectResult()
        {
            var dummy = new ObservableDummy <uint>();

            SetValue(() => dummy.Item * 2, 84u);
            Assert.AreEqual(42u, dummy.Item);
        }
Example #35
0
        public void ReversableDivide2_ULong_CorrectResult()
        {
            var dummy = new ObservableDummy <ulong>(1);

            SetValue(() => 252 / dummy.Item, 6ul);
            Assert.AreEqual(42ul, dummy.Item);
        }
Example #36
0
        public void Cast_String_Observable_NoUpdatesWhenDetached()
        {
            var update = false;
            var dummy = new ObservableDummy<object>() { Item = "23" };

            var test = new NotifyValue<string>(() => (string)dummy.Item);

            test.ValueChanged += (o, e) => update = true;

            Assert.AreEqual("23", test.Value);
            Assert.IsFalse(update);

            test.Detach();

            dummy.Item = "42";

            Assert.IsFalse(update);

            test.Attach();

            Assert.IsTrue(update);
            Assert.AreEqual("42", test.Value);
            update = false;

            dummy.Item = "1";

            Assert.IsTrue(update);
        }
Example #37
0
        public void OrElse_RightHandThrowsException_NoExceptionOnUpdate()
        {
            var dummy = new ObservableDummy<bool>(false);
            var test = Observable.Expression(() => dummy.Item || ThrowExceptionIf(dummy.Item));
            Assert.IsTrue(test.Value);

            dummy.Item = true;

            Assert.IsTrue(test.Value);
        }
Example #38
0
        public void AndAlso_RightHandThrowsException_NoExceptionOnUpdate()
        {
            var dummy = new ObservableDummy<bool>(true);
            var test = Observable.Expression(() => dummy.Item && ThrowExceptionIf(!dummy.Item));
            Assert.IsTrue(test.Value);

            dummy.Item = false;

            Assert.IsFalse(test.Value);
        }
Example #39
0
        public void GroupBy_ObservableKeyChangesBetweenGroups_Update()
        {
            var updateGroups = false;
            var updateGroupA = false;
            var updateGroupB = false;

            ICollection <Dummy <string> > coll = new ObservableCollection <Dummy <string> >();
            var dummy1      = new Dummy <string>("A");
            var dummy2      = new Dummy <string>("B");
            var dummyChange = new ObservableDummy <string>("A");

            coll.Add(dummy1);
            coll.Add(dummy2);
            coll.Add(dummyChange);

            var test = coll.WithUpdates().GroupBy(d => d.Item);

            test.CollectionChanged += (o, e) => updateGroups = true;

            var groupA = Sys.Single(test, g => g.Key == "A") as ObservableGroup <string, Dummy <string> >;
            var groupB = Sys.Single(test, g => g.Key == "B") as ObservableGroup <string, Dummy <string> >;

            Assert.IsNotNull(groupA);
            Assert.IsNotNull(groupB);
            Assert.IsTrue(Sys.Contains(groupA, dummy1));
            Assert.IsTrue(Sys.Contains(groupA, dummyChange));
            Assert.IsTrue(Sys.Contains(groupB, dummy2));
            Assert.IsFalse(updateGroups);

            var notifierA = groupA as INotifyCollectionChanged;
            var notifierB = groupB as INotifyCollectionChanged;

            Assert.IsNotNull(notifierA);
            Assert.IsNotNull(notifierB);

            notifierA.CollectionChanged += (o, e) =>
            {
                Assert.IsTrue(e.OldItems.Contains(dummyChange));
                updateGroupA = true;
            };
            notifierB.CollectionChanged += (o, e) =>
            {
                Assert.IsTrue(e.NewItems.Contains(dummyChange));
                updateGroupB = true;
            };
            dummyChange.Item = "B";

            Assert.IsFalse(updateGroups);
            Assert.IsTrue(updateGroupA);
            Assert.IsTrue(updateGroupB);

            Assert.IsTrue(Sys.Contains(groupA, dummy1));
            Assert.IsTrue(Sys.Contains(groupB, dummy2));
            Assert.IsTrue(Sys.Contains(groupB, dummyChange));
        }
Example #40
0
        public void SelectMany_ObservableSourceItemSubSourceChanges_NoUpdatesWhenDetached()
        {
            var update = false;
            ICollection <Dummy <ICollection <Dummy <string> > > > coll = new List <Dummy <ICollection <Dummy <string> > > >();
            var dummy = new Dummy <string>()
            {
                Item = "23"
            };
            var dummy2 = new ObservableDummy <ICollection <Dummy <string> > >()
            {
                Item = new List <Dummy <string> >()
                {
                    dummy
                }
            };

            coll.Add(dummy2);

            var test = coll.WithUpdates().SelectMany(d => d.Item, (d1, d2) => d2.Item);

            test.CollectionChanged += (o, e) => update = true;

            Assert.IsTrue(Sys.Contains(test, "23"));
            Assert.IsFalse(update);

            test.Detach();
            update = false;

            dummy2.Item = new List <Dummy <string> >()
            {
                new Dummy <string>("42")
            };

            Assert.IsFalse(update);

            test.Attach();

            Assert.IsTrue(update);
            Assert.IsTrue(test.Contains("42"));
            update = false;

            dummy2.Item = new List <Dummy <string> >()
            {
                dummy
            };

            Assert.IsTrue(update);
        }
Example #41
0
        public void Modulo_Int_ModuloDoesNotChange_NoUpdate()
        {
            var update = false;
            var dummy = new ObservableDummy<int>(7);

            var test = Observable.Expression(() => dummy.Item % 2);

            test.ValueChanged += (o, e) => update = true;

            Assert.AreEqual(1, test.Value);
            Assert.IsFalse(update);

            dummy.Item = 3;

            Assert.IsFalse(update);
        }
Example #42
0
        public void And_Boolean_Observable_Update()
        {
            var updated = false;
            var dummy = new ObservableDummy<bool>() { Item = true };

            var result = Observable.Expression(() => dummy.Item & true);

            result.ValueChanged += (o, e) => updated = true;

            Assert.IsTrue(result.Value);
            Assert.IsFalse(updated);

            dummy.Item = false;

            Assert.IsFalse(result.Value);
            Assert.IsTrue(updated);
        }
        public void GreaterThanEquals_Long_Observable_Update()
        {
            var updated = false;
            var dummy = new ObservableDummy<long>() { Item = 1 };

            var test = new ObservingFunc<Dummy<long>, bool>(d => d.Item >= 0);

            var result = test.Observe(dummy);

            result.ValueChanged += (o, e) => updated = true;

            Assert.IsTrue(result.Value);
            Assert.IsFalse(updated);

            dummy.Item = -1;

            Assert.IsFalse(result.Value);
            Assert.IsTrue(updated);
        }
Example #44
0
        public void Equals_Class_Observable_Update()
        {
            var updated = false;
            var dummy = new ObservableDummy<string>() { Item = "42" };

            var test = new ObservingFunc<Dummy<string>, bool>(d => d.Item == "42");

            var result = test.Observe(dummy);

            result.ValueChanged += (o, e) => updated = true;

            Assert.IsTrue(result.Value);
            Assert.IsFalse(updated);

            dummy.Item = "23";

            Assert.IsFalse(result.Value);
            Assert.IsTrue(updated);
        }
Example #45
0
        public void LessThan_Int_Observable_Update()
        {
            var updated = false;
            var dummy = new ObservableDummy<int>() { Item = 1 };

            var test = new ObservingFunc<Dummy<int>, bool>(d => d.Item < 0);

            var result = test.Observe(dummy);

            result.ValueChanged += (o, e) => updated = true;

            Assert.IsFalse(result.Value);
            Assert.IsFalse(updated);

            dummy.Item = -1;

            Assert.IsTrue(result.Value);
            Assert.IsTrue(updated);
        }
Example #46
0
        public void RecursiveFac()
        {
            var dummy = new ObservableDummy<int>(4);
            var test = Observable.Expression(() => Fac(dummy.Item));
            var resultChanged = false;

            Assert.AreEqual(24, test.Value);

            test.ValueChanged += (o, e) =>
            {
                resultChanged = true;
                Assert.AreEqual(24, e.OldValue);
            };

            dummy.Item = 5;

            Assert.IsTrue(resultChanged);
            Assert.AreEqual(120, test.Value);
        }
Example #47
0
        public void Add_String_Observable_Update()
        {
            var updated = false;
            var dummy = new ObservableDummy<string>() { Item = "5" };

            var result = Observable.Expression(() => dummy.Item + "2");

            result.ValueChanged += (o, e) =>
            {
                Assert.AreEqual("52", e.OldValue);
                updated = true;
            };

            Assert.AreEqual("52", result.Value);
            Assert.IsFalse(updated);

            dummy.Item = "4";

            Assert.IsTrue(updated);
            Assert.AreEqual("42", result.Value);
        }
Example #48
0
        public void ArrayCreation_Observable_Updates()
        {
            var update = false;
            var dummy = new ObservableDummy<int>() { Item = 23 };

            var test = new NotifyValue<int[]>(() => new int[dummy.Item]);

            test.ValueChanged += (o, e) =>
            {
                update = true;
                Assert.AreEqual(23, (e.OldValue as int[]).Length);
                Assert.AreEqual(42, (e.NewValue as int[]).Length);
            };

            Assert.AreEqual(23, (test.Value as int[]).Length);
            Assert.IsFalse(update);

            dummy.Item = 42;

            Assert.IsTrue(update);
        }
Example #49
0
        public void New_Observable_Updates()
        {
            var update = false;
            var dummy = new ObservableDummy<int>() { Item = 23 };

            var test = new NotifyValue<Dummy<int>>(() => new Dummy<int>(dummy.Item));

            test.ValueChanged += (o, e) =>
            {
                update = true;
                Assert.AreEqual(23, (e.OldValue as Dummy<int>).Item);
                Assert.AreEqual(42, (e.NewValue as Dummy<int>).Item);
            };

            Assert.AreEqual(23, (test.Value as Dummy<int>).Item);
            Assert.IsFalse(update);

            dummy.Item = 42;

            Assert.IsTrue(update);
        }
Example #50
0
        public void GroupBy_ObservableSource_NoUpdatesWhenDetached()
        {
            var update = false;
            ICollection<Dummy<string>> coll = new NotifyCollection<Dummy<string>>();

            var test = coll.WithUpdates().GroupBy(d => d.Item);

            test.CollectionChanged += (o, e) => update = true;

            Assert.IsTrue(!test.Any());
            Assert.IsFalse(update);

            test.Detach();
            update = false;

            var testDummy = new ObservableDummy<string>() { Item = "42" };
            coll.Add(testDummy);

            Assert.IsFalse(update);

            testDummy.Item = "23";

            Assert.IsFalse(update);

            test.Attach();

            Assert.IsTrue(update);
            Assert.AreEqual("23", test.FirstOrDefault().Key);
            update = false;

            testDummy.Item = "42";

            Assert.IsTrue(update);
            update = false;

            coll.Remove(testDummy);

            Assert.IsTrue(update);
        }
Example #51
0
        public void Cast_String_Observable_Update()
        {
            var update = false;
            var dummy = new ObservableDummy<object>() { Item = "23" };

            var test = new NotifyValue<string>(() => (string)dummy.Item);

            test.ValueChanged += (o, e) =>
            {
                update = true;
                Assert.AreEqual("23", e.OldValue);
                Assert.AreEqual("42", e.NewValue);
            };

            Assert.AreEqual("23", test.Value);
            Assert.IsFalse(update);

            dummy.Item = "42";

            Assert.IsTrue(update);
            Assert.AreEqual("42", test.Value);
        }
Example #52
0
        public void Modulo_Int_ObservableSource_Update()
        {
            var update = false;
            var dummy = new ObservableDummy<int>(7);

            var test = Observable.Expression(() => dummy.Item % 2);

            test.ValueChanged += (o, e) =>
            {
                update = true;
                Assert.AreEqual(1, e.OldValue);
                Assert.AreEqual(0, e.NewValue);
            };

            Assert.AreEqual(1, test.Value);
            Assert.IsFalse(update);

            dummy.Item = 42;

            Assert.IsTrue(update);
            Assert.AreEqual(0, test.Value);
        }
Example #53
0
        public void Coalesce_ObservableSource_Update()
        {
            var update = false;
            var dummy = new ObservableDummy<string>();

            var test = Observable.Expression(() => dummy.Item ?? "42");

            test.ValueChanged += (o, e) =>
            {
                update = true;
                Assert.AreEqual("42", e.OldValue);
                Assert.AreEqual("23", e.NewValue);
            };

            Assert.AreEqual("42", test.Value);
            Assert.IsFalse(update);

            dummy.Item = "23";

            Assert.IsTrue(update);
            Assert.AreEqual("23", test.Value);
        }
        public void BitwiseAnd_Int_ObservableSource_Update()
        {
            var update = false;
            var dummy = new ObservableDummy<int>(7);

            var test = Observable.Expression(() => 21 & dummy.Item);

            test.ValueChanged += (o, e) =>
            {
                update = true;
                Assert.AreEqual(5, e.OldValue);
                Assert.AreEqual(1, e.NewValue);
            };

            Assert.AreEqual(5, test.Value);
            Assert.IsFalse(update);

            dummy.Item = 3;

            Assert.IsTrue(update);
            Assert.AreEqual(1, test.Value);
        }
Example #55
0
        public void BitwiseOr_Long_ObservableSource_Update()
        {
            var update = false;
            var dummy = new ObservableDummy<long>(7);

            var test = Observable.Expression(() => 21 | dummy.Item);

            test.ValueChanged += (o, e) =>
            {
                update = true;
                Assert.AreEqual(23L, e.OldValue);
                Assert.AreEqual(29L, e.NewValue);
            };

            Assert.AreEqual(23L, test.Value);
            Assert.IsFalse(update);

            dummy.Item = 13;

            Assert.IsTrue(update);
            Assert.AreEqual(29L, test.Value);
        }
Example #56
0
        public void LeftShift_Long_ObservableSource_Update()
        {
            var update = false;
            var dummy = new ObservableDummy<long>(1);

            var test = Observable.Expression(() => dummy.Item << 1);

            test.ValueChanged += (o, e) =>
            {
                update = true;
                Assert.AreEqual(2L, e.OldValue);
                Assert.AreEqual(6L, e.NewValue);
            };

            Assert.AreEqual(2L, test.Value);
            Assert.IsFalse(update);

            dummy.Item = 3;

            Assert.IsTrue(update);
            Assert.AreEqual(6L, test.Value);
        }
Example #57
0
        public void MemberExpression_ObservableSourceTargetChanges_Update()
        {
            var update = false;
            var dummy = new ObservableDummy<Dummy<int>>() { Item = new Dummy<int>(23) };

            var test = new NotifyValue<int>(() => dummy.Item.Item);

            test.ValueChanged += (o, e) =>
            {
                update = true;
                Assert.AreEqual(23, e.OldValue);
                Assert.AreEqual(42, e.NewValue);
            };

            Assert.AreEqual(23, test.Value);
            Assert.IsFalse(update);

            dummy.Item = new Dummy<int>(42);

            Assert.IsTrue(update);
            Assert.AreEqual(42, test.Value);
        }
Example #58
0
        public void LeftShift_Int_ObservableSource_Update()
        {
            var update = false;
            var dummy = new ObservableDummy<int>(1);

            var test = Observable.Expression(() => 1 << dummy.Item);

            test.ValueChanged += (o, e) =>
            {
                update = true;
                Assert.AreEqual(2, e.OldValue);
                Assert.AreEqual(8, e.NewValue);
            };

            Assert.AreEqual(2, test.Value);
            Assert.IsFalse(update);

            dummy.Item = 3;

            Assert.IsTrue(update);
            Assert.AreEqual(8, test.Value);
        }
Example #59
0
        public void LambdaIntAverage_ObservableSourceItemAdded_NoUpdatesWhenDetached()
        {
            var update = false;
            var coll = new NotifyCollection<Dummy<int>>() { new Dummy<int>(1), new Dummy<int>(2), new Dummy<int>(3) };
            var testColl = coll.WithUpdates();

            var test = Observable.Expression(() => testColl.Average(d => d.Item));

            test.ValueChanged += (o, e) => update = true;

            Assert.AreEqual(2, test.Value);
            Assert.AreEqual(2, testColl.Average(d => d.Item));
            Assert.IsFalse(update);

            test.Detach();

            var testDummy = new ObservableDummy<int>(5);
            coll.Add(testDummy);

            Assert.IsFalse(update);

            testDummy.Item = 4;

            Assert.IsFalse(update);

            test.Attach();

            Assert.IsTrue(update);
            Assert.AreEqual(2.5, test.Value);
            update = false;

            testDummy.Item = 5;

            Assert.IsTrue(update);
            update = false;

            coll.Remove(testDummy);
        }
Example #60
0
        public void Divide_Long_Observable_Update()
        {
            var updated = false;
            var dummy = new ObservableDummy<long>() { Item = 16 };

            var test = new ObservingFunc<Dummy<long>, long>(d => d.Item / 2L);

            var result = test.Observe(dummy);

            result.ValueChanged += (o, e) =>
            {
                Assert.AreEqual(8L, e.OldValue);
                updated = true;
            };

            Assert.AreEqual(8L, result.Value);
            Assert.IsFalse(updated);

            dummy.Item = 84;

            Assert.IsTrue(updated);
            Assert.AreEqual(42L, result.Value);
        }