public void HandleBlockingRequestArgsReturns() { const int num = 10; const int expectedResult = 55; var mock = new Mock <ITestService> (MockBehavior.Strict); mock.Setup(x => x.BlockingProcedureReturns(It.IsAny <int> (), It.IsAny <int> ())) .Returns((int n, int sum) => BlockingProcedureReturnsFn(n, sum)); TestService.Service = mock.Object; var call = Call("TestService", "BlockingProcedureReturns", Arg(0, num)); BlockingProcedureReturnsFnCount = 0; ProcedureResult result = null; Continuation <ProcedureResult> continuation = new ProcedureCallContinuation(call); while (result == null) { try { result = continuation.Run(); } catch (YieldException e) { continuation = (Continuation <ProcedureResult>)e.Continuation; } } // Verify the KRPCProcedure is called once, but the handler function is called multiple times mock.Verify(x => x.BlockingProcedureReturns(It.IsAny <int> (), It.IsAny <int> ()), Times.Once()); Assert.AreEqual(num + 1, BlockingProcedureReturnsFnCount); CheckResultNotEmpty(result); Assert.AreEqual(expectedResult, (int)result.Value); }
static ProcedureResult Run(ProcedureCall call) { var continuation = new ProcedureCallContinuation(call); return(continuation.Run()); }