public void TestReConnectionAfterConnectionLost()
        {
            // setup
            Uri url = new Uri("http://test.com");
            CancellationTokenSource cts = new CancellationTokenSource();
            List<EventSourceState> states = new List<EventSourceState>();
            ServiceResponseMock serviceResponseMock = new ServiceResponseMock(url, System.Net.HttpStatusCode.OK);
            WebRequesterFactoryMock factory = new WebRequesterFactoryMock(serviceResponseMock);
            ManualResetEvent stateIsOpen = new ManualResetEvent(false);
            ManualResetEvent stateIsClosed = new ManualResetEvent(false);

            TestableEventSource es = new TestableEventSource(url, factory);
            es.StateChanged += (o, e) =>
            {
                states.Add(e.State);
                if (e.State == EventSourceState.OPEN)
                {
                    stateIsClosed.Reset();
                    stateIsOpen.Set();
                }
                else if (e.State == EventSourceState.CLOSED)
                {
                    stateIsOpen.Reset();
                    stateIsClosed.Set();
                }
            };

            // act
            stateIsOpen.Reset();

            es.Start(cts.Token);

            stateIsOpen.WaitOne();
            states.Clear();

            serviceResponseMock.DistantConnectionClose();

            stateIsClosed.WaitOrThrow();
            stateIsOpen.WaitOrThrow();

            // assert
            Assert.AreEqual(states[0], EventSourceState.CLOSED);
            Assert.AreEqual(states[1], EventSourceState.CONNECTING);
            Assert.AreEqual(states[2], EventSourceState.OPEN);
        }