public void DefaultsAndPropertyChangeNotifications()
        {
            dynamic i = new TestItems.Item()
            {
                Name = "Testing, testing ..."
            };
            IPropertyOwner ipo = (IPropertyOwner)i;

            Assert.IsTrue(i.CostIsDefaulted);
            Assert.AreEqual(43L, i.Cost);

            List <string> log = CreateItemPropertyNotificationLog(i);

            i.Cost = 89L;
            Assert.IsFalse(i.CostIsDefaulted);
            Assert.AreEqual(89L, i.Cost);
            CollectionAssert.AreEqual(new[] { "-Cost: 43", "-CostIsDefaulted: True", "+Cost: 89", "+CostIsDefaulted: False" }, log);

            log.Clear();
            i["Cost"] = TestItems.ItemBase.CostDefault;
            Assert.IsFalse(i.CostIsDefaulted);
            Assert.AreEqual(43L, i.Cost);
            CollectionAssert.AreEqual(new[] { "-Cost: 89", "+Cost: 43" }, log);

            log.Clear();
            i["Cost"] = null;
            Assert.IsTrue(i.CostIsDefaulted);
            Assert.AreEqual(43L, i.Cost);
            CollectionAssert.AreEqual(new[] { "-Cost: 43", "-CostIsDefaulted: False", "+Cost: 43", "+CostIsDefaulted: True" }, log);

            log.Clear();
            ipo.SetToDefault(nameof(i.Cost));
            Assert.AreEqual(0, log.Count);

            Assert.IsTrue(i.LabelIsDefaulted);
            Assert.AreEqual("<label it>", i.Label);

            log.Clear();
            i.Label = "Well known";
            Assert.IsFalse(i.LabelIsDefaulted);
            Assert.AreEqual("Well known", i.Label);
            CollectionAssert.AreEqual(
                new[] { "-Label: <label it>", "-LabelIsDefaulted: True", "+Label: Well known", "+LabelIsDefaulted: False" }, log);

            log.Clear();
            i.Label = TestItems.ItemBase.LabelDefault;
            Assert.IsFalse(i.LabelIsDefaulted);
            Assert.AreEqual("<label it>", i.Label);
            CollectionAssert.AreEqual(new[] { "-Label: Well known", "+Label: <label it>" }, log);

            log.Clear();
            ipo.SetToDefault(nameof(i.Label));
            Assert.IsTrue(i.LabelIsDefaulted);
            Assert.AreEqual(TestItems.ItemBase.LabelDefault, i.Label);
            CollectionAssert.AreEqual(
                new[] { "-Label: <label it>", "-LabelIsDefaulted: False", "+Label: <label it>", "+LabelIsDefaulted: True" }, log);

            log.Clear();
            i.Name = null;
            CollectionAssert.AreEqual(
                new[] { "-Name: Testing, testing ...", "+Name: " }, log);
        }