public void TryCatchWhenTest() { var expected = new InvalidOperationException("aaa"); _mock.MethodWithReturn().Throws(expected); _mock.Condition.Returns(true); var parameter = ExpressionShortcuts.Parameter <IMock>(); var action = ExpressionShortcuts.Block() .Parameter(parameter) .Line(parameter.Assign(_mock)) .Line(ExpressionShortcuts.Try() .Body(parameter.Call(o => o.MethodWithReturn())) .Catch <InvalidOperationException>( e => ExpressionShortcuts.Null <string>(), e => e.Call(o => !parameter.Property(x => x.Condition) || o.Message == null) ) ) .Lambda <Func <string> >() .Compile(); var actual = Assert.Throws <InvalidOperationException>(() => action()); Assert.Equal(expected, actual); _mock.Received(1).MethodWithReturn(); _ = _mock.Received(1).Condition; }
public void NestedCallWithPropertyTest() { var expected = _faker.Random.String(); _mock.String.Returns(expected); var mock = ExpressionShortcuts.Parameter <IMock>(); Action action; action = ExpressionShortcuts.Block() .Parameter(mock) .Line(mock.Assign(_mock)) .Line(mock.Call(o => o.VoidMethodWithParameter(o.String))) .Lambda <Action>() .Compile(); _mock.DidNotReceiveWithAnyArgs().VoidMethodWithParameter(default);
public static Expression <Action <BindingContext, TextWriter, object> > Bind(CompilationContext context, Expression body, string templatePath) { var configuration = ExpressionShortcuts.Arg(context.Configuration); var writerParameter = ExpressionShortcuts.Parameter <TextWriter>("buffer"); var objectParameter = ExpressionShortcuts.Parameter <object>("data"); var bindingContext = ExpressionShortcuts.Arg <BindingContext>(context.BindingContext); var inlinePartialsParameter = ExpressionShortcuts.Null <IDictionary <string, Action <TextWriter, object> > >(); var textEncoder = configuration.Property(o => o.TextEncoder); var encodedWriterExpression = ExpressionShortcuts.Call(() => EncodedTextWriter.From(writerParameter, (ITextEncoder)textEncoder)); var parentContextArg = ExpressionShortcuts.Var <BindingContext>("parentContext"); var newBindingContext = ExpressionShortcuts.Call( () => BindingContext.Create(configuration, objectParameter, encodedWriterExpression, parentContextArg, templatePath, (IDictionary <string, Action <TextWriter, object> >)inlinePartialsParameter) ); var shouldDispose = ExpressionShortcuts.Var <bool>("shouldDispose"); Expression blockBuilder = ExpressionShortcuts.Block() .Parameter(bindingContext) .Parameter(shouldDispose) .Line(ExpressionShortcuts.Condition() .If(objectParameter.Is <BindingContext>(), bindingContext.Assign(objectParameter.As <BindingContext>()) ) .Else(block => { block.Line(shouldDispose.Assign(true)); block.Line(bindingContext.Assign(newBindingContext)); }) ) .Line(ExpressionShortcuts.Try() .Body(block => block.Lines(((BlockExpression)body).Expressions)) .Finally(ExpressionShortcuts.Condition() .If(shouldDispose, bindingContext.Call(o => o.Dispose())) ) ); return(Expression.Lambda <Action <BindingContext, TextWriter, object> >(blockBuilder, (ParameterExpression)parentContextArg.Expression, (ParameterExpression)writerParameter.Expression, (ParameterExpression)objectParameter.Expression)); }