예제 #1
0
        public void NameShouldBeKeptWhenCreatingNameableDataItem()
        {
            var dataObject = new CloneableClassWithThreeProperties {
                Name = "OldName"
            };
            var dataItem = new DataItem(dataObject);

            Assert.AreEqual("OldName", dataItem.Name);
        }
예제 #2
0
        public void DataItemNameShouldChangeWhenNamedValueNameChanges()
        {
            IDataItem dataItem = new DataItem {
                Name = "Hoi"
            };
            //assign a nameble value.
            CloneableClassWithThreeProperties cloneableClassWithThreeProperties = new CloneableClassWithThreeProperties {
                Name = "Dag"
            };

            dataItem.Value = cloneableClassWithThreeProperties;
            cloneableClassWithThreeProperties.Name = "huh";
            Assert.AreEqual("huh", dataItem.Name);
        }
예제 #3
0
        public void NameShouldChangeWhenSettingValueWithANamedValue()
        {
            IDataItem dataItem = new DataItem {
                Name = "Hoi"
            };
            //assign a nameble value.
            CloneableClassWithThreeProperties cloneableClassWithThreeProperties = new CloneableClassWithThreeProperties {
                Name = "Dag"
            };

            Assert.IsNotNull(cloneableClassWithThreeProperties as INameable);
            dataItem.Value = cloneableClassWithThreeProperties;
            Assert.AreEqual("Dag", dataItem.Name);
        }
예제 #4
0
        public void CloneShouldNotCausePropertyChangeOnSourceValue()
        {
            //set a nameable property changing class in the dataItem
            var propertyChangingClass = new CloneableClassWithThreeProperties();
            var dataItem = new DataItem(propertyChangingClass);

            propertyChangingClass.PropertyChanged += delegate
            {
                Assert.Fail("Clone should not cause a change in the source!");
            };

            //action clone the dataitem.
            dataItem.DeepClone();
        }
예제 #5
0
        public void CreateContainingObjectValue()
        {
            var dataObject = new CloneableClassWithThreeProperties {
                Name = "b"
            };
            var data = new DataItem(dataObject, "a");

            Assert.AreEqual(dataObject, data.Value);
            Assert.AreEqual("a", data.Name);
            Assert.AreEqual(typeof(CloneableClassWithThreeProperties), data.ValueType);
            Assert.AreEqual(DataItem.DefaultRole, data.Role);
            Assert.AreEqual(null, data.Owner);
            Assert.AreEqual(0, data.Id);

            Assert.AreEqual(0, data.LinkedBy.Count);
            Assert.AreEqual(null, data.LinkedTo);
        }
예제 #6
0
        public void LinkAndUnlinkTwoDataItems()
        {
            var dataObject1 = new CloneableClassWithThreeProperties();
            var dataObject2 = new CloneableClassWithThreeProperties();

            var dataItem1 = new DataItem(dataObject1, "a1");
            var dataItem2 = new DataItem(dataObject2, "a2");

            dataItem2.LinkTo(dataItem1);


            Assert.IsTrue(dataItem2.IsLinked);
            Assert.AreSame(dataItem1, dataItem2.LinkedTo);
            Assert.AreSame(dataItem2, dataItem1.LinkedBy[0]);

            dataItem2.Unlink();

            Assert.AreEqual(null, dataItem2.LinkedTo);
            Assert.AreEqual(0, dataItem1.LinkedBy.Count);
        }
예제 #7
0
        public void PropertyChangedWorkOnLinkedItems()
        {
            var propertyChangedClass = new CloneableClassWithThreeProperties();
            var sourceDataItem       = new DataItem(propertyChangedClass);
            var linkedDataItem       = new DataItem(new CloneableClassWithThreeProperties());

            linkedDataItem.LinkTo(sourceDataItem);

            int callCount = 0;

            ((INotifyPropertyChanged)linkedDataItem).PropertyChanged += (s, e) =>
            {
                callCount++;
                Assert.AreEqual(propertyChangedClass, s);
                Assert.AreEqual("StringProperty", e.PropertyName);
            };

            propertyChangedClass.StringProperty = "newName";
            Assert.AreEqual(1, callCount);
        }
예제 #8
0
        public void NameShouldChangeWhenLinkedNamedValueNameChanges()
        {
            var dataObject1 = new CloneableClassWithThreeProperties();
            var dataObject2 = new CloneableClassWithThreeProperties();

            var dataItem1 = new DataItem(dataObject1, "name1");
            var dataItem2 = new DataItem(dataObject2, "name2");

            dataItem2.LinkTo(dataItem1);

            Assert.AreEqual("name1", dataItem1.Name);
            Assert.AreEqual("name2", dataItem2.Name, "name of the target data item remains the same after linking");

            Assert.AreEqual("name1", ((INameable)dataItem1.Value).Name);
            Assert.AreEqual("name1", ((INameable)dataItem2.Value).Name);

            dataObject2.Name = "newName2";
            Assert.AreEqual("name1", ((INameable)dataItem1.Value).Name);
            Assert.AreEqual("name1", ((INameable)dataItem2.Value).Name);

            dataObject1.Name = "newName1";
            Assert.AreEqual("newName1", ((INameable)dataItem1.Value).Name);
            Assert.AreEqual("newName1", ((INameable)dataItem2.Value).Name);

            dataItem2.Unlink();

            // unlinking results in a new object of the original type as Value in the
            // item with an uninitialized name.
            // The original dataObject2 is now an orphan.
            Assert.AreEqual("newName1", ((INameable)dataItem1.Value).Name);
            Assert.AreEqual("newName1", ((INameable)dataItem2.Value).Name); // item was linked to newName1

            ((INameable)dataItem2.Value).Name = "newerName2";
            Assert.AreEqual("newerName2", dataItem2.Name);

            dataItem2.Name = "weereensietsanders";
            Assert.AreEqual("weereensietsanders", ((INameable)dataItem2.Value).Name);
        }