File: ToolConfigurationDeserializerTests.cs
Web Access
Project: ..\..\..\test\Microsoft.DotNet.PackageInstall.Tests\Microsoft.DotNet.PackageInstall.Tests.csproj (Microsoft.DotNet.PackageInstall.Tests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using Microsoft.DotNet.Cli;
using Microsoft.DotNet.Cli.ToolPackage;
 
namespace Microsoft.DotNet.PackageInstall.Tests
{
    public class ToolConfigurationDeserializerTests
    {
        [Fact]
        public void GivenXmlPathItShouldGetToolConfiguration()
        {
            ToolConfiguration toolConfiguration = ToolConfigurationDeserializer.Deserialize("DotnetToolSettingsGolden.xml");
 
            toolConfiguration.CommandName.Should().Be("sayhello");
            toolConfiguration.ToolAssemblyEntryPoint.Should().Be("console.dll");
        }
 
        [Fact]
        public void GivenMalformedPathItThrows()
        {
            Action a = () => ToolConfigurationDeserializer.Deserialize("DotnetToolSettingsMalformed.xml");
            a.Should().Throw<ToolConfigurationException>()
                .And.Message.Should()
                .Contain(string.Format(CliStrings.ToolSettingsInvalidXml, string.Empty));
        }
 
        [Fact]
        public void GivenMissingContentItThrows()
        {
            Action a = () => ToolConfigurationDeserializer.Deserialize("DotnetToolSettingsMissing.xml");
            a.Should().Throw<ToolConfigurationException>()
                .And.Message.Should()
                .Contain(CliStrings.ToolSettingsMissingCommandName);
        }
 
        [Fact]
        public void GivenMissingVersionItHasWarningReflectIt()
        {
            ToolConfiguration toolConfiguration = ToolConfigurationDeserializer.Deserialize("DotnetToolSettingsMissingVersion.xml");
 
            toolConfiguration.Warnings.First().Should().Be(CliStrings.FormatVersionIsMissing);
        }
 
        [Fact]
        public void GivenMajorHigherVersionItHasWarningReflectIt()
        {
            ToolConfiguration toolConfiguration = ToolConfigurationDeserializer.Deserialize("DotnetToolSettingsMajorHigherVersion.xml");
 
            toolConfiguration.Warnings.First().Should().Be(CliStrings.FormatVersionIsHigher);
        }
 
        [Fact]
        public void GivenMinorHigherVersionItHasNoWarning()
        {
            ToolConfiguration toolConfiguration = ToolConfigurationDeserializer.Deserialize("DotnetToolSettingsGolden.xml");
 
            toolConfiguration.Warnings.Should().BeEmpty();
        }
 
        [Fact]
        public void GivenInvalidCharAsFileNameItThrows()
        {
            var invalidCommandName = "na\0me";
            Action a = () => new ToolConfiguration(invalidCommandName, "my.dll", "dotnet");
            a.Should().Throw<ToolConfigurationException>()
                .And.Message.Should()
                .Contain(
                    string.Format(
                        CliStrings.ToolSettingsInvalidCommandName,
                        invalidCommandName,
                        string.Join(", ", Path.GetInvalidFileNameChars().Select(c => $"'{c}'"))));
        }
 
        [Fact]
        public void GivenALeadingDotAsFileNameItThrows()
        {
            var invalidCommandName = ".mytool";
            Action a = () => new ToolConfiguration(invalidCommandName, "my.dll", "dotnet");
            a.Should().Throw<ToolConfigurationException>()
                .And.Message.Should()
                .Contain(string.Format(
                        CliStrings.ToolSettingsInvalidLeadingDotCommandName,
                        invalidCommandName));
        }
    }
}