/// <summary> /// Sets any out and ref values, and return value, from the next expected call, /// assuming the <paramref name="fakeObjectCall"/> matches the next expected call. /// </summary> /// <param name="fakeObjectCall">The call made to the fake.</param> public void Apply(IInterceptedFakeObjectCall fakeObjectCall) { RecordedCall recordedCall = this.ConsumeNextExpectedCall(fakeObjectCall); SetReturnValue(fakeObjectCall, recordedCall); SetOutAndRefValues(fakeObjectCall, recordedCall); }
private static void ApplyRecordedCall(RecordedCall recordedCall, IInterceptedFakeObjectCall fakeObjectCall) { fakeObjectCall.SetReturnValue(recordedCall.ReturnValue); int outAndRefIndex = 0; int parameterIndex = 0; foreach (var parameter in fakeObjectCall.Method.GetParameters()) { if (parameter.ParameterType.IsByRef) { fakeObjectCall.SetArgumentValue(parameterIndex, recordedCall.OutAndRefValues[outAndRefIndex++]); } ++parameterIndex; } }
private static void SetOutAndRefValues(IInterceptedFakeObjectCall fakeObjectCall, RecordedCall recordedCall) { int outOrRefIndex = 0; for (int parameterIndex = 0; parameterIndex < fakeObjectCall.Method.GetParameters().Length; parameterIndex++) { var parameter = fakeObjectCall.Method.GetParameters()[parameterIndex]; if (parameter.ParameterType.IsByRef) { fakeObjectCall.SetArgumentValue(parameterIndex, recordedCall.OutAndRefValues[outOrRefIndex++]); } } }
private static void SetReturnValue(IInterceptedFakeObjectCall fakeObjectCall, RecordedCall recordedCall) { fakeObjectCall.SetReturnValue(recordedCall.ReturnValue); }