public void TestObjectDescriptor() { var attributeRegistry = new AttributeRegistry(); // Rename ItemRenamed2 to Item2 attributeRegistry.Register(typeof(TestObject).GetProperty("ItemRenamed2"), new YamlMemberAttribute("Item2")); var descriptor = new ObjectDescriptor(attributeRegistry, typeof(TestObject), false, new DefaultNamingConvention()); descriptor.Initialize(); // Verify members Assert.AreEqual(8, descriptor.Count); descriptor.SortMembers(new DefaultKeyComparer()); // Check names and their orders Assert.AreEqual(descriptor.Members.Select(memberDescriptor => memberDescriptor.Name), new[] { "Collection", "CollectionReadOnly", "DefaultValue", "Item1", "Item2", "Name", "Property", "Value" }); var instance = new TestObject { Name = "Yes", Property = "property" }; // Check field accessor Assert.AreEqual("Yes", descriptor["Name"].Get(instance)); descriptor["Name"].Set(instance, "No"); Assert.AreEqual("No", instance.Name); // Check property accessor Assert.AreEqual("property", descriptor["Property"].Get(instance)); descriptor["Property"].Set(instance, "property1"); Assert.AreEqual("property1", instance.Property); // Check ShouldSerialize Assert.True(descriptor["Name"].ShouldSerialize(instance)); Assert.False(descriptor["Value"].ShouldSerialize(instance)); instance.Value = 1; Assert.True(descriptor["Value"].ShouldSerialize(instance)); Assert.False(descriptor["DefaultValue"].ShouldSerialize(instance)); instance.DefaultValue++; Assert.True(descriptor["DefaultValue"].ShouldSerialize(instance)); // Check HasSet Assert.True(descriptor["Collection"].HasSet); Assert.False(descriptor["CollectionReadOnly"].HasSet); }
public void TestObjectWithCustomNamingConvention() { var attributeRegistry = new AttributeRegistry(); var factory = new TypeDescriptorFactory(attributeRegistry); var descriptor = new ObjectDescriptor(factory, typeof(TestObjectNamingConvention), false, new FlatNamingConvention()); descriptor.Initialize(new DefaultKeyComparer()); // Check names and their orders Assert.AreEqual(descriptor.Members.Select(memberDescriptor => memberDescriptor.Name), new[] { "myname", "name", "this_is_camel_name" }); }
// <summary> // Returns a wrapper for the specified EFObject. The wrapper is the type descriptor // that describes the properties that should be displayed for the EFObject. // The returned wrapper should be handed to a property window control // </summary> public static ObjectDescriptor GetObjectDescriptor(EFObject obj, EditingContext editingContext, bool runningInVS) { if (obj != null) { Type objectDescriptorType; if (ObjectDescriptorTypes.TryGetValue(obj.GetType(), out objectDescriptorType)) { // create the descriptor wrapper for the EFObject object var descriptor = (ObjectDescriptor)TypeDescriptor.CreateInstance(null, objectDescriptorType, null, null); descriptor.Initialize(obj, editingContext, runningInVS); return(descriptor); } else { // special case for Property var property = obj as Property; if (property != null) { ObjectDescriptor descriptor = null; if (property is ComplexConceptualProperty) { descriptor = (ObjectDescriptor)TypeDescriptor.CreateInstance(null, typeof(EFComplexPropertyDescriptor), null, null); } else if (property.EntityModel.IsCSDL) { descriptor = (ObjectDescriptor)TypeDescriptor.CreateInstance(null, typeof(EFPropertyDescriptor), null, null); } else { descriptor = (ObjectDescriptor)TypeDescriptor.CreateInstance(null, typeof(EFSPropertyDescriptor), null, null); } descriptor.Initialize(obj, editingContext, runningInVS); return(descriptor); } // special case for Parameter var parameter = obj as Parameter; if (parameter != null) { ObjectDescriptor descriptor = null; if (parameter.Parent is FunctionImport) { descriptor = (ObjectDescriptor)TypeDescriptor.CreateInstance(null, typeof(EFParameterDescriptor), null, null); descriptor.Initialize(obj, editingContext, runningInVS); return(descriptor); } else if (parameter.Parent is Function) { //Stored procedure parameter descriptor (EFSParameterDescriptor) descriptor = (ObjectDescriptor)TypeDescriptor.CreateInstance(null, typeof(EFSParameterDescriptor), null, null); descriptor.Initialize(obj, editingContext, runningInVS); return(descriptor); } } } } return(null); }