Skip to content

Commit

Permalink
fix #1188
Browse files Browse the repository at this point in the history
  • Loading branch information
tonyhallett committed Jul 22, 2021
1 parent 9e148f6 commit 37636b7
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 3 deletions.
4 changes: 2 additions & 2 deletions src/Moq/Protected/ProtectedMock.cs
Expand Up @@ -512,12 +512,12 @@ private static Type[] ToArgTypes(object[] args)

private static Expression ToExpressionArg(Type type, object arg)
{
if (arg is LambdaExpression lambda)
if (arg is LambdaExpression lambda && !typeof(LambdaExpression).IsAssignableFrom(type))
{
return lambda.Body;
}

if (arg is Expression expression)
if (arg is Expression expression && !typeof(Expression).IsAssignableFrom(type))
{
return expression;
}
Expand Down
19 changes: 18 additions & 1 deletion tests/Moq.Tests/ProtectedMockFixture.cs
Expand Up @@ -2,7 +2,7 @@
// All rights reserved. Licensed under the BSD 3-Clause License; see License.txt.

using System;

using System.Linq.Expressions;
using Moq.Protected;

using Xunit;
Expand Down Expand Up @@ -855,6 +855,17 @@ public void DoesNotThrowIfVerifySetPropertyTimesReached()
mock.Protected().VerifySet<string>("ProtectedValue", Times.Exactly(2), ItExpr.IsAny<string>());
}

[Fact]
public void SetupShouldWorkWithExpressionTypes()
{
var mock = new Mock<FooBase>();
var expression = Expression.Constant(1);
Expression setExpression = null;
mock.Protected().SetupSet<Expression>("ExpressionProperty", expression).Callback(expr => setExpression = expr);
mock.Object.SetExpressionProperty(expression);
Assert.Equal(expression, setExpression);
}

public class MethodOverloads
{
public void ExecuteDo(int a, int b)
Expand Down Expand Up @@ -952,6 +963,12 @@ protected virtual FooBase Overloaded(MyDerived myBase)

public class FooBase
{
protected virtual ConstantExpression ExpressionProperty { get; set; }
public void SetExpressionProperty(ConstantExpression expression)
{
ExpressionProperty = expression;
}

public virtual string PublicValue { get; set; }

protected internal virtual string ProtectedInternalValue { get; set; }
Expand Down

0 comments on commit 37636b7

Please sign in to comment.