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); }