public void TestPropertyComponentModelAttributes() { // check that ComponentModel attributes map to ParamSpec using (var baseObj = new TestObjectPropertiesBase()) using (var baseObjClass = (ObjectClass)TypeClass.Get(baseObj.GetGType())) using (var basePspec = baseObjClass.FindProperty("bool-value")) { Assert.That(basePspec.Name, Is.EqualTo(TestObjectPropertiesBase.BoolValuePropertyName)); Assert.That(basePspec.Nick, Is.EqualTo(TestObjectPropertiesBase.BoolValuePropertyNick)); Assert.That(basePspec.Blurb, Is.EqualTo(TestObjectPropertiesBase.BoolValuePropertyBlurb)); Assert.That(basePspec.DefaultValue.Get(), Is.EqualTo(TestObjectPropertiesBase.BoolValuePropertyDefaultValue)); } // The subclass will inherit the values of the parent class. // If the subclass tries to declare an attribute again, it will // be ignored as is the case with DefaultValueAttribute here. using (var subObj = new TestObjectPropertiesSubclass()) using (var subObjClass = (ObjectClass)TypeClass.Get(subObj.GetGType())) using (var subPspec = subObjClass.FindProperty("bool-value")) { Assert.That(subPspec.Name, Is.EqualTo(TestObjectPropertiesBase.BoolValuePropertyName)); Assert.That(subPspec.Nick, Is.EqualTo(TestObjectPropertiesBase.BoolValuePropertyNick)); Assert.That(subPspec.Blurb, Is.EqualTo(TestObjectPropertiesBase.BoolValuePropertyBlurb)); Assert.That(subPspec.DefaultValue.Get(), Is.EqualTo(TestObjectPropertiesBase.BoolValuePropertyDefaultValue)); } Utility.AssertNoGLibLog(); }
public void TestSubclassPropertyOverride() { using (var obj = new TestObjectPropertiesSubclass()) { // the new keyword does not override a property, just hides it... Assume.That(obj.IntValue, Is.EqualTo(0)); obj.SetProperty(nameof(obj.IntValue), 1); Assert.That(obj.IntValue, Is.EqualTo(1)); Assert.That(((TestObjectPropertiesBase)obj).IntValue, Is.EqualTo(0)); using (var baseObjClass = (ObjectClass)TypeClass.Get(typeof(TestObjectPropertiesBase).GetGType())) using (var subclassObjClass = (ObjectClass)TypeClass.Get(typeof(TestObjectPropertiesSubclass).GetGType())) { using (var baseIntValueProp = baseObjClass.FindProperty(nameof(obj.IntValue))) using (var subclassIntValueProp = subclassObjClass.FindProperty(nameof(obj.IntValue))) { // ...so ParamSpecs should not be the same Assert.That(baseIntValueProp.Handle, Is.Not.EqualTo(subclassIntValueProp.Handle)); } // But the override keyword replaces property... Assume.That(obj.BoolValue, Is.False); obj.SetProperty("bool-value", true); Assert.That(obj.BoolValue, Is.True); Assert.That(((TestObjectPropertiesBase)obj).BoolValue, Is.True); using (var baseBoolValueProp = baseObjClass.FindProperty("bool-value")) using (var subclassBoolValueProp = subclassObjClass.FindProperty("bool-value")) { // ...so ParamSpecs should be the same Assert.That(baseBoolValueProp.Handle, Is.EqualTo(subclassBoolValueProp.Handle)); } } } Utility.AssertNoGLibLog(); }