public void PropertyRemoved_EventArgsAndSenderCorrect()
 {
     urakawa.property.xml.XmlProperty newXmlProp = mPresentation.PropertyFactory.CreateXmlProperty();
     mRootNode.AddProperty(newXmlProp);
     newXmlProp.SetQName("dtbook", "");
     urakawa.property.channel.ChannelsProperty newChProp = mPresentation.PropertyFactory.CreateChannelsProperty();
     mRootNode.AddProperty(newChProp);
     mRootNode.RemoveProperty(newXmlProp);
     Assert.AreSame(
         newXmlProp, mLatestPropertyRemovedEventArgs.m_RemovedObject,
         "The PropertyRemovedEventArgs.RemovedProperty must be the Property that was removed");
     Assert.AreSame(
         mRootNode, mLatestPropertyRemovedEventArgs.SourceObject,
         "The PropertyRemovedEventArgs.SourceTreeNode must be the TreeNode from which the Property was removed");
     Assert.AreSame(
         mRootNode, mLatestPropertyRemovedSender,
         "The sender of the PropertyRemoved event must be the TreeNode from which the Property was removed");
 }
        public void Changed_BubblesfromProperties()
        {
            urakawa.property.xml.XmlProperty xmlProp = mPresentation.PropertyFactory.CreateXmlProperty();
            mRootNode.AddProperty(xmlProp);
            events.DataModelChangedEventArgs propChangedEventArgs = null;
            object propChangedSender = null;
            EventHandler <urakawa.events.DataModelChangedEventArgs> handler =
                new EventHandler <urakawa.events.DataModelChangedEventArgs>(
                    delegate(object sender, events.DataModelChangedEventArgs e)
            {
                propChangedEventArgs = e;
                propChangedSender    = sender;
            });

            xmlProp.Changed += handler;
            try
            {
                int beforeCount = mChangedEventCount;
                xmlProp.SetQName("dtbook", "");
                Assert.IsNotNull(propChangedEventArgs, "The changed event of the property does not seem to have occured");
                Assert.AreSame(
                    xmlProp, propChangedSender,
                    "The sender of the changed event on the property must be the property itself");
                Assert.AreEqual(
                    beforeCount + 1, mChangedEventCount,
                    "The mChangedEventCount did not increase by one, indicating that the changed event on the owning TreeNode "
                    + "did not occur as a result of the changed event on the owned Property");
                Assert.AreSame(
                    propChangedEventArgs, mLatestChangedEventArgs,
                    "The event args of the owning TreeNode changed event was not the same instance as thoose of the owned Property changed evnet");
                Assert.AreSame(
                    mRootNode, mLatestChangedSender,
                    "The sender of the owning TreeNode changed event must be the owning TreeNode node itself");
            }
            finally
            {
                xmlProp.Changed -= handler;
            }
        }
        public void Copy_ValueEqualsAfter()
        {
            urakawa.property.xml.XmlProperty newXmlProp = mPresentation.PropertyFactory.CreateXmlProperty();
            newXmlProp.SetQName("p", "");
            mRootNode.AddProperty(newXmlProp);
            mRootNode.AddProperty(mPresentation.PropertyFactory.CreateChannelsProperty());
            TreeNode mRootCopy = mRootNode.Copy(true);
            bool     equal     = mRootNode.ValueEquals(mRootCopy);

            Assert.IsTrue(equal, "The copy is not the same as the original");
            Assert.AreNotSame(mRootNode, mRootCopy, "The copy is just a reference of the original itself");
            foreach (Type propType in mRootCopy.UsedPropertyTypes)
            {
                Assert.AreNotEqual(
                    mRootNode.GetProperty(propType), mRootCopy.GetProperty(propType),
                    "Property of copy is just a reference to the property of the original");
            }
            for (int i = 0; i < mRootCopy.Children.Count; i++)
            {
                Assert.AreNotEqual(
                    mRootNode.Children.Get(i), mRootCopy.Children.Get(i),
                    "Child of copy is just a reference of the child of the original");
            }
        }