/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Compilers/Core/CodeAnalysisTest/StrongNameProviderTests.cs
98 строк
4 KB
Jared Parsons
generated move
28 сен 2020, 19:36
28 сен 2020, 19:36
1cca63b
Код
Авторство
О чём код?
// 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 System; using System.Collections.Generic; using System.Collections.Immutable; using Roslyn.Test.Utilities; using Roslyn.Utilities; using Xunit; namespace Microsoft.CodeAnalysis.UnitTests { public class StrongNameProviderTests { [ConditionalFact(typeof(WindowsDesktopOnly), Reason = ConditionalSkipReason.TestExecutionNeedsWindowsTypes)] public void ResolveStrongNameKeyFile() { string fileName = "f.snk"; string dir = @"C:\dir"; string subdir = @"C:\dir\subdir"; string filePath = dir + @"\" + fileName; string subFilePath = subdir + @"\" + fileName; var fs = new HashSet<string> { filePath, subFilePath }; // with no search paths var provider = new VirtualizedStrongNameProvider( existingFullPaths: fs, searchPaths: ImmutableArray.Create(subdir)); var subdirSearchPath = ImmutableArray.Create(subdir); // using base directory; base path ignored var path = resolve(fileName, subdirSearchPath); Assert.Equal(subFilePath, path, StringComparer.OrdinalIgnoreCase); // search paths var searchPathsSP = ImmutableArray.Create(@"C:\goo", dir, subdir); path = resolve(fileName, searchPathsSP); Assert.Equal(filePath, path, StringComparer.OrdinalIgnoreCase); // null base dir, no search paths var searchPathsEmpty = ImmutableArray<string>.Empty; // relative path path = resolve(fileName, searchPathsEmpty); Assert.Null(path); // full path path = resolve(filePath, searchPathsEmpty); Assert.Equal(filePath, path, StringComparer.OrdinalIgnoreCase); // null base dir var searchPathsNullBaseSP = ImmutableArray.Create(dir, subdir); // relative path path = resolve(fileName, searchPathsNullBaseSP); Assert.Equal(filePath, path, StringComparer.OrdinalIgnoreCase); // full path path = resolve(filePath, searchPathsNullBaseSP); Assert.Equal(filePath, path, StringComparer.OrdinalIgnoreCase); string resolve(string keyFilePath, ImmutableArray<string> searchPaths) => DesktopStrongNameProvider.ResolveStrongNameKeyFile(keyFilePath, provider.FileSystem, searchPaths); } public class VirtualizedStrongNameProvider : DesktopStrongNameProvider { private class VirtualStrongNameFileSystem : StrongNameFileSystem { private readonly HashSet<string> _existingFullPaths; public VirtualStrongNameFileSystem(HashSet<string> existingFullPaths) { _existingFullPaths = existingFullPaths; } internal override bool FileExists(string fullPath) { return fullPath != null && _existingFullPaths != null && _existingFullPaths.Contains(FileUtilities.NormalizeAbsolutePath(fullPath)); } } public VirtualizedStrongNameProvider( IEnumerable<string> existingFullPaths = null, ImmutableArray<string> searchPaths = default(ImmutableArray<string>)) : base(searchPaths.NullToEmpty(), new VirtualStrongNameFileSystem(new HashSet<string>(existingFullPaths, StringComparer.OrdinalIgnoreCase))) { } } } }