File: CSharp\CSharpInteractiveAsyncOutput.cs
Web Access
Project: ..\..\..\src\VisualStudio\IntegrationTest\IntegrationTests\Microsoft.VisualStudio.LanguageServices.IntegrationTests.csproj (Microsoft.VisualStudio.LanguageServices.IntegrationTests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
 
#nullable disable
 
using Microsoft.VisualStudio.IntegrationTest.Utilities;
using Roslyn.Test.Utilities;
using Xunit;
using Xunit.Abstractions;
 
namespace Roslyn.VisualStudio.IntegrationTests.CSharp
{
    [Collection(nameof(SharedIntegrationHostFixture))]
    public class CSharpInteractiveAsyncOutput : AbstractInteractiveWindowTest
    {
        public CSharpInteractiveAsyncOutput(VisualStudioInstanceFactory instanceFactory)
            : base(instanceFactory)
        {
        }
 
        [WpfFact]
        public void VerifyPreviousAndNextHistory()
        {
            VisualStudio.InteractiveWindow.SubmitText(@"#cls");
 
            VisualStudio.InteractiveWindow.SubmitText(@"using System.Threading;
var t1 = new Thread(() => { for (int i = 0; ; i++) { Console.WriteLine('$'); Thread.Sleep(500); } });
var t2 = new Thread(() => { for (int i = 0; ; i++) { Console.Write('$'); Thread.Sleep(101); } });
var t3 = new Thread(() => { while (true) { Console.Write('\r'); Thread.Sleep(1200); } });
t1.Start();
t2.Start();
t3.Start();");
 
            VisualStudio.InteractiveWindow.SubmitText(@"#help");
            Wait(seconds: 1);
 
            VisualStudio.InteractiveWindow.SubmitText(@"1+1");
            Wait(seconds: 1);
 
            VisualStudio.InteractiveWindow.SubmitText(@"1+2");
            Wait(seconds: 1);
 
            VisualStudio.InteractiveWindow.Verify.ReplPromptConsistency(prompt: "....", output: "$");
 
            Wait(seconds: 1);
 
            VisualStudio.InteractiveWindow.SubmitText(@"1+4");
            Wait(seconds: 1);
 
            VisualStudio.InteractiveWindow.SubmitText(@"1+5");
            Wait(seconds: 1);
 
            VisualStudio.InteractiveWindow.Verify.ReplPromptConsistency(prompt: "....", output: "$");
 
            VisualStudio.InteractiveWindow.SubmitText(@"#cls");
            VisualStudio.InteractiveWindow.SubmitText(@"1+5");
            Wait(seconds: 1);
 
            VisualStudio.InteractiveWindow.Verify.ReplPromptConsistency(prompt: "....", output: "$");
 
            VisualStudio.InteractiveWindow.SubmitText(@"t1.Abort();
t1.Join();
t2.Abort();
t2.Join();
t3.Abort();
t3.Join();");
 
            VisualStudio.InteractiveWindow.ClearReplText();
            VisualStudio.InteractiveWindow.Reset();
        }
    }
}