/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/EditorFeatures/Test/Completion/FileSystemCompletionHelperTests.cs
236 строк
8 KB
Cyrus Najmabadi
Use raw strings in tests
09 июл 2025, 08:52
09 июл 2025, 08:52
f265dce
Код
Авторство
О чём код?
// 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.Collections.Immutable; using System.Linq; using System.Threading; using Microsoft.CodeAnalysis.Completion; using Roslyn.Test.Utilities; using Xunit; namespace Microsoft.CodeAnalysis.Editor.UnitTests.Completion; public sealed class FileSystemCompletionHelperTests { private static void AssertItemsEqual(ImmutableArray<CompletionItem> actual, params string[] expected) { AssertEx.Equal( expected, actual.Select(c => $"'{c.DisplayText}', {string.Join(", ", c.Tags)}, '{c.GetProperty(CommonCompletionItem.DescriptionProperty)}'"), itemInspector: c => $""" @"{c}" """); Assert.True(actual.All(i => i.Rules == TestFileSystemCompletionHelper.CompletionRules)); } [ConditionalFact(typeof(WindowsOnly))] public void GetItems_Windows1() { var fsc = new TestFileSystemCompletionHelper( searchPaths: [@"X:\A", @"X:\B"], baseDirectoryOpt: @"Z:\C", allowableExtensions: [".abc", ".def"], drives: new[] { @"X:\", @"Z:\" }, directories: new[] { @"X:", @"X:\A", @"X:\A\1", @"X:\A\2", @"X:\A\3", @"X:\B", @"Z:", @"Z:\C", @"Z:\D", }, files: new[] { @"X:\A\1\file1.abc", @"X:\A\2\file2.abc", @"X:\B\file4.x", @"X:\B\file5.abc", @"X:\B\hidden.def", @"Z:\C\file6.def", @"Z:\C\file.7.def", }); // Note backslashes in description are escaped AssertItemsEqual(fsc.GetTestAccessor().GetItems("", CancellationToken.None), @"'file6.def', File, C#, 'Text|Z:\5CC\5Cfile6.def'", @"'file.7.def', File, C#, 'Text|Z:\5CC\5Cfile.7.def'", @"'X:', Folder, 'Text|X:'", @"'Z:', Folder, 'Text|Z:'", @"'\\', , 'Text|\5C\5C'", @"'1', Folder, 'Text|X:\5CA\5C1'", @"'2', Folder, 'Text|X:\5CA\5C2'", @"'3', Folder, 'Text|X:\5CA\5C3'", @"'file5.abc', File, C#, 'Text|X:\5CB\5Cfile5.abc'"); AssertItemsEqual(fsc.GetTestAccessor().GetItems(@"X:\A\", CancellationToken.None), @"'1', Folder, 'Text|X:\5CA\5C1'", @"'2', Folder, 'Text|X:\5CA\5C2'", @"'3', Folder, 'Text|X:\5CA\5C3'"); AssertItemsEqual(fsc.GetTestAccessor().GetItems(@"X:\B\", CancellationToken.None), @"'file5.abc', File, C#, 'Text|X:\5CB\5Cfile5.abc'"); AssertItemsEqual(fsc.GetTestAccessor().GetItems(@"Z:\", CancellationToken.None), @"'C', Folder, 'Text|Z:\5CC'", @"'D', Folder, 'Text|Z:\5CD'"); AssertItemsEqual(fsc.GetTestAccessor().GetItems(@"Z:", CancellationToken.None), @"'Z:', Folder, 'Text|Z:'"); AssertItemsEqual(fsc.GetTestAccessor().GetItems(@"\", CancellationToken.None), @"'\\', , 'Text|\5C\5C'"); } [ConditionalFact(typeof(WindowsOnly))] public void GetItems_Windows_NoBaseDirectory() { var fsc = new TestFileSystemCompletionHelper( searchPaths: [@"X:\A", @"X:\B"], baseDirectoryOpt: null, allowableExtensions: [".abc", ".def"], drives: new[] { @"X:\" }, directories: new[] { @"X:", @"X:\A", @"X:\A\1", @"X:\A\2", @"X:\A\3", @"X:\B", }, files: new[] { @"X:\A\1\file1.abc", @"X:\A\2\file2.abc", @"X:\B\file4.x", @"X:\B\file5.abc", @"X:\B\hidden.def", }); // Note backslashes in description are escaped AssertItemsEqual(fsc.GetTestAccessor().GetItems(@"", CancellationToken.None), @"'X:', Folder, 'Text|X:'", @"'\\', , 'Text|\5C\5C'", @"'1', Folder, 'Text|X:\5CA\5C1'", @"'2', Folder, 'Text|X:\5CA\5C2'", @"'3', Folder, 'Text|X:\5CA\5C3'", @"'file5.abc', File, C#, 'Text|X:\5CB\5Cfile5.abc'"); } [ConditionalFact(typeof(WindowsOnly))] public void GetItems_Windows_NoSearchPaths() { var fsc = new TestFileSystemCompletionHelper( searchPaths: [], baseDirectoryOpt: null, allowableExtensions: [".abc", ".def"], drives: new[] { @"X:\" }, directories: new[] { @"X:", @"X:\A", @"X:\A\1", @"X:\A\2", @"X:\A\3", @"X:\B", }, files: new[] { @"X:\A\1\file1.abc", @"X:\A\2\file2.abc", @"X:\B\file4.x", @"X:\B\file5.abc", @"X:\B\hidden.def", }); // Note backslashes in description are escaped AssertItemsEqual(fsc.GetTestAccessor().GetItems(@"", CancellationToken.None), @"'X:', Folder, 'Text|X:'", @"'\\', , 'Text|\5C\5C'"); } [ConditionalFact(typeof(WindowsOnly))] public void GetItems_Windows_Network() { var fsc = new TestFileSystemCompletionHelper( searchPaths: [], baseDirectoryOpt: null, allowableExtensions: [".cs"], drives: [], directories: new[] { @"\\server\share", @"\\server\share\C", @"\\server\share\D", }, files: new[] { @"\\server\share\C\b.cs", @"\\server\share\C\c.cs", @"\\server\share\D\e.cs", }); AssertItemsEqual(fsc.GetTestAccessor().GetItems(@"\\server\share\", CancellationToken.None), @"'C', Folder, 'Text|\5C\5Cserver\5Cshare\5CC'", @"'D', Folder, 'Text|\5C\5Cserver\5Cshare\5CD'"); AssertItemsEqual(fsc.GetTestAccessor().GetItems(@"\\server\share\C\", CancellationToken.None), @"'b.cs', File, C#, 'Text|\5C\5Cserver\5Cshare\5CC\5Cb.cs'", @"'c.cs', File, C#, 'Text|\5C\5Cserver\5Cshare\5CC\5Cc.cs'"); } [ConditionalFact(typeof(UnixLikeOnly))] public void GetItems_Unix1() { var fsc = new TestFileSystemCompletionHelper( searchPaths: [@"/A", @"/B"], baseDirectoryOpt: @"/C", allowableExtensions: [".abc", ".def"], drives: [], directories: new[] { @"/A", @"/A/1", @"/A/2", @"/A/3", @"/B", @"/C", @"/D", }, files: new[] { @"/A/1/file1.abc", @"/A/2/file2.abc", @"/B/file4.x", @"/B/file5.abc", @"/B/hidden.def", @"/C/file6.def", @"/C/file.7.def", }); // Note backslashes in description are escaped AssertItemsEqual(fsc.GetTestAccessor().GetItems(@"", CancellationToken.None), @"'file6.def', File, C#, 'Text|/C/file6.def'", @"'file.7.def', File, C#, 'Text|/C/file.7.def'", @"'/', Folder, 'Text|/'", @"'1', Folder, 'Text|/A/1'", @"'2', Folder, 'Text|/A/2'", @"'3', Folder, 'Text|/A/3'", @"'file5.abc', File, C#, 'Text|/B/file5.abc'"); AssertItemsEqual(fsc.GetTestAccessor().GetItems(@"/", CancellationToken.None), @"'A', Folder, 'Text|/A'", @"'B', Folder, 'Text|/B'", @"'C', Folder, 'Text|/C'", @"'D', Folder, 'Text|/D'"); AssertItemsEqual(fsc.GetTestAccessor().GetItems(@"/B/", CancellationToken.None), @"'file5.abc', File, C#, 'Text|/B/file5.abc'"); } }