示例#1
0
        public void WaitForExitExitsImmediatelyWhenNothingToWaitFor()
        {
            var stdout = new StringReader("");
            var stdin  = new StringWriter();

            var handler = new AsyncStreamsHandler(stdout, new StringReader(""), stdin);

            handler.WaitForExit();
            Assert.Pass("Successfully skipped waiting since there was nothing to do");
        }
示例#2
0
        public void ReadUntil_StringIsFoundInError()
        {
            var stdout  = new StringReader("This line should be ignored" + Environment.NewLine);
            var stderr  = new StringReader("This line should be taken because it includes MARKER in it" + Environment.NewLine);
            var stdin   = new StringWriter();
            var handler = new AsyncStreamsHandler(stdout, stderr, stdin);

            var actualResult = handler.ReadUntil(0, "MARKER");

            actualResult.Should().Be("[error] This line should be taken because it includes MARKER in it");
        }
示例#3
0
        public void ReadUntilTimeoutThrows()
        {
            var stream = new BlockingStream();
            var stdout = new StreamReader(stream);
            var stdin  = new StringWriter();

            var handler = new AsyncStreamsHandler(stdout, new StringReader(""), stdin);

            handler.Invoking(h => h.ReadUntil(0.1, "MARKER"))
            .Should()
            .Throw <TimeoutException>()
            .WithMessage("No result in alloted time: 00:00:00.1000000");
        }
示例#4
0
        public void ReadUntil_StringIsFound()
        {
            var stdout = new StringReader(string.Join(Environment.NewLine,
                                                      "This line should be ignored because it comes before",
                                                      "This line should be taken because it includes MARKER in it",
                                                      "This line should be ignored because it comes after") + Environment.NewLine);
            var stdin   = new StringWriter();
            var handler = new AsyncStreamsHandler(stdout, new StringReader(""), stdin);

            var actualResult = handler.ReadUntil(0, "MARKER");

            actualResult.Should().Be("This line should be taken because it includes MARKER in it");
        }
示例#5
0
        public void CanWrite()
        {
            var stdout = new StreamReader(new MemoryStream());
            var sb     = new StringBuilder();
            var stdin  = new StringWriter(sb);

            var handler = new AsyncStreamsHandler(stdout, new StringReader(""), stdin);

            handler.WriteLine("Should end up in the StreamWriter");
            handler.WriteLine("With a line break after each");

            var actualResult = sb.ToString();

            actualResult.Should().Be("Should end up in the StreamWriter" +
                                     Environment.NewLine +
                                     "With a line break after each" +
                                     Environment.NewLine);
        }
示例#6
0
        public void WaitForExitBlockstdinhenStillReading()
        {
            var blockingStream = new BlockingStream();
            var stdout         = new StreamReader(blockingStream);
            var stdin          = new StringWriter();
            var handler        = new AsyncStreamsHandler(stdout, new StringReader(""), stdin);
            var stopWatch      = new Stopwatch();

            stopWatch.Start();
            new Task(() => { Thread.Sleep(100); blockingStream.Unblock(); }).Start();
            handler.WaitForExit();
            stopWatch.Stop();

            if (stopWatch.ElapsedMilliseconds < 100)
            {
                Assert.Fail("WaitForExit returned before the timer finished");
            }
            else
            {
                Assert.Pass("Successfully waited for the stream to end");
            }
        }