public void ShouldUseACtorParameterWithATypedToTarget()
        {
            using (var mapper = Mapper.CreateNew())
            {
                mapper.WhenMapping
                .From <Issue129.Source.Wrapper>()
                .To <Issue129.Target.ITrafficObj>()
                .If(d => d.Source.ConcreteValue == Issue129.Source.Wrapper.ConcreteValueType.Delay)
                .Map(d => d.Source.DelayValue)
                .ToTarget <Issue129.Target.DelayObject>();

                var delaySource = new Issue129.Source.Wrapper
                {
                    ConcreteValue = Issue129.Source.Wrapper.ConcreteValueType.Delay,
                    DelayValue    = new Issue129.Source.DelayObject
                    {
                        Name     = "Situation Object",
                        Duration = TimeSpan.FromHours(2).ToString()
                    }
                };

                var delayResult = mapper.Map(delaySource).ToANew <Issue129.Target.ITrafficObj>();

                delayResult.ShouldNotBeNull();
                delayResult.ShouldBeOfType <Issue129.Target.DelayObject>();

                var delayObject = (Issue129.Target.DelayObject)delayResult;
                delayObject.CurrentClass.ShouldNotBeNull();
                delayObject.CurrentClass.ShouldBeOfType <Issue129.Target.DelayClass>();

                var delayClass = (Issue129.Target.DelayClass)delayObject.CurrentClass;
                delayClass.Name.ShouldBe("Delay");
                delayClass.Duration.ShouldBe(TimeSpan.FromHours(2));
            }
        }
        public void ShouldUseAConfiguredCtorParameterWithATypedToTarget()
        {
            using (var mapper = Mapper.CreateNew())
            {
                mapper.WhenMapping
                .From <Issue129.Source.SituationObject>()
                .To <Issue129.Target.SituationObject>()
                .Map(d => d.Source.CurrentClass)
                .ToCtor <Issue129.Target.SituationClass>();

                mapper.WhenMapping
                .From <Issue129.Source.ActionObject>()
                .To <Issue129.Target.ActionObject>()
                .Map(ctx => new Issue129.Target.ActionClass())
                .ToCtor <Issue129.Target.ActionClass>();

                mapper.WhenMapping
                .From <Issue129.Source.Wrapper>()
                .To <Issue129.Target.ITrafficObj>()
                .If(d => d.Source.ConcreteValue == Issue129.Source.Wrapper.ConcreteValueType.Action)
                .Map(d => d.Source.ActionValue)
                .ToTarget <Issue129.Target.ActionObject>()
                .And
                .If(d => d.Source.ConcreteValue == Issue129.Source.Wrapper.ConcreteValueType.Situation)
                .Map(d => d.Source.SituationValue)
                .ToTarget <Issue129.Target.SituationObject>();

                var situationSource = new Issue129.Source.Wrapper
                {
                    ConcreteValue  = Issue129.Source.Wrapper.ConcreteValueType.Situation,
                    SituationValue = new Issue129.Source.SituationObject
                    {
                        Name         = "Situation Object",
                        CurrentClass = new Issue129.Source.SituationClass
                        {
                            Name = "Situation Class"
                        }
                    }
                };

                var situationResult = mapper.Map(situationSource).ToANew <Issue129.Target.ITrafficObj>();

                situationResult.ShouldNotBeNull();
                situationResult.ShouldBeOfType <Issue129.Target.SituationObject>();

                var situationObject = (Issue129.Target.SituationObject)situationResult;
                situationObject.CurrentClass.ShouldNotBeNull();
                situationObject.CurrentClass.ShouldBeOfType <Issue129.Target.SituationClass>();

                var situationClass = (Issue129.Target.SituationClass)situationObject.CurrentClass;
                situationClass.Name.ShouldBe("Situation Class");
            }
        }
        public void ShouldHandleANullTypedToTargetSource()
        {
            using (var mapper = Mapper.CreateNew())
            {
                mapper.WhenMapping
                .From <Issue129.Source.Wrapper>()
                .To <Issue129.Target.ITrafficObj>()
                .If(d => d.Source.ConcreteValue == Issue129.Source.Wrapper.ConcreteValueType.Delay)
                .Map(d => d.Source.DelayValue)
                .ToTarget <Issue129.Target.DelayObject>();

                var nullDelaySource = new Issue129.Source.Wrapper
                {
                    ConcreteValue = Issue129.Source.Wrapper.ConcreteValueType.Delay
                };

                var delayResult = mapper.Map(nullDelaySource).ToANew <Issue129.Target.ITrafficObj>();

                delayResult.ShouldBeNull();
            }
        }