public void Component(MemberInfo property, Action<IComponentElementMapper> mapping)
		{
			System.Type nestedComponentType = property.GetPropertyOrFieldType();
			var hbm = new HbmNestedCompositeElement { name = property.Name, @class = nestedComponentType.GetShortClassName(_mapDoc) };
			mapping(new ComponentNestedElementMapper(nestedComponentType, _mapDoc, hbm, property));
			AddProperty(hbm);
		}
		public ComponentNestedElementMapper(Type componentType, HbmMapping mapDoc, HbmNestedCompositeElement component, MemberInfo declaringComponentMember)
		{
			this.componentType = componentType;
			this.mapDoc = mapDoc;
			this.component = component;
			accessorPropertyMapper = new AccessorPropertyMapper(declaringComponentMember.DeclaringType, declaringComponentMember.Name, x => component.access = x);
		}
 public void CanMapParent()
 {
     var mapdoc = new HbmMapping();
     var component = new HbmNestedCompositeElement();
     var mapper = new ComponentNestedElementMapper(typeof(Number), mapdoc, component, ForClass<Address>.Property(a=> a.Number));
     mapper.Parent(typeof(Address).GetProperty("Parent"));
     component.Parent.Should().Not.Be.Null();
     component.Parent.name.Should().Be.EqualTo("Parent");
 }
 public void CallPropertyMapper()
 {
     var mapdoc = new HbmMapping();
     var component = new HbmNestedCompositeElement();
     var mapper = new ComponentNestedElementMapper(typeof(Number), mapdoc, component, ForClass<Address>.Property(a => a.Number));
     var called = false;
     mapper.Property(ForClass<Number>.Property(a => a.Block), x => called = true);
     called.Should().Be.True();
 }
 public void CanMapNestedComponent()
 {
     var mapdoc = new HbmMapping();
     var component = new HbmNestedCompositeElement();
     var mapper = new ComponentNestedElementMapper(typeof(Number2), mapdoc, component, ForClass<Number>.Property(a => a.NestNumber));
     mapper.Component(ForClass<Number>.Property(a => a.NestNumber), x => { });
     component.Properties.Should().Have.Count.EqualTo(1);
     component.Properties.First().Name.Should().Be.EqualTo("NestNumber");
     component.Properties.First().Should().Be.OfType<HbmNestedCompositeElement>();
 }
        public void CanMapProperty()
        {
            var mapdoc = new HbmMapping();
            var component = new HbmNestedCompositeElement();
            var mapper = new ComponentNestedElementMapper(typeof(Number), mapdoc, component, ForClass<Address>.Property(a => a.Number));

            mapper.Property(ForClass<Number>.Property(a => a.Block), x => { });
            mapper.Property(ForClass<Number>.Property(a => a.Dir), x => { });

            component.Properties.Should().Have.Count.EqualTo(2);
            component.Properties.Select(cp => cp.Name).Should().Have.SameValuesAs("Block", "Dir");
        }
 public void CanSetComponentAccessor()
 {
     var mapdoc = new HbmMapping();
     var component = new HbmNestedCompositeElement();
     var mapper = new ComponentNestedElementMapper(typeof(Number), mapdoc, component, ForClass<Address>.Property(a => a.Number));
     mapper.Access(Accessor.Field);
     component.access.Should().Contain("field");
 }