// Copyright (c) .NET Foundation and contributors. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. using FluentAssertions; using Microsoft.DotNet.Cli.CommandLine; using Microsoft.DotNet.Tools.Test.Utilities; using Xunit; using Xunit.Abstractions; namespace Microsoft.DotNet.Tests.ParserTests { public class ValidationMessageTests { [Fact] public void ValidationMessagesFormatCorrectly() { // Since not all validation messages that we provided to the command-line parser are triggered by our // tests (and some may not be possible to trigger with our current usage), unit test that we can // obtain validation messages through the same interface as the command-line parser. // // In English configuration, we check that the messages are exactly what we expect and otherwise we at // lest ensure that we don't get a FormatException. IValidationMessages m = new CommandLineValidationMessages(); m.CommandAcceptsOnlyOneArgument("xyz", 3) .Should().BeVisuallyEquivalentToIfNotLocalized( "Command 'xyz' only accepts a single argument but 3 were provided."); m.CommandAcceptsOnlyOneSubcommand("zyx", "a;b;c") .Should().BeVisuallyEquivalentToIfNotLocalized( "Command 'zyx' only accepts a single subcommand but multiple were provided: a;b;c"); m.FileDoesNotExist("abc.def") .Should().BeVisuallyEquivalentToIfNotLocalized( "File does not exist: abc.def"); m.NoArgumentsAllowed("zzz") .Should().BeVisuallyEquivalentToIfNotLocalized( "Arguments not allowed for option: zzz"); m.OptionAcceptsOnlyOneArgument("qqq", 4) .Should().BeVisuallyEquivalentToIfNotLocalized( "Option 'qqq' only accepts a single argument but 4 were provided."); m.RequiredArgumentMissingForCommand("www") .Should().BeVisuallyEquivalentToIfNotLocalized( "Required argument missing for command: www"); m.RequiredArgumentMissingForOption("rrr") .Should().BeVisuallyEquivalentToIfNotLocalized( "Required argument missing for option: rrr"); m.RequiredCommandWasNotProvided() .Should().BeVisuallyEquivalentToIfNotLocalized( "Required command was not provided."); m.UnrecognizedArgument("apple", new[] { "banana", "orange" }) .Should().BeVisuallyEquivalentToIfNotLocalized( "Argument 'apple' not recognized. Must be one of: \n\t'banana'\n\t\'orange'"); m.UnrecognizedCommandOrArgument("ppp") .Should().BeVisuallyEquivalentToIfNotLocalized( "Unrecognized command or argument 'ppp'"); m.UnrecognizedOption("apple", new[] { "banana", "orange" }) .Should().BeVisuallyEquivalentToIfNotLocalized( "Option 'apple' not recognized. Must be one of: \n\t'banana'\n\t\'orange'"); } } }