public void ReceiveEventStreamInChunks()
        {
            // This simply verifies that chunked streaming works as expected and that events are being
            // parsed correctly regardless of how the chunks line up with the events.

            var eventData = new List <string>();

            for (var i = 0; i < 200; i++)
            {
                eventData.Add(string.Format("data{0}", i) + new string('x', i % 7));
            }
            var allBody           = string.Concat(eventData.Select(data => "data:" + data + "\n\n"));
            var allEventsReceived = new TaskCompletionSource <bool>();

            IEnumerable <string> MakeChunks()
            {
                var i = 0;

                for (var pos = 0; ;)
                {
                    int chunkSize = i % 20 + 1;
                    if (pos + chunkSize >= allBody.Length)
                    {
                        yield return(allBody.Substring(pos));

                        break;
                    }
                    yield return(allBody.Substring(pos, chunkSize));

                    pos += chunkSize;
                    i++;
                }
            }

            try
            {
                Handler streamHandler = Handlers.StartChunks("text/event-stream")
                                        .Then(async ctx =>
                {
                    foreach (var s in MakeChunks())
                    {
                        await Handlers.WriteChunkString(s)(ctx);
                    }
                    await allEventsReceived.Task;
                });
                using (var server = HttpServer.Start(streamHandler))
                {
                    var expectedActions = new List <EventSink.Action>();
                    expectedActions.Add(EventSink.OpenedAction());
                    foreach (var data in eventData)
                    {
                        expectedActions.Add(EventSink.MessageReceivedAction(new MessageEvent(MessageEvent.DefaultName, data, server.Uri)));
                    }

                    var config = Configuration.Builder(server.Uri).LogAdapter(_testLogging).Build();
                    using (var es = new EventSource(config))
                    {
                        var sink = new EventSink(es);
                        _ = es.StartAsync();
                        sink.ExpectActions(expectedActions.ToArray());
                    }
                }
            }
            finally
            {
                allEventsReceived.SetResult(true);
            }
        }