/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/VisualStudio/IntegrationTest/New.IntegrationTests/CSharp/CSharpStackOverFlowTests.cs
70 строк
3 KB
Cyrus Najmabadi
Make sealed
26 мар 2025, 22:21
26 мар 2025, 22:21
d99b771
Код
Авторство
О чём код?
// 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. using System.IO; using System.Reflection; using System.Threading.Tasks; using Microsoft.CodeAnalysis; using Microsoft.VisualStudio.Shell.TableManager; using Roslyn.VisualStudio.IntegrationTests; using Roslyn.VisualStudio.NewIntegrationTests.InProcess; using WindowsInput.Native; using Xunit; namespace Roslyn.VisualStudio.NewIntegrationTests.CSharp; public sealed class CSharpStackOverFlowTests : AbstractEditorTest { protected override string LanguageName => LanguageNames.CSharp; public CSharpStackOverFlowTests() : base(nameof(CSharpStackOverFlowTests)) { } [IdeFact(Skip = "https://github.com/dotnet/roslyn/issues/63349")] public async Task TestDevenvDoNotCrash() { var sampleCode = await GetSampleCodeAsync(); var project = ProjectName; await TestServices.SolutionExplorer.AddFileAsync(project, "Test.cs", cancellationToken: HangMitigatingCancellationToken); await TestServices.SolutionExplorer.OpenFileAsync(project, "Test.cs", HangMitigatingCancellationToken); await SetUpEditorAsync(sampleCode, HangMitigatingCancellationToken); // Try to compute the light bulb. The content of the light bulb is not important because here we want to make sure // the special crafted code don't crash VS. await TestServices.Editor.ShowLightBulbAsync(HangMitigatingCancellationToken); } [IdeFact(Skip = "https://github.com/dotnet/roslyn/issues/63349")] public async Task TestSyntaxIndex() { var sampleCode = await GetSampleCodeAsync(); var project = ProjectName; await TestServices.SolutionExplorer.AddFileAsync(project, "Test.cs", cancellationToken: HangMitigatingCancellationToken); await TestServices.SolutionExplorer.OpenFileAsync(project, "Test.cs", HangMitigatingCancellationToken); await SetUpEditorAsync(sampleCode, HangMitigatingCancellationToken); // Call FAR to create syntax index. The goal is to verify we don't hit StackOverFlow during the creation. await TestServices.Input.SendAsync((VirtualKeyCode.F12, VirtualKeyCode.SHIFT), HangMitigatingCancellationToken); var contents = await TestServices.FindReferencesWindow.GetContentsAsync(HangMitigatingCancellationToken); Assert.Equal(18, contents.Length); // Make sure all the references are found. foreach (var content in contents) { content.TryGetValue(StandardTableKeyNames.Text, out string code); Assert.Contains("Tree82", code); } } private static async Task<string> GetSampleCodeAsync() { var resourceStream = typeof(CSharpStackOverFlowTests).GetTypeInfo().Assembly.GetManifestResourceStream("Roslyn.VisualStudio.NewIntegrationTests.Resources.LongClass.txt"); using var reader = new StreamReader(resourceStream); // This is a special crafted code which many Roslyn functions won't work. var sampleCode = await reader.ReadToEndAsync(); return sampleCode; } }