public void TestWithCollectionChanges()
        {
            DataContainerTest2 container = new DataContainerTest2();

            container.DirtyObserver.Reset();
            var collection1 = new ObservableCollection <DataContainerTest2>();

            container.Children = collection1;
            Assert.That(container.DirtyObserver.Dirty == true);

            container.DirtyObserver.Reset();
            var child1 = new DataContainerTest2();

            container.Children.Add(child1);
            Assert.That(container.DirtyObserver.Dirty == true);

            container.DirtyObserver.Reset();
            var child2 = new DataContainerTest2();

            container.Children.Add(child2);
            Assert.That(container.DirtyObserver.Dirty == true);

            container.DirtyObserver.Reset();
            container.Children.Remove(child1);
            Assert.That(container.DirtyObserver.Dirty == true);

            container.DirtyObserver.Reset();
            container.Children = null;
            Assert.That(container.DirtyObserver.Dirty == true);

            container.DirtyObserver.Reset();
            collection1.Add(new DataContainerTest2());
            Assert.That(container.DirtyObserver.Dirty == false);
        }
        public void TestWithCollectionChanges2()
        {
            DataContainerTest2 container = new DataContainerTest2();

            container.DirtyObserver.Reset();
            var collection1 = new ObservableCollection <DataContainerTest2>();
            var coll1Child1 = new DataContainerTest2();
            var coll1Child2 = new DataContainerTest2();

            collection1.Add(coll1Child1);
            collection1.Add(coll1Child2);
            container.Children = collection1;
            Assert.That(container.DirtyObserver.Dirty == true);

            container.DirtyObserver.Reset();
            coll1Child2.Value2 = 10;
            Assert.That(container.DirtyObserver.Dirty == true);

            container.DirtyObserver.Reset();
            var collection3  = new ObservableCollection <DataContainerTest2>();
            var coll1Child31 = new DataContainerTest2();
            var coll1Child32 = new DataContainerTest2();

            collection3.Add(coll1Child31);
            collection3.Add(coll1Child32);
            container.Children = collection3;
            Assert.That(container.DirtyObserver.Dirty == true);

            container.DirtyObserver.Reset();
            coll1Child2.Value2 = 10;
            Assert.That(container.DirtyObserver.Dirty == false);

            container.DirtyObserver.Reset();
            coll1Child32.Value2 = 10;
            Assert.That(container.DirtyObserver.Dirty == true);

            //not supported
            //container.DirtyObserver.Reset();
            //container.Children.Clear();
            //Assert.That(container.DirtyObserver.Dirty == true);

            //container.DirtyObserver.Reset();
            //coll1Child32.Value2 = 10;
            //Assert.That(container.DirtyObserver.Dirty == false);
        }
        public void TestWithChangesInChildren()
        {
            DataContainerTest2 container = new DataContainerTest2();

            container.Children = new ObservableCollection <DataContainerTest2>();
            Assert.That(container.DirtyObserver.Dirty == true);

            container.DirtyObserver.Reset();
            container.DirtyObserver.Name = "Parent";

            var child1 = new DataContainerTest2();

            child1.DirtyObserver.Name = "Child1";
            container.Children.Add(child1);
            Assert.That(container.DirtyObserver.Dirty == true);

            container.DirtyObserver.Reset();
            var child2 = new DataContainerTest2();

            child1.DirtyObserver.Name = "Child2";
            container.Children.Add(child2);
            Assert.That(container.DirtyObserver.Dirty == true);

            container.DirtyObserver.Reset();
            child1.Value2 = 10;
            Assert.That(container.DirtyObserver.Dirty == true);

            container.DirtyObserver.Reset();
            child1.Value2 = 10;
            Assert.That(container.DirtyObserver.Dirty == true);

            container.DirtyObserver.Reset();
            container.Children.Remove(child1);
            Assert.That(container.DirtyObserver.Dirty == true);

            container.DirtyObserver.Reset();
            child1.Value2 = 10;
            Assert.That(container.DirtyObserver.Dirty == false);

            container.DirtyObserver.Reset();
            child2.Value2 = 10;
            Assert.That(container.DirtyObserver.Dirty == true);
        }
        public void TestWithChangesInDirectChildren()
        {
            DataContainerTest2 container = new DataContainerTest2();

            container.Children = new ObservableCollection <DataContainerTest2>();
            Assert.That(container.DirtyObserver.Dirty == true);

            container.DirtyObserver.Reset();
            container.DirtyObserver.Name = "Parent";

            Assert.That(container.DirtyObserver.Dirty == false);

            container.DirtyObserver.Reset();
            container.Container1 = new DataContainerTest2();
            Assert.That(container.DirtyObserver.Dirty == true);

            container.DirtyObserver.Reset();
            container.Container1.Value2 = 10;
            Assert.That(container.DirtyObserver.Dirty == true);

            container.DirtyObserver.Reset();
            container.Container1 = null;
            Assert.That(container.DirtyObserver.Dirty == true);
        }