From b1cf561c75da1047b59d4c8ab0058006c679f5cd Mon Sep 17 00:00:00 2001 From: Shay Rojansky Date: Tue, 3 Mar 2020 20:15:47 +0100 Subject: [PATCH] Support ExpressionType.Add in CSharpHelper For NodaTime code literal generation --- .../Design/Internal/CSharpHelper.cs | 17 +++++++++++++++++ .../Design/Internal/CSharpHelperTest.cs | 17 +++++++++++++++-- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/EFCore.Design/Design/Internal/CSharpHelper.cs b/src/EFCore.Design/Design/Internal/CSharpHelper.cs index ee33f0bf163..781909d2c3a 100644 --- a/src/EFCore.Design/Design/Internal/CSharpHelper.cs +++ b/src/EFCore.Design/Design/Internal/CSharpHelper.cs @@ -916,6 +916,23 @@ private bool HandleExpression(Expression expression, StringBuilder builder, bool .Append('.') .Append(memberExpression.Member.Name); + return true; + } + case ExpressionType.Add: + { + var binaryExpression = (BinaryExpression)expression; + if (!HandleExpression(binaryExpression.Left, builder)) + { + return false; + } + + builder.Append(" + "); + + if (!HandleExpression(binaryExpression.Right, builder)) + { + return false; + } + return true; } } diff --git a/test/EFCore.Design.Tests/Design/Internal/CSharpHelperTest.cs b/test/EFCore.Design.Tests/Design/Internal/CSharpHelperTest.cs index 9469d6ce5c9..6c49f0b90cc 100644 --- a/test/EFCore.Design.Tests/Design/Internal/CSharpHelperTest.cs +++ b/test/EFCore.Design.Tests/Design/Internal/CSharpHelperTest.cs @@ -572,16 +572,29 @@ public void Literal_with_instance_property() } [ConditionalFact] - public void Literal_with_unsupported_node_throws() + public void Literal_with_add() { var typeMapping = CreateTypeMappingSource( v => Expression.Add( Expression.Constant(10), Expression.Constant(10))); + Assert.Equal( + "10 + 10", + new CSharpHelper(typeMapping).UnknownLiteral(new SimpleTestType())); + } + + [ConditionalFact] + public void Literal_with_unsupported_node_throws() + { + var typeMapping = CreateTypeMappingSource( + v => Expression.Multiply( + Expression.Constant(10), + Expression.Constant(10))); + Assert.Equal( DesignStrings.LiteralExpressionNotSupported( - "(10 + 10)", + "(10 * 10)", nameof(SimpleTestType)), Assert.Throws( () => new CSharpHelper(typeMapping).UnknownLiteral(new SimpleTestType())).Message);