File: VSCodeSettingsTests.cs
Web Access
Project: src\src\LanguageServer\Microsoft.CodeAnalysis.LanguageServer.UnitTests\Microsoft.CodeAnalysis.LanguageServer.UnitTests.csproj (Microsoft.CodeAnalysis.LanguageServer.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 Microsoft.CodeAnalysis.LanguageServer.HostWorkspace;
using Microsoft.CodeAnalysis.Test.Utilities;
using Microsoft.Extensions.Logging.Abstractions;
using Roslyn.LanguageServer.Protocol;
 
namespace Microsoft.CodeAnalysis.LanguageServer.UnitTests;
 
public sealed class VSCodeSettingsTests : IDisposable
{
    private readonly TempRoot _tempRoot = new();
 
    public void Dispose()
        => _tempRoot.Dispose();
 
    [Fact]
    public void TryRead_ReadsDotnetDefaultSolution()
    {
        var settings = TryReadSettings("""
            {
              "dotnet.defaultSolution": "src/App.sln"
            }
            """);
 
        Assert.Equal("src/App.sln", settings.TryGetStringSetting(VSCodeSettings.Names.DefaultSolution));
    }
 
    [Fact]
    public void TryRead_AllowsJsonCommentsAndTrailingCommas()
    {
        var settings = TryReadSettings("""
            {
              // comment
              "dotnet.defaultSolution": "src/App.sln",
            }
            """);
 
        Assert.Equal("src/App.sln", settings.TryGetStringSetting(VSCodeSettings.Names.DefaultSolution));
    }
 
    [Fact]
    public void TryRead_ReadsDisableDefaultSolutionValue()
    {
        var settings = TryReadSettings("""
            {
              "dotnet.defaultSolution": "disable"
            }
            """);
 
        Assert.Equal("disable", settings.TryGetStringSetting(VSCodeSettings.Names.DefaultSolution));
    }
 
    private string WriteSettingsFile(string settingsJson)
    {
        var folder = _tempRoot.CreateDirectory();
        var settingsDirectory = folder.CreateDirectory(".vscode");
        var settingsPath = Path.Combine(settingsDirectory.Path, "settings.json");
        File.WriteAllText(settingsPath, settingsJson);
        return settingsPath;
    }
 
    private VSCodeSettings TryReadSettings(string settingsJson)
    {
        var settingsPath = WriteSettingsFile(settingsJson);
        Assert.True(VSCodeSettings.TryRead(settingsPath, NullLogger.Instance, out var settings));
        return settings;
    }
}