public async Task StringResult_Tests()
        {
            using (var client = new PSClient())
            {
                var value = "Hello World -- " + Guid.NewGuid().ToString();
                await client.OpenAsync(PSConnectionInfo.CreateLocalConnection());
                var result = await client.InvokeScriptAsync<string>(PSUtils.EscapeString(value));

                Assert.AreEqual(value, result.Single());
            }
        }
        public async Task ReadLine_Exception3_Tests()
        {
            using (var client = new PSClient())
            {
                await client.OpenAsync(PSConnectionInfo.CreateLocalConnection());

                await Task.Delay(TimeSpan.FromMilliseconds(100));

                client.ConfigureNonInteractiveSilentHost();
                await Assert.ThrowsExceptionAsync <CmdletInvocationException>(async() => await client.InvokeScriptAsync <string>("Read-Host"));
            }
        }
        public async Task ReadLine_Test()
        {
            using (var client = new PSClient())
            {
                await client.OpenAsync(PSConnectionInfo.CreateLocalConnection());

                await Task.Delay(TimeSpan.FromMilliseconds(100));

                client.ConfigureNonInteractiveConsoleHost();

                client.HostUI.ReadLineCallback = () => "Hello World";
                Assert.AreEqual("Hello World", (await client.InvokeScriptAsync <string>("Read-Host")).Single());
            }
        }
        public async Task ReadLine_Exception1_Tests()
        {
            using (var client = new PSClient())
            {
                await client.OpenAsync(PSConnectionInfo.CreateLocalConnection());

                await Task.Delay(TimeSpan.FromMilliseconds(100));

                try
                {
                    var result = await client.InvokeScriptAsync <string>("Read-Host");

                    Assert.Fail("Read-Host did not fail!");
                }
                catch (Exception ex)
                {
                    if (!(ex is InvalidOperationException) && !(ex is CmdletInvocationException))
                    {
                        throw;
                    }
                }
            }
        }
        public async Task TestWriteHost2()
        {
            using (var client = new PSClient())
            {
                await client.OpenAsync(PSConnectionInfo.CreateLocalConnection());
                client.ConfigureNonInteractiveConsoleHost();
                string v = string.Empty;

                var oldCallback = client.HostUI.WriteCallback;
                client.HostUI.WriteCallback = (s, fg, bg, c) =>
                {
                    if (s == PSOutputStream.Default)
                    {
                        v += c;
                    }

                    oldCallback?.Invoke(s, fg, bg, c);
                };
                await client.InvokeScriptAsync("Write-Host \"Hello World\";");

                Assert.AreEqual("Hello World", v.Trim());
                Assert.IsTrue(v.EndsWith("\n"));
            }
        }
        public async Task TestWriteHost()
        {
            using (var client = new PSClient())
            {
                await client.OpenAsync(PSConnectionInfo.CreateLocalConnection());
                string v = string.Empty;
                client.HostUI.WriteCallback = (s, fg, bg, c) =>
                {
                    if (s == PSOutputStream.Default)
                    {
                        v += c;
                    }
                };
                await client.InvokeScriptAsync("Write-Host \"Hello World\";");

                Assert.AreEqual("Hello World", v.Trim());
                Assert.IsTrue(v.EndsWith("\n"));

                // Also test multi-close
                await client.CloseAsync();
                await client.CloseAsync();
                await client.CloseAsync();
            }
        }