File: EditorConfigSettings\Aggregator\SettingsAggregatorTests.cs
Web Access
Project: src\src\VisualStudio\CSharp\Test\Microsoft.VisualStudio.LanguageServices.CSharp.UnitTests.csproj (Microsoft.VisualStudio.LanguageServices.CSharp.UnitTests)
// 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;
using Microsoft.CodeAnalysis.Editor.EditorConfigSettings;
using Microsoft.CodeAnalysis.Editor.EditorConfigSettings.Data;
using Microsoft.CodeAnalysis.Test.Utilities;
using Microsoft.CodeAnalysis.Text;
using Microsoft.VisualStudio.LanguageServices.UnitTests;
using Xunit;
 
namespace Microsoft.CodeAnalysis.Editor.CSharp.UnitTests.EditorConfigSettings.Aggregator;
 
[UseExportProvider]
[Trait(Traits.Feature, Traits.Features.EditorConfigUI)]
public sealed class SettingsAggregatorTests
{
    public static Workspace CreateWorkspace(params Type[]? additionalParts)
        => new AdhocWorkspace(VisualStudioTestCompositions.LanguageServices.AddParts(additionalParts).GetHostServices(), WorkspaceKind.Host);
 
    private static Workspace CreateWorkspaceWithProjectAndDocuments()
    {
        var projectId = ProjectId.CreateNewId();
 
        var workspace = CreateWorkspace();
 
        Assert.True(workspace.TryApplyChanges(workspace.CurrentSolution
            .AddProject(projectId, "proj1", "proj1.dll", LanguageNames.CSharp)
            .AddDocument(DocumentId.CreateNewId(projectId), "goo.cs", "public class Goo { }")
            .AddAdditionalDocument(DocumentId.CreateNewId(projectId), "add.txt", "text")
            .AddAnalyzerConfigDocument(DocumentId.CreateNewId(projectId), "editorcfg", SourceText.From("config"), filePath: "/a/b")));
 
        return workspace;
    }
 
    private static void TestGettingProvider<T>()
    {
        var workspace = CreateWorkspaceWithProjectAndDocuments();
        var settingsAggregator = workspace.Services.GetRequiredService<ISettingsAggregator>();
        var settingsProvider = settingsAggregator.GetSettingsProvider<T>("/a/b/config");
        Assert.NotNull(settingsProvider);
    }
 
    [Fact]
    public void TestGettingCodeStyleProvider() => TestGettingProvider<CodeStyleSetting>();
 
    [Fact]
    public void TestGettingAnalyzerProvider() => TestGettingProvider<AnalyzerSetting>();
 
    [Fact]
    public void TestGettingWhitespaceProvider() => TestGettingProvider<Setting>();
}