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 descriptor = new ObjectDescriptor(attributeRegistry, typeof(TestObjectNamingConvention), false, new FlatNamingConvention()); descriptor.Initialize(); descriptor.SortMembers(new DefaultKeyComparer()); // Check names and their orders Assert.AreEqual(descriptor.Members.Select(memberDescriptor => memberDescriptor.Name), new[] { "myname", "name", "this_is_camel_name" }); }