From ec6cf5238ba70126e15cc8765fb979f6734e19a7 Mon Sep 17 00:00:00 2001 From: DocSvartz Date: Tue, 31 Mar 2026 15:23:06 +0500 Subject: [PATCH 1/3] feat(test): replace RequiredProperty test and new Polymorphic test --- .../WhenMappingRecordRegression.cs | 17 +---- .../WhenMappingRequiredPropertyRegression.cs | 68 +++++++++++++++++++ 2 files changed, 69 insertions(+), 16 deletions(-) create mode 100644 src/Mapster.Tests/WhenMappingRequiredPropertyRegression.cs diff --git a/src/Mapster.Tests/WhenMappingRecordRegression.cs b/src/Mapster.Tests/WhenMappingRecordRegression.cs index 85d291e8..4a065274 100644 --- a/src/Mapster.Tests/WhenMappingRecordRegression.cs +++ b/src/Mapster.Tests/WhenMappingRecordRegression.cs @@ -443,22 +443,7 @@ public void FixCtorParamMapping() result.Order.Payment.CVV.ShouldBe("234"); resultID.UserID.ShouldBe("256"); } - - [TestMethod] - public void RequiredProperty() - { - var source = new Person553 { FirstMidName = "John", LastName = "Dow" }; - var destination = new Person554 { ID = 245, FirstMidName = "Mary", LastName = "Dow" }; - - var s = source.BuildAdapter().CreateMapToTargetExpression(); - - var result = source.Adapt(destination); - - result.ID.ShouldBe(245); - result.FirstMidName.ShouldBe(source.FirstMidName); - result.LastName.ShouldBe(source.LastName); - } - + /// /// https://github.com/MapsterMapper/Mapster/issues/842 /// diff --git a/src/Mapster.Tests/WhenMappingRequiredPropertyRegression.cs b/src/Mapster.Tests/WhenMappingRequiredPropertyRegression.cs new file mode 100644 index 00000000..a578321b --- /dev/null +++ b/src/Mapster.Tests/WhenMappingRequiredPropertyRegression.cs @@ -0,0 +1,68 @@ +using Microsoft.VisualStudio.TestTools.UnitTesting; +using Shouldly; +using System; +using System.Collections.Generic; +using System.Text; + +namespace Mapster.Tests +{ + [TestClass] + public class WhenMappingRequiredPropertyRegression + { + [TestMethod] + public void RequiredProperty() + { + var source = new Person553 { FirstMidName = "John", LastName = "Dow" }; + var destination = new Person554 { ID = 245, FirstMidName = "Mary", LastName = "Dow" }; + + var s = source.BuildAdapter().CreateMapToTargetExpression(); + + var result = source.Adapt(destination); + + result.ID.ShouldBe(245); + result.FirstMidName.ShouldBe(source.FirstMidName); + result.LastName.ShouldBe(source.LastName); + } + + [TestMethod] + public void PolymorphicMappingToAbstractClassCompileWithoutError() + { + var config = TypeAdapterConfig.GlobalSettings; + + config.NewConfig(); + + config.NewConfig() + .Include(); + + Should.NotThrow(() => + { + config.Compile(); + }); + + } + } + + #region TestClasses + + public abstract class AbstractSource + { + public abstract string Name { get; } + } + + public class ConcreteSource : AbstractSource + { + public override string Name => "Test"; + } + + public abstract class AbstractDestination + { + public required string Name { get; set; } + } + + public class ConcreteDestination : AbstractDestination + { + + } + + #endregion TestClasses +} From a06ce0287a305f09ccecd9c21107433b06d00e56 Mon Sep 17 00:00:00 2001 From: DocSvartz Date: Tue, 31 Mar 2026 15:29:19 +0500 Subject: [PATCH 2/3] fix: #906 - InvalidCastException when using polymorphic mapping with required properties --- src/Mapster/Adapters/BaseAdapter.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Mapster/Adapters/BaseAdapter.cs b/src/Mapster/Adapters/BaseAdapter.cs index 65c9d0f9..dba50681 100644 --- a/src/Mapster/Adapters/BaseAdapter.cs +++ b/src/Mapster/Adapters/BaseAdapter.cs @@ -219,7 +219,7 @@ protected Expression CreateBlockExpressionBody(Expression source, Expression? de .Where(x => x.GetCustomAttributes() .Any(y => y.GetType().FullName == "System.Runtime.CompilerServices.RequiredMemberAttribute")); - if (requiremembers.Count() != 0) + if (requiremembers.Count() != 0 && !arg.DestinationType.IsAbstract) set = CreateInlineExpression(source, arg.CloneWith(MapType.ApplyNullPropagation), true); else set = CreateInstantiationExpression(transformedSource, destination, arg); From c049cf6f9a56aaaa57dff87e8670c51f5273d907 Mon Sep 17 00:00:00 2001 From: DocSvartz Date: Tue, 31 Mar 2026 15:35:58 +0500 Subject: [PATCH 3/3] chore: Bump Version to 10.0.7-pre03 --- src/Directory.Build.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Directory.Build.props b/src/Directory.Build.props index 8ce13048..064b39cf 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -2,7 +2,7 @@ false - 10.0.7-pre02 + 10.0.7-pre03 netstandard2.0;net10.0;net9.0;net8.0 netstandard2.0;net10.0;net9.0;net8.0 net10.0;net9.0;net8.0