public void Disabling_Collection_Observation_Should_Suppress_Event()
        {
            //clear existing dependency and let the garbage collector take care of it
            //(works thanks to weak event listeners). If we didn't change listener remained active
            dependency = null;
            GC.Collect();
            GC.WaitForPendingFinalizers();

            //create settings and disable observations
            DependencyNodeSettings <ObservableCollection <Student> > settings;

            settings = new DependencyNodeSettings <ObservableCollection <Student> >(() => course.Students);
            settings.ChangeHandler          = OnDependencyChanged;
            settings.ObserveSubValueChanges = false;

            dependency = DependencyBuilder.CreateDependency(settings);

            //add student to collection
            course.Students.Add(TestUtil.CreateTestStudent());
            Assert.AreEqual(0, eventCounter);

            //remove student from collection
            course.Students.Remove(course.Students[7]);
            Assert.AreEqual(0, eventCounter);
        }
        public void Sub_Property_Tracking_Can_Be_Disabled_Through_Settings()
        {
            //create settings class
            var settings = new DependencyNodeSettings <IAddress>(() => Student.School.Address);

            //configure settings to ignore sub item changes
            settings.ObserveSubValueChanges = false;

            //dispose old dependency in order to get rid of event listener!
            addressDependency.Dispose();
            addressDependency = DependencyBuilder.CreateDependency(settings);

            //does not cause a change event:
            Student.School.Address.City = "Ethon";
            Assert.AreEqual(0, changeCounter);
        }
        public void Sub_Property_Tracking_Can_Be_Disabled_Through_Settings()
        {
            //create settings class
              var settings = new DependencyNodeSettings<IAddress>(() => Student.School.Address);

              //configure settings to ignore sub item changes
              settings.ObserveSubValueChanges = false;

              //dispose old dependency in order to get rid of event listener!
              addressDependency.Dispose();
              addressDependency = DependencyBuilder.CreateDependency(settings);

              //does not cause a change event:
              Student.School.Address.City = "Ethon";
              Assert.AreEqual(0, changeCounter);
        }
        public void Disabling_Collection_Observation_Should_Suppress_Event()
        {
            //clear existing dependency and let the garbage collector take care of it
              //(works thanks to weak event listeners). If we didn't change listener remained active
              dependency = null;
              GC.Collect();
              GC.WaitForPendingFinalizers();

              //create settings and disable observations
              DependencyNodeSettings<ObservableCollection<Student>> settings;
              settings = new DependencyNodeSettings<ObservableCollection<Student>>(() => course.Students);
              settings.ChangeHandler = OnDependencyChanged;
              settings.ObserveSubValueChanges = false;

              dependency = DependencyBuilder.CreateDependency(settings);

              //add student to collection
              course.Students.Add(TestUtil.CreateTestStudent());
              Assert.AreEqual(0, eventCounter);

              //remove student from collection
              course.Students.Remove(course.Students[7]);
              Assert.AreEqual(0, eventCounter);
        }