Пример #1
0
        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);
        }
Пример #2
0
        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"
            });
        }
Пример #3
0
        // <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);
        }