Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,8 @@ private static ValidationResult ValidateOptionsArgumentArity(
Dictionary<string, (ICommandLineOptionsProvider Provider, CommandLineOption Option)> providerAndOptionByOptionName)
{
StringBuilder stringBuilder = new();
string commandLine = parseResult.ToCommandLine();

foreach (IGrouping<string, CommandLineParseOption> groupedOptions in parseResult.Options.GroupBy(x => x.Name))
{
// getting the arguments count for an option.
Expand All @@ -181,15 +183,15 @@ private static ValidationResult ValidateOptionsArgumentArity(

if (arity > option.Arity.Max && option.Arity.Max == 0)
{
stringBuilder.AppendLine(string.Format(CultureInfo.InvariantCulture, PlatformResources.CommandLineOptionExpectsNoArguments, optionName, provider.DisplayName, provider.Uid));
stringBuilder.AppendLine(string.Format(CultureInfo.InvariantCulture, PlatformResources.CommandLineOptionExpectsNoArguments, optionName, provider.DisplayName, provider.Uid, commandLine));
}
else if (arity < option.Arity.Min)
{
stringBuilder.AppendLine(string.Format(CultureInfo.InvariantCulture, PlatformResources.CommandLineOptionExpectsAtLeastArguments, optionName, provider.DisplayName, provider.Uid, option.Arity.Min));
stringBuilder.AppendLine(string.Format(CultureInfo.InvariantCulture, PlatformResources.CommandLineOptionExpectsAtLeastArguments, optionName, provider.DisplayName, provider.Uid, option.Arity.Min, commandLine));
}
else if (arity > option.Arity.Max)
{
stringBuilder.AppendLine(string.Format(CultureInfo.InvariantCulture, PlatformResources.CommandLineOptionExpectsAtMostArguments, optionName, provider.DisplayName, provider.Uid, option.Arity.Max));
stringBuilder.AppendLine(string.Format(CultureInfo.InvariantCulture, PlatformResources.CommandLineOptionExpectsAtMostArguments, optionName, provider.DisplayName, provider.Uid, option.Arity.Max, commandLine));
}
}

Expand Down
41 changes: 41 additions & 0 deletions src/Platform/Microsoft.Testing.Platform/CommandLine/ParseResult.cs
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,47 @@ public override int GetHashCode()
return hashCode.ToHashCode();
}

/// <summary>
/// Reconstructs the command line from the parsed result.
/// </summary>
/// <returns>A string representation of the command line.</returns>
public string ToCommandLine()
{
var builder = new StringBuilder();

if (ToolName is not null)
{
builder.Append(ToolName);
builder.Append(' ');
}

foreach (CommandLineParseOption option in Options)
{
builder.Append("--");
builder.Append(option.Name);

foreach (string arg in option.Arguments)
{
builder.Append(' ');
// Quote arguments that contain spaces
if (arg.Contains(' '))
{
builder.Append('"');
builder.Append(arg);
builder.Append('"');
}
else
{
builder.Append(arg);
}
}

builder.Append(' ');
}

return builder.ToString().TrimEnd();
}

/// <inheritdoc />
public override string ToString()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -284,13 +284,13 @@
<value>Invalid configuration for provider '{0}' (UID: {1}). Error: {2}</value>
</data>
<data name="CommandLineOptionExpectsAtLeastArguments" xml:space="preserve">
<value>Option '--{0}' from provider '{1}' (UID: {2}) expects at least {3} arguments</value>
<value>Option '--{0}' from provider '{1}' (UID: {2}) expects at least {3} arguments. Command: {4}</value>
</data>
<data name="CommandLineOptionExpectsAtMostArguments" xml:space="preserve">
<value>Option '--{0}' from provider '{1}' (UID: {2}) expects at most {3} arguments</value>
<value>Option '--{0}' from provider '{1}' (UID: {2}) expects at most {3} arguments. Command: {4}</value>
</data>
<data name="CommandLineOptionExpectsNoArguments" xml:space="preserve">
<value>Option '--{0}' from provider '{1}' (UID: {2}) expects no arguments</value>
<value>Option '--{0}' from provider '{1}' (UID: {2}) expects no arguments. Command: {3}</value>
</data>
<data name="CommandLineOptionIsUsingReservedPrefix" xml:space="preserve">
<value>Option `--{0}` from provider '{1}' (UID: {2}) is using the reserved prefix '--internal'</value>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,17 +88,17 @@
<note />
</trans-unit>
<trans-unit id="CommandLineOptionExpectsAtLeastArguments">
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects at least {3} arguments</source>
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects at least {3} arguments. Command: {4}</source>
<target state="translated">Možnost --{0} od zprostředkovatele {1} (UID: {2}) očekává minimálně tento počet argumentů: {3}.</target>
<note />
</trans-unit>
<trans-unit id="CommandLineOptionExpectsAtMostArguments">
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects at most {3} arguments</source>
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects at most {3} arguments. Command: {4}</source>
<target state="translated">Možnost --{0} od zprostředkovatele {1} (UID: {2}) očekává maximálně tento počet argumentů: {3}.</target>
<note />
</trans-unit>
<trans-unit id="CommandLineOptionExpectsNoArguments">
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects no arguments</source>
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects no arguments. Command: {3}</source>
<target state="translated">Možnost --{0} od zprostředkovatele {1} (UID: {2}) neočekává žádné argumenty.</target>
<note />
</trans-unit>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,17 +88,17 @@
<note />
</trans-unit>
<trans-unit id="CommandLineOptionExpectsAtLeastArguments">
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects at least {3} arguments</source>
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects at least {3} arguments. Command: {4}</source>
<target state="translated">Die Option "--{0}" vom Anbieter "{1}" (UID: {2}) erwartet mindestens {3} Argumente.</target>
<note />
</trans-unit>
<trans-unit id="CommandLineOptionExpectsAtMostArguments">
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects at most {3} arguments</source>
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects at most {3} arguments. Command: {4}</source>
<target state="translated">Die Option "--{0}" vom Anbieter "{1}" (UID: {2}) erwartet höchstens {3} Argumente.</target>
<note />
</trans-unit>
<trans-unit id="CommandLineOptionExpectsNoArguments">
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects no arguments</source>
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects no arguments. Command: {3}</source>
<target state="translated">Die Option "--{0}" vom Anbieter "{1}" (UID: {2}) erwartet keine Argumente.</target>
<note />
</trans-unit>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,17 +88,17 @@
<note />
</trans-unit>
<trans-unit id="CommandLineOptionExpectsAtLeastArguments">
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects at least {3} arguments</source>
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects at least {3} arguments. Command: {4}</source>
<target state="translated">La opción “--{0}” del proveedor “{1}” (UID: {2}) espera al menos {3} argumentos</target>
<note />
</trans-unit>
<trans-unit id="CommandLineOptionExpectsAtMostArguments">
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects at most {3} arguments</source>
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects at most {3} arguments. Command: {4}</source>
<target state="translated">La opción “--{0}” del proveedor “{1}” (UID: {2}) espera como máximo {3} argumentos</target>
<note />
</trans-unit>
<trans-unit id="CommandLineOptionExpectsNoArguments">
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects no arguments</source>
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects no arguments. Command: {3}</source>
<target state="translated">La opción “--{0}” del proveedor “{1}” (UID: {2}) no espera ningún argumento</target>
<note />
</trans-unit>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,17 +88,17 @@
<note />
</trans-unit>
<trans-unit id="CommandLineOptionExpectsAtLeastArguments">
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects at least {3} arguments</source>
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects at least {3} arguments. Command: {4}. Command: {4}</source>
<target state="translated">L’option « --{0} » du fournisseur « {1} » (UID : {2}) attend au moins {3} arguments</target>
<note />
</trans-unit>
<trans-unit id="CommandLineOptionExpectsAtMostArguments">
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects at most {3} arguments</source>
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects at most {3} arguments. Command: {4}. Command: {4}</source>
<target state="translated">L’option « --{0} » du fournisseur « {1} » (UID : {2}) attend au plus {3} arguments</target>
<note />
</trans-unit>
<trans-unit id="CommandLineOptionExpectsNoArguments">
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects no arguments</source>
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects no arguments. Command: {3}. Command: {3}</source>
<target state="translated">L’option « --{0} » du fournisseur « {1} » (UID : {2}) n’attend aucun argument</target>
<note />
</trans-unit>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,17 +88,17 @@
<note />
</trans-unit>
<trans-unit id="CommandLineOptionExpectsAtLeastArguments">
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects at least {3} arguments</source>
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects at least {3} arguments. Command: {4}</source>
<target state="translated">L'opzione '--{0}' del provider '{1}' (UID: {2}) prevede almeno {3} argomenti</target>
<note />
</trans-unit>
<trans-unit id="CommandLineOptionExpectsAtMostArguments">
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects at most {3} arguments</source>
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects at most {3} arguments. Command: {4}</source>
<target state="translated">L'opzione '--{0}' del provider '{1}' (UID: {2}% 2) prevede al massimo {3} argomenti</target>
<note />
</trans-unit>
<trans-unit id="CommandLineOptionExpectsNoArguments">
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects no arguments</source>
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects no arguments. Command: {3}</source>
<target state="translated">L'opzione '--{0}' del provider '{1}' (UID: {2}) non prevede argomenti</target>
<note />
</trans-unit>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,17 +88,17 @@
<note />
</trans-unit>
<trans-unit id="CommandLineOptionExpectsAtLeastArguments">
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects at least {3} arguments</source>
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects at least {3} arguments. Command: {4}</source>
<target state="translated">プロバイダー '{1}' (UID:{2}) のオプション '-- {0}' には、少なくとも {3} 引数が必要です</target>
<note />
</trans-unit>
<trans-unit id="CommandLineOptionExpectsAtMostArguments">
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects at most {3} arguments</source>
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects at most {3} arguments. Command: {4}</source>
<target state="translated">プロバイダー '{1}' (UID:{2}) のオプション '-- {0}' には、最大 {3} 引数が必要です</target>
<note />
</trans-unit>
<trans-unit id="CommandLineOptionExpectsNoArguments">
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects no arguments</source>
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects no arguments. Command: {3}</source>
<target state="translated">プロバイダー '{1}' のオプション '--{0}' (UID:{2}) には引数が必要ありません</target>
<note />
</trans-unit>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,17 +88,17 @@
<note />
</trans-unit>
<trans-unit id="CommandLineOptionExpectsAtLeastArguments">
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects at least {3} arguments</source>
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects at least {3} arguments. Command: {4}</source>
<target state="translated">공급자 '{1}'(UID: {2})의 옵션 '--{0}'에는 최소 {3}개의 인수가 필요합니다.</target>
<note />
</trans-unit>
<trans-unit id="CommandLineOptionExpectsAtMostArguments">
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects at most {3} arguments</source>
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects at most {3} arguments. Command: {4}</source>
<target state="translated">공급자 '{1}'(UID: {2})의 옵션 '--{0}'에는 최대 {3}개의 인수가 필요합니다.</target>
<note />
</trans-unit>
<trans-unit id="CommandLineOptionExpectsNoArguments">
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects no arguments</source>
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects no arguments. Command: {3}</source>
<target state="translated">공급자 '{1}'(UID: {2})의 옵션 '--{0}'에 인수가 필요하지 않습니다.</target>
<note />
</trans-unit>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,17 +88,17 @@
<note />
</trans-unit>
<trans-unit id="CommandLineOptionExpectsAtLeastArguments">
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects at least {3} arguments</source>
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects at least {3} arguments. Command: {4}</source>
<target state="translated">Opcja „--{0}” od dostawcy„{1}” (UID: {2}) oczekuje co najmniej {3} argumentów</target>
<note />
</trans-unit>
<trans-unit id="CommandLineOptionExpectsAtMostArguments">
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects at most {3} arguments</source>
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects at most {3} arguments. Command: {4}</source>
<target state="translated">Opcja „--{0}” od dostawcy„{1}” (UID: {2}) oczekuje co najwyżej {3} argumentów</target>
<note />
</trans-unit>
<trans-unit id="CommandLineOptionExpectsNoArguments">
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects no arguments</source>
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects no arguments. Command: {3}</source>
<target state="translated">Opcja „--{0}” od dostawcy„{1}” (UID: {2}) nie oczekuje żadnych argumentów</target>
<note />
</trans-unit>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,17 +88,17 @@
<note />
</trans-unit>
<trans-unit id="CommandLineOptionExpectsAtLeastArguments">
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects at least {3} arguments</source>
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects at least {3} arguments. Command: {4}</source>
<target state="translated">A opção '--{0}' do provedor '{1}' (UID: {2}) espera pelo menos {3} argumentos</target>
<note />
</trans-unit>
<trans-unit id="CommandLineOptionExpectsAtMostArguments">
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects at most {3} arguments</source>
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects at most {3} arguments. Command: {4}</source>
<target state="translated">A opção '--{0}' do provedor '{1}' (UID: {2}) espera no máximo {3} argumentos</target>
<note />
</trans-unit>
<trans-unit id="CommandLineOptionExpectsNoArguments">
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects no arguments</source>
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects no arguments. Command: {3}</source>
<target state="translated">A opção '--{0}' do provedor '{1}' (UID: {2}) não espera argumentos</target>
<note />
</trans-unit>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,17 +88,17 @@
<note />
</trans-unit>
<trans-unit id="CommandLineOptionExpectsAtLeastArguments">
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects at least {3} arguments</source>
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects at least {3} arguments. Command: {4}</source>
<target state="translated">Для параметра "--{0}" от поставщика "{1}" (UID: {2}) ожидается не менее {3} аргументов</target>
<note />
</trans-unit>
<trans-unit id="CommandLineOptionExpectsAtMostArguments">
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects at most {3} arguments</source>
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects at most {3} arguments. Command: {4}</source>
<target state="translated">Для параметра "--{0}" от поставщика "{1}" (UID: {2}) ожидается не более {3} аргументов</target>
<note />
</trans-unit>
<trans-unit id="CommandLineOptionExpectsNoArguments">
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects no arguments</source>
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects no arguments. Command: {3}</source>
<target state="translated">Для параметра "--{0}" от поставщика "{1}" (UID: {2}) не ожидается никаких аргументов</target>
<note />
</trans-unit>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,17 +88,17 @@
<note />
</trans-unit>
<trans-unit id="CommandLineOptionExpectsAtLeastArguments">
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects at least {3} arguments</source>
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects at least {3} arguments. Command: {4}</source>
<target state="translated">'{1}' sağlayıcısındaki (UID: {2}) '--{0}' seçeneği en az {3} bağımsız değişken bekler</target>
<note />
</trans-unit>
<trans-unit id="CommandLineOptionExpectsAtMostArguments">
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects at most {3} arguments</source>
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects at most {3} arguments. Command: {4}</source>
<target state="translated">'{1}' sağlayıcısındaki (UID: {2}) '--{0}' seçeneği en fazla {3} bağımsız değişken bekler</target>
<note />
</trans-unit>
<trans-unit id="CommandLineOptionExpectsNoArguments">
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects no arguments</source>
<source>Option '--{0}' from provider '{1}' (UID: {2}) expects no arguments. Command: {3}</source>
<target state="translated">'{1}' sağlayıcısındaki (UID: {2}) '--{0}' seçeneği hiçbir bağımsız değişken beklemiyor</target>
<note />
</trans-unit>
Expand Down
Loading
Loading