public void find_variables_returns_all_the_set_arguments_too() { var age = Variable.For <int>("age"); var count = Variable.For <int>("count"); var name = Variable.For <string>(); var variables = new StubMethodVariables(); //variables.Store(age); variables.Store(count); variables.Store(name); var @call = MethodCall.For <MethodCallTarget>(x => x.DoSomething(0, 0, null)); @call.IsLocal = true; @call.TrySetArgument("age", age).ShouldBeTrue(); var found = @call.FindVariables(variables).ToArray(); found.ShouldContain(age); found.ShouldContain(count); found.ShouldContain(name); }
public void no_return_variable_on_void_method() { var @call = MethodCall.For <MethodCallTarget>(x => x.Go(null)); @call.ReturnVariable.ShouldBeNull(); }
public void Apply(HandlerChain chain, ISagaPersistenceFrameProvider sagaPersistenceFrameProvider, IContainer container) { if (sagaPersistenceFrameProvider == null) { throw new InvalidOperationException("No saga persistence strategy is registered."); } var sagaStateType = DetermineSagaStateType(chain); var sagaIdType = sagaPersistenceFrameProvider.DetermineSagaIdType(sagaStateType); var sagaHandler = chain.Handlers.FirstOrDefault(x => x.HandlerType.Closes(typeof(StatefulSagaOf <>))); var existence = DetermineExistence(sagaHandler.As <HandlerCall>()); Variable sagaIdVariable = null; if (existence == SagaStateExistence.Existing) { var identityMethod = sagaHandler .HandlerType .GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static) .Where(x => x.Name == IdentityMethodName && x.ReturnType == sagaIdType) .FirstOrDefault(x => x.GetParameters().Any(p => p.ParameterType == chain.MessageType)); var sagaId = ChooseSagaIdProperty(chain.MessageType); sagaIdVariable = createSagaIdVariable(sagaHandler.HandlerType, chain.MessageType, sagaId, identityMethod, sagaIdType); chain.Middleware.Add(sagaIdVariable.Creator); } var existingState = sagaHandler.Creates.FirstOrDefault(x => x.VariableType == sagaStateType); // Tells the handler chain codegen to not use this as a cascading message existingState?.Properties.Add(HandlerChain.NotCascading, true); var persistenceFrame = sagaPersistenceFrameProvider.DeterminePersistenceFrame(container, chain, sagaHandler, existence, ref sagaIdVariable, sagaStateType, existingState, out existingState); if (persistenceFrame != null) { chain.Middleware.Add(persistenceFrame); } if (existence == SagaStateExistence.Existing) { chain.Middleware.Add(new AssertSagaStateExistsFrame(existingState, sagaIdVariable)); } var enlistInSagaId = MethodCall.For <IMessageContext>(x => x.EnlistInSaga(null)); enlistInSagaId.Arguments[0] = sagaIdVariable; chain.Postprocessors.Add(enlistInSagaId); var storeOrDeleteFrame = sagaPersistenceFrameProvider.DetermineStoreOrDeleteFrame(container, chain, sagaHandler, existingState, sagaHandler.HandlerType); chain.Postprocessors.Add(storeOrDeleteFrame); }
public void default_disposal_mode_is_using() { MethodCall.For <MethodCallTarget>(x => x.Throw(null)) .DisposalMode.ShouldBe(DisposalMode.UsingBlock); }
public void SetupCall() { theCall = MethodCall.For <MethodTarget>(x => x.ReturnTuple()); }
/// <inheritdoc /> public void Build(MiddlewareBuilderContext context) { var runNowCall = MethodCall.For <IBackgroundTaskScheduler>(s => s.RunNowAsync()); context.AppendFrames(runNowCall); }
public MethodCall Method(Expression <Action <T> > expression) { return(MethodCall.For(expression)); }