public async Task WorksWithNotification()
        {
            var outputHandler = Substitute.For <IOutputHandler>();
            var router        = new ResponseRouter(outputHandler, new JsonRpcSerializer());

            router.SendNotification(new NotificationParams());

            var request = outputHandler.ReceivedCalls().Single().GetArguments()[0] as OutgoingNotification;

            request.Method.Should().Be("notification");
        }
        public async Task WorksWithNotification()
        {
            var outputHandler = Substitute.For <IOutputHandler>();
            var router        = new ResponseRouter(new Lazy <IOutputHandler>(() => outputHandler), new JsonRpcSerializer(), new HandlerTypeDescriptorProvider(new [] { typeof(HandlerTypeDescriptorProvider).Assembly, typeof(HandlerResolverTests).Assembly }));

            router.SendNotification(new NotificationParams());

            var request = outputHandler.ReceivedCalls().Single().GetArguments()[0] as OutgoingNotification;

            request !.Method.Should().Be("notification");
        }
        public async Task WorksWithUnitType()
        {
            var outputHandler = Substitute.For <IOutputHandler>();
            var router        = new ResponseRouter(outputHandler, new JsonRpcSerializer());

            outputHandler
            .When(x => x.Send(Arg.Is <object>(x => x.GetType() == typeof(OutgoingRequest))))
            .Do(call =>
            {
                var(method, tcs) = router.GetRequest((long)call.Arg <OutgoingRequest>().Id);
                tcs.SetResult(new JObject());
            });

            await router.SendRequest(new UnitParams(), CancellationToken.None);

            var request = outputHandler.ReceivedCalls().Single().GetArguments()[0] as OutgoingRequest;

            request.Method.Should().Be("unit");
        }
        public async Task WorksWithUnitType()
        {
            var outputHandler = Substitute.For <IOutputHandler>();
            var router        = new ResponseRouter(new Lazy <IOutputHandler>(() => outputHandler), new JsonRpcSerializer(), new HandlerTypeDescriptorProvider(new [] { typeof(HandlerTypeDescriptorProvider).Assembly, typeof(HandlerResolverTests).Assembly }));

            outputHandler
            .When(x => x.Send(Arg.Is <object>(z => z.GetType() == typeof(OutgoingRequest))))
            .Do(
                call => {
                router.TryGetRequest((long)call.Arg <OutgoingRequest>().Id !, out _, out var tcs);
                tcs.SetResult(new JObject());
            }
                );

            await router.SendRequest(new UnitParams(), CancellationToken.None);

            var request = outputHandler.ReceivedCalls().Single().GetArguments()[0] as OutgoingRequest;

            request !.Method.Should().Be("unit");
        }
        public async Task WorksWithResultType()
        {
            var outputHandler = Substitute.For <IOutputHandler>();
            var router        = new ResponseRouter(outputHandler, new JsonRpcSerializer());

            outputHandler
            .When(x => x.Send(Arg.Is <object>(x => x.GetType() == typeof(Request)), Arg.Any <CancellationToken>()))
            .Do(call =>
            {
                var tcs = router.GetRequest((long)call.Arg <Request>().Id);
                tcs.SetResult(new JObject());
            });

            var response = await router.SendRequest(new ItemParams(), CancellationToken.None);

            var request = outputHandler.ReceivedCalls().Single().GetArguments()[0] as Request;

            request.Method.Should().Be("abcd");

            response.Should().NotBeNull();
            response.Should().BeOfType <ItemResult>();
        }
 public ResponseRouterReturnsImpl(ResponseRouter router, string method, object @params)
 {
     _router = router;
     _method = method;
     _params = @params;
 }