public void TestInteractive_Retry()
        {
            // Precondition
            Debug.Assert(outputMock != null);

            /* GIVEN */
            var autoResetEvent = new AutoResetEvent(false);
            var isComplete     = false;

            outputMock
            .SetupSequence(output => output.Read())?
            .Returns("notX")?
            .Returns("again")?
            .Returns("x")?
            .Returns("x");     // This one should be superfluous

            var commandLine = new InteractiveCommandLine(outputMock.Object);

            /* WHEN */
            commandLine.Launch(() =>
            {
                isComplete = true;
                autoResetEvent.Set();
            });

            /* THEN */
            Assert.IsTrue(autoResetEvent.WaitOne(waitTimeInMilliseconds));
            Assert.IsTrue(isComplete);

            outputMock.Verify(output => output.Read(), Times.Exactly(3));
        }
        public void TestInteractive_NullOutputFormatter()
        {
            // Precondition
            Debug.Assert(outputMock != null);

            /* GIVEN */
            var autoResetEvent = new AutoResetEvent(false);
            var isComplete     = false;

            var commandLine = new InteractiveCommandLine(null);

            /* WHEN */
            commandLine.Launch(() =>
            {
                isComplete = true;
                autoResetEvent.Set();
            });

            /* THEN */
            Assert.IsTrue(autoResetEvent.WaitOne(waitTimeInMilliseconds));
            Assert.IsTrue(isComplete);
        }