public TokenVerifier() { StartState = new EquationStartState(this); OperandState = new OperandTokenState(this); OperatorState = new OperatorTokenState(this); CurrentState = StartState; }
/// <summary> /// Initializes the verifier's state based on its inputs /// </summary> /// <param name="continuation">The async continuation</param> protected virtual void InitializeState(IAsyncContinuation continuation) { this.State = new VerifierState(); this.State.UsedOptions = this.Input.Options.HasValue ? this.Input.Options.Value : this.Input.Context.SaveChangesDefaultOptions.ToTestEnum(); this.State.ContextDataBeforeChanges = this.Input.ContextData.Clone(); this.State.Response = null; this.State.EnumeratedOperationResponses.Clear(); this.State.CachedPropertyValuesBeforeSave.Clear(); foreach (var entityDescriptorData in this.State.ContextDataBeforeChanges.EntityDescriptorsData.Where(e => e.Entity != null)) { var entityType = this.ModelSchema.EntityTypes.Single(t => t.FullName == entityDescriptorData.EntityClrType.FullName); this.State.CachedPropertyValuesBeforeSave[entityDescriptorData.Entity] = this.ObjectServices.GetPropertiesValues(entityDescriptorData.Entity, entityType); } this.ServerStateVerifier.InitializeExpectedChanges(this.Input.ContextData, this.State.CachedPropertyValuesBeforeSave); continuation.Continue(); }
/// <summary> /// Executes SaveChanges method on the specified context and verifies the results. /// </summary> /// <param name="continuation">The async continuation</param> /// <param name="contextData">The context data.</param> /// <param name="context">The context to verify SaveChanges.</param> /// <param name="options">The options for saving changes. Passing null will use the context's default.</param> /// <param name="onCompletion">callback for when save changes verification completes</param> public virtual void VerifySaveChanges(IAsyncContinuation continuation, DataServiceContextData contextData, DSClient.DataServiceContext context, SaveChangesOptions?options, Action <IAsyncContinuation, DSClient.DataServiceResponse> onCompletion) { ExceptionUtilities.CheckArgumentNotNull(contextData, "contextData"); ExceptionUtilities.CheckArgumentNotNull(context, "context"); ExceptionUtilities.CheckArgumentNotNull(onCompletion, "onCompletion"); ExceptionUtilities.CheckAllRequiredDependencies(this); // ensure that two calls are not being processed in parallel ExceptionUtilities.Assert(this.Input == null, "Input was not null, possibly due to simultaneous calls or using the wrong async continuation"); ExceptionUtilities.Assert(this.State == null, "State was not null, possibly due to simultaneous calls or using the wrong async continuation"); continuation = continuation.OnContinueOrFail( () => { this.Input = null; this.State = null; }); this.Input = new VerifierInput() { ContextData = contextData, Context = context, Options = options, OnCompletion = onCompletion, }; AsyncHelpers.RunActionSequence( continuation, this.InitializeState, this.VerifyContextState, this.CallProductApi, this.VerifyRequests, this.VerifyResponse, this.VerifyContextState, this.VerifyServerState, this.Complete); }