Skip to content

Commit 7a65b02

Browse files
committed
Test coverage for mappingDataObject.Parent.As<TSource, TTarget>()
1 parent d3e3e29 commit 7a65b02

File tree

5 files changed

+50
-9
lines changed

5 files changed

+50
-9
lines changed

AgileMapper.UnitTests/Configuration/WhenConfiguringObjectCreation.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -305,10 +305,12 @@ public void ShouldIncludeMappingDetailsInANestedObjectCreationException()
305305
mappingEx.Message.ShouldContain(Constants.CreateNew);
306306

307307
mappingEx.InnerException.ShouldNotBeNull();
308+
// ReSharper disable once PossibleNullReferenceException
308309
mappingEx.InnerException.Message.ShouldContain("PersonViewModel -> Person.Address");
309310
mappingEx.InnerException.Message.ShouldContain(Constants.CreateNew);
310311

311312
mappingEx.InnerException.InnerException.ShouldNotBeNull();
313+
// ReSharper disable once PossibleNullReferenceException
312314
mappingEx.InnerException.InnerException.Message.ShouldBe("Can't make an address, sorry");
313315
}
314316

@@ -376,7 +378,7 @@ public void ShouldHandleAnObjectMappingDataCreationException()
376378

377379
thrownException.InnerException.ShouldNotBeNull();
378380
// ReSharper disable once PossibleNullReferenceException
379-
thrownException.InnerException.Message.ShouldBe(MappingException.NO_MAPPING_DATA);
381+
thrownException.InnerException.Message.ShouldBe(MappingException.NoMappingData);
380382
}
381383
}
382384

AgileMapper.UnitTests/Configuration/WhenConfiguringObjectCreationCallbacks.cs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,10 @@ public void ShouldWrapANestedObjectCreatingCallbackException()
6464

6565
exception.InnerException.ShouldNotBeNull();
6666
exception.InnerException.ShouldBeOfType<MappingException>();
67+
// ReSharper disable once PossibleNullReferenceException
6768
exception.InnerException.InnerException.ShouldNotBeNull();
6869
exception.InnerException.InnerException.ShouldBeOfType<InvalidOperationException>();
70+
// ReSharper disable once PossibleNullReferenceException
6971
exception.InnerException.InnerException.Message.ShouldBe("OH NO");
7072
}
7173

@@ -421,5 +423,28 @@ public void ShouldCallObjectCreatingAndObjectCreatedCallbacksForSpecifiedTypesCo
421423
postCallbackObjects.ShouldBe(source, target.Address);
422424
}
423425
}
426+
427+
[Fact]
428+
public void ShouldUseATypedParentContextAccessForACallbackArgument()
429+
{
430+
using (var mapper = Mapper.CreateNew())
431+
{
432+
mapper
433+
.WhenMapping
434+
.From<PublicField<object>>()
435+
.To<PublicProperty<Product>>()
436+
.After
437+
.CreatingInstancesOf<Product>()
438+
.Call(Console.WriteLine);
439+
440+
var source = new PublicField<object>
441+
{
442+
Value = new Product { ProductId = "UBER-WIDGET" }
443+
};
444+
var target = new PublicProperty<Product>();
445+
446+
mapper.Map(source).OnTo(target);
447+
}
448+
}
424449
}
425450
}

AgileMapper/Configuration/ParametersSwapper.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,11 @@ public static Expression UseTargetMember(IMemberMapperData mapperData, Expressio
199199

200200
public static Expression UseInstanceVariable(IMemberMapperData mapperData, Expression contextAccess, Type targetType)
201201
{
202+
if (!contextAccess.Type.IsGenericType())
203+
{
204+
return UseTargetMember(mapperData, contextAccess, targetType);
205+
}
206+
202207
var instanceVariableAccess = mapperData
203208
.GetAppropriateMappingContext(contextAccess.Type.GetGenericArguments())
204209
.InstanceVariable;

AgileMapper/MappingException.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public class MappingException : Exception
1616
internal static readonly ConstructorInfo ConstructorInfo =
1717
typeof(MappingException).GetNonPublicInstanceConstructors().First();
1818

19-
internal const string NO_MAPPING_DATA = "An exception occurred creating a mapping data instance";
19+
internal const string NoMappingData = "An exception occurred creating a mapping data instance";
2020

2121
/// <summary>
2222
/// Initializes a new instance of the MappingException class.
@@ -34,7 +34,7 @@ private static string GetMessage(IMemberMapperData mapperData)
3434
{
3535
if (mapperData == null)
3636
{
37-
return NO_MAPPING_DATA;
37+
return NoMappingData;
3838
}
3939

4040
var rootData = GetRootMapperData(mapperData);

AgileMapper/Members/MemberMapperDataExtensions.cs

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ namespace AgileObjects.AgileMapper.Members
77
using System.Reflection;
88
using Extensions;
99
using ObjectPopulation;
10+
using ReadableExpressions.Extensions;
1011

1112
internal static class MemberMapperDataExtensions
1213
{
@@ -161,15 +162,18 @@ public static Expression GetTypedContextAccess(
161162
return mapperData.MappingDataObject;
162163
}
163164

164-
var contextAccessTypes = contextAccess.Type.GetGenericArguments();
165-
166-
if (contextTypes[0].IsAssignableFrom(contextAccessTypes[0]) &&
167-
contextTypes[1].IsAssignableFrom(contextAccessTypes[1]))
165+
if (contextAccess.Type.IsGenericType())
168166
{
169-
return contextAccess;
167+
var contextAccessTypes = contextAccess.Type.GetGenericArguments();
168+
169+
if (contextTypes[0].IsAssignableFrom(contextAccessTypes[0]) &&
170+
contextTypes[1].IsAssignableFrom(contextAccessTypes[1]))
171+
{
172+
return contextAccess;
173+
}
170174
}
171175

172-
return GetAsCall(contextAccess, contextTypes);
176+
return GetAsCall(contextAccess, contextTypes[0], contextTypes[1]);
173177
}
174178

175179
public static Expression GetAsCall(this IMemberMapperData mapperData, Type sourceType, Type targetType)
@@ -205,6 +209,11 @@ private static Expression GetAccess(
205209
return directAccessExpression;
206210
}
207211

212+
if (!contextAccess.Type.IsGenericType())
213+
{
214+
return accessMethodFactory.Invoke(contextAccess, type);
215+
}
216+
208217
var contextTypes = contextAccess.Type.GetGenericArguments();
209218

210219
if (type.IsAssignableFrom(contextTypes[contextTypesIndex]))

0 commit comments

Comments
 (0)